DocXEncoderTest.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Tests\Unit\Service\Export\Encoder;
  4. use App\Service\Export\Encoder\DocXEncoder;
  5. use App\Service\Utils\FileUtils;
  6. use Phpdocx\Create\CreateDocx;
  7. use PHPUnit\Framework\MockObject\MockObject;
  8. use PHPUnit\Framework\TestCase;
  9. class DocXEncoderTest extends TestCase
  10. {
  11. private MockObject | CreateDocx $phpDocx;
  12. private MockObject | FileUtils $fileUtils;
  13. public function setUp(): void {
  14. $this->phpDocx = $this->getMockBuilder(CreateDocx::class)->disableOriginalConstructor()->getMock();
  15. $this->fileUtils = $this->getMockBuilder(FileUtils::class)->disableOriginalConstructor()->getMock();
  16. }
  17. public function testSupport(): void
  18. {
  19. $encoder = $this->getMockBuilder(DocXEncoder::class)
  20. ->setConstructorArgs([$this->phpDocx, $this->fileUtils])
  21. ->setMethodsExcept(['support'])
  22. ->getMock();
  23. $this->assertTrue($encoder->support('docx'));
  24. $this->assertFalse($encoder->support('txt'));
  25. }
  26. public function testEncode(): void {
  27. $encoder = $this->getMockBuilder(DocXEncoder::class)
  28. ->setConstructorArgs([$this->phpDocx, $this->fileUtils])
  29. ->setMethodsExcept(['encode'])
  30. ->getMock();
  31. $this->fileUtils
  32. ->expects(self::once())
  33. ->method('getTempFilename')
  34. ->with('docx')
  35. ->willReturn('tmp/temp.docx');
  36. $this->phpDocx
  37. ->expects($this->once())
  38. ->method('embedHtml')
  39. ->with('<div>content</div>');
  40. $this->phpDocx
  41. ->expects(self::once())
  42. ->method('createDocx')
  43. ->with('tmp/temp.docx');
  44. $this->fileUtils
  45. ->expects(self::once())
  46. ->method('getFileContent')
  47. ->with('tmp/temp.docx')
  48. ->willReturn('%%encoded%%');
  49. $this->fileUtils
  50. ->expects(self::once())
  51. ->method('unlinkIfExist')
  52. ->with('tmp/temp.docx');
  53. $this->assertEquals(
  54. '%%encoded%%',
  55. $encoder->encode('<div>content</div>')
  56. );
  57. }
  58. public function testEncodeWithError(): void {
  59. $encoder = $this->getMockBuilder(DocXEncoder::class)
  60. ->setConstructorArgs([$this->phpDocx, $this->fileUtils])
  61. ->setMethodsExcept(['encode'])
  62. ->getMock();
  63. $this->fileUtils
  64. ->method('getTempFilename')
  65. ->with('docx')
  66. ->willReturn('tmp/temp.docx');
  67. $this->phpDocx
  68. ->method('embedHtml')
  69. ->with('<div>content</div>');
  70. $this->phpDocx
  71. ->method('createDocx')
  72. ->with('tmp/temp.docx');
  73. $this->fileUtils
  74. ->method('getFileContent')
  75. ->willThrowException(new \Exception('error'));
  76. $this->fileUtils
  77. ->expects(self::once())
  78. ->method('unlinkIfExist')
  79. ->with('tmp/temp.docx');
  80. $this->expectException(\Exception::class);
  81. $this->expectExceptionMessage('error');
  82. $encoder->encode('<div>content</div>');
  83. }
  84. }