accessRepository = $this->getMockBuilder(AccessRepository::class)->disableOriginalConstructor()->getMock(); $this->fileRepository = $this->getMockBuilder(FileRepository::class)->disableOriginalConstructor()->getMock(); $this->twig = $this->getMockBuilder(Environment::class)->disableOriginalConstructor()->getMock(); $this->encoderIterator = $this->getMockBuilder(EncoderIterator::class)->disableOriginalConstructor()->getMock(); $this->entityManager = $this->getMockBuilder(EntityManagerInterface::class)->disableOriginalConstructor()->getMock(); $this->storage = $this->getMockBuilder(LocalStorage::class)->disableOriginalConstructor()->getMock(); $this->logger = $this->getMockBuilder(LoggerInterface::class)->disableOriginalConstructor()->getMock(); } private function getBaseExporterMockFor(string $method): MockObject | TestableBaseExporter { $exporter = $this->getMockBuilder(TestableBaseExporter::class) ->setMethodsExcept([$method, 'setAccessRepository', 'setFileRepository', 'setTwig', 'setEncoderIterator', 'setEntityManager', 'setStorage', 'setLogger']) ->getMock(); $exporter->setAccessRepository($this->accessRepository); $exporter->setFileRepository($this->fileRepository); $exporter->setTwig($this->twig); $exporter->setEncoderIterator($this->encoderIterator); $exporter->setEntityManager($this->entityManager); $exporter->setStorage($this->storage); $exporter->setLogger($this->logger); return $exporter; } public function testSupport(): void { $exporter = $this->getBaseExporterMockFor('support'); $exportRequest = $this->getMockBuilder(ExportRequest::class)->disableOriginalConstructor()->getMock(); $this->assertFalse($exporter->support($exportRequest)); } public function testExport(): void { $exporter = $this->getBaseExporterMockFor('export'); $exportRequest = $this->getMockBuilder(ExportRequest::class)->disableOriginalConstructor()->getMock(); $exportRequest->method('getRequesterId')->willReturn(123); $exportRequest->method('getFileId')->willReturn(456); $model = $this->getMockBuilder(ExportModelInterface::class)->disableOriginalConstructor()->getMock(); $exporter->expects(self::once())->method('buildModel')->with($exportRequest)->willReturn($model); $html = "
foo
"; $exporter->expects(self::once())->method('render')->with($model)->willReturn($html); $data = 'azerty'; $exporter->expects(self::once())->method('encode')->with($html)->willReturn($data); $access = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock(); $this->accessRepository->method('find')->with(123, null, null)->willReturn($access); $file = $this->getMockBuilder(File::class)->disableOriginalConstructor()->getMock(); $this->fileRepository->method('find')->with(456, null, null)->willReturn($file); $this->storage->expects(self::once())->method('writeFile')->with($file, $data, $access); $exporter->export($exportRequest); } public function testExportNewFile(): void { $exporter = $this->getBaseExporterMockFor('export'); $exportRequest = $this->getMockBuilder(ExportRequest::class)->disableOriginalConstructor()->getMock(); $exportRequest->method('getRequesterId')->willReturn(123); $exportRequest->method('getFileId')->willReturn(null); $model = $this->getMockBuilder(ExportModelInterface::class)->disableOriginalConstructor()->getMock(); $exporter->expects(self::once())->method('buildModel')->with($exportRequest)->willReturn($model); $html = "
foo
"; $exporter->expects(self::once())->method('render')->with($model)->willReturn($html); $data = 'azerty'; $exporter->expects(self::once())->method('encode')->with($html)->willReturn($data); $organization = $this->getMockBuilder(Organization::class)->disableOriginalConstructor()->getMock(); $access = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock(); $access->method('getOrganization')->willReturn($organization); $this->accessRepository->method('find')->with(123, null, null)->willReturn($access); $file = $this->getMockBuilder(File::class)->disableOriginalConstructor()->getMock(); $exporter->expects(self::once())->method('prepareFile')->willReturn($file); $this->storage->expects(self::once())->method('writeFile')->with($file, $data, $access); $exporter->export($exportRequest); } public function testExportUndefinedRequester(): void { $exporter = $this->getBaseExporterMockFor('export'); $exportRequest = $this->getMockBuilder(ExportRequest::class)->disableOriginalConstructor()->getMock(); $exportRequest->method('getRequesterId')->willReturn(123); $exportRequest->method('getFileId')->willReturn(456); $model = $this->getMockBuilder(ExportModelInterface::class)->disableOriginalConstructor()->getMock(); $exporter->expects(self::once())->method('buildModel')->with($exportRequest)->willReturn($model); $html = "
foo
"; $exporter->expects(self::once())->method('render')->with($model)->willReturn($html); $data = 'azerty'; $exporter->expects(self::once())->method('encode')->with($html)->willReturn($data); $this->accessRepository->method('find')->with(123, null, null)->willReturn(null); $this->storage->expects(self::never())->method('writeFile'); $this->expectException(\RuntimeException::class); $exporter->export($exportRequest); } public function testExportUndefinedOrganization(): void { $exporter = $this->getBaseExporterMockFor('export'); $exportRequest = $this->getMockBuilder(ExportRequest::class)->disableOriginalConstructor()->getMock(); $exportRequest->method('getRequesterId')->willReturn(123); $exportRequest->method('getFileId')->willReturn(null); $model = $this->getMockBuilder(ExportModelInterface::class)->disableOriginalConstructor()->getMock(); $exporter->expects(self::once())->method('buildModel')->with($exportRequest)->willReturn($model); $html = "
foo
"; $exporter->expects(self::once())->method('render')->with($model)->willReturn($html); $data = 'azerty'; $exporter->expects(self::once())->method('encode')->with($html)->willReturn($data); $access = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock(); $access->method('getOrganization')->willReturn(null); $this->accessRepository->method('find')->with(123, null, null)->willReturn($access); $this->storage->expects(self::never())->method('writeFile'); $this->expectException(\RuntimeException::class); $exporter->export($exportRequest); } }