createMock(VoucherClient::class); $voucherClient->expects(self::once())->method('getVoucherTemplates')->willReturn($templates); $provider = $this->createProvider($voucherClient); self::assertEquals($templates, $provider->getTemplates()); self::assertEquals($templates, $provider->getTemplates()); } public function testARejectionIsNotCached(): void { $templates = new VoucherTemplates(10, 5000, [new VoucherTemplate(3, 'K', 'Allgemein')]); $voucherClient = $this->createMock(VoucherClient::class); $voucherClient->expects(self::exactly(2))->method('getVoucherTemplates') ->willReturnOnConsecutiveCalls(new Notification(104, 'User fehlerhaft'), $templates); $provider = $this->createProvider($voucherClient); try { $provider->getTemplates(); self::fail('Expected a VoucherShopUnavailableException'); } catch (VoucherShopUnavailableException) { } self::assertEquals($templates, $provider->getTemplates()); } public function testNoTemplatesOnSaleMeansNoShop(): void { $voucherClient = $this->createStub(VoucherClient::class); $voucherClient->method('getVoucherTemplates')->willReturn(new VoucherTemplates(10, 5000, [])); $this->expectException(VoucherShopUnavailableException::class); $this->createProvider($voucherClient)->getTemplates(); } public function testThePaymentMethodIsTransfer(): void { $voucherClient = $this->createStub(VoucherClient::class); $voucherClient->method('getVoucherPaymentMethods')->willReturn([ new VoucherPaymentMethod(1, 'Lastschrift', 'LAST'), new VoucherPaymentMethod(2, 'Überweisung', 'UEBERW'), ]); self::assertSame(2, $this->createProvider($voucherClient)->getPaymentMethod()->id); } public function testWithoutTransferThereIsNoShop(): void { $voucherClient = $this->createStub(VoucherClient::class); $voucherClient->method('getVoucherPaymentMethods')->willReturn([new VoucherPaymentMethod(1, 'Lastschrift', 'LAST')]); $this->expectException(VoucherShopUnavailableException::class); $this->createProvider($voucherClient)->getPaymentMethod(); } private function createProvider(VoucherClient $voucherClient): VoucherTemplateProvider { return new VoucherTemplateProvider($voucherClient, new TagAwareAdapter(new ArrayAdapter()), new NullLogger()); } }