فهرست منبع

fix and complete unit tests

Olivier Massot 2 سال پیش
والد
کامیت
319ccdde78

+ 3 - 2
src/Service/File/FileManager.php

@@ -104,8 +104,9 @@ class FileManager
      * @throws FileNotFoundException
      */
     public function write(File $file, string $content, Access $author): File {
-        $storage = $this->getStorageFor($file);
-        return $storage->write($file, $content, $author);
+        return $this
+            ->localStorage
+            ->write($file, $content, $author);
     }
 
     /**

+ 0 - 4
src/Service/File/Storage/ApiLegacyStorage.php

@@ -36,8 +36,4 @@ class ApiLegacyStorage implements FileStorageInterface
         $url = '_internal/secure/files/' . $file->getId();
         return $this->apiLegacyRequestService->getContent($url);
     }
-
-    public function write(File $file, string $content, Access $author): File {
-        throw new \RuntimeException('not implemented error');
-    }
 }

+ 0 - 4
src/Service/File/Storage/FileStorageInterface.php

@@ -11,8 +11,4 @@ interface FileStorageInterface
     public function exists(File $file): bool;
 
     public function read(File $file): string;
-
-    public function write(File $file, string $content, Access $author): File;
-
-    // TODO : complete with 'delete'
 }

+ 2 - 0
tests/Unit/Service/Access/AdminAccessUtilsTest.php

@@ -102,6 +102,8 @@ class AdminAccessUtilsTest extends TestCase
             ->with($this->access)
             ->willReturn($contactPoint);
 
+        $this->organization->method('getId')->willReturn(123);
+
         $returned = $adminAccessUtils->getAdminAccess($this->organization);
 
         $this->assertInstanceOf(AdminAccess::class, $returned);

+ 16 - 16
tests/Unit/Service/Export/BaseExporterTest.php

@@ -12,7 +12,7 @@ use App\Repository\Core\FileRepository;
 use App\Service\Export\BaseExporter;
 use App\Service\Export\Encoder\EncoderInterface;
 use App\Service\Export\Model\ExportModelInterface;
-use App\Service\File\Storage\LocalStorage;
+use App\Service\File\FileManager;
 use App\Service\ServiceIterator\EncoderIterator;
 use Doctrine\ORM\EntityManagerInterface;
 use PHPUnit\Framework\MockObject\MockObject;
@@ -34,13 +34,13 @@ class TestableBaseExporter extends BaseExporter {
 
 class BaseExporterTest extends TestCase
 {
-    private AccessRepository $accessRepository;
-    private FileRepository $fileRepository;
-    private Environment $twig;
-    private EncoderIterator $encoderIterator;
-    private EntityManagerInterface $entityManager;
-    private LocalStorage $localStorage;
-    private LoggerInterface $logger;
+    private MockObject | AccessRepository $accessRepository;
+    private MockObject | FileRepository $fileRepository;
+    private MockObject | Environment $twig;
+    private MockObject | EncoderIterator $encoderIterator;
+    private MockObject | EntityManagerInterface $entityManager;
+    private MockObject | LoggerInterface $logger;
+    private MockObject | FileManager $fileManager;
 
     public function setUp(): void {
         $this->accessRepository = $this->getMockBuilder(AccessRepository::class)->disableOriginalConstructor()->getMock();
@@ -48,15 +48,15 @@ class BaseExporterTest extends TestCase
         $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->localStorage = $this->getMockBuilder(LocalStorage::class)->disableOriginalConstructor()->getMock();
         $this->logger = $this->getMockBuilder(LoggerInterface::class)->disableOriginalConstructor()->getMock();
+        $this->fileManager = $this->getMockBuilder(FileManager::class)->disableOriginalConstructor()->getMock();
     }
 
     private function getBaseExporterMockFor(string $method): MockObject | TestableBaseExporter
     {
         $exporter = $this->getMockBuilder(TestableBaseExporter::class)
             ->setMethodsExcept([$method, 'setAccessRepository', 'setFileRepository', 'setTwig', 'setEncoderIterator',
-                'setEntityManager', 'setLocalStorage', 'setLogger'])
+                'setEntityManager', 'setFileManager', 'setLogger'])
             ->getMock();
 
         $exporter->setAccessRepository($this->accessRepository);
@@ -64,8 +64,8 @@ class BaseExporterTest extends TestCase
         $exporter->setTwig($this->twig);
         $exporter->setEncoderIterator($this->encoderIterator);
         $exporter->setEntityManager($this->entityManager);
-        $exporter->setLocalStorage($this->localStorage);
         $exporter->setLogger($this->logger);
+        $exporter->setFileManager($this->fileManager);
 
         return $exporter;
     }
@@ -106,7 +106,7 @@ class BaseExporterTest extends TestCase
         $file = $this->getMockBuilder(File::class)->disableOriginalConstructor()->getMock();
         $this->fileRepository->method('find')->with(456, null, null)->willReturn($file);
 
-        $this->localStorage->expects(self::once())->method('write')->with($file, $data, $access);
+        $this->fileManager->expects(self::once())->method('write')->with($file, $data, $access);
 
         $exporter->export($exportRequest);
     }
@@ -138,7 +138,7 @@ class BaseExporterTest extends TestCase
         $file = $this->getMockBuilder(File::class)->disableOriginalConstructor()->getMock();
         $exporter->expects(self::once())->method('prepareFile')->willReturn($file);
 
-        $this->localStorage->expects(self::once())->method('write')->with($file, $data, $access);
+        $this->fileManager->expects(self::once())->method('write')->with($file, $data, $access);
 
         $exporter->export($exportRequest);
     }
@@ -155,7 +155,7 @@ class BaseExporterTest extends TestCase
 
         $this->accessRepository->method('find')->with(123, null, null)->willReturn(null);
 
-        $this->localStorage->expects(self::never())->method('write');
+        $this->fileManager->expects(self::never())->method('write');
 
         $this->expectException(\RuntimeException::class);
         $this->expectExceptionMessage('Unable to determine the user; abort.');
@@ -186,7 +186,7 @@ class BaseExporterTest extends TestCase
         $access->method('getOrganization')->willReturn(null);
         $this->accessRepository->method('find')->with(123, null, null)->willReturn($access);
 
-        $this->localStorage->expects(self::never())->method('write');
+        $this->fileManager->expects(self::never())->method('write');
 
         $this->expectException(\RuntimeException::class);
         $this->expectExceptionMessage('Unable to determine the organization of the curent user; abort.');
@@ -212,7 +212,7 @@ class BaseExporterTest extends TestCase
 
         $file = $this->getMockBuilder(File::class)->disableOriginalConstructor()->getMock();
 
-        $this->localStorage->expects(self::once())
+        $this->fileManager->expects(self::once())
             ->method('prepareFile')
             ->with(
                 $access, 'Foo.pdf', FileTypeEnum::UNKNOWN(), $access, true, 'NOBODY', 'application/pdf', false

+ 1 - 5
tests/Unit/Service/Export/LicenceCmfExporterTest.php

@@ -17,7 +17,6 @@ use App\Service\Export\Encoder\PdfEncoder;
 use App\Service\Export\LicenceCmfExporter;
 use App\Service\Export\Model\LicenceCmf;
 use App\Service\File\FileManager;
-use App\Service\File\Storage\LocalStorage;
 use App\Service\ServiceIterator\EncoderIterator;
 use App\Tests\Unit\TestToolsTrait;
 use Doctrine\Common\Collections\Collection;
@@ -36,7 +35,6 @@ class LicenceCmfExporterTest extends TestCase
     private MockObject | Environment $twig;
     private MockObject | EncoderIterator $encoderIterator;
     private MockObject | EntityManagerInterface $em;
-    private MockObject | LocalStorage $localStorage;
     private MockObject | FileManager $fileManager;
     private MockObject | OrganizationRepository $organizationRepo;
     private MockObject | Access $access;
@@ -59,7 +57,6 @@ class LicenceCmfExporterTest extends TestCase
         $this->encoderIterator = $this->getMockBuilder(EncoderIterator::class)->disableOriginalConstructor()->getMock();
         $this->encoder = $this->getMockBuilder(PdfEncoder::class)->disableOriginalConstructor()->getMock();
         $this->em = $this->getMockBuilder(EntityManagerInterface::class)->disableOriginalConstructor()->getMock();
-        $this->localStorage = $this->getMockBuilder(LocalStorage::class)->disableOriginalConstructor()->getMock();
         $this->fileManager = $this->getMockBuilder(FileManager::class)->disableOriginalConstructor()->getMock();
         $this->organizationRepo = $this->getMockBuilder(OrganizationRepository::class)->disableOriginalConstructor()->getMock();
         $this->access = $this->getMockBuilder(Access::class)->getMock();
@@ -80,14 +77,13 @@ class LicenceCmfExporterTest extends TestCase
         $exporter = $this->getMockBuilder(LicenceCmfExporter::class)
             ->setConstructorArgs([$this->organizationRepo])
             ->setMethodsExcept(['setAccessRepository', 'setTwig', 'setEncoderIterator',
-                'setEntityManager', 'setEntityManager', 'setLocalStorage', 'setFileManager', $methodUnderTest])
+                'setEntityManager', 'setEntityManager', 'setFileManager', $methodUnderTest])
             ->getMock();
 
         $exporter->setAccessRepository($this->accessRepo);
         $exporter->setTwig($this->twig);
         $exporter->setEncoderIterator($this->encoderIterator);
         $exporter->setEntityManager($this->em);
-        $exporter->setLocalStorage($this->localStorage);
         $exporter->setFileManager($this->fileManager);
 
         return $exporter;

+ 65 - 3
tests/Unit/Service/File/FileManagerTest.php

@@ -6,20 +6,24 @@ use ApiPlatform\Api\IriConverterInterface;
 use ApiPlatform\Api\UrlGeneratorInterface;
 use ApiPlatform\Metadata\Get;
 use App\ApiResources\Core\File\DownloadRequest;
+use App\Entity\Access\Access;
 use App\Entity\Core\File;
+use App\Entity\Organization\Organization;
 use App\Enum\Core\FileHostEnum;
+use App\Enum\Core\FileTypeEnum;
 use App\Service\File\Exception\FileNotFoundException;
 use App\Service\File\FileManager;
 use App\Service\File\Storage\ApiLegacyStorage;
 use App\Service\File\Storage\FileStorageInterface;
 use App\Service\File\Storage\LocalStorage;
+use PHPUnit\Framework\MockObject\MockObject;
 use PHPUnit\Framework\TestCase;
 
 class FileManagerTest extends TestCase
 {
-    private LocalStorage $localStorage;
-    private ApiLegacyStorage $apiLegacyStorage;
-    private IriConverterInterface $iriConverter;
+    private MockObject | LocalStorage $localStorage;
+    private MockObject | ApiLegacyStorage $apiLegacyStorage;
+    private MockObject | IriConverterInterface $iriConverter;
 
     public function setUp(): void
     {
@@ -82,6 +86,64 @@ class FileManagerTest extends TestCase
         );
     }
 
+    public function testPrepareFile(): void
+    {
+        $fileManager = $this->getFileManagerMockFor('prepareFile');
+
+        $owner = $this->createMock(Organization::class);
+        $filename = "example_file.txt";
+        $fileType = FileTypeEnum::NONE(); // Update with your specific enum type
+        $createdBy = $this->createMock(Access::class);
+        $isTemporary = false;
+        $visibility = 'NOBODY';
+        $mimeType = null;
+        $flushFile = true;
+
+        $this->localStorage
+            ->expects(self::once())
+            ->method('prepareFile')
+            ->with($owner, $filename, $fileType, $createdBy, $isTemporary, $visibility, $mimeType, $flushFile);
+
+        $file = $fileManager->prepareFile($owner, $filename, $fileType, $createdBy, $isTemporary, $visibility, $mimeType, $flushFile);
+    }
+
+    public function testWrite(): void
+    {
+        $fileManager = $this->getFileManagerMockFor('write');
+
+        $file = $this->createMock(File::class);
+        $content = "Some content";
+        $author = $this->createMock(Access::class);
+
+        $this->localStorage
+            ->expects(self::once())
+            ->method('write')
+            ->with($file, $content, $author);
+
+        $result = $fileManager->write($file, $content, $author);
+    }
+
+    public function testMakeFile(): void
+    {
+        $fileManager = $this->getFileManagerMockFor('makeFile');
+
+        $owner = $this->createMock(Organization::class);
+        $filename = "example_file.txt";
+        $fileType = FileTypeEnum::NONE(); // Update with your specific enum type
+        $content = "Some content";
+        $author = $this->createMock(Access::class);
+        $isTemporary = false;
+        $visibility = 'NOBODY';
+        $mimeType = null;
+
+        $this->localStorage
+            ->expects(self::once())
+            ->method('makeFile')
+            ->with($owner, $filename, $fileType, $content, $author, $isTemporary, $visibility, $mimeType);
+
+        $file = $fileManager->makeFile($owner, $filename, $fileType, $content, $author, $isTemporary, $visibility, $mimeType);
+    }
+
     /**
      * @see LocalStorage::guessMimeTypeFromFilename()
      */

