DocXEncoderTest.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. {
  15. $this->phpDocx = $this->getMockBuilder(CreateDocx::class)->disableOriginalConstructor()->getMock();
  16. $this->fileUtils = $this->getMockBuilder(FileUtils::class)->disableOriginalConstructor()->getMock();
  17. }
  18. public function testSupport(): void
  19. {
  20. $encoder = $this->getMockBuilder(DocXEncoder::class)
  21. ->setConstructorArgs([$this->phpDocx, $this->fileUtils])
  22. ->setMethodsExcept(['support'])
  23. ->getMock();
  24. $this->assertTrue($encoder->support('docx'));
  25. $this->assertFalse($encoder->support('txt'));
  26. }
  27. public function testEncode(): void
  28. {
  29. $encoder = $this->getMockBuilder(DocXEncoder::class)
  30. ->setConstructorArgs([$this->phpDocx, $this->fileUtils])
  31. ->setMethodsExcept(['encode'])
  32. ->getMock();
  33. $this->fileUtils
  34. ->expects(self::once())
  35. ->method('getTempFilename')
  36. ->with('docx')
  37. ->willReturn('tmp/temp.docx');
  38. $this->phpDocx
  39. ->expects($this->once())
  40. ->method('embedHtml')
  41. ->with('<div>content</div>');
  42. $this->phpDocx
  43. ->expects(self::once())
  44. ->method('createDocx')
  45. ->with('tmp/temp.docx');
  46. $this->fileUtils
  47. ->expects(self::once())
  48. ->method('getFileContent')
  49. ->with('tmp/temp.docx')
  50. ->willReturn('%%encoded%%');
  51. $this->fileUtils
  52. ->expects(self::once())
  53. ->method('rmIfExist')
  54. ->with('tmp/temp.docx');
  55. $this->assertEquals(
  56. '%%encoded%%',
  57. $encoder->encode('<div>content</div>')
  58. );
  59. }
  60. public function testEncodeWithError(): void
  61. {
  62. $encoder = $this->getMockBuilder(DocXEncoder::class)
  63. ->setConstructorArgs([$this->phpDocx, $this->fileUtils])
  64. ->setMethodsExcept(['encode'])
  65. ->getMock();
  66. $this->fileUtils
  67. ->method('getTempFilename')
  68. ->with('docx')
  69. ->willReturn('tmp/temp.docx');
  70. $this->phpDocx
  71. ->method('embedHtml')
  72. ->with('<div>content</div>');
  73. $this->phpDocx
  74. ->method('createDocx')
  75. ->with('tmp/temp.docx');
  76. $this->fileUtils
  77. ->method('getFileContent')
  78. ->willThrowException(new \Exception('error'));
  79. $this->fileUtils
  80. ->expects(self::once())
  81. ->method('rmIfExist')
  82. ->with('tmp/temp.docx');
  83. $this->expectException(\Exception::class);
  84. $this->expectExceptionMessage('error');
  85. $encoder->encode('<div>content</div>');
  86. }
  87. }