[ 'ko' => '테스트 모듈', 'en' => 'Test Module', ], 'description' => [ 'ko' => '테스트 모듈 설명', 'en' => 'Test module description', ], 'status' => ExtensionStatus::Active->value, ]; $request = new UpdateModuleRequest; // Act $validator = Validator::make($data, $request->rules()); // Assert $this->assertFalse($validator->fails()); } /** * 문자열로 업데이트 요청 시 배열로 변환되어 통과 */ public function test_converts_string_to_array(): void { // Arrange $data = [ 'name' => '테스트 모듈', 'description' => '테스트 설명', ]; // UpdateModuleRequest 인스턴스 생성 및 데이터 주입 $request = UpdateModuleRequest::create('/test', 'POST', $data); $request->setContainer(app()); $request->validateResolved(); // Act - prepareForValidation이 실행된 후 데이터 확인 $validatedData = $request->validated(); // Assert $this->assertIsArray($validatedData['name']); $this->assertIsArray($validatedData['description']); $this->assertEquals('테스트 모듈', $validatedData['name']['ko']); $this->assertEquals('테스트 모듈', $validatedData['name']['en']); } /** * name이 maxLength를 초과하면 실패 */ public function test_fails_when_name_exceeds_max_length(): void { // Arrange $longString = str_repeat('가', 256); // 255자 초과 $data = [ 'name' => [ 'ko' => $longString, 'en' => 'Test', ], ]; $request = new UpdateModuleRequest; // Act $validator = Validator::make($data, $request->rules()); // Assert $this->assertTrue($validator->fails()); $this->assertArrayHasKey('name', $validator->errors()->toArray()); } /** * description이 maxLength를 초과하면 실패 */ public function test_fails_when_description_exceeds_max_length(): void { // Arrange $longString = str_repeat('가', 1001); // 1000자 초과 $data = [ 'description' => [ 'ko' => $longString, 'en' => 'Test', ], ]; $request = new UpdateModuleRequest; // Act $validator = Validator::make($data, $request->rules()); // Assert $this->assertTrue($validator->fails()); $this->assertArrayHasKey('description', $validator->errors()->toArray()); } /** * status가 허용되지 않은 값이면 실패 */ public function test_fails_with_invalid_status(): void { // Arrange $data = [ 'status' => 'invalid_status', ]; $request = new UpdateModuleRequest; // Act $validator = Validator::make($data, $request->rules()); // Assert $this->assertTrue($validator->fails()); $this->assertArrayHasKey('status', $validator->errors()->toArray()); } /** * status가 ExtensionStatus enum 값이면 성공 */ public function test_passes_with_valid_status_values(): void { // Arrange $request = new UpdateModuleRequest; // Act & Assert - 모든 유효한 status 값 테스트 foreach (ExtensionStatus::values() as $statusValue) { $data = ['status' => $statusValue]; $validator = Validator::make($data, $request->rules()); $this->assertFalse($validator->fails(), "Failed with status: {$statusValue}"); } } /** * 모든 필드가 nullable이므로 빈 데이터도 성공 */ public function test_passes_with_empty_data(): void { // Arrange $data = []; $request = new UpdateModuleRequest; // Act $validator = Validator::make($data, $request->rules()); // Assert $this->assertFalse($validator->fails()); } /** * name만 포함된 업데이트 요청 성공 */ public function test_passes_with_only_name(): void { // Arrange $data = [ 'name' => [ 'ko' => '새 이름', 'en' => 'New Name', ], ]; $request = new UpdateModuleRequest; // Act $validator = Validator::make($data, $request->rules()); // Assert $this->assertFalse($validator->fails()); } /** * description만 포함된 업데이트 요청 성공 */ public function test_passes_with_only_description(): void { // Arrange $data = [ 'description' => [ 'ko' => '새 설명', 'en' => 'New Description', ], ]; $request = new UpdateModuleRequest; // Act $validator = Validator::make($data, $request->rules()); // Assert $this->assertFalse($validator->fails()); } /** * status만 포함된 업데이트 요청 성공 */ public function test_passes_with_only_status(): void { // Arrange $data = [ 'status' => ExtensionStatus::Inactive->value, ]; $request = new UpdateModuleRequest; // Act $validator = Validator::make($data, $request->rules()); // Assert $this->assertFalse($validator->fails()); } }