resolver = new InsuranceTypeResolver(); } public function testResolveTypeForIndividualTravelCancellationInsurance(): void { $insurance = new Insurance(); $insurance->package = false; $insurance->subType = 'RRV'; $insurance->familyInsurance = false; $result = $this->resolver->resolveType($insurance); $this->assertEquals(InsuranceTypeResolver::TRAVEL_CANCELLATION, $result); } public function testResolveTypeForIndividualFamilyTravelCancellationInsurance(): void { $insurance = new Insurance(); $insurance->package = false; $insurance->subType = 'RRV'; $insurance->familyInsurance = true; $result = $this->resolver->resolveType($insurance); $this->assertEquals(InsuranceTypeResolver::TRAVEL_CANCELLATION_FAMILY, $result); } public function testResolveTypeForIndividualTravelProtectionInsurance(): void { $insurance = new Insurance(); $insurance->package = false; $insurance->subType = 'PAK'; $insurance->familyInsurance = false; $result = $this->resolver->resolveType($insurance); $this->assertEquals(InsuranceTypeResolver::TRAVEL_PROTECTION, $result); } public function testResolveTypeForIndividualFamilyTravelProtectionInsurance(): void { $insurance = new Insurance(); $insurance->package = false; $insurance->subType = 'PAK'; $insurance->familyInsurance = true; $result = $this->resolver->resolveType($insurance); $this->assertEquals(InsuranceTypeResolver::TRAVEL_PROTECTION_FAMILY, $result); } public function testResolveTypeForIndividualDeductibleInsurance(): void { $insurance = new Insurance(); $insurance->package = false; $insurance->subType = 'OHN'; $insurance->familyInsurance = false; $result = $this->resolver->resolveType($insurance); $this->assertEquals(InsuranceTypeResolver::DEDUCTIBLE, $result); } public function testResolveTypeForIndividualUnknownSubtype(): void { $insurance = new Insurance(); $insurance->package = false; $insurance->subType = 'UNKNOWN'; $insurance->familyInsurance = false; $result = $this->resolver->resolveType($insurance); $this->assertNull($result); } public function testResolveTypeForIndividualNullSubtype(): void { $insurance = new Insurance(); $insurance->package = false; $insurance->subType = null; $insurance->familyInsurance = false; $result = $this->resolver->resolveType($insurance); $this->assertNull($result); } public function testResolveTypeForPackageWithTravelProtectionContent(): void { // Create contained insurances $protectionInsurance = new Insurance(); $protectionInsurance->subType = 'PAK'; $deductibleInsurance = new Insurance(); $deductibleInsurance->subType = 'OHN'; // Create package $package = new Insurance(); $package->package = true; $package->familyInsurance = false; $package->containedInsurances = [$protectionInsurance, $deductibleInsurance]; $result = $this->resolver->resolveType($package); $this->assertEquals(InsuranceTypeResolver::TRAVEL_PROTECTION, $result); } public function testResolveTypeForFamilyPackageWithTravelProtectionContent(): void { // Create contained insurances $protectionInsurance = new Insurance(); $protectionInsurance->subType = 'PAK'; $deductibleInsurance = new Insurance(); $deductibleInsurance->subType = 'OHN'; // Create family package $package = new Insurance(); $package->package = true; $package->familyInsurance = true; $package->containedInsurances = [$protectionInsurance, $deductibleInsurance]; $result = $this->resolver->resolveType($package); $this->assertEquals(InsuranceTypeResolver::TRAVEL_PROTECTION_FAMILY, $result); } public function testResolveTypeForPackageWithTravelCancellationContent(): void { // Create contained insurances $cancellationInsurance = new Insurance(); $cancellationInsurance->subType = 'RRV'; $deductibleInsurance = new Insurance(); $deductibleInsurance->subType = 'OHN'; // Create package $package = new Insurance(); $package->package = true; $package->familyInsurance = false; $package->containedInsurances = [$cancellationInsurance, $deductibleInsurance]; $result = $this->resolver->resolveType($package); $this->assertEquals(InsuranceTypeResolver::TRAVEL_CANCELLATION, $result); } public function testResolveTypeForPackageWithOnlyDeductibleContent(): void { // Create contained insurance (only deductible) $deductibleInsurance = new Insurance(); $deductibleInsurance->subType = 'OHN'; // Create package $package = new Insurance(); $package->package = true; $package->familyInsurance = false; $package->containedInsurances = [$deductibleInsurance]; $result = $this->resolver->resolveType($package); $this->assertNull($result); } public function testResolveTypeForPackageWithNoContainedInsurances(): void { $package = new Insurance(); $package->package = true; $package->familyInsurance = false; $package->containedInsurances = []; $result = $this->resolver->resolveType($package); $this->assertNull($result); } public function testResolveTypeForPackageWithMultiplePrimaryTypes(): void { // Create contained insurances with multiple primary types $protectionInsurance = new Insurance(); $protectionInsurance->subType = 'PAK'; $cancellationInsurance = new Insurance(); $cancellationInsurance->subType = 'RRV'; // Create package - should return first non-deductible type found $package = new Insurance(); $package->package = true; $package->familyInsurance = false; $package->containedInsurances = [$protectionInsurance, $cancellationInsurance]; $result = $this->resolver->resolveType($package); $this->assertEquals(InsuranceTypeResolver::TRAVEL_PROTECTION, $result); } public function testGetAllTypes(): void { $types = $this->resolver->getAllTypes(); $expectedTypes = [ InsuranceTypeResolver::TRAVEL_CANCELLATION, InsuranceTypeResolver::TRAVEL_CANCELLATION_FAMILY, InsuranceTypeResolver::TRAVEL_PROTECTION, InsuranceTypeResolver::TRAVEL_PROTECTION_FAMILY, InsuranceTypeResolver::DEDUCTIBLE, ]; $this->assertEquals($expectedTypes, $types); $this->assertCount(5, $types); } public function testIsFamilyType(): void { $this->assertTrue($this->resolver->isFamilyType(InsuranceTypeResolver::TRAVEL_CANCELLATION_FAMILY)); $this->assertTrue($this->resolver->isFamilyType(InsuranceTypeResolver::TRAVEL_PROTECTION_FAMILY)); $this->assertFalse($this->resolver->isFamilyType(InsuranceTypeResolver::TRAVEL_CANCELLATION)); $this->assertFalse($this->resolver->isFamilyType(InsuranceTypeResolver::TRAVEL_PROTECTION)); $this->assertFalse($this->resolver->isFamilyType(InsuranceTypeResolver::DEDUCTIBLE)); } public function testGetBaseType(): void { $this->assertEquals( InsuranceTypeResolver::TRAVEL_CANCELLATION, $this->resolver->getBaseType(InsuranceTypeResolver::TRAVEL_CANCELLATION_FAMILY) ); $this->assertEquals( InsuranceTypeResolver::TRAVEL_PROTECTION, $this->resolver->getBaseType(InsuranceTypeResolver::TRAVEL_PROTECTION_FAMILY) ); $this->assertEquals( InsuranceTypeResolver::TRAVEL_CANCELLATION, $this->resolver->getBaseType(InsuranceTypeResolver::TRAVEL_CANCELLATION) ); $this->assertEquals( InsuranceTypeResolver::DEDUCTIBLE, $this->resolver->getBaseType(InsuranceTypeResolver::DEDUCTIBLE) ); } }