- 라이브 자격증명 입력칸 브라우저 자동완성 자동 채움 차단 (live_mid: one-time-code / live_api_key: new-password — 크롬이 autoComplete=off 를 무시함을 실측 후 강화) - 라이브 가맹점 MID 프리픽스를 이니시스 정책 변경에 맞춰 SRA→SRB 전환. 런타임 프리픽스를 InicisIdentityProvider::LIVE_MID_PREFIX 상수로 추출, 표시 문자열(라벨·Span·힌트 ko/en/ja)은 값 교체. - 설정 저장 테스트가 실제 스토리지 설정 파일을 오염시키던 결함 격리 (PluginTestCase 에서 plugins 디스크를 테스트 전용 경로로 격리) - 설정 화면 배너 아이콘 크기 시맨틱 정정 (w-N h-N → text-*, 정렬 회귀 해결) - 프리픽스 상수 ↔ 표시 문자열 정합 audit 룰 추가 (이중관리 불일치 차단)
140 lines
4.5 KiB
PHP
140 lines
4.5 KiB
PHP
<?php
|
|
|
|
namespace Plugins\Sirsoft\VerificationKginicis\Tests\Unit\Identity;
|
|
|
|
use App\Contracts\Extension\CacheInterface;
|
|
use Mockery;
|
|
use PHPUnit\Framework\TestCase;
|
|
use Plugins\Sirsoft\VerificationKginicis\Identity\InicisIdentityProvider;
|
|
use Plugins\Sirsoft\VerificationKginicis\Repositories\InicisChallengeMappingRepositoryInterface;
|
|
use Plugins\Sirsoft\VerificationKginicis\Repositories\InicisIdentityRecordRepositoryInterface;
|
|
use Plugins\Sirsoft\VerificationKginicis\Services\InicisGatewayInterface;
|
|
|
|
/**
|
|
* 라이브 MID 프리픽스(LIVE_MID_PREFIX) 회귀 테스트.
|
|
*
|
|
* 배경 (#458):
|
|
* 이니시스 정책 변경으로 라이브 가맹점 MID 프리픽스가 SRA → SRB 로 전환된다.
|
|
* 프리픽스를 InicisIdentityProvider::LIVE_MID_PREFIX 클래스 상수 1곳으로 추출하여
|
|
* 런타임 로직(buildLiveMid / isAvailable)이 상수를 참조하도록 했다. 본 테스트는
|
|
* 상수값이 실제 프리픽스 부착·검증에 일관되게 적용되는지 고정한다 (다음 정책 변경 시
|
|
* 상수만 바꾸면 이 스위트가 전 지점을 함께 검증).
|
|
*/
|
|
class InicisLiveMidPrefixTest extends TestCase
|
|
{
|
|
protected function tearDown(): void
|
|
{
|
|
Mockery::close();
|
|
parent::tearDown();
|
|
}
|
|
|
|
/**
|
|
* 프리픽스 상수는 현재 정책값 SRB 여야 한다.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function test_live_mid_prefix_constant_is_srb(): void
|
|
{
|
|
$this->assertSame('SRB', InicisIdentityProvider::LIVE_MID_PREFIX);
|
|
}
|
|
|
|
/**
|
|
* buildLiveMid 는 프리픽스 미포함 입력값 앞에 상수 프리픽스를 부착해야 한다.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function test_build_live_mid_prepends_prefix_when_absent(): void
|
|
{
|
|
$result = $this->invokeBuildLiveMid('1234567');
|
|
|
|
$this->assertSame(InicisIdentityProvider::LIVE_MID_PREFIX.'1234567', $result);
|
|
$this->assertSame('SRB1234567', $result);
|
|
}
|
|
|
|
/**
|
|
* buildLiveMid 는 이미 프리픽스를 포함한 입력값에 중복 부착하지 않아야 한다.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function test_build_live_mid_does_not_double_prepend_prefix(): void
|
|
{
|
|
$result = $this->invokeBuildLiveMid('SRB1234567');
|
|
|
|
$this->assertSame('SRB1234567', $result);
|
|
}
|
|
|
|
/**
|
|
* buildLiveMid 는 빈 입력값(공백 포함)을 빈 문자열로 반환해야 한다.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function test_build_live_mid_returns_empty_for_blank_input(): void
|
|
{
|
|
$this->assertSame('', $this->invokeBuildLiveMid(''));
|
|
$this->assertSame('', $this->invokeBuildLiveMid(' '));
|
|
}
|
|
|
|
/**
|
|
* 라이브 모드에서 프리픽스가 부착된 라이브 MID + API 키가 있으면 운영 가능해야 한다.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function test_is_available_true_in_live_mode_with_prefixed_mid(): void
|
|
{
|
|
$provider = $this->makeProvider([
|
|
'is_test_mode' => false,
|
|
'live_mid' => '1234567',
|
|
'live_api_key' => 'live-api-key',
|
|
]);
|
|
|
|
$this->assertTrue($provider->isAvailable());
|
|
}
|
|
|
|
/**
|
|
* 라이브 모드에서 API 키가 비어 있으면 운영 불가여야 한다.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function test_is_available_false_in_live_mode_without_api_key(): void
|
|
{
|
|
$provider = $this->makeProvider([
|
|
'is_test_mode' => false,
|
|
'live_mid' => '1234567',
|
|
'live_api_key' => '',
|
|
]);
|
|
|
|
$this->assertFalse($provider->isAvailable());
|
|
}
|
|
|
|
/**
|
|
* 라이브 MID 를 리플렉션으로 protected buildLiveMid() 에 통과시킨다.
|
|
*
|
|
* @param string $value
|
|
* @return string
|
|
*/
|
|
protected function invokeBuildLiveMid(string $value): string
|
|
{
|
|
$provider = $this->makeProvider(['is_test_mode' => true, 'test_mid' => 'INIiasTest']);
|
|
|
|
$method = new \ReflectionMethod($provider, 'buildLiveMid');
|
|
$method->setAccessible(true);
|
|
|
|
return $method->invoke($provider, $value);
|
|
}
|
|
|
|
/**
|
|
* @param array<string, mixed> $config
|
|
* @return InicisIdentityProvider
|
|
*/
|
|
protected function makeProvider(array $config): InicisIdentityProvider
|
|
{
|
|
return new InicisIdentityProvider(
|
|
Mockery::mock(InicisGatewayInterface::class),
|
|
Mockery::mock(InicisChallengeMappingRepositoryInterface::class),
|
|
Mockery::mock(InicisIdentityRecordRepositoryInterface::class),
|
|
Mockery::mock(CacheInterface::class),
|
|
$config,
|
|
);
|
|
}
|
|
}
|