'구매 확정', ], 'ko', 'sirsoft-ecommerce'); Lang::addLines([ 'activity_log.action.confirm' => '코어가 사용해서는 안 되는 라벨', ], 'ko'); $log = ActivityLog::create([ 'log_type' => ActivityLogType::User, 'action' => 'order.confirm', 'loggable_type' => 'Modules\\Sirsoft\\Ecommerce\\Models\\Order', 'loggable_id' => 1, ]); $this->assertSame('구매 확정', $log->action_label); } public function test_core_origin_action_unaffected_by_module_lang_namespace(): void { Lang::addNamespace('sirsoft-ecommerce', __DIR__); Lang::addLines([ 'activity_log.action.create' => '잘못된 모듈 라벨', ], 'ko', 'sirsoft-ecommerce'); $log = ActivityLog::create([ 'log_type' => ActivityLogType::Admin, 'action' => 'user.create', 'loggable_type' => 'App\\Models\\User', 'loggable_id' => 1, ]); // 코어 origin → 모듈 lang 무시 + 코어 lang 의 'create' => '생성' 매칭 $this->assertSame('생성', $log->action_label); } public function test_two_modules_with_same_last_segment_keep_their_own_labels(): void { Lang::addNamespace('sirsoft-ecommerce', __DIR__); Lang::addNamespace('sirsoft-board', __DIR__); Lang::addLines(['activity_log.action.restore' => '주문 복원'], 'ko', 'sirsoft-ecommerce'); Lang::addLines(['activity_log.action.restore' => '게시글 복원'], 'ko', 'sirsoft-board'); $ecommerceLog = ActivityLog::create([ 'log_type' => ActivityLogType::Admin, 'action' => 'coupon.restore', 'loggable_type' => 'Modules\\Sirsoft\\Ecommerce\\Models\\Coupon', 'loggable_id' => 1, ]); $boardLog = ActivityLog::create([ 'log_type' => ActivityLogType::Admin, 'action' => 'post.restore', 'loggable_type' => 'Modules\\Sirsoft\\Board\\Models\\Post', 'loggable_id' => 1, ]); $this->assertSame('주문 복원', $ecommerceLog->action_label); $this->assertSame('게시글 복원', $boardLog->action_label); } public function test_module_lang_missing_falls_back_to_core_lang(): void { // 모듈 lang 에 정의 없는 케이스 — 코어 lang fallback 으로 회귀 0 $log = ActivityLog::create([ 'log_type' => ActivityLogType::Admin, 'action' => 'user.update', 'loggable_type' => 'App\\Models\\User', 'loggable_id' => 1, ]); $this->assertSame('수정', $log->action_label); } }