+ 22 - 2
tests/Unit/Service/File/Storage/ApiLegacyStorageTest.php

@@ -9,13 +9,33 @@ use PHPUnit\Framework\TestCase;
 
 class ApiLegacyStorageTest extends TestCase
 {
+    public function testExists(): void
+    {
+        $apiLegacyRequestService = $this->getMockBuilder(ApiLegacyRequestService::class)
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $apiLegacyStorage = $this
+            ->getMockBuilder(ApiLegacyStorage::class)
+            ->setConstructorArgs([$apiLegacyRequestService])
+            ->setMethodsExcept(['exists'])
+            ->getMock();
+
+        $this->expectException(\RuntimeException::class);
+        $this->expectExceptionMessage('not implemented error');
+
+        $file = $this->getMockBuilder(File::class)->getMock();
+
+        $apiLegacyStorage->exists($file);
+    }
+
     public function testRead(): void
     {
         $apiLegacyRequestService = $this->getMockBuilder(ApiLegacyRequestService::class)
             ->disableOriginalConstructor()
             ->getMock();
 
-        $apiLegacyStorageTest = $this
+        $apiLegacyStorage = $this
             ->getMockBuilder(ApiLegacyStorage::class)
             ->setConstructorArgs([$apiLegacyRequestService])
             ->setMethodsExcept(['read'])
@@ -30,7 +50,7 @@ class ApiLegacyStorageTest extends TestCase
             ->with('_internal/secure/files/123')
             ->willReturn('xyz');
 
-        $result = $apiLegacyStorageTest->read($file);
+        $result = $apiLegacyStorage->read($file);
 
         $this->assertEquals('xyz', $result);
     }

+ 11 - 11
tests/Unit/Service/File/Storage/LocalStorageTest.php

@@ -231,10 +231,10 @@ class LocalStorageTest extends TestCase
     /**
      * @see LocalStorage::write()
      */
-    public function testWriteFileNewFile(): void {
+    public function testWriteNewFile(): void {
         $fileStorage = $this->getMockBuilder(TestableLocalStorage::class)
             ->setConstructorArgs([$this->filesystemMap, $this->entityManager, $this->accessRepository, $this->iriConverter])
-            ->setMethodsExcept(['writeFile'])
+            ->setMethodsExcept(['write'])
             ->getMock();
 
         $organization = $this->getMockBuilder(Organization::class)->getMock();
@@ -279,16 +279,16 @@ class LocalStorageTest extends TestCase
 
         $returned = $fileStorage->write($file, $content, $author);
 
-        $this->assertEquals($file, $returned);
+        $this->assertSame($file, $returned);
     }
 
     /**
      * @see LocalStorage::write()
      */
-    public function testWriteFileExistingFile(): void {
+    public function testWriteExistingFile(): void {
         $fileStorage = $this->getMockBuilder(TestableLocalStorage::class)
             ->setConstructorArgs([$this->filesystemMap, $this->entityManager, $this->accessRepository, $this->iriConverter])
-            ->setMethodsExcept(['writeFile'])
+            ->setMethodsExcept(['write'])
             ->getMock();
 
         $person = $this->getMockBuilder(Person::class)->getMock();
@@ -337,11 +337,11 @@ class LocalStorageTest extends TestCase
     /**
      * @see LocalStorage::write()
      */
-    public function testWriteFileExistingButMissingFile(): void
+    public function testWriteExistingButMissingFile(): void
     {
         $fileStorage = $this->getMockBuilder(TestableLocalStorage::class)
             ->setConstructorArgs([$this->filesystemMap, $this->entityManager, $this->accessRepository, $this->iriConverter])
-            ->setMethodsExcept(['writeFile'])
+            ->setMethodsExcept(['write'])
             ->getMock();
 
         $person = $this->getMockBuilder(Person::class)->getMock();
@@ -371,10 +371,10 @@ class LocalStorageTest extends TestCase
     /**
      * @see LocalStorage::write()
      */
-    public function testWriteFileWithAccessOwner(): void {
+    public function testWriteWithAccessOwner(): void {
         $fileStorage = $this->getMockBuilder(TestableLocalStorage::class)
             ->setConstructorArgs([$this->filesystemMap, $this->entityManager, $this->accessRepository, $this->iriConverter])
-            ->setMethodsExcept(['writeFile'])
+            ->setMethodsExcept(['write'])
             ->getMock();
 
         $access = $this->getMockBuilder(Access::class)->getMock();
@@ -413,11 +413,11 @@ class LocalStorageTest extends TestCase
     /**
      * @see LocalStorage::write()
      */
-    public function testWriteFileWithNoName(): void
+    public function testWriteWithNoName(): void
     {
         $fileStorage = $this->getMockBuilder(TestableLocalStorage::class)
             ->setConstructorArgs([$this->filesystemMap, $this->entityManager, $this->accessRepository, $this->iriConverter])
-            ->setMethodsExcept(['writeFile'])
+            ->setMethodsExcept(['write'])
             ->getMock();
 
         $author = $this->getMockBuilder(Access::class)->getMock();