PageRenderTime 40ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/sonata-project/exporter/test/Exporter/Test/Writer/GsaFeedWriterTest.php

https://gitlab.com/cuza/Clinic_Recods
PHP | 164 lines | 94 code | 31 blank | 39 comment | 1 complexity | 32930f0adfa2c86899400156978d65b1 MD5 | raw file
  1. <?php
  2. namespace Exporter\Test\Source;
  3. use Exporter\Writer\GsaFeedWriter;
  4. /**
  5. * Tests the GSA feed writer class.
  6. *
  7. * @author RĂ©mi Marseille <marseille@ekino.com>
  8. */
  9. class GsaFeedWriterTest extends \PHPUnit_Framework_TestCase
  10. {
  11. /**
  12. * @var \SplFileInfo
  13. */
  14. private $folder;
  15. /**
  16. * @var string
  17. */
  18. private $dtd;
  19. /**
  20. * @var string
  21. */
  22. private $datasource;
  23. /**
  24. * @var string
  25. */
  26. private $feedtype;
  27. /**
  28. * Creates the folder useful to this test.
  29. */
  30. public function setUp()
  31. {
  32. $path = sys_get_temp_dir().DIRECTORY_SEPARATOR.'sonata_exporter_test';
  33. $this->folder = new \SplFileInfo($path);
  34. $this->tearDown();
  35. mkdir($path);
  36. $this->dtd = 'http://gsa.example.com/gsafeed.dtd';
  37. $this->datasource = 'default_collection';
  38. $this->feedtype = 'metadata-and-url';
  39. }
  40. /**
  41. * @expectedException RuntimeException
  42. */
  43. public function testNonExistentFolder()
  44. {
  45. $writer = new GsaFeedWriter(new \SplFileInfo('foo'), $this->dtd, $this->datasource, $this->feedtype);
  46. $writer->open();
  47. }
  48. /**
  49. * Tests a simple write case.
  50. */
  51. public function testSimpleWrite()
  52. {
  53. $writer = new GsaFeedWriter($this->folder, $this->dtd, $this->datasource, $this->feedtype);
  54. $writer->open();
  55. $writer->write(array(
  56. 'url' => 'https://sonata-project.org/about',
  57. 'mime_type' => 'text/html',
  58. 'action' => 'add',
  59. ));
  60. $writer->write(array(
  61. 'url' => 'https://sonata-project.org/bundles/',
  62. 'mime_type' => 'text/html',
  63. 'action' => 'delete',
  64. ));
  65. $writer->close();
  66. $generatedFiles = $this->getFiles();
  67. $this->assertCount(1, $generatedFiles);
  68. $this->assertEquals($this->folder.'/feed_00001.xml', $generatedFiles[0]);
  69. // this will throw an exception if the xml is invalid
  70. new \SimpleXMLElement(file_get_contents($generatedFiles[0]), LIBXML_PARSEHUGE);
  71. $expected = <<<XML
  72. <?xml version="1.0" encoding="UTF-8"?>
  73. <!DOCTYPE gsafeed PUBLIC "-//Google//DTD GSA Feeds//EN" "$this->dtd">
  74. <gsafeed>
  75. <header>
  76. <datasource>$this->datasource</datasource>
  77. <feedtype>$this->feedtype</feedtype>
  78. </header>
  79. <group>
  80. <record url="https://sonata-project.org/about" mimetype="text/html" action="add"/>
  81. <record url="https://sonata-project.org/bundles/" mimetype="text/html" action="delete"/>
  82. </group>
  83. </gsafeed>
  84. XML;
  85. $this->assertEquals(trim($expected), file_get_contents($generatedFiles[0]));
  86. }
  87. /**
  88. * Tests the writer limit.
  89. */
  90. public function testLimitSize()
  91. {
  92. $writer = new GsaFeedWriter($this->folder, $this->dtd, $this->datasource, $this->feedtype);
  93. $writer->open();
  94. foreach (range(0, GsaFeedWriter::LIMIT_SIZE / 8196) as $i) {
  95. $writer->write(array(
  96. 'url' => str_repeat('x', 8196),
  97. 'mime_type' => 'text/html',
  98. 'action' => 'add',
  99. ));
  100. }
  101. $writer->close();
  102. $generatedFiles = $this->getFiles();
  103. $this->assertCount(2, $generatedFiles);
  104. // this will throw an exception if the xml is invalid
  105. new \SimpleXMLElement(file_get_contents($generatedFiles[0]), LIBXML_PARSEHUGE);
  106. new \SimpleXMLElement(file_get_contents($generatedFiles[1]), LIBXML_PARSEHUGE);
  107. $info = stat($generatedFiles[0]);
  108. $this->assertLessThan(GsaFeedWriter::LIMIT_SIZE, $info['size']);
  109. }
  110. /**
  111. * Gets an array of files of the main folder.
  112. *
  113. * @return array
  114. */
  115. public function getFiles()
  116. {
  117. $files = glob($this->folder->getRealPath().'/*.xml');
  118. sort($files);
  119. return $files;
  120. }
  121. /**
  122. * Deletes the generated XML and the created folder.
  123. */
  124. public function tearDown()
  125. {
  126. if ($this->folder->getRealPath()) {
  127. foreach ($this->getFiles() as $file) {
  128. unlink($file);
  129. }
  130. rmdir($this->folder->getRealPath());
  131. }
  132. }
  133. }