service = new VatIdService; } /** @test */ public function it_normalizes_vat_ids() { $this->assertEquals('ATU12345678', $this->service->normalize(' at-u 12.345,678 ')); $this->assertEquals('', $this->service->normalize(null)); } /** @test */ public function it_extracts_country_code_from_prefix() { $this->assertEquals('AT', $this->service->extractCountryCode('ATU12345678')); $this->assertEquals('ES', $this->service->extractCountryCode('ESY9284953M')); // Kein EU-Präfix -> Fallback auf Account-Land $this->assertEquals('AT', $this->service->extractCountryCode('53618009', 'AT')); $this->assertNull($this->service->extractCountryCode('53618009', 'CH')); } /** @test */ public function it_checks_plausible_format() { $this->assertTrue($this->service->isPlausibleFormat('ATU12345678')); $this->assertTrue($this->service->isPlausibleFormat('DE123456789')); $this->assertTrue($this->service->isPlausibleFormat('ESY9284953M')); // Nur Ziffern ohne Länderpräfix (z.B. österreichische Steuernummer) $this->assertFalse($this->service->isPlausibleFormat('53618009')); // Kein EU-Ländercode $this->assertFalse($this->service->isPlausibleFormat('CH123456789')); $this->assertFalse($this->service->isPlausibleFormat('')); $this->assertFalse($this->service->isPlausibleFormat(null)); } /** @test */ public function german_vat_ids_never_qualify_for_reverse_charge() { $this->assertFalse($this->service->qualifiesForReverseCharge('DE123456789')); $this->assertFalse($this->service->qualifiesForReverseCharge('de 123 456 789')); $this->assertTrue($this->service->qualifiesForReverseCharge('ATU12345678')); $this->assertFalse($this->service->qualifiesForReverseCharge('53618009')); $this->assertFalse($this->service->qualifiesForReverseCharge(null)); } /** @test */ public function vies_check_returns_invalid_for_implausible_ids_without_api_call() { $this->assertEquals(VatIdService::CHECK_INVALID, $this->service->checkVies('53618009')); $this->assertEquals(VatIdService::CHECK_INVALID, $this->service->checkViesCached('')); } /** @test */ public function vies_check_returns_unavailable_when_disabled() { config(['services.vies.enabled' => false]); $this->assertEquals(VatIdService::CHECK_UNAVAILABLE, $this->service->checkVies('ATU12345678')); } }