buildValidSchema(); $provider = $this->app->make(EventRegistrationGuards::class); foreach ($provider->publishGuards() as $guard) { $result = $guard->evaluate($schema); $this->assertTrue( $result->passed, "Guard {$guard->code()} unexpectedly failed: {$result->messageKey}", ); } } public function test_missing_identity_key_flag_fails_specific_guard(): void { $schema = $this->buildValidSchema(); // Mutation: clear is_identity_key on the email binding. FormFieldBinding::query() ->withoutGlobalScopes() ->whereIn('owner_id', $schema->fields->pluck('id')) ->where('target_attribute', 'email') ->update(['is_identity_key' => false]); $schema->load('fields.bindings'); $provider = $this->app->make(EventRegistrationGuards::class); $failedCodes = []; foreach ($provider->publishGuards() as $guard) { $result = $guard->evaluate($schema); if (! $result->passed) { $failedCodes[] = $guard->code(); } } $this->assertContains( 'requires_identity_key_binding:person:email', $failedCodes, 'Expected the identity-key flag-check guard to fail.', ); } public function test_registry_resolves_event_registration_to_this_provider(): void { $registry = $this->app->make(PurposeRegistry::class); $provider = $registry->guardProviderFor('event_registration'); $this->assertInstanceOf(EventRegistrationGuards::class, $provider); } private function buildValidSchema(): FormSchema { $schema = FormSchema::factory()->create([ 'purpose' => FormPurpose::EVENT_REGISTRATION->value, 'section_level_submit' => false, ]); $emailField = FormField::factory()->create([ 'form_schema_id' => $schema->id, 'field_type' => FormFieldType::EMAIL->value, ]); FormFieldBinding::factory()->forField($emailField)->entityOwned('person', 'email') ->create(['is_identity_key' => true, 'trust_level' => 80]); $firstNameField = FormField::factory()->create([ 'form_schema_id' => $schema->id, 'field_type' => FormFieldType::TEXT->value, ]); FormFieldBinding::factory()->forField($firstNameField)->entityOwned('person', 'first_name') ->create(['is_identity_key' => false, 'trust_level' => 60]); $lastNameField = FormField::factory()->create([ 'form_schema_id' => $schema->id, 'field_type' => FormFieldType::TEXT->value, ]); FormFieldBinding::factory()->forField($lastNameField)->entityOwned('person', 'last_name') ->create(['is_identity_key' => false, 'trust_level' => 50]); $schema->load(['fields.bindings', 'fields.configs', 'sections']); return $schema; } }