codesFor(EventRegistrationGuards::class); $this->assertContains('requires_identity_key_binding:person:email', $codes); $this->assertContains('max_one_identity_key_per_target_entity', $codes); $this->assertContains('requires_field_type:EMAIL', $codes); $this->assertContains('conditional:availability_picker_requires_event', $codes); $this->assertContains('conditional:tag_picker_requires_tag_categories', $codes); $this->assertContains('append_strategy_requires_collection_target', $codes); $this->assertContains('no_ambiguous_trust_levels', $codes); $this->assertContains('identity_key_bindings_only_in_first_section', $codes); } public function test_artist_advance_guards_omit_identity_key_requirement(): void { $codes = $this->codesFor(ArtistAdvanceGuards::class); $this->assertNotContains('requires_identity_key_binding:person:email', $codes); $this->assertContains('max_one_identity_key_per_target_entity', $codes); $this->assertContains('identity_key_bindings_only_in_first_section', $codes); } public function test_supplier_intake_guards_universal_only(): void { $codes = $this->codesFor(SupplierIntakeGuards::class); $this->assertContains('max_one_identity_key_per_target_entity', $codes); $this->assertContains('append_strategy_requires_collection_target', $codes); $this->assertContains('no_ambiguous_trust_levels', $codes); $this->assertContains('identity_key_bindings_only_in_first_section', $codes); } public function test_post_event_evaluation_guards_universal_only(): void { $codes = $this->codesFor(PostEventEvaluationGuards::class); $this->assertContains('max_one_identity_key_per_target_entity', $codes); $this->assertContains('append_strategy_requires_collection_target', $codes); $this->assertContains('no_ambiguous_trust_levels', $codes); $this->assertContains('identity_key_bindings_only_in_first_section', $codes); } public function test_incident_report_guards_universal_only(): void { $codes = $this->codesFor(IncidentReportGuards::class); $this->assertContains('max_one_identity_key_per_target_entity', $codes); $this->assertContains('append_strategy_requires_collection_target', $codes); } public function test_signature_contract_guards_universal_only(): void { $codes = $this->codesFor(SignatureContractGuards::class); $this->assertContains('max_one_identity_key_per_target_entity', $codes); } public function test_user_profile_guards_universal_only(): void { $codes = $this->codesFor(UserProfileGuards::class); $this->assertContains('max_one_identity_key_per_target_entity', $codes); } /** * @param class-string $providerClass * @return list */ private function codesFor(string $providerClass): array { $provider = $this->app->make($providerClass); return array_map( static fn (PublishGuard $g): string => $g->code(), $provider->publishGuards(), ); } }