Guest User

Untitled

a guest
Feb 17th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 98.61 KB | None | 0 0
  1. <?php
  2. namespace Orchard\Tests\Lib\Web\Metadata\Store\Ddexern;
  3.  
  4. use Orchard\Tests\Lib\Web\Metadata\Store\BaseTest;
  5.  
  6. class DefaultVersion030400Test extends BaseTest
  7. {
  8. /**
  9. * Sets up the fixture, for example, opens a network connection.
  10. * This method is called before a test is executed.
  11. */
  12. protected function setUp()
  13. {
  14. parent::setUp();
  15. $this->object = $this->getMockBuilder('\Web_Metadata_Store_Ddexern_Version030400_Default')
  16. ->setMethods(
  17. ['fetchGenresMappingsFromVAPI', 'fetchGenresFromDatabase']
  18. )
  19. ->getMock();
  20. $this->object->method('fetchGenresMappingsFromVAPI')->willReturn($this->getGenres());
  21. $this->object->method('fetchGenresFromDatabase')->willReturn($this->getGenres());
  22. $this->object->setDataSource($this->db);
  23. $this->object->setService($this->service);
  24. }
  25.  
  26. /**
  27. * test createMessageSender
  28. */
  29. public function testCreateMessageSender()
  30. {
  31. $expectedXmlStr = '<testroot>'
  32. . '<MessageSender><PartyId IsDPID="true">' . $this->samplePartyIds['orchard'] . '</PartyId>'
  33. . '<PartyName><FullName>The Orchard Enterprises</FullName></PartyName>'
  34. . '<TradingName>The Orchard Enterprises, LLC</TradingName></MessageSender>'
  35. . '<MessageRecipient><PartyId IsDPID="true">DDEXPARTYID9999</PartyId>'
  36. . '<PartyName><FullName>Sample DMS</FullName></PartyName></MessageRecipient>'
  37. . '</testroot>';
  38.  
  39. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  40. $expectedDom->loadXML($expectedXmlStr);
  41.  
  42. $docObject = new \DOMDocument("1.0", "UTF-8");
  43. $docObject->formatOutput = true;
  44. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  45.  
  46. $this->object->setOptions($this->getOptions(152, 'release', 'complete_album'));
  47. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  48. $this->invokeMethod($this->object, 'generateMessageHeaderParties', array(&$actualNode));
  49.  
  50. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  51. }
  52.  
  53. /**
  54. * test createMessageSenderRed with RED release
  55. */
  56. public function testCreateMessageSenderRed()
  57. {
  58. $this->sampleIsRed = true;
  59. $expectedXmlStr = '<testroot>'
  60. . '<MessageSender><PartyId IsDPID="true">' . $this->samplePartyIds['orchard'] . '</PartyId>'
  61. . '<PartyName><FullName>The Orchard Enterprises</FullName></PartyName>'
  62. . '<TradingName>The Orchard Enterprises, LLC</TradingName></MessageSender>'
  63. . '<SentOnBehalfOf><PartyId IsDPID="true">' . $this->samplePartyIds['red'] . '</PartyId>'
  64. . '<PartyName><FullName>RED</FullName></PartyName></SentOnBehalfOf>'
  65. . '<MessageRecipient><PartyId IsDPID="true">DDEXPARTYID9999</PartyId>'
  66. . '<PartyName><FullName>Sample DMS</FullName></PartyName></MessageRecipient>'
  67. . '</testroot>';
  68.  
  69. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  70. $expectedDom->loadXML($expectedXmlStr);
  71.  
  72. $docObject = new \DOMDocument("1.0", "UTF-8");
  73. $docObject->formatOutput = true;
  74. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  75.  
  76. $this->object->setOptions($this->getOptions(286, 'release', 'complete_album'));
  77. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  78. $this->invokeMethod($this->object, 'generateMessageHeaderParties', array(&$actualNode));
  79.  
  80. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  81. }
  82.  
  83. /**
  84. * test createMessageSenderSomLivre for Som Livre
  85. */
  86. public function testCreateMessageSenderSomLivre()
  87. {
  88. $expectedXmlStr = '<testroot>'
  89. . '<MessageSender><PartyId IsDPID="true">' . $this->samplePartyIds['orchard'] . '</PartyId>'
  90. . '<PartyName><FullName>The Orchard Enterprises</FullName></PartyName>'
  91. . '<TradingName>The Orchard Enterprises, LLC</TradingName></MessageSender>'
  92. . '<SentOnBehalfOf><PartyId IsDPID="true">' . $this->samplePartyIds['somlivre'] . '</PartyId>'
  93. . '<PartyName><FullName>Som Livre</FullName></PartyName></SentOnBehalfOf>'
  94. . '<MessageRecipient><PartyId IsDPID="true">DDEXPARTYID9999</PartyId>'
  95. . '<PartyName><FullName>Sample DMS</FullName></PartyName></MessageRecipient>'
  96. . '</testroot>';
  97.  
  98. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  99. $expectedDom->loadXML($expectedXmlStr);
  100.  
  101. $docObject = new \DOMDocument("1.0", "UTF-8");
  102. $docObject->formatOutput = true;
  103. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  104.  
  105. $this->object->setOptions($this->getOptions(592, 'release', 'complete_album'));
  106. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  107. $this->invokeMethod($this->object, 'generateMessageHeaderParties', array(&$actualNode));
  108.  
  109. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  110. }
  111.  
  112. /**
  113. * test generateSoundRecordingResource
  114. */
  115. public function testGenerateSoundRecordingResource()
  116. {
  117. $track = $this->getTracks()[0];
  118. $genre = $this->getGenres()[0];
  119. $expectedXmlStr = '<testroot>'
  120. . '<SoundRecording LanguageAndScriptCode="en">'
  121. . '<SoundRecordingType>MusicalWorkSoundRecording</SoundRecordingType>'
  122. . '<IsArtistRelated>true</IsArtistRelated>'
  123. . '<SoundRecordingId><ISRC>' . $track->isrc . '</ISRC></SoundRecordingId>'
  124. . '<ResourceReference>A1</ResourceReference>'
  125. . '<ReferenceTitle><TitleText>' . $track->track_name . '</TitleText><SubTitle/></ReferenceTitle>'
  126. . '<IsBonusResource>false</IsBonusResource>'
  127. . '<LanguageOfPerformance>en</LanguageOfPerformance>'
  128. . '<Duration>PT0H3M25S</Duration>'
  129. . '<SoundRecordingDetailsByTerritory>'
  130. . '<TerritoryCode>Worldwide</TerritoryCode>'
  131. . '<Title TitleType="OriginalTitle"><TitleText>' . $track->track_name . '</TitleText><SubTitle/></Title>'
  132. . '<Title TitleType="DisplayTitle"><TitleText>' . $track->track_name . '</TitleText><SubTitle/></Title>'
  133. . '<DisplayArtist SequenceNumber="1">'
  134. . '<PartyName><FullName>Test Track Artist #1</FullName></PartyName>'
  135. . '<ArtistRole>MainArtist</ArtistRole>'
  136. . '</DisplayArtist>'
  137. . '<DisplayArtist SequenceNumber="2">'
  138. . '<PartyName><FullName>Test Track Artist #2</FullName></PartyName>'
  139. . '<ArtistRole>FeaturedArtist</ArtistRole>'
  140. . '</DisplayArtist>'
  141. . '<DisplayArtist SequenceNumber="3">'
  142. . '<PartyName><FullName>Test Track Artist #3</FullName></PartyName>'
  143. . '<ArtistRole Namespace="DPID:PADPIDA2012041004F" UserDefinedValue="Remixer">UserDefined</ArtistRole>'
  144. . '</DisplayArtist>'
  145. . '<LabelName>Test Label</LabelName>'
  146. . '<PLine><Year>2016</Year><PLineText>(P) ' . $track->p_line . '</PLineText></PLine>'
  147. . '<SequenceNumber>1</SequenceNumber>'
  148. . '<Genre>'
  149. . '<GenreText>' . $genre->genre . '</GenreText><SubGenre>' . $genre->subgenre . '</SubGenre>'
  150. . '</Genre>'
  151. . '<ParentalWarningType>NotExplicit</ParentalWarningType>'
  152. . '<TechnicalSoundRecordingDetails>'
  153. . '<TechnicalResourceDetailsReference>T1</TechnicalResourceDetailsReference>'
  154. . '<AudioCodecType>FLAC</AudioCodecType>'
  155. . '<NumberOfChannels>2</NumberOfChannels>'
  156. . '<SamplingRate UnitOfMeasure="Hz">44100</SamplingRate>'
  157. . '<IsPreview>false</IsPreview>'
  158. . '<PreviewDetails>'
  159. . '<StartPoint>' . ($track->preview_start_time / 1000) . '</StartPoint>'
  160. . '<Duration>PT30S</Duration>'
  161. . '<ExpressionType>Instructive</ExpressionType>'
  162. . '</PreviewDetails>'
  163. . '<File>'
  164. . '<FileName>123456789012_1_1.flac</FileName>'
  165. . '<HashSum>'
  166. . '<HashSum>2cacc564daef0771d74ac7423d451b88</HashSum>'
  167. . '<HashSumAlgorithmType>MD5</HashSumAlgorithmType>'
  168. . '</HashSum>'
  169. . '</File>'
  170. . '</TechnicalSoundRecordingDetails>'
  171. . '</SoundRecordingDetailsByTerritory>'
  172. . '</SoundRecording></testroot>';
  173.  
  174. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  175. $expectedDom->loadXML($expectedXmlStr);
  176.  
  177. $docObject = new \DOMDocument("1.0", "UTF-8");
  178. $docObject->formatOutput = true;
  179. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  180.  
  181. $this->object->setOptions($this->getOptions(152, 'release', 'complete_album'));
  182. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  183. $this->invokeMethod($this->object, 'generateSoundRecordingResource', array(&$actualNode, $track, 'A1'));
  184.  
  185. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  186. }
  187.  
  188. /**
  189. * test generateSoundRecordingResource for Agedi
  190. */
  191. public function testGenerateSoundRecordingResourceAgedi()
  192. {
  193. $track = $this->getTracks()[0];
  194. $genre = $this->getGenres()[0];
  195. $expectedXmlStr = '<testroot>'
  196. . '<SoundRecording LanguageAndScriptCode="en">'
  197. . '<SoundRecordingType>MusicalWorkSoundRecording</SoundRecordingType>'
  198. . '<IsArtistRelated>true</IsArtistRelated>'
  199. . '<SoundRecordingId><ISRC>' . $track->isrc . '</ISRC></SoundRecordingId>'
  200. . '<ResourceReference>A1</ResourceReference>'
  201. . '<ReferenceTitle><TitleText>' . $track->track_name . '</TitleText><SubTitle/></ReferenceTitle>'
  202. . '<IsBonusResource>false</IsBonusResource>'
  203. . '<LanguageOfPerformance>en</LanguageOfPerformance>'
  204. . '<Duration>PT0H3M25S</Duration>'
  205. . '<SoundRecordingDetailsByTerritory>'
  206. . '<TerritoryCode>Worldwide</TerritoryCode>'
  207. . '<Title TitleType="OriginalTitle"><TitleText>' . $track->track_name . '</TitleText><SubTitle/></Title>'
  208. . '<Title TitleType="DisplayTitle"><TitleText>' . $track->track_name . '</TitleText><SubTitle/></Title>'
  209. . '<DisplayArtist SequenceNumber="1">'
  210. . '<PartyName><FullName>Test Track Artist #1</FullName></PartyName>'
  211. . '<ArtistRole>MainArtist</ArtistRole>'
  212. . '</DisplayArtist>'
  213. . '<DisplayArtist SequenceNumber="2">'
  214. . '<PartyName><FullName>Test Track Artist #2</FullName></PartyName>'
  215. . '<ArtistRole>FeaturedArtist</ArtistRole>'
  216. . '</DisplayArtist>'
  217. . '<DisplayArtist SequenceNumber="3">'
  218. . '<PartyName><FullName>Test Track Artist #3</FullName></PartyName>'
  219. . '<ArtistRole Namespace="DPID:PADPIDA2012041004F" UserDefinedValue="Remixer">UserDefined</ArtistRole>'
  220. . '</DisplayArtist>'
  221. . '<LabelName>Test Label</LabelName>'
  222. . '<RightsController>'
  223. . '<PartyName><FullName>The Orchard Enterprises</FullName></PartyName>'
  224. . '<PartyId IsDPID="true">PADPIDA2012041004F</PartyId>'
  225. . '<RightsControllerRole>RightsController</RightsControllerRole>'
  226. . '<RightSharePercentage>100</RightSharePercentage>'
  227. . '</RightsController>'
  228. . '<PLine><Year>2016</Year><PLineText>(P) ' . $track->p_line . '</PLineText></PLine>'
  229. . '<SequenceNumber>1</SequenceNumber>'
  230. . '<Genre>'
  231. . '<GenreText>' . $genre->genre . '</GenreText><SubGenre>' . $genre->subgenre . '</SubGenre>'
  232. . '</Genre>'
  233. . '<ParentalWarningType>NotExplicit</ParentalWarningType>'
  234. . '<TechnicalSoundRecordingDetails>'
  235. . '<TechnicalResourceDetailsReference>T1</TechnicalResourceDetailsReference>'
  236. . '<AudioCodecType>FLAC</AudioCodecType>'
  237. . '<NumberOfChannels>2</NumberOfChannels>'
  238. . '<SamplingRate UnitOfMeasure="Hz">44100</SamplingRate>'
  239. . '<IsPreview>false</IsPreview>'
  240. . '<PreviewDetails>'
  241. . '<StartPoint>' . ($track->preview_start_time / 1000) . '</StartPoint>'
  242. . '<Duration>PT30S</Duration>'
  243. . '<ExpressionType>Instructive</ExpressionType>'
  244. . '</PreviewDetails>'
  245. . '<File>'
  246. . '<FileName>123456789012_1_1.flac</FileName>'
  247. . '<HashSum>'
  248. . '<HashSum>2cacc564daef0771d74ac7423d451b88</HashSum>'
  249. . '<HashSumAlgorithmType>MD5</HashSumAlgorithmType>'
  250. . '</HashSum>'
  251. . '</File>'
  252. . '</TechnicalSoundRecordingDetails>'
  253. . '</SoundRecordingDetailsByTerritory>'
  254. . '</SoundRecording></testroot>';
  255.  
  256. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  257. $expectedDom->loadXML($expectedXmlStr);
  258.  
  259. $docObject = new \DOMDocument("1.0", "UTF-8");
  260. $docObject->formatOutput = true;
  261. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  262.  
  263. $this->object->setOptions($this->getOptions(570, 'release', 'complete_album'));
  264. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  265. $this->invokeMethod($this->object, 'generateSoundRecordingResource', array(&$actualNode, $track, 'A1'));
  266.  
  267. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  268. }
  269.  
  270. /**
  271. * test generateSoundRecordingResource for Agedi
  272. */
  273. public function testGenerateSoundRecordingResourceSoundExchange()
  274. {
  275. $track = $this->getTracks()[0];
  276. $genre = $this->getGenres()[0];
  277. $expectedXmlStr = '<testroot>'
  278. . '<SoundRecording LanguageAndScriptCode="en">'
  279. . '<SoundRecordingType>MusicalWorkSoundRecording</SoundRecordingType>'
  280. . '<IsArtistRelated>true</IsArtistRelated>'
  281. . '<SoundRecordingId><ISRC>' . $track->isrc . '</ISRC></SoundRecordingId>'
  282. . '<ResourceReference>A1</ResourceReference>'
  283. . '<ReferenceTitle><TitleText>' . $track->track_name . '</TitleText><SubTitle/></ReferenceTitle>'
  284. . '<IsBonusResource>false</IsBonusResource>'
  285. . '<LanguageOfPerformance>en</LanguageOfPerformance>'
  286. . '<Duration>PT0H3M25S</Duration>'
  287. . '<SoundRecordingDetailsByTerritory>'
  288. . '<TerritoryCode>Worldwide</TerritoryCode>'
  289. . '<Title TitleType="OriginalTitle"><TitleText>' . $track->track_name . '</TitleText><SubTitle/></Title>'
  290. . '<Title TitleType="DisplayTitle"><TitleText>' . $track->track_name . '</TitleText><SubTitle/></Title>'
  291. . '<DisplayArtist SequenceNumber="1">'
  292. . '<PartyName><FullName>Test Track Artist #1</FullName></PartyName>'
  293. . '<ArtistRole>MainArtist</ArtistRole>'
  294. . '</DisplayArtist>'
  295. . '<DisplayArtist SequenceNumber="2">'
  296. . '<PartyName><FullName>Test Track Artist #2</FullName></PartyName>'
  297. . '<ArtistRole>FeaturedArtist</ArtistRole>'
  298. . '</DisplayArtist>'
  299. . '<DisplayArtist SequenceNumber="3">'
  300. . '<PartyName><FullName>Test Track Artist #3</FullName></PartyName>'
  301. . '<ArtistRole Namespace="DPID:PADPIDA2012041004F" UserDefinedValue="Remixer">UserDefined</ArtistRole>'
  302. . '</DisplayArtist>'
  303. . '<LabelName>Test Label</LabelName>'
  304. . '<RightsController>'
  305. . '<PartyName><FullName>The Orchard Enterprises</FullName></PartyName>'
  306. . '<PartyId IsDPID="true">PADPIDA2012041004F</PartyId>'
  307. . '<RightsControllerRole>RightsController</RightsControllerRole>'
  308. . '<RightSharePercentage>1.00</RightSharePercentage>'
  309. . '</RightsController>'
  310. . '<PLine><Year>2016</Year><PLineText>(P) ' . $track->p_line . '</PLineText></PLine>'
  311. . '<SequenceNumber>1</SequenceNumber>'
  312. . '<Genre>'
  313. . '<GenreText>' . $genre->genre . '</GenreText><SubGenre>' . $genre->subgenre . '</SubGenre>'
  314. . '</Genre>'
  315. . '<ParentalWarningType>NotExplicit</ParentalWarningType>'
  316. . '<TechnicalSoundRecordingDetails>'
  317. . '<TechnicalResourceDetailsReference>T1</TechnicalResourceDetailsReference>'
  318. . '<AudioCodecType>FLAC</AudioCodecType>'
  319. . '<NumberOfChannels>2</NumberOfChannels>'
  320. . '<SamplingRate UnitOfMeasure="Hz">44100</SamplingRate>'
  321. . '<IsPreview>false</IsPreview>'
  322. . '<PreviewDetails>'
  323. . '<StartPoint>' . ($track->preview_start_time / 1000) . '</StartPoint>'
  324. . '<Duration>PT30S</Duration>'
  325. . '<ExpressionType>Instructive</ExpressionType>'
  326. . '</PreviewDetails>'
  327. . '<File>'
  328. . '<FileName>123456789012_1_1.flac</FileName>'
  329. . '<HashSum>'
  330. . '<HashSum>2cacc564daef0771d74ac7423d451b88</HashSum>'
  331. . '<HashSumAlgorithmType>MD5</HashSumAlgorithmType>'
  332. . '</HashSum>'
  333. . '</File>'
  334. . '</TechnicalSoundRecordingDetails>'
  335. . '</SoundRecordingDetailsByTerritory>'
  336. . '</SoundRecording></testroot>';
  337.  
  338. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  339. $expectedDom->loadXML($expectedXmlStr);
  340.  
  341. $docObject = new \DOMDocument("1.0", "UTF-8");
  342. $docObject->formatOutput = true;
  343. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  344.  
  345. $this->object->setOptions($this->getOptions(549, 'release', 'complete_album'));
  346. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  347. $this->invokeMethod($this->object, 'generateSoundRecordingResource', array(&$actualNode, $track, 'A1'));
  348.  
  349. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  350. }
  351.  
  352. /**
  353. * test generateDealList
  354. * - test dms supports download and streaming
  355. */
  356. public function testGenerateDealList()
  357. {
  358. $expectedXmlStr = '<testroot>'
  359. . '<DealList>'
  360. // Album Release (R0)
  361. . '<ReleaseDeal>'
  362. . '<DealReleaseReference>R0</DealReleaseReference>'
  363. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  364. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  365. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  366. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  367. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  368. . '<Usage><UseType>ConditionalDownload</UseType><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  369. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  370. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  371. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  372. . '</ReleaseDeal>'
  373. // Track #1 Release (R1) - all
  374. . '<ReleaseDeal>'
  375. . '<DealReleaseReference>R1</DealReleaseReference>'
  376. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  377. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  378. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  379. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  380. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  381. . '<Usage><UseType>ConditionalDownload</UseType><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  382. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  383. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  384. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  385. . '</ReleaseDeal>'
  386. // Track #2 Release (R2) - album_download_only
  387. // Track #3 Release (R3) - album_track_download
  388. . '<ReleaseDeal>'
  389. . '<DealReleaseReference>R3</DealReleaseReference>'
  390. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  391. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  392. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  393. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  394. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  395. . '<Usage><UseType>ConditionalDownload</UseType></Usage>'
  396. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  397. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  398. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  399. . '</ReleaseDeal>'
  400. // Track #4 Release (R4) - album_download_stream
  401. . '<ReleaseDeal>'
  402. . '<DealReleaseReference>R4</DealReleaseReference>'
  403. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  404. . '<Usage><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  405. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  406. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  407. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  408. . '</ReleaseDeal>'
  409. // Track #5 Release (R5) - stream_only
  410. . '<ReleaseDeal>'
  411. . '<DealReleaseReference>R5</DealReleaseReference>'
  412. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  413. . '<Usage><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  414. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  415. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  416. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  417. . '</ReleaseDeal>'
  418. . '</DealList></testroot>';
  419. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  420.  
  421. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  422. $expectedDom->loadXML($expectedXmlStr);
  423.  
  424. $docObject = new \DOMDocument("1.0", "UTF-8");
  425. $docObject->formatOutput = true;
  426. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  427.  
  428. $this->object->setOptions($this->getOptions(286, 'release', 'complete_album'));
  429. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  430. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  431.  
  432. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  433. }
  434.  
  435. /**
  436. * test generateDealList for metadata update
  437. * - test dms supports download and streaming
  438. */
  439. public function testGenerateDealListUpdate()
  440. {
  441. $expectedXmlStr = '<testroot>'
  442. . '<DealList>'
  443. // Album Release (R0)
  444. . '<ReleaseDeal>'
  445. . '<DealReleaseReference>R0</DealReleaseReference>'
  446. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  447. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  448. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  449. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  450. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  451. . '<Usage><UseType>ConditionalDownload</UseType><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  452. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  453. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  454. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  455. . '<TerritoryCode>FR</TerritoryCode>'
  456. . '<ValidityPeriod><StartDate>2016-01-02</StartDate></ValidityPeriod></DealTerms></Deal>'
  457. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  458. . '</ReleaseDeal>'
  459. // Track #1 Release (R1) - all
  460. . '<ReleaseDeal>'
  461. . '<DealReleaseReference>R1</DealReleaseReference>'
  462. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  463. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  464. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  465. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  466. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  467. . '<Usage><UseType>ConditionalDownload</UseType><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  468. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  469. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  470. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  471. . '<TerritoryCode>FR</TerritoryCode>'
  472. . '<ValidityPeriod><StartDate>2016-01-02</StartDate></ValidityPeriod></DealTerms></Deal>'
  473. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  474. . '</ReleaseDeal>'
  475. // Track #2 Release (R2) - album_download_only
  476. . '<ReleaseDeal>'
  477. . '<DealReleaseReference>R2</DealReleaseReference>'
  478. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  479. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>FR</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  480. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  481. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  482. . '</ReleaseDeal>'
  483. // Track #3 Release (R3) - album_track_download
  484. . '<ReleaseDeal>'
  485. . '<DealReleaseReference>R3</DealReleaseReference>'
  486. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  487. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  488. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  489. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  490. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  491. . '<Usage><UseType>ConditionalDownload</UseType></Usage>'
  492. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  493. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  494. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  495. . '<TerritoryCode>FR</TerritoryCode>'
  496. . '<ValidityPeriod><StartDate>2016-01-02</StartDate></ValidityPeriod></DealTerms></Deal>'
  497. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  498. . '</ReleaseDeal>'
  499. // Track #4 Release (R4) - album_download_stream
  500. . '<ReleaseDeal>'
  501. . '<DealReleaseReference>R4</DealReleaseReference>'
  502. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  503. . '<Usage><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  504. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  505. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  506. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  507. . '<TerritoryCode>FR</TerritoryCode>'
  508. . '<ValidityPeriod><StartDate>2016-01-02</StartDate></ValidityPeriod></DealTerms></Deal>'
  509. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  510. . '</ReleaseDeal>'
  511. // Track #5 Release (R5) - stream_only
  512. . '<ReleaseDeal>'
  513. . '<DealReleaseReference>R5</DealReleaseReference>'
  514. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  515. . '<Usage><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  516. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  517. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  518. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  519. . '<TerritoryCode>FR</TerritoryCode>'
  520. . '<ValidityPeriod><StartDate>2016-01-02</StartDate></ValidityPeriod></DealTerms></Deal>'
  521. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  522. . '</ReleaseDeal>'
  523. . '</DealList></testroot>';
  524. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  525.  
  526. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  527. $expectedDom->loadXML($expectedXmlStr);
  528.  
  529. $docObject = new \DOMDocument("1.0", "UTF-8");
  530. $docObject->formatOutput = true;
  531. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  532.  
  533. $this->object->setOptions($this->getOptions(286, 'release', 'metadata_update'));
  534. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  535. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  536.  
  537. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  538. }
  539.  
  540. /**
  541. * test generateDealList
  542. * - test dms supports download only
  543. */
  544. public function testGenerateDealListDownloadOnly()
  545. {
  546. $this->sampleDmsServiceType = self::TYPE_DMS_SERVICE_DOWNLOAD;
  547. $expectedXmlStr = '<testroot>'
  548. . '<DealList>'
  549. // Album Release (R0)
  550. . '<ReleaseDeal>'
  551. . '<DealReleaseReference>R0</DealReleaseReference>'
  552. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  553. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  554. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  555. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  556. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  557. . '<Usage><UseType>ConditionalDownload</UseType></Usage>'
  558. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  559. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  560. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  561. . '</ReleaseDeal>'
  562. // Track #1 Release (R1) - all
  563. . '<ReleaseDeal>'
  564. . '<DealReleaseReference>R1</DealReleaseReference>'
  565. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  566. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  567. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  568. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  569. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  570. . '<Usage><UseType>ConditionalDownload</UseType></Usage>'
  571. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  572. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  573. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  574. . '</ReleaseDeal>'
  575. // Track #2 Release (R2) - album_download_only
  576. // Track #3 Release (R3) - album_track_download
  577. . '<ReleaseDeal>'
  578. . '<DealReleaseReference>R3</DealReleaseReference>'
  579. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  580. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  581. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  582. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  583. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  584. . '<Usage><UseType>ConditionalDownload</UseType></Usage>'
  585. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  586. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  587. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  588. . '</ReleaseDeal>'
  589. // Track #4 Release (R4) - album_download_stream
  590. // Track #5 Release (R5) - stream_only
  591. . '</DealList></testroot>';
  592. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  593.  
  594. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  595. $expectedDom->loadXML($expectedXmlStr);
  596.  
  597. $docObject = new \DOMDocument("1.0", "UTF-8");
  598. $docObject->formatOutput = true;
  599. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  600.  
  601. $this->object->setOptions($this->getOptions(286, 'release', 'complete_album'));
  602. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  603. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  604.  
  605. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  606. }
  607.  
  608. /**
  609. * test generateDealList for metadata update
  610. * - test dms supports download only
  611. */
  612. public function testGenerateDealListDownloadOnlyUpdate()
  613. {
  614. $this->sampleDmsServiceType = self::TYPE_DMS_SERVICE_DOWNLOAD;
  615. $expectedXmlStr = '<testroot>'
  616. . '<DealList>'
  617. // Album Release (R0)
  618. . '<ReleaseDeal>'
  619. . '<DealReleaseReference>R0</DealReleaseReference>'
  620. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  621. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  622. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  623. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  624. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  625. . '<Usage><UseType>ConditionalDownload</UseType></Usage>'
  626. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  627. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  628. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  629. . '<TerritoryCode>FR</TerritoryCode>'
  630. . '<ValidityPeriod><StartDate>2016-01-02</StartDate></ValidityPeriod></DealTerms></Deal>'
  631. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  632. . '</ReleaseDeal>'
  633. // Track #1 Release (R1) - all
  634. . '<ReleaseDeal>'
  635. . '<DealReleaseReference>R1</DealReleaseReference>'
  636. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  637. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  638. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  639. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  640. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  641. . '<Usage><UseType>ConditionalDownload</UseType></Usage>'
  642. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  643. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  644. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  645. . '<TerritoryCode>FR</TerritoryCode>'
  646. . '<ValidityPeriod><StartDate>2016-01-02</StartDate></ValidityPeriod></DealTerms></Deal>'
  647. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  648. . '</ReleaseDeal>'
  649. // Track #2 Release (R2) - album_download_only
  650. . '<ReleaseDeal>'
  651. . '<DealReleaseReference>R2</DealReleaseReference>'
  652. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  653. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>FR</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  654. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  655. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  656. . '</ReleaseDeal>'
  657. // Track #3 Release (R3) - album_track_download
  658. . '<ReleaseDeal>'
  659. . '<DealReleaseReference>R3</DealReleaseReference>'
  660. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  661. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  662. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  663. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  664. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  665. . '<Usage><UseType>ConditionalDownload</UseType></Usage>'
  666. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  667. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  668. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  669. . '<TerritoryCode>FR</TerritoryCode>'
  670. . '<ValidityPeriod><StartDate>2016-01-02</StartDate></ValidityPeriod></DealTerms></Deal>'
  671. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  672. . '</ReleaseDeal>'
  673. // Track #4 Release (R4) - album_download_stream
  674. . '<ReleaseDeal>'
  675. . '<DealReleaseReference>R4</DealReleaseReference>'
  676. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  677. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>FR</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  678. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  679. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  680. . '</ReleaseDeal>'
  681. // Track #5 Release (R5) - stream_only
  682. . '<ReleaseDeal>'
  683. . '<DealReleaseReference>R5</DealReleaseReference>'
  684. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  685. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>FR</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  686. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  687. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  688. . '</ReleaseDeal>'
  689. . '</DealList></testroot>';
  690. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  691.  
  692. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  693. $expectedDom->loadXML($expectedXmlStr);
  694.  
  695. $docObject = new \DOMDocument("1.0", "UTF-8");
  696. $docObject->formatOutput = true;
  697. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  698.  
  699. $this->object->setOptions($this->getOptions(286, 'release', 'metadata_update'));
  700. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  701. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  702.  
  703. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  704. }
  705.  
  706. /**
  707. * test generateDealList
  708. * - test dms supports streaming only
  709. */
  710. public function testGenerateDealListStreamOnly()
  711. {
  712. $this->sampleDmsServiceType = self::TYPE_DMS_SERVICE_STREAM;
  713. $expectedXmlStr = '<testroot>'
  714. . '<DealList>'
  715. // Album Release (R0)
  716. . '<ReleaseDeal>'
  717. . '<DealReleaseReference>R0</DealReleaseReference>'
  718. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  719. . '<Usage><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  720. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  721. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  722. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  723. . '</ReleaseDeal>'
  724. // Track #1 Release (R1) - all
  725. . '<ReleaseDeal>'
  726. . '<DealReleaseReference>R1</DealReleaseReference>'
  727. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  728. . '<Usage><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  729. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  730. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  731. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  732. . '</ReleaseDeal>'
  733. // Track #2 Release (R2) - album_download_only
  734. // Track #3 Release (R3) - album_track_download
  735. // Track #4 Release (R4) - album_download_stream
  736. . '<ReleaseDeal>'
  737. . '<DealReleaseReference>R4</DealReleaseReference>'
  738. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  739. . '<Usage><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  740. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  741. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  742. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  743. . '</ReleaseDeal>'
  744. // Track #5 Release (R5) - stream_only
  745. . '<ReleaseDeal>'
  746. . '<DealReleaseReference>R5</DealReleaseReference>'
  747. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  748. . '<Usage><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  749. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  750. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  751. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  752. . '</ReleaseDeal>'
  753. . '</DealList></testroot>';
  754. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  755.  
  756. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  757. $expectedDom->loadXML($expectedXmlStr);
  758.  
  759. $docObject = new \DOMDocument("1.0", "UTF-8");
  760. $docObject->formatOutput = true;
  761. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  762.  
  763. $this->object->setOptions($this->getOptions(286, 'release', 'complete_album'));
  764. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  765. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  766.  
  767. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  768. }
  769.  
  770. /**
  771. * test generateDealList for metadata update
  772. * - test dms supports streaming only
  773. */
  774. public function testGenerateDealListStreamOnlyUpdate()
  775. {
  776. $this->sampleDmsServiceType = self::TYPE_DMS_SERVICE_STREAM;
  777. $expectedXmlStr = '<testroot>'
  778. . '<DealList>'
  779. // Album Release (R0)
  780. . '<ReleaseDeal>'
  781. . '<DealReleaseReference>R0</DealReleaseReference>'
  782. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  783. . '<Usage><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  784. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  785. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  786. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  787. . '<TerritoryCode>FR</TerritoryCode>'
  788. . '<ValidityPeriod><StartDate>2016-01-02</StartDate></ValidityPeriod></DealTerms></Deal>'
  789. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  790. . '</ReleaseDeal>'
  791. // Track #1 Release (R1) - all
  792. . '<ReleaseDeal>'
  793. . '<DealReleaseReference>R1</DealReleaseReference>'
  794. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  795. . '<Usage><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  796. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  797. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  798. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  799. . '<TerritoryCode>FR</TerritoryCode>'
  800. . '<ValidityPeriod><StartDate>2016-01-02</StartDate></ValidityPeriod></DealTerms></Deal>'
  801. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  802. . '</ReleaseDeal>'
  803. // Track #2 Release (R2) - album_download_only
  804. . '<ReleaseDeal>'
  805. . '<DealReleaseReference>R2</DealReleaseReference>'
  806. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  807. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>FR</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  808. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  809. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  810. . '</ReleaseDeal>'
  811. // Track #3 Release (R3) - album_track_download
  812. . '<ReleaseDeal>'
  813. . '<DealReleaseReference>R3</DealReleaseReference>'
  814. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  815. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>FR</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  816. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  817. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  818. . '</ReleaseDeal>'
  819. // Track #4 Release (R4) - album_download_stream
  820. . '<ReleaseDeal>'
  821. . '<DealReleaseReference>R4</DealReleaseReference>'
  822. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  823. . '<Usage><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  824. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  825. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  826. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  827. . '<TerritoryCode>FR</TerritoryCode>'
  828. . '<ValidityPeriod><StartDate>2016-01-02</StartDate></ValidityPeriod></DealTerms></Deal>'
  829. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  830. . '</ReleaseDeal>'
  831. // Track #5 Release (R5) - stream_only
  832. . '<ReleaseDeal>'
  833. . '<DealReleaseReference>R5</DealReleaseReference>'
  834. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  835. . '<Usage><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  836. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  837. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  838. . '<Deal><DealTerms><TakeDown>true</TakeDown>'
  839. . '<TerritoryCode>FR</TerritoryCode>'
  840. . '<ValidityPeriod><StartDate>2016-01-02</StartDate></ValidityPeriod></DealTerms></Deal>'
  841. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  842. . '</ReleaseDeal>'
  843. . '</DealList></testroot>';
  844. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  845.  
  846. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  847. $expectedDom->loadXML($expectedXmlStr);
  848.  
  849. $docObject = new \DOMDocument("1.0", "UTF-8");
  850. $docObject->formatOutput = true;
  851. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  852.  
  853. $this->object->setOptions($this->getOptions(286, 'release', 'metadata_update'));
  854. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  855. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  856.  
  857. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  858. }
  859.  
  860.  
  861. /**
  862. * test generateDealList for Google
  863. * - test dms supports download and streaming
  864. */
  865. public function testGenerateDealListGoogle()
  866. {
  867. $this->sampleHasPricing = true;
  868.  
  869. $expectedXmlStr = file_get_contents('./fixtures/ddex34/DealListGoogle.xml');
  870. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  871.  
  872. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  873. $expectedDom->preserveWhiteSpace = false;
  874. $expectedDom->loadXML($expectedXmlStr);
  875.  
  876. $docObject = new \DOMDocument("1.0", "UTF-8");
  877. $docObject->formatOutput = true;
  878. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  879.  
  880. $this->object->setOptions($this->getOptions(496, 'release', 'metadata_update'));
  881. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  882. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  883.  
  884. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  885. }
  886.  
  887. /**
  888. * test generateDealList for Google with no carvout
  889. * - test dms supports download and streaming
  890. */
  891. public function testGenerateDealListGoogleNoCarveout()
  892. {
  893. $this->sampleHasCarveout = false;
  894. $this->sampleHasPricing = true;
  895.  
  896. $expectedXmlStr = file_get_contents('./fixtures/ddex34/DealListGoogleNoCarveout.xml');
  897. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  898.  
  899. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  900. $expectedDom->preserveWhiteSpace = false;
  901. $expectedDom->loadXML($expectedXmlStr);
  902.  
  903. $docObject = new \DOMDocument("1.0", "UTF-8");
  904. $docObject->formatOutput = true;
  905. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  906.  
  907. $this->object->setOptions($this->getOptions(496, 'release', 'metadata_update'));
  908. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  909. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  910.  
  911. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  912. }
  913.  
  914. /**
  915. * test generateDealList for Google with deleted release
  916. * - test dms supports download and streaming
  917. */
  918. public function testGenerateDealListGoogleDeletedRelease()
  919. {
  920. $this->sampleIsDeleted = true;
  921. $this->sampleHasPricing = true;
  922.  
  923. $expectedXmlStr = file_get_contents('./fixtures/ddex34/DealListGoogleDeletedRelease.xml');
  924. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  925.  
  926. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  927. $expectedDom->preserveWhiteSpace = false;
  928. $expectedDom->loadXML($expectedXmlStr);
  929.  
  930. $docObject = new \DOMDocument("1.0", "UTF-8");
  931. $docObject->formatOutput = true;
  932. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  933.  
  934. $this->object->setOptions($this->getOptions(496, 'release', 'metadata_update'));
  935. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  936. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  937.  
  938. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  939. }
  940.  
  941. /**
  942. * test generateDealList for Amazon
  943. * - test dms supports download and streaming
  944. */
  945. public function testGenerateDealListAmazon()
  946. {
  947. $this->sampleHasPricing = true;
  948.  
  949. $expectedXmlStr = file_get_contents('./fixtures/ddex34/DealListAmazon.xml');
  950. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  951.  
  952. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  953. $expectedDom->preserveWhiteSpace = false;
  954. $expectedDom->loadXML($expectedXmlStr);
  955.  
  956. $docObject = new \DOMDocument("1.0", "UTF-8");
  957. $docObject->formatOutput = true;
  958. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  959.  
  960. $this->object->setOptions($this->getOptions(187, 'release', 'complete_album'));
  961. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  962. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  963.  
  964. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  965. }
  966.  
  967. /**
  968. * test generateDealList for Amazon
  969. * - test dms supports download and streaming
  970. */
  971. public function testGenerateDealListAmazonInstantGrat()
  972. {
  973. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE;
  974. $this->sampleHasInstantGrat = true;
  975. $this->sampleHasPricing = true;
  976.  
  977. $expectedXmlStr = file_get_contents('./fixtures/ddex34/DealListAmazonInstantGrat.xml');
  978. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  979.  
  980. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  981. $expectedDom->preserveWhiteSpace = false;
  982. $expectedDom->loadXML($expectedXmlStr);
  983.  
  984. $docObject = new \DOMDocument("1.0", "UTF-8");
  985. $docObject->formatOutput = true;
  986. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  987.  
  988. $this->object->setOptions($this->getOptions(187, 'release', 'complete_album'));
  989. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  990. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  991.  
  992. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  993. }
  994.  
  995. /**
  996. * test generateDealList for Amazon
  997. * - test dms supports download and streaming
  998. */
  999. public function testGenerateDealListAmazonNoCarveout()
  1000. {
  1001. $this->sampleHasCarveout = false;
  1002. $this->sampleHasPricing = true;
  1003.  
  1004. $expectedXmlStr = file_get_contents('./fixtures/ddex34/DealListAmazonNoCarveout.xml');
  1005. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  1006.  
  1007. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1008. $expectedDom->preserveWhiteSpace = false;
  1009. $expectedDom->loadXML($expectedXmlStr);
  1010.  
  1011. $docObject = new \DOMDocument("1.0", "UTF-8");
  1012. $docObject->formatOutput = true;
  1013. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1014.  
  1015. $this->object->setOptions($this->getOptions(187, 'release', 'complete_album'));
  1016. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1017. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  1018.  
  1019. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1020. }
  1021.  
  1022. /**
  1023. * test generateDealList for Amazon with deleted release
  1024. * - test dms supports download and streaming
  1025. */
  1026. public function testGenerateDealListAmazonDeletedRelease()
  1027. {
  1028. $this->sampleIsDeleted = true;
  1029. $this->sampleHasPricing = true;
  1030.  
  1031. $expectedXmlStr = file_get_contents('./fixtures/ddex34/DealListAmazonDeletedRelease.xml');
  1032. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  1033.  
  1034. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1035. $expectedDom->preserveWhiteSpace = false;
  1036. $expectedDom->loadXML($expectedXmlStr);
  1037.  
  1038. $docObject = new \DOMDocument("1.0", "UTF-8");
  1039. $docObject->formatOutput = true;
  1040. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1041.  
  1042. $this->object->setOptions($this->getOptions(187, 'release', 'metadata_update'));
  1043. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1044. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  1045.  
  1046. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1047. }
  1048.  
  1049. /**
  1050. * test generateDealList
  1051. * - test dms using DmsPolicy profile
  1052. */
  1053. public function testGenerateDealListOverrideTurkcellVideo()
  1054. {
  1055. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE_VIDEO;
  1056. $expectedXmlStr = '<testroot>'
  1057. . '<DealList>'
  1058. // Album Release (R0)
  1059. . '<ReleaseDeal>'
  1060. . '<DealReleaseReference>R0</DealReleaseReference>'
  1061. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  1062. . '<Usage><UseType>OnDemandStream</UseType></Usage>'
  1063. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  1064. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1065. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  1066. . '</ReleaseDeal>'
  1067. // Track #6 Release (R6) - all
  1068. . '<ReleaseDeal>'
  1069. . '<DealReleaseReference>R6</DealReleaseReference>'
  1070. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  1071. . '<Usage><UseType>OnDemandStream</UseType></Usage>'
  1072. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  1073. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1074. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  1075. . '</ReleaseDeal>'
  1076. . '</DealList></testroot>';
  1077. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  1078.  
  1079. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1080. $expectedDom->loadXML($expectedXmlStr);
  1081.  
  1082. $docObject = new \DOMDocument("1.0", "UTF-8");
  1083. $docObject->formatOutput = true;
  1084. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1085.  
  1086. $this->object->setOptions($this->getOptions(698, 'release', 'complete_album'));
  1087. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1088. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  1089.  
  1090. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1091. }
  1092.  
  1093. /**
  1094. * test generateDealList
  1095. * - test dms supports download and streaming with pricing
  1096. */
  1097. public function testGenerateDealListPricing()
  1098. {
  1099. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE;
  1100. $this->sampleHasPricing = true;
  1101. $expectedXmlStr = '<testroot>'
  1102. . '<DealList>'
  1103. // Album Release (R0)
  1104. . '<ReleaseDeal>'
  1105. . '<DealReleaseReference>R0</DealReleaseReference>'
  1106. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1107. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1108. . '<TerritoryCode>US</TerritoryCode>'
  1109. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">10</PriceType></PriceInformation>'
  1110. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1111. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1112. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1113. . '<TerritoryCode>CA</TerritoryCode>'
  1114. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">20</PriceType></PriceInformation>'
  1115. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1116. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1117. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1118. . '<TerritoryCode>GB</TerritoryCode>'
  1119. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">3</PriceType></PriceInformation>'
  1120. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1121. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  1122. . '<Usage><UseType>ConditionalDownload</UseType><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  1123. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  1124. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1125. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  1126. . '</ReleaseDeal>'
  1127. // Track #1 Release (R1) - all
  1128. . '<ReleaseDeal>'
  1129. . '<DealReleaseReference>R1</DealReleaseReference>'
  1130. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1131. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1132. . '<TerritoryCode>US</TerritoryCode>'
  1133. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">1</PriceType></PriceInformation>'
  1134. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1135. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1136. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1137. . '<TerritoryCode>CA</TerritoryCode>'
  1138. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">2</PriceType></PriceInformation>'
  1139. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1140. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1141. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1142. . '<TerritoryCode>GB</TerritoryCode>'
  1143. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">30</PriceType></PriceInformation>'
  1144. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1145. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  1146. . '<Usage><UseType>ConditionalDownload</UseType><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  1147. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  1148. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1149. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  1150. . '</ReleaseDeal>'
  1151. . '</DealList></testroot>';
  1152. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  1153.  
  1154. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1155. $expectedDom->loadXML($expectedXmlStr);
  1156.  
  1157. $docObject = new \DOMDocument("1.0", "UTF-8");
  1158. $docObject->formatOutput = true;
  1159. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1160.  
  1161. $this->object->setOptions($this->getOptions(100, 'release', 'complete_album'));
  1162. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1163. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  1164.  
  1165. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1166. }
  1167.  
  1168. /**
  1169. * test generateDealList
  1170. * - test dms supports download and streaming with pricing
  1171. */
  1172. public function testGenerateDealListServicePricing()
  1173. {
  1174. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE;
  1175. $this->sampleHasPricing = true;
  1176. $this->accessProperty($this->object, 'pricingDmsIds', array(100)); // set to use service
  1177. $expectedXmlStr = '<testroot>'
  1178. . '<DealList>'
  1179. // Album Release (R0)
  1180. . '<ReleaseDeal>'
  1181. . '<DealReleaseReference>R0</DealReleaseReference>'
  1182. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1183. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1184. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  1185. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">101</PriceType></PriceInformation>'
  1186. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1187. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1188. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1189. . '<TerritoryCode>GB</TerritoryCode>'
  1190. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">201</PriceType></PriceInformation>'
  1191. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1192. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  1193. . '<Usage><UseType>ConditionalDownload</UseType><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  1194. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  1195. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1196. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  1197. . '</ReleaseDeal>'
  1198. // Track #1 Release (R1) - all
  1199. . '<ReleaseDeal>'
  1200. . '<DealReleaseReference>R1</DealReleaseReference>'
  1201. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1202. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1203. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  1204. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">301</PriceType></PriceInformation>'
  1205. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1206. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1207. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1208. . '<TerritoryCode>GB</TerritoryCode>'
  1209. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">401</PriceType></PriceInformation>'
  1210. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1211. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  1212. . '<Usage><UseType>ConditionalDownload</UseType><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  1213. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  1214. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1215. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  1216. . '</ReleaseDeal>'
  1217. . '</DealList></testroot>';
  1218. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  1219.  
  1220. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1221. $expectedDom->loadXML($expectedXmlStr);
  1222.  
  1223. $docObject = new \DOMDocument("1.0", "UTF-8");
  1224. $docObject->formatOutput = true;
  1225. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1226.  
  1227. $this->object->setOptions($this->getOptions(100, 'release', 'complete_album'));
  1228. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1229. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  1230.  
  1231. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1232. }
  1233.  
  1234. /**
  1235. * test generateDealList
  1236. * - test dms supports download and streaming with interval pricing
  1237. */
  1238. public function testGenerateDealListIntervalPricing()
  1239. {
  1240. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE;
  1241. $this->sampleHasPricing = true;
  1242. $this->sampleHasIntervalPricing = true;
  1243. $this->accessProperty($this->object, 'pricingDmsIds', array(100)); // set to use service
  1244. $expectedXmlStr = '<testroot>'
  1245. . '<DealList>'
  1246. // Album Release (R0)
  1247. . '<ReleaseDeal>'
  1248. . '<DealReleaseReference>R0</DealReleaseReference>'
  1249. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1250. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1251. . '<TerritoryCode>US</TerritoryCode>'
  1252. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">RIP1</PriceType></PriceInformation>'
  1253. . '<ValidityPeriod><StartDate>2016-01-01</StartDate><EndDate>2017-04-01</EndDate></ValidityPeriod></DealTerms></Deal>'
  1254. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1255. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1256. . '<TerritoryCode>US</TerritoryCode>'
  1257. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">RIP2</PriceType></PriceInformation>'
  1258. . '<ValidityPeriod><StartDate>2017-04-01</StartDate><EndDate>2017-05-01</EndDate></ValidityPeriod></DealTerms></Deal>'
  1259. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1260. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1261. . '<TerritoryCode>US</TerritoryCode>'
  1262. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">RIP3</PriceType></PriceInformation>'
  1263. . '<ValidityPeriod><StartDate>2017-05-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1264. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1265. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1266. . '<TerritoryCode>CA</TerritoryCode>'
  1267. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">111</PriceType></PriceInformation>'
  1268. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1269. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1270. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1271. . '<TerritoryCode>GB</TerritoryCode>'
  1272. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">211</PriceType></PriceInformation>'
  1273. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1274. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  1275. . '<Usage><UseType>ConditionalDownload</UseType><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  1276. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  1277. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1278. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  1279. . '</ReleaseDeal>'
  1280. // Track #1 Release (R1) - all
  1281. . '<ReleaseDeal>'
  1282. . '<DealReleaseReference>R1</DealReleaseReference>'
  1283. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1284. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1285. . '<TerritoryCode>US</TerritoryCode>'
  1286. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">TIP1</PriceType></PriceInformation>'
  1287. . '<ValidityPeriod><StartDate>2016-01-01</StartDate><EndDate>2017-04-01</EndDate></ValidityPeriod></DealTerms></Deal>'
  1288. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1289. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1290. . '<TerritoryCode>US</TerritoryCode>'
  1291. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">TIP2</PriceType></PriceInformation>'
  1292. . '<ValidityPeriod><StartDate>2017-04-01</StartDate><EndDate>2017-05-01</EndDate></ValidityPeriod></DealTerms></Deal>'
  1293. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1294. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1295. . '<TerritoryCode>US</TerritoryCode>'
  1296. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">TIP3</PriceType></PriceInformation>'
  1297. . '<ValidityPeriod><StartDate>2017-05-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1298. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1299. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1300. . '<TerritoryCode>CA</TerritoryCode>'
  1301. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">311</PriceType></PriceInformation>'
  1302. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1303. . '<Deal><DealTerms><CommercialModelType>PayAsYouGoModel</CommercialModelType>'
  1304. . '<Usage><UseType>PermanentDownload</UseType></Usage>'
  1305. . '<TerritoryCode>GB</TerritoryCode>'
  1306. . '<PriceInformation><PriceType Namespace="DPID:PADPIDA2012041004F">411</PriceType></PriceInformation>'
  1307. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1308. . '<Deal><DealTerms><CommercialModelType>SubscriptionModel</CommercialModelType>'
  1309. . '<Usage><UseType>ConditionalDownload</UseType><UseType>NonInteractiveStream</UseType><UseType>OnDemandStream</UseType></Usage>'
  1310. . '<TerritoryCode>CA</TerritoryCode><TerritoryCode>GB</TerritoryCode><TerritoryCode>US</TerritoryCode>'
  1311. . '<ValidityPeriod><StartDate>2016-01-01</StartDate></ValidityPeriod></DealTerms></Deal>'
  1312. . '<EffectiveDate>{{effdate}}</EffectiveDate>'
  1313. . '</ReleaseDeal>'
  1314. . '</DealList></testroot>';
  1315. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  1316.  
  1317. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1318. $expectedDom->loadXML($expectedXmlStr);
  1319.  
  1320. $docObject = new \DOMDocument("1.0", "UTF-8");
  1321. $docObject->formatOutput = true;
  1322. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1323.  
  1324. $this->object->setOptions($this->getOptions(100, 'release', 'complete_album'));
  1325. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1326. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  1327.  
  1328. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1329. }
  1330.  
  1331. /**
  1332. * test testCreateMessageSenderGoogleMusic for Google Music
  1333. */
  1334. public function testCreateMessageSenderGoogleMusic()
  1335. {
  1336. $this->sampleIsRed = true;
  1337.  
  1338. $expectedXmlStr = file_get_contents('./fixtures/ddex34/GoogleMusicDeprecateTag.xml');
  1339. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1340. $expectedDom->loadXML($expectedXmlStr);
  1341.  
  1342. $docObject = new \DOMDocument("1.0", "UTF-8");
  1343. $docObject->formatOutput = true;
  1344. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1345.  
  1346. $this->object->setOptions($this->getOptions(496, 'release', 'complete_album'));
  1347. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1348. $this->invokeMethod($this->object, 'generateMessageHeaderParties', array(&$actualNode));
  1349.  
  1350. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1351. }
  1352.  
  1353. /**
  1354. * test generateVideoResource to display artist Youtube delivery settings
  1355. */
  1356. public function testGenerateVideoResourceToDisplayArtistYoutubeDeliverySetting()
  1357. {
  1358. $this->sampleIsSme = true;
  1359. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE_VIDEO;
  1360. $this->sampleAssetType = self::TYPE_ASSET_VIDEO;
  1361. $release = $this->getRelease()[0];
  1362. $track = $this->getTracks()[0];
  1363. $genre = $this->getGenres()[0];
  1364. $customId = $release->upc . '_' . $track->isrc . '_' . $track->id;
  1365. $performerArtists = array();
  1366. $featuredArtists = array();
  1367. foreach ($this->getArtists('Track') as $artist) {
  1368. if ($artist->role == 'performer') {
  1369. $performerArtists[] = $artist->name;
  1370. }
  1371. if ($artist->role == 'featuring') {
  1372. $featuredArtists[] = $artist->name;
  1373. }
  1374. }
  1375. $performers = !empty($performerArtists) ? implode(', ', $performerArtists) . ' - ' : '';
  1376. $featured = !empty($featuredArtists) ? ' (ft. ' . implode(', ', $featuredArtists) . ')' : '';
  1377. $titleText = $performers . $track->track_name . $featured;
  1378.  
  1379. $expectedXmlStr = file_get_contents($this->fixturePath . '/ddex34/generateVideoResourceArtistYTDeliverySetting.xml');
  1380. $expectedXmlStr = str_replace('{{trackisrc}}', $track->isrc, $expectedXmlStr);
  1381. $expectedXmlStr = str_replace('{{customid}}', $customId, $expectedXmlStr);
  1382. $expectedXmlStr = str_replace('{{channelname}}', $release->channel_name, $expectedXmlStr);
  1383. $expectedXmlStr = str_replace('{{trackname}}', $titleText, $expectedXmlStr);
  1384. $expectedXmlStr = str_replace('{{genre}}', $genre->genre, $expectedXmlStr);
  1385. $expectedXmlStr = str_replace('{{subgenre}}', $genre->subgenre, $expectedXmlStr);
  1386. $expectedXmlStr = str_replace('{{pline}}', $track->p_line, $expectedXmlStr);
  1387.  
  1388. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1389. $expectedDom->loadXML($expectedXmlStr);
  1390.  
  1391. $docObject = new \DOMDocument("1.0", "UTF-8");
  1392. $docObject->formatOutput = true;
  1393. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1394.  
  1395. $this->object->setOptions($this->getOptions(569, 'release', 'complete_album'));
  1396. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1397. $this->invokeMethod($this->object, 'generateVideoResource', array(&$actualNode, $track, 'A1'));
  1398.  
  1399. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1400. }
  1401.  
  1402. /**
  1403. * test generateReleaseDeal to display AdvertisementSupportedModel
  1404. */
  1405. public function testGenerateReleaseDealYoutubeArtTrack()
  1406. {
  1407. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE_VIDEO;
  1408. $this->sampleAssetType = self::TYPE_ASSET_VIDEO;
  1409.  
  1410. $expectedXmlStr = file_get_contents($this->fixturePath . '/ddex34/DealListYoutubeArtTrack.xml');
  1411. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  1412.  
  1413. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1414. $expectedDom->loadXML($expectedXmlStr);
  1415.  
  1416. $docObject = new \DOMDocument("1.0", "UTF-8");
  1417. $docObject->formatOutput = true;
  1418. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1419.  
  1420. $this->object->setOptions($this->getOptions(569, 'release', 'complete_album'));
  1421. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1422. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  1423.  
  1424. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1425. }
  1426.  
  1427. /**
  1428. * test generateTerritoryDetailsSet to display RightsController tag for music video release
  1429. */
  1430. public function testGenerateTerritoryDetailsSetToDisplayRightController()
  1431. {
  1432. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE_VIDEO;
  1433. $this->sampleAssetType = self::TYPE_ASSET_VIDEO;
  1434. $track = $this->getTracks()[0];
  1435. $performerArtists = array();
  1436. $featuredArtists = array();
  1437. foreach ($this->getArtists('Track') as $artist) {
  1438. if ($artist->role == 'performer') {
  1439. $performerArtists[] = $artist->name;
  1440. }
  1441. if ($artist->role == 'featuring') {
  1442. $featuredArtists[] = $artist->name;
  1443. }
  1444. }
  1445. $performers = !empty($performerArtists) ? implode(', ', $performerArtists) . ' - ' : '';
  1446. $featured = !empty($featuredArtists) ? ' (ft. ' . implode(', ', $featuredArtists) . ')' : '';
  1447. $titleText = $performers . $track->track_name . $featured;
  1448.  
  1449. $expectedXmlStr = file_get_contents($this->fixturePath . '/ddex34/VideoDetailsByTerritoryYouTubeArtTrack.xml');
  1450. $expectedXmlStr = str_replace('{{trackname}}', $titleText, $expectedXmlStr);
  1451. $expectedXmlStr = str_replace('{{pline}}', $track->p_line, $expectedXmlStr);
  1452.  
  1453. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1454. $expectedDom->loadXML($expectedXmlStr);
  1455.  
  1456. $docObject = new \DOMDocument("1.0", "UTF-8");
  1457. $docObject->formatOutput = true;
  1458. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1459.  
  1460. $this->object->setOptions($this->getOptions(569, 'release', 'complete_album'));
  1461. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1462. $this->invokeMethod($this->object, 'generateTerritoryDetailsSet', array(&$actualNode, $track));
  1463.  
  1464. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1465. }
  1466.  
  1467. /**
  1468. * Test generateAlbumRelease() to display title text for music video release.
  1469. */
  1470. public function testGenerateAlbumReleaseForYoutubeArtTrack()
  1471. {
  1472. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE_VIDEO;
  1473. $releaseObj = $this->getRelease()[0];
  1474. $performerArtists = array();
  1475. $featuredArtists = array();
  1476. foreach ($this->getArtists('Release') as $artist) {
  1477. if ($artist->role == 'performer') {
  1478. $performerArtists[] = $artist->name;
  1479. }
  1480. if ($artist->role == 'featuring') {
  1481. $featuredArtists[] = $artist->name;
  1482. }
  1483. }
  1484. $performers = !empty($performerArtists) ? implode(', ', $performerArtists) . ' - ' : '';
  1485. $featured = !empty($featuredArtists) ? ' (ft. ' . implode(', ', $featuredArtists) . ')' : '';
  1486. $titleText = $performers . $releaseObj->release_name . $featured;
  1487.  
  1488. $expectedXmlStr = file_get_contents($this->fixturePath . '/ddex34/AlbumReleaseYoutubeArtTrack.xml');
  1489. $expectedXmlStr = str_replace('{{titletext}}', $titleText, $expectedXmlStr);
  1490.  
  1491. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1492. $expectedDom->preserveWhiteSpace = false;
  1493. $expectedDom->loadXML($expectedXmlStr);
  1494.  
  1495. $docObject = new \DOMDocument("1.0", "UTF-8");
  1496. $docObject->formatOutput = true;
  1497. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1498.  
  1499. $this->object->setOptions($this->getOptions(569, 'release', 'complete_album'));
  1500. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1501. $this->invokeMethod($this->object, 'assignResourceReference', array('A1', 'music', '', 1, 6));
  1502. $this->invokeMethod($this->object, 'generateAlbumRelease', array(&$actualNode, $releaseObj));
  1503.  
  1504. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1505. }
  1506.  
  1507. /**
  1508. * Test generateTrackRelease() to display title text for music video release.
  1509. */
  1510. public function testGenerateTrackReleaseForYoutubeArtTrack()
  1511. {
  1512. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE_VIDEO;
  1513. $this->accessProperty($this->object, 'isReleasePlineInXmlEnabled', false);
  1514. $track = $this->getTracks()[0];
  1515. $performerArtists = array();
  1516. $featuredArtists = array();
  1517. foreach ($this->getArtists('Track') as $artist) {
  1518. if ($artist->role == 'performer') {
  1519. $performerArtists[] = $artist->name;
  1520. }
  1521. if ($artist->role == 'featuring') {
  1522. $featuredArtists[] = $artist->name;
  1523. }
  1524. }
  1525. $performers = !empty($performerArtists) ? implode(', ', $performerArtists) . ' - ' : '';
  1526. $featured = !empty($featuredArtists) ? ' (ft. ' . implode(', ', $featuredArtists) . ')' : '';
  1527. $titleText = $performers . $track->track_name . $featured;
  1528.  
  1529. $expectedXmlStr = file_get_contents($this->fixturePath . '/ddex34/TrackReleaseYoutubeArtTrack.xml');
  1530. $expectedXmlStr = str_replace('{{pLine}}', $track->p_line, $expectedXmlStr);
  1531. $expectedXmlStr = str_replace('{{titletext}}', $titleText, $expectedXmlStr);
  1532.  
  1533. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1534. $expectedDom->preserveWhiteSpace = false;
  1535. $expectedDom->loadXML($expectedXmlStr);
  1536.  
  1537. $docObject = new \DOMDocument("1.0", "UTF-8");
  1538. $docObject->formatOutput = true;
  1539. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1540.  
  1541. $this->object->setOptions($this->getOptions(569, 'release', 'complete_album'));
  1542. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1543. $this->invokeMethod($this->object, 'assignResourceReference', array('A1', 'music', '', 1, 6));
  1544. $this->invokeMethod($this->object, 'generateTrackRelease', array(&$actualNode, $track));
  1545.  
  1546. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1547. }
  1548.  
  1549. /**
  1550. * Test validateMusicVideoReleasesForVevoControlledYTSetting() to validate music video releases.
  1551. */
  1552. public function testValidateMusicVideoReleasesForVevoControlledYTSetting()
  1553. {
  1554. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE_VIDEO;
  1555. $this->sampleHasVevoControlledYTSetting = true;
  1556. $this->expectException('Web_Metadata_Exception');
  1557. $this->expectExceptionMessage('[UPC:123456789012] cannot be delivered directly to YouTube because the destination is a Vevo artist YouTube channel. This UPC must be delivered to Vevo to appear on YouTube.');
  1558. $this->expectExceptionCode(\Web_Metadata_Exception::MusicVideoReleaseVevoControlledException);
  1559.  
  1560. $this->object->setOptions($this->getOptions(569, 'release', 'complete_album'));
  1561. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1562. $this->assertTrue(true);
  1563. }
  1564.  
  1565. /**
  1566. * test generateMessageHeaderParties with RED release to deprecate <SentOnBehalfOf> tag for dms : 187
  1567. */
  1568. public function testCreateMessageSenderforDMS187()
  1569. {
  1570. $this->sampleIsRed = true;
  1571. $this->accessProperty($this->object, 'sentOfBehalfOfRed', array(4, 286));
  1572. $expectedXmlStr = file_get_contents($this->fixturePath . '/ddex34/Dms187DeprecateSentOnBehalftag.xml');
  1573.  
  1574. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1575. $expectedDom->preserveWhiteSpace = false;
  1576. $expectedDom->loadXML($expectedXmlStr);
  1577.  
  1578. $docObject = new \DOMDocument("1.0", "UTF-8");
  1579. $docObject->formatOutput = true;
  1580. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1581.  
  1582. $this->object->setOptions($this->getOptions(187, 'release', 'complete_album'));
  1583. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1584. $this->invokeMethod($this->object, 'generateMessageHeaderParties', array(&$actualNode));
  1585.  
  1586. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1587. }
  1588.  
  1589. /**
  1590. * test generateDealList to display product time of release.
  1591. */
  1592. public function testTimeOfDayGMT()
  1593. {
  1594. $this->sampleHasTimeOfDay = true;
  1595. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE;
  1596. $this->sampleFeature['timed_release_metadata_updates'] = 'enabled';
  1597. $expectedXmlStr = file_get_contents($this->fixturePath . '/ddex34/DealListWithTimeOfRelease.xml');
  1598. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  1599. $expectedXmlStr = str_replace('{{startdatetime}}', '2016-01-01T17:23:00Z', $expectedXmlStr);
  1600.  
  1601. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1602. $expectedDom->preserveWhiteSpace = false;
  1603. $expectedDom->loadXML($expectedXmlStr);
  1604.  
  1605. $docObject = new \DOMDocument("1.0", "UTF-8");
  1606. $docObject->formatOutput = true;
  1607. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1608.  
  1609. $this->object->timedReleaseMetaUpdate = true;
  1610. $this->object->newVideoDelivery = true;
  1611. $this->object->setOptions($this->getOptions(117, 'release', 'complete_album'));
  1612. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1613. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  1614.  
  1615. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1616. }
  1617.  
  1618. /**
  1619. * test generateDealList to display product time of release.
  1620. */
  1621. public function testTimeOfDayLocal()
  1622. {
  1623. $this->sampleHasTimeOfDay = true;
  1624. $this->sampleHasTimeOfDayTZ = 'local';
  1625. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE;
  1626. $this->sampleFeature['timed_release_metadata_updates'] = 'enabled';
  1627. $expectedXmlStr = file_get_contents($this->fixturePath . '/ddex34/DealListWithTimeOfRelease.xml');
  1628. $expectedXmlStr = str_replace('{{startdatetime}}', '2016-01-01T17:23:00', $expectedXmlStr);
  1629. $expectedXmlStr = str_replace('{{effdate}}', date('Y-m-d'), $expectedXmlStr);
  1630.  
  1631. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1632. $expectedDom->preserveWhiteSpace = false;
  1633. $expectedDom->loadXML($expectedXmlStr);
  1634.  
  1635. $docObject = new \DOMDocument("1.0", "UTF-8");
  1636. $docObject->formatOutput = true;
  1637. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1638.  
  1639. $this->object->timedReleaseMetaUpdate = true;
  1640. $this->object->newVideoDelivery = true;
  1641. $this->object->setOptions($this->getOptions(117, 'release', 'complete_album'));
  1642. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1643. $this->invokeMethod($this->object, 'generateDealList', array(&$actualNode));
  1644.  
  1645. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1646. }
  1647.  
  1648. /**
  1649. * test generateVideoResource to display channel name from product_video
  1650. */
  1651. public function testGenerateVideoResourceToDisplayChannelNameFromProductVideo()
  1652. {
  1653. $this->sampleIsSme = true;
  1654. $this->sampleFeature['new_video_product_delivery'] = 'enabled';
  1655. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE_VIDEO;
  1656. $this->sampleAssetType = self::TYPE_ASSET_VIDEO;
  1657. $release = $this->getRelease()[0];
  1658. $track = $this->getTracks()[0];
  1659. $genre = $this->getGenres()[0];
  1660. $customId = $release->upc . '_' . $track->isrc . '_' . $track->id;
  1661. $expectedXmlStr = file_get_contents($this->fixturePath . '/ddex34/generateVideoResourceArtistYTDeliverySetting.xml');
  1662. $expectedXmlStr = str_replace('{{trackisrc}}', $track->isrc, $expectedXmlStr);
  1663. $expectedXmlStr = str_replace('{{channelname}}', $release->channel_selection, $expectedXmlStr);
  1664. $expectedXmlStr = str_replace('{{trackname}}', 'Test Track Artist #1 - Test Track #6 (ft. Test Track Artist #2)', $expectedXmlStr);
  1665. $expectedXmlStr = str_replace('{{genre}}', $genre->genre, $expectedXmlStr);
  1666. $expectedXmlStr = str_replace('{{subgenre}}', $genre->subgenre, $expectedXmlStr);
  1667. $expectedXmlStr = str_replace('{{pline}}', $track->p_line, $expectedXmlStr);
  1668. $expectedXmlStr = str_replace('{{customid}}', $customId, $expectedXmlStr);
  1669. $expectedDom = new \DOMDocument("1.0", "UTF-8");
  1670. $expectedDom->loadXML($expectedXmlStr);
  1671.  
  1672. $docObject = new \DOMDocument("1.0", "UTF-8");
  1673. $docObject->formatOutput = true;
  1674. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1675. $this->object->setOptions($this->getOptions(569, 'release', 'complete_album'));
  1676. $this->invokeMethod($this->object, 'initializeReleaseData', array($this->getRelease()));
  1677. $this->invokeMethod($this->object, 'generateVideoResource', array(&$actualNode, $track, 'A1'));
  1678.  
  1679. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1680. }
  1681.  
  1682. /**
  1683. * test generateVideoResource which throws exception when channel does not exist.
  1684. */
  1685. public function testGenerateVideoResourceToHandleExceptionWhenChannelDoesNotExist()
  1686. {
  1687. $this->sampleIsSme = true;
  1688. $this->sampleFeature['new_video_product_delivery'] = 'enabled';
  1689. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE_VIDEO;
  1690. $this->sampleAssetType = self::TYPE_ASSET_VIDEO;
  1691. $track = $this->getTracks()[0];
  1692. $release = $this->getRelease();
  1693. $release[0]->channel_selection = null;
  1694.  
  1695. $this->expectException('Web_Metadata_Exception');
  1696. $this->expectExceptionMessage('YouTube Channel ID is missing.');
  1697.  
  1698. $docObject = new \DOMDocument("1.0", "UTF-8");
  1699. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1700. $this->object->timedReleaseMetaUpdate = true;
  1701. $this->object->newVideoDelivery = true;
  1702. $this->object->setOptions($this->getOptions(569, 'release', 'complete_album'));
  1703. $this->invokeMethod($this->object, 'initializeReleaseData', array($release));
  1704. $this->invokeMethod($this->object, 'generateVideoResource', array(&$actualNode, $track, 'A1'));
  1705. }
  1706.  
  1707. /**
  1708. * Test generateTrackRelease() to display marketing comments for music video release.
  1709. */
  1710. public function testGenerateTrackReleaseForMarketingComments()
  1711. {
  1712. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE_VIDEO;
  1713. $this->accessProperty($this->object, 'isReleasePlineInXmlEnabled', false);
  1714. $this->sampleFeature['music_video_description_youtube_dms'] = 'enabled';
  1715. $release = $this->getRelease();
  1716. $release[0]->marketing_comment = 'test marketing comment';
  1717. $track = $this->getTracks()[0];
  1718. $performerArtists = array();
  1719. $featuredArtists = array();
  1720. foreach ($this->getArtists('Track') as $artist) {
  1721. if ($artist->role == 'performer') {
  1722. $performerArtists[] = $artist->name;
  1723. }
  1724. if ($artist->role == 'featuring') {
  1725. $featuredArtists[] = $artist->name;
  1726. }
  1727. }
  1728. $performers = !empty($performerArtists) ? implode(', ', $performerArtists) . ' - ' : '';
  1729. $featured = !empty($featuredArtists) ? ' (ft. ' . implode(', ', $featuredArtists) . ')' : '';
  1730. $titleText = $performers . $track->track_name . $featured;
  1731. $expectedXmlStr = file_get_contents($this->fixturePath . '/ddex34/TrackReleaseYoutubeArtTrackMarketingComment.xml');
  1732. $expectedXmlStr = str_replace('{{pLine}}', $track->p_line, $expectedXmlStr);
  1733. $expectedXmlStr = str_replace('{{titletext}}', $titleText, $expectedXmlStr);
  1734. $expectedDom = new \DOMDocument('1.0', 'UTF-8');
  1735. $expectedDom->preserveWhiteSpace = false;
  1736. $expectedDom->loadXML($expectedXmlStr);
  1737. $docObject = new \DOMDocument('1.0', 'UTF-8');
  1738. $docObject->formatOutput = true;
  1739. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1740. $this->object->setOptions($this->getOptions(569, 'release', 'complete_album'));
  1741. $this->invokeMethod($this->object, 'initializeReleaseData', array($release));
  1742. $this->invokeMethod($this->object, 'assignResourceReference', array('A1', 'music', '', 1, 6));
  1743. $this->invokeMethod($this->object, 'generateTrackRelease', array(&$actualNode, $track));
  1744. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1745. }
  1746.  
  1747. public function testGenerateTrackReleaseForMarketingCommentsWithReleasePline()
  1748. {
  1749. $this->sampleReleaseType = self::TYPE_RELEASE_SINGLE_VIDEO;
  1750. $this->accessProperty($this->object, 'isReleasePlineInXmlEnabled', true);
  1751. $this->sampleFeature['music_video_description_youtube_dms'] = 'enabled';
  1752. $release = $this->getRelease();
  1753. $release[0]->marketing_comment = 'test marketing comment';
  1754. $track = $this->getTracks()[0];
  1755. $performerArtists = array();
  1756. $featuredArtists = array();
  1757. foreach ($this->getArtists('Track') as $artist) {
  1758. if ($artist->role == 'performer') {
  1759. $performerArtists[] = $artist->name;
  1760. }
  1761. if ($artist->role == 'featuring') {
  1762. $featuredArtists[] = $artist->name;
  1763. }
  1764. }
  1765. $performers = !empty($performerArtists) ? implode(', ', $performerArtists) . ' - ' : '';
  1766. $featured = !empty($featuredArtists) ? ' (ft. ' . implode(', ', $featuredArtists) . ')' : '';
  1767. $titleText = $performers . $track->track_name . $featured;
  1768. $expectedXmlStr = file_get_contents($this->fixturePath . '/ddex34/TrackReleaseYoutubeArtTrackMarketingComment.xml');
  1769. $expectedXmlStr = str_replace('{{pLine}}', $release[0]->p_line, $expectedXmlStr);
  1770. $expectedXmlStr = str_replace('{{titletext}}', $titleText, $expectedXmlStr);
  1771. $expectedDom = new \DOMDocument('1.0', 'UTF-8');
  1772. $expectedDom->preserveWhiteSpace = false;
  1773. $expectedDom->loadXML($expectedXmlStr);
  1774. $docObject = new \DOMDocument('1.0', 'UTF-8');
  1775. $docObject->formatOutput = true;
  1776. $actualNode = $docObject->appendChild(new \DOMElement('testroot'));
  1777. $this->object->setOptions($this->getOptions(569, 'release', 'complete_album'));
  1778. $this->invokeMethod($this->object, 'initializeReleaseData', array($release));
  1779. $this->invokeMethod($this->object, 'assignResourceReference', array('A1', 'music', '', 1, 6));
  1780. $this->invokeMethod($this->object, 'generateTrackRelease', array(&$actualNode, $track));
  1781. $this->assertEquals($expectedDom, $actualNode); //Parent itself gets updated with child nodes
  1782. }
  1783. }
Add Comment
Please, Sign In to add comment