setLocale('ko'); $service = app(NotificationChannelService::class); $channels = $service->getAvailableChannels(); $byId = collect($channels)->keyBy('id'); $this->assertSame('메일', $byId['mail']['name'] ?? null); $this->assertSame('이메일로 알림 발송', $byId['mail']['description'] ?? null); $this->assertSame('코어 기본 채널', $byId['mail']['source_label'] ?? null); $this->assertSame('사이트내 알림', $byId['database']['name'] ?? null); } public function test_notification_channels_resolve_to_english_when_locale_en(): void { app()->setLocale('en'); $service = app(NotificationChannelService::class); $channels = $service->getAvailableChannels(); $byId = collect($channels)->keyBy('id'); $this->assertSame('Email', $byId['mail']['name'] ?? null); $this->assertSame('Send notification via email', $byId['mail']['description'] ?? null); $this->assertSame('Core default channel', $byId['mail']['source_label'] ?? null); $this->assertSame('Site Notification', $byId['database']['name'] ?? null); } public function test_notification_channels_preserve_name_key_for_lang_pack_resolution(): void { $service = app(NotificationChannelService::class); $channels = $service->getAvailableChannels(); $mail = collect($channels)->firstWhere('id', 'mail'); // name_key 는 그대로 유지되어 lang pack(ja 등) 활성 시 보강 가능 $this->assertSame('notification.channels.mail.name', $mail['name_key'] ?? null); $this->assertSame('notification.channels.mail.description', $mail['description_key'] ?? null); $this->assertSame('notification.channels.core_default', $mail['source_label_key'] ?? null); } public function test_default_channels_config_does_not_carry_multilingual_json_directly(): void { $defaults = config('notification.default_channels', []); foreach ($defaults as $channel) { $this->assertArrayNotHasKey( 'name', $channel, "default_channels[{$channel['id']}] 가 다국어 JSON 'name' 직접 보유 — name_key 패턴 위반 회귀", ); $this->assertArrayHasKey( 'name_key', $channel, "default_channels[{$channel['id']}] 에 name_key 누락", ); } } /** * ja 활성 + 활성 언어팩(g7-core-ja) 의 notification.channels 키가 보강된 시나리오. * * lang pack 빌드로 채워진 ja 라벨이 표시되는지 end-to-end 검증. * lang pack 미설치 환경에서는 skip — 회귀 본체(현장 보고)는 lang pack 활성화 후 발생. */ public function test_notification_channels_resolve_to_japanese_when_lang_pack_active(): void { $jaValue = __('notification.channels.mail.name', [], 'ja'); $koValue = __('notification.channels.mail.name', [], 'ko'); // ja 키가 lang pack 으로 로드되지 않은 환경(=ja 결과 = key 또는 ko fallback)에서는 skip. // 운영자가 build-language-pack 실행 후 + 테스트 환경에서 LanguagePackServiceProvider 가 // ja namespace 를 로드한 환경에서만 통합 시나리오 검증 가능. if ($jaValue === 'notification.channels.mail.name' || $jaValue === $koValue) { $this->markTestSkipped('g7-core-ja lang pack 의 notification.channels.* 키가 테스트 환경에 로드되지 않음'); } app()->setLocale('ja'); $service = app(NotificationChannelService::class); $channels = $service->getAvailableChannels(); $byId = collect($channels)->keyBy('id'); $this->assertSame('メール', $byId['mail']['name'] ?? null); $this->assertSame('サイト内通知', $byId['database']['name'] ?? null); } }