möglich on 2026-10-01. */ public function testTheSalePayloadMatchesTheProbedRequest(): void { $payload = (new VoucherSalePayloadBuilder())->buildSalePayload($this->createDto(), Constants::BOOKING_TYPE_INQUIRY); $xml = (new XmlEncoder())->encode( ['satz' => ['@typ' => 'GUTSCHEINBUCHUNG']] + $payload, 'xml', [XmlEncoder::ROOT_NODE_NAME => 'anfrage', XmlEncoder::ENCODING => 'UTF-8'], ); self::assertStringContainsString( 'AnfrageK' .'3Probe KaeuferProbe Empfaenger' .'25' .'ProbeMyepHerr' .'Teststr. 112345TestortD' .'probe-voucher@example.invalid0170123456' .'' .'', $xml, ); } public function testThePurchaseDiffersOnlyInItsSaleType(): void { $builder = new VoucherSalePayloadBuilder(); $dto = $this->createDto(); $inquiry = $builder->buildSalePayload($dto, Constants::BOOKING_TYPE_INQUIRY); $purchase = $builder->buildSalePayload($dto, Constants::BOOKING_TYPE_BOOKING); self::assertSame('Buchung', $purchase['buchungsart']); self::assertSame(array_diff_key($inquiry, ['buchungsart' => true]), array_diff_key($purchase, ['buchungsart' => true])); } public function testAnEmptyMobileIsLeftOut(): void { $dto = $this->createDto(); $dto->mobile = ' '; $payload = (new VoucherSalePayloadBuilder())->buildSalePayload($dto, Constants::BOOKING_TYPE_INQUIRY); self::assertArrayNotHasKey('telefonmobil', $payload['rechnungsempfänger']['kommunikation']); } public function testThePreviewPayloadCarriesTheVoucherOnly(): void { $payload = (new VoucherSalePayloadBuilder())->buildPreviewPayload($this->createDto()); self::assertSame([ 'idgutscheinvorlage' => 3, 'kaeufer' => 'Probe Kaeufer', 'empfaenger' => 'Probe Empfaenger', 'kaufpreis' => 25, 'text' => '', ], $payload); } public function testASaleWithoutATemplateIsALogicError(): void { $dto = $this->createDto(); $dto->template = null; $this->expectException(\LogicException::class); (new VoucherSalePayloadBuilder())->buildSalePayload($dto, Constants::BOOKING_TYPE_INQUIRY); } private function createDto(): VoucherPurchaseDto { $dto = new VoucherPurchaseDto(); $dto->template = new VoucherTemplate(3, 'K', 'Allgemein'); $dto->paymentMethod = new VoucherPaymentMethod(2, 'Überweisung', 'UEBERW'); $dto->from = 'Probe Kaeufer'; $dto->to = 'Probe Empfaenger'; $dto->amount = 25; $dto->salutation = VoucherPurchaseDto::SALUTATION_MR; $dto->lastName = 'Probe'; $dto->firstName = 'Myep'; $dto->address->street = 'Teststr. 1'; $dto->address->postCode = '12345'; $dto->address->city = 'Testort'; $dto->email = 'probe-voucher@example.invalid'; $dto->mobile = '0170123456'; return $dto; } }