PageRenderTime 46ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 1ms

/eggs/Naaya/naaya/content/mediafile/tests/testFunctional.py

https://github.com/eaudeweb/Naaya
Python | 190 lines | 160 code | 23 blank | 7 comment | 2 complexity | ab4210de66c092766b2b87751e1e6962 MD5 | raw file
Possible License(s): Apache-2.0, GPL-2.0
  1. import re
  2. from unittest import TestSuite, makeSuite
  3. from copy import deepcopy
  4. from StringIO import StringIO
  5. from BeautifulSoup import BeautifulSoup
  6. from mock import patch
  7. from Products.Naaya.tests.NaayaFunctionalTestCase import NaayaFunctionalTestCase
  8. class NyMediaFileFunctionalTestCase(NaayaFunctionalTestCase):
  9. """ TestCase for NaayaContent object """
  10. def afterSetUp(self):
  11. self.portal.manage_install_pluggableitem('Naaya Media File')
  12. from Products.Naaya.NyFolder import addNyFolder
  13. from naaya.content.mediafile.mediafile_item import addNyMediaFile
  14. addNyFolder(self.portal, 'myfolder', contributor='contributor', submitted=1)
  15. addNyMediaFile(self.portal.myfolder, id='mymediafile', title='My media file',
  16. submitted=1, contributor='contributor', _skip_videofile_check=True)
  17. import transaction; transaction.commit()
  18. def beforeTearDown(self):
  19. self.portal.manage_delObjects(['myfolder'])
  20. self.portal.manage_uninstall_pluggableitem('Naaya Media File')
  21. import transaction; transaction.commit()
  22. @patch('naaya.content.mediafile.converters.MediaConverter.can_convert')
  23. def test_add(self, mock_can_convert):
  24. mock_can_convert.return_value = False
  25. self.browser_do_login('contributor', 'contributor')
  26. self.browser.go('http://localhost/portal/myfolder/mediafile_add_html')
  27. self.failUnless('<h1>Submit Media File</h1>' in self.browser.get_html())
  28. form = self.browser.get_form('frmAdd')
  29. expected_controls = set([
  30. 'lang', 'title:utf8:ustring', 'description:utf8:ustring', 'coverage:utf8:ustring',
  31. 'keywords:utf8:ustring', 'releasedate', 'discussion:boolean', 'file',
  32. ])
  33. found_controls = set(c.name for c in form.controls)
  34. self.failUnless(expected_controls.issubset(found_controls),
  35. 'Missing form controls: %s' % repr(expected_controls - found_controls))
  36. self.browser.clicked(form, self.browser.get_form_field(form, 'title'))
  37. form['title:utf8:ustring'] = 'test_create_mediafile'
  38. form['description:utf8:ustring'] = 'test_mediafile_description'
  39. form['coverage:utf8:ustring'] = 'test_mediafile_coverage'
  40. form['keywords:utf8:ustring'] = 'keyw1, keyw2'
  41. form.find_control('file').add_file(StringIO('the_MP4_data'),
  42. filename='testvid.mp4', content_type='video/mp4')
  43. self.browser.submit()
  44. html = self.browser.get_html()
  45. self.failUnless('The administrator will analyze your request and you will be notified about the result shortly.' in html)
  46. self.portal.myfolder.test_create_mediafile.approveThis()
  47. self.browser.go('http://localhost/portal/myfolder/test_create_mediafile')
  48. html = self.browser.get_html()
  49. self.failUnless(re.search(r'<h1>.*test_create_mediafile.*</h1>', html, re.DOTALL))
  50. self.failUnless('test_mediafile_description' in html)
  51. self.failUnless('test_mediafile_coverage' in html)
  52. self.failUnless('keyw1, keyw2' in html)
  53. media_id = self.portal.myfolder.test_create_mediafile.getSingleMediaId()
  54. self.failUnlessEqual(media_id, 'testvid.mp4')
  55. self.browser.go('http://localhost/portal/myfolder/test_create_mediafile/%s' % media_id)
  56. html = self.browser.get_html()
  57. headers = self.browser._browser._response._headers
  58. self.failUnlessEqual(headers.get('content-type', None), 'video/mp4')
  59. # apparently the test publisher doesn't serve our mp4 file correctly.
  60. #self.failUnlessEqual(html, 'the_MP4_data')
  61. self.browser_do_logout()
  62. def test_add_error(self):
  63. self.browser_do_login('contributor', 'contributor')
  64. self.browser.go('http://localhost/portal/myfolder/mediafile_add_html')
  65. form = self.browser.get_form('frmAdd')
  66. self.browser.clicked(form, self.browser.get_form_field(form, 'title'))
  67. # enter no values in the fields
  68. self.browser.submit()
  69. html = self.browser.get_html()
  70. self.failUnless('The form contains errors' in html)
  71. self.failUnless('Value required for "Title"' in html)
  72. self.failUnless('No file was uploaded' in html)
  73. @patch('naaya.content.mediafile.converters.MediaConverter.can_convert')
  74. def test_edit(self, mock_can_convert):
  75. mock_can_convert.return_value = False
  76. self.browser_do_login('admin', '')
  77. self.browser.go('http://localhost/portal/myfolder/mymediafile/edit_html')
  78. form = self.browser.get_form('frmEdit')
  79. self.failUnlessEqual(form['title:utf8:ustring'], 'My media file')
  80. form['title:utf8:ustring'] = 'new_mediafile_title'
  81. form.find_control('file').add_file(StringIO('the_MP4_data_B'),
  82. filename='testvid_B.mp4', content_type='video/mp4')
  83. self.browser.clicked(form, self.browser.get_form_field(form, 'title:utf8:ustring'))
  84. self.browser.submit()
  85. html = self.browser.get_html()
  86. self.failUnless('<h1>Edit Media File</h1>' in html)
  87. self.failUnlessEqual(self.portal.myfolder.mymediafile.title, 'new_mediafile_title')
  88. self.portal.myfolder.mymediafile.approveThis()
  89. media_id = self.portal.myfolder.mymediafile.getSingleMediaId()
  90. self.failUnlessEqual(media_id, 'testvid_B.mp4')
  91. self.browser.go('http://localhost/portal/myfolder/mymediafile/%s' % media_id)
  92. html = self.browser.get_html()
  93. headers = self.browser._browser._response._headers
  94. self.failUnlessEqual(headers.get('content-type', None), 'video/mp4')
  95. # apparently the test publisher doesn't serve our mp4 file correctly.
  96. #self.failUnlessEqual(html, 'the_MP4_data_B')
  97. self.browser.go('http://localhost/portal/myfolder/mymediafile/edit_html?lang=fr')
  98. form = self.browser.get_form('frmEdit')
  99. form['title:utf8:ustring'] = 'french_title'
  100. form.find_control('file').add_file(StringIO('the_MP4_data_C'),
  101. filename='testvid_C.mp4', content_type='video/mp4')
  102. self.browser.clicked(form, self.browser.get_form_field(form, 'title:utf8:ustring'))
  103. self.browser.submit()
  104. self.failUnless('Saved changes' in self.browser.get_html())
  105. media_id = self.portal.myfolder.mymediafile.getSingleMediaId()
  106. self.failUnlessEqual(media_id, 'testvid_B.mp4') # the file is not renamed - is this correct?
  107. self.browser.go('http://localhost/portal/myfolder/mymediafile/%s' % media_id)
  108. html = self.browser.get_html()
  109. headers = self.browser._browser._response._headers
  110. self.failUnlessEqual(headers.get('content-type', None), 'video/mp4')
  111. # apparently the test publisher doesn't serve our mp4 file correctly.
  112. #self.failUnlessEqual(html, 'the_MP4_data_C')
  113. self.failUnlessEqual(self.portal.myfolder.mymediafile.title, 'new_mediafile_title')
  114. self.failUnlessEqual(self.portal.myfolder.mymediafile.getLocalProperty('title', 'fr'), 'french_title')
  115. self.browser_do_logout()
  116. def test_edit_error(self):
  117. self.browser_do_login('admin', '')
  118. self.browser.go('http://localhost/portal/myfolder/mymediafile/edit_html')
  119. form = self.browser.get_form('frmEdit')
  120. self.browser.clicked(form, self.browser.get_form_field(form, 'title:utf8:ustring'))
  121. form['title:utf8:ustring'] = ''
  122. self.browser.submit()
  123. html = self.browser.get_html()
  124. self.failUnless('The form contains errors' in html)
  125. self.failUnless('Value required for "Title"' in html)
  126. self.browser_do_logout()
  127. def test_manage(self):
  128. self.browser_do_login('admin', '')
  129. self.browser.go('http://localhost/portal/myfolder/mymediafile/manage_edit_html')
  130. form = self.browser.get_form('frmEdit')
  131. # TODO: title control should be 'title:utf8:ustring'
  132. self.failUnlessEqual(form['title:utf8:ustring'], 'My media file')
  133. form['title:utf8:ustring'] = 'new_mediafile_title'
  134. self.browser.clicked(form, self.browser.get_form_field(form, 'title'))
  135. self.browser.submit()
  136. self.failUnlessEqual(self.portal.myfolder.mymediafile.title, 'new_mediafile_title')
  137. self.browser_do_logout()
  138. def test_view_in_folder(self):
  139. self.browser_do_login('admin', '')
  140. self.browser.go('http://localhost/portal/myfolder')
  141. html = self.browser.get_html()
  142. soup = BeautifulSoup(html)
  143. tables = soup.findAll('table', id='folderfile_list')
  144. self.assertTrue(len(tables) == 1)
  145. links_to_mediafile = tables[0].findAll('a', attrs={'href': 'http://localhost/portal/myfolder/mymediafile'})
  146. self.assertTrue(len(links_to_mediafile) == 1)
  147. self.assertTrue(links_to_mediafile[0].string == 'My media file')
  148. self.browser_do_logout()