ExporterIteratorTest.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. use App\ApiResources\Export\ExportRequest;
  3. use App\Service\Export\Encoder\EncoderInterface;
  4. use App\Service\Export\ExporterInterface;
  5. use App\Service\ServiceIterator\EncoderIterator;
  6. use App\Service\ServiceIterator\ExporterIterator;
  7. use PHPUnit\Framework\TestCase;
  8. class ExporterIteratorTest extends TestCase
  9. {
  10. public function testGetExporterFor(): void
  11. {
  12. $exportRequest = $this->getMockBuilder(ExportRequest::class)
  13. ->disableOriginalConstructor()
  14. ->getMock();
  15. $mocker = $this->getMockBuilder(ExporterInterface::class);
  16. $exporter1 = $mocker->getMock();
  17. $exporter1->method('support')->willReturn(false);
  18. $exporter2 = $mocker->getMock();
  19. $exporter2->expects($this->once())->method('support')->with($exportRequest)->willReturn(true);
  20. $exporter3 = $mocker->getMock();
  21. $exporter3->method('support')->willReturn(false);
  22. $exporters = [$exporter1, $exporter2, $exporter3];
  23. $iterator = $this->getMockBuilder(ExporterIterator::class)
  24. ->setConstructorArgs([$exporters])
  25. ->setMethodsExcept(['getExporterFor'])
  26. ->getMock();
  27. $actualExporter = $iterator->getExporterFor($exportRequest);
  28. $this->assertEquals($exporter2, $actualExporter);
  29. }
  30. public function testGetExporterForError(): void
  31. {
  32. $exportRequest = $this->getMockBuilder(ExportRequest::class)
  33. ->disableOriginalConstructor()
  34. ->getMock();
  35. $mocker = $this->getMockBuilder(ExporterInterface::class);
  36. $exporter1 = $mocker->getMock();
  37. $exporter1->method('support')->willReturn(false);
  38. $exporter2 = $mocker->getMock();
  39. $exporter2->method('support')->willReturn(false);
  40. $exporters = [$exporter1, $exporter2];
  41. $iterator = $this->getMockBuilder(ExporterIterator::class)
  42. ->setConstructorArgs([$exporters])
  43. ->setMethodsExcept(['getExporterFor'])
  44. ->getMock();
  45. $this->expectException(Exception::class);
  46. $iterator->getExporterFor($exportRequest);
  47. }
  48. }