def setUp(self): self.api = MediaMosaAPI('http://video.example.com') self.tt = TraceTracker() mock('self.api.session', tracker=self.tt) self.response = Mock('requests.Response') self.response.status_code = 200 self.api.session.get.mock_returns = self.response
def setUp(self): self.api = MediaMosaAPI('http://video.example.com') self.tt = TraceTracker() mock('self.api.session', tracker=self.tt) self.response = Mock('requests.Response') self.response.status_code = 200 self.api.session.get.mock_returns = self.response self.partial_dict = { u'is_original_file': u'FALSE', u'is_streamable': u'FALSE', u'is_downloadable': u'FALSE', u'app_id': u'2', u'transcode_inherits_acl': u'TRUE', u'tag': '', u'response_metafile_available': u'TRUE', u'mediafile_id_source': u'u2ilZNiHdl7iNUdexL7BcFMY', u'asset_id': u'g1QkoSmSeHdWfGkMKlOlldLn', u'mediafile_id': u'Md2RgaUEVFhfJMeUIbwPOMei', u'transcode_profile_id': u'17', u'filename': u'Sintel_Trailer1.1080p.DivX_Plus_HD.mp4', u'is_protected': u'FALSE', u'ega_stream_url': '', u'file_extension': u'mp4', 'metadata': { u'is_inserted_md': u'FALSE', u'fps': u'24', u'bpp': u'0.31', u'file_duration': u'00:00:52.20', u'colorspace': u'yuv420p', u'container_type': u'mov;mp4;m4a;3gp;3g2;mj2', u'height': u'478', u'channels': u'stereo', u'width': u'852', u'sample_rate': u'44100', u'filesize': u'20543936', u'audio_codec': u'aac', u'video_codec': u'h264', u'is_hinted': u'TRUE', u'bitrate': u'3012', u'mime_type': u'video/mp4' }, u'ega_download_url': '', u'ega_play_url': '', u'tool': u'ffmpeg', u'response_plain_available': u'TRUE', u'owner_id': u'krkeppen', u'response_object_available': u'TRUE', u'created': u'2012-07-05 11:38:14', u'changed': u'2012-07-05 11:38:14', u'uri': '', u'is_still': u'FALSE', u'command': u'audiocodec:libfaac;audiobitrate:128000;audiosamplingrate:44100;audiochannels:2;videocodec:libx264;videopreset_quality:slow;videopreset_profile:baseline;2_pass_h264_encoding:2;videobitrate:800000;qmax:17;size:852x480;maintain_aspect_ratio:yes', u'group_id': '' }
def setUp(self): self.api = MediaMosaAPI('http://video.example.com') self.tt = TraceTracker() mock('self.api.session', tracker=self.tt) self.response = Mock('requests.Response') self.response.status_code = 200 self.api.session.get.mock_returns = self.response self.item_dict = {u'is_original_file': u'FALSE', u'is_streamable': u'FALSE', u'is_downloadable': u'FALSE', u'app_id': u'2', u'transcode_inherits_acl': u'TRUE', u'tag': '', u'response_metafile_available': u'TRUE', u'mediafile_id_source': u'u2ilZNiHdl7iNUdexL7BcFMY', u'asset_id': u'g1QkoSmSeHdWfGkMKlOlldLn', u'mediafile_id': u'Md2RgaUEVFhfJMeUIbwPOMei', u'transcode_profile_id': u'17', u'filename': u'Sintel_Trailer1.1080p.DivX_Plus_HD.mp4', u'is_protected': u'FALSE', u'ega_stream_url': '', u'file_extension': u'mp4', 'metadata': { u'is_inserted_md': u'FALSE', u'fps': u'24', u'bpp': u'0.31', u'file_duration': u'00:00:52.20', u'colorspace': u'yuv420p', u'container_type': u'mov;mp4;m4a;3gp;3g2;mj2', u'height': u'478', u'channels': u'stereo', u'width': u'852', u'sample_rate': u'44100', u'filesize': u'20543936', u'audio_codec': u'aac', u'video_codec': u'h264', u'is_hinted': u'TRUE', u'bitrate': u'3012', u'mime_type': u'video/mp4'}, u'ega_download_url': '', u'ega_play_url': '', u'tool': u'ffmpeg', u'response_plain_available': u'TRUE', u'owner_id': u'krkeppen', u'response_object_available': u'TRUE', u'created': u'2012-07-05 11:38:14', u'changed': u'2012-07-05 11:38:14', u'uri': '', u'is_still': u'FALSE', u'command': u'audiocodec:libfaac;audiobitrate:128000;audiosamplingrate:44100;audiochannels:2;videocodec:libx264;videopreset_quality:slow;videopreset_profile:baseline;2_pass_h264_encoding:2;videobitrate:800000;qmax:17;size:852x480;maintain_aspect_ratio:yes', u'group_id': ''}
def setUp(self): self.url = 'http://video.example.com' self.username = '******' self.app_id = 5 self.secret = 'test_secret' # mock requests library self.tt = TraceTracker() self.api = MediaMosaAPI(self.url) mock('self.api.session', tracker=self.tt) self.response = Mock('requests.Response') self.response.status_code = 200 self.api.session.get.mock_returns = self.response self.api.session.post.mock_returns = self.response
class TestAssetResource(unittest.TestCase): def setUp(self): self.api = MediaMosaAPI('http://video.example.com') self.tt = TraceTracker() mock('self.api.session', tracker=self.tt) self.response = Mock('requests.Response') self.response.status_code = 200 self.api.session.get.mock_returns = self.response self.partial_dict = { u'is_original_file': u'FALSE', u'is_streamable': u'FALSE', u'is_downloadable': u'FALSE', u'app_id': u'2', u'transcode_inherits_acl': u'TRUE', u'tag': '', u'response_metafile_available': u'TRUE', u'mediafile_id_source': u'u2ilZNiHdl7iNUdexL7BcFMY', u'asset_id': u'g1QkoSmSeHdWfGkMKlOlldLn', u'mediafile_id': u'Md2RgaUEVFhfJMeUIbwPOMei', u'transcode_profile_id': u'17', u'filename': u'Sintel_Trailer1.1080p.DivX_Plus_HD.mp4', u'is_protected': u'FALSE', u'ega_stream_url': '', u'file_extension': u'mp4', 'metadata': { u'is_inserted_md': u'FALSE', u'fps': u'24', u'bpp': u'0.31', u'file_duration': u'00:00:52.20', u'colorspace': u'yuv420p', u'container_type': u'mov;mp4;m4a;3gp;3g2;mj2', u'height': u'478', u'channels': u'stereo', u'width': u'852', u'sample_rate': u'44100', u'filesize': u'20543936', u'audio_codec': u'aac', u'video_codec': u'h264', u'is_hinted': u'TRUE', u'bitrate': u'3012', u'mime_type': u'video/mp4' }, u'ega_download_url': '', u'ega_play_url': '', u'tool': u'ffmpeg', u'response_plain_available': u'TRUE', u'owner_id': u'krkeppen', u'response_object_available': u'TRUE', u'created': u'2012-07-05 11:38:14', u'changed': u'2012-07-05 11:38:14', u'uri': '', u'is_still': u'FALSE', u'command': u'audiocodec:libfaac;audiobitrate:128000;audiosamplingrate:44100;audiochannels:2;videocodec:libx264;videopreset_quality:slow;videopreset_profile:baseline;2_pass_h264_encoding:2;videobitrate:800000;qmax:17;size:852x480;maintain_aspect_ratio:yes', u'group_id': '' } def test_getting_full_asset(self): """Test fetching a full asset from the api. The asset is fully populated and can connect to the api.""" # setup self.response.content = open('tests/data/get_asset_id_response.xml')\ .read() # test asset = self.api.asset('g1QkoSmSeHdWfGkMKlOlldLn') # validate self.assertIsInstance(asset, Asset) self.assertEqual(asset._mmmeta.state, MediaMosaResource.STATE.FULL) self.assertTrue(asset.is_connected()) def test_getting_mediafiles_from_asset(self): """Test getting mediafiles from the asset. Each mediafile is partial and can connect to the api.""" # setup self.response.content = open('tests/data/get_asset_id_response.xml')\ .read() asset = Asset.fromdict(self.partial_dict, api=self.api, full=False) # test mediafiles = asset.list_mediafiles() self.assertEqual(len(mediafiles), 3) for mediafile in mediafiles: self.assertIsInstance(mediafile, Mediafile) self.assertEqual(mediafile._mmmeta.state, MediaMosaResource.STATE.PARTIAL) self.assertTrue(mediafile.is_connected())
class TestAssetListResource(unittest.TestCase): def setUp(self): self.api = MediaMosaAPI('http://video.example.com') self.tt = TraceTracker() mock('self.api.session', tracker=self.tt) self.response = Mock('requests.Response') self.response.status_code = 200 self.api.session.get.mock_returns = self.response def _get_asset_list(self, amount, total, offset): response = open('tests/data/get_asset_list_response.xml').read() asset_item = open('tests/data/asset_item.xml').read() asset_items = '' for i in xrange(offset, offset + amount): asset_items += asset_item.replace('{{item_id}}', str(i)) return response.replace('{{item_count}}', str(amount))\ .replace('{{item_count_total}}', str(total))\ .replace('{{item_offset}}', str(offset))\ .replace('{{asset_items}}', asset_items) def test_getting_paginated_assetlist(self): """Test fetching an asset list from the api.""" # setup amount = 10 total_items = 42 offset = 0 self.response.content = self._get_asset_list(amount, total_items, offset) # test asset_list = self.api.asset_list() # validate self.assertIsInstance(asset_list, AssetList) self.assertEqual(len(asset_list), total_items) self.assertEqual(asset_list._api, self.api) def test_fetch_page(self): # setup amount = 10 total_items = 42 offset = 10 # we have assets 10 to 19 self.response.content = self._get_asset_list(amount, total_items, offset) asset_list = self.api.asset_list() # test first ten self.response.content = self._get_asset_list(10, total_items, 0) asset_list._fetch_page(0, 10) self.assertEqual(len(asset_list), total_items) self.assertEqual(asset_list.page_size(), 10) self.assertEqual(asset_list.page_offset(), 0) # test last two self.response.content = self._get_asset_list(2, total_items, 40) asset_list._fetch_page(40, 10) self.assertEqual(len(asset_list), total_items) self.assertEqual(asset_list.page_size(), 2) self.assertEqual(asset_list.page_offset(), 40) def test_getting_assets(self): """Test whether AssetList will fetch a new page from api if a query is done outside the view """ # setup amount = 10 total_items = 42 offset = 10 # we have assets 10 to 19 self.response.content = self._get_asset_list(amount, total_items, offset) asset_list = self.api.asset_list() # test INSIDE current page asset = asset_list[10] self.assertIsInstance(asset, Asset) asset = asset_list[19] self.assertIsInstance(asset, Asset) # test BEFORE current page self.response.content = self._get_asset_list(10, total_items, 0) asset = asset_list[0] self.assertIsInstance(asset, Asset) asset = asset_list[9] self.assertIsInstance(asset, Asset) # test AFTER current page self.response.content = self._get_asset_list(10, total_items, 15) asset = asset_list[20] self.assertIsInstance(asset, Asset) # test Out of Bounds self.assertRaises(Exception, asset_list.__getitem__, -1) self.assertRaises(Exception, asset_list.__getitem__, 42) def test_iterating_over_paginated_assetlist(self): # setup total_items = 42 self.response.content = self._get_asset_list(total_items, total_items, 0) asset_list = self.api.asset_list() # test count = 0 for asset in asset_list: count += 1 # validate self.assertEqual(count, total_items)
from mediamosa.api import MediaMosaAPI from django.conf import settings api = MediaMosaAPI(settings.MEDIAMOSA_URL) if not (hasattr(settings, 'TESTING') and settings.TESTING): api.authenticate( settings.MEDIAMOSA_USERNAME, settings.MEDIAMOSA_PASSWORD)
def setUp(self): self.api = MediaMosaAPI('http://video.example.com') self.tt = TraceTracker() mock('self.api.session', tracker=self.tt) self.response = Mock('requests.Response') self.response.status_code = 200 self.api.session.get.mock_returns = self.response self.item_dict = { u'provider_id': '', u'is_unappropriate': u'FALSE', u'videotimestampmodified': u'2012-07-05 11:34:35', u'app_id': u'2', u'is_favorite': u'FALSE', u'has_streamable_mediafiles': u'TRUE', u'viewed': u'4', u'asset_id': u'g1QkoSmSeHdWfGkMKlOlldLn', u'ega_still_url': '', u'granted': u'TRUE', u'played': u'1', u'mediafile_duration': u'00:00:52.20', # u'videotimestamp': u'2012-07-05 11:34:01', # cleared it for partial u'vpx_still_url': u'http://filvideod.ugent.be/media/17/Z/Z14cWALWKmfTRjTUKhhQQLv2.jpeg', u'owner_id': u'krkeppen', u'is_empty_asset': u'FALSE', u'play_restriction_end': '', u'asset_property_is_hidden': u'FALSE', u'dublin_core': { u'publisher': u'Kristof Keppens', u'rights': u'Kristof Keppens', u'description': u'test', u'language': u'nl', u'creator': u'Kristof Keppens', u'format': u'streaming video', u'coverage_spatial': '', u'date': '', u'relation': '', u'source': u'ugent', u'contributor': u', ', u'title': u'test sintel 2', u'identifier': '', u'type': u'video', u'coverage_temporal': '', u'subject': u'test' }, u'reference_id': '', u'isprivate': u'TRUE', u'qualified_dublin_core': { u'isformatof': '', u'description_abstract': '', u'license': '', u'created': '', u'issued': '', u'rightsholder': '', u'hasformat': '', u'title_alternative': '', u'format_medium': '', u'format_extent': '', u'isreferencedby': '' }, u'mediafile_container_type': u'matroska;webm', u'is_unappropiate': u'FALSE', u'is_external': u'FALSE', u'is_protected': u'FALSE', u'play_restriction_start': '', u'group_id': '' }
class TestLoginFunctions(unittest.TestCase): def setUp(self): self.url = 'http://video.example.com' self.username = '******' self.app_id = 5 self.secret = 'test_secret' # mock requests library self.tt = TraceTracker() self.api = MediaMosaAPI(self.url) mock('self.api.session', tracker=self.tt) self.response = Mock('requests.Response') self.response.status_code = 200 self.api.session.get.mock_returns = self.response self.api.session.post.mock_returns = self.response def test_get_absolute_rui(self): uri = '/a/relative/url' self.assertEquals(self.api._get_absolute_uri(uri), self.url + uri) def test_internal_get_call(self): # setup uri = '/login' self.response.content = open( 'tests/data/login_challenge_response.xml').read() # test self.api._get(uri) # validate self.assertTrue( self.tt.check("Called " + "self.api.session.get('http://video.example.com/login', params={})")) def test_internal_post_call(self): # setup uri = '/login' self.response.content = open( 'tests/data/login_challenge_response.xml').read() # test self.api._post(uri) # validate self.assertTrue( self.tt.check("Called " + "self.api.session.post('http://video.example.com/login', data={})")) def test_login_get_challenge(self): # setup self.api.username = self.username self.response.content = open( 'tests/data/login_challenge_response.xml').read() # test challenge = self.api._login_challenge() # validate self.assertEquals(challenge, "92dc06bbb703f14354fdfbede9b62ff9") def test_login_get_failed_challenge(self): # setup self.api.username = self.username self.response.content = open( 'tests/data/login_challenge_invalid_account_response.xml').read() # validate self.assertRaises(ApiException, self.api._login_challenge) def test_login_send_challenge_response(self): # setup self.api.username = self.username self.api.secret = self.secret self.response.content = open( 'tests/data/login_challenge_response_response.xml').read() # test success = self.api._login_response("92dc06bbb703f14354fdfbede9b62ff9") # validate self.assertEquals(success, True) def test_login_send_challenge_failed_response(self): # setup self.api.username = self.username self.api.secret = self.secret self.response.content = open( 'tests/data/login_invalid_challenge_response_response.xml').read() # validate self.assertRaises(ApiException, self.api._login_response, ("92dc06bbb703f14354fdfbede9b62ff9")) def test_successful_authentication(self): # setup mock('self.api._login_challenge', returns='xxx', tracker=self.tt) mock('self.api._login_response', returns=True, tracker=self.tt) # test success = self.api.authenticate(self.username, self.secret) # validate self.assertEquals(success, True) def test_failed_authentication(self): # setup mock('self.api._login_challenge', returns='xxx', tracker=self.tt) mock('self.api._login_response', returns=False, tracker=self.tt) # test success = self.api.authenticate(self.username, self.secret) # validate self.assertEquals(success, False)
class TestAssetListResource(unittest.TestCase): def setUp(self): self.api = MediaMosaAPI('http://video.example.com') self.tt = TraceTracker() mock('self.api.session', tracker=self.tt) self.response = Mock('requests.Response') self.response.status_code = 200 self.api.session.get.mock_returns = self.response def _get_asset_list(self, amount, total, offset): response = open('tests/data/get_asset_list_response.xml').read() asset_item = open('tests/data/asset_item.xml').read() asset_items = '' for i in xrange(offset, offset + amount): asset_items += asset_item.replace('{{item_id}}', str(i)) return response.replace('{{item_count}}', str(amount))\ .replace('{{item_count_total}}', str(total))\ .replace('{{item_offset}}', str(offset))\ .replace('{{asset_items}}', asset_items) def test_getting_paginated_assetlist(self): """Test fetching an asset list from the api.""" # setup amount = 10 total_items = 42 offset = 0 self.response.content = self._get_asset_list( amount, total_items, offset) # test asset_list = self.api.asset_list() # validate self.assertIsInstance(asset_list, AssetList) self.assertEqual(len(asset_list), total_items) self.assertEqual(asset_list._api, self.api) def test_fetch_page(self): # setup amount = 10 total_items = 42 offset = 10 # we have assets 10 to 19 self.response.content = self._get_asset_list( amount, total_items, offset) asset_list = self.api.asset_list() # test first ten self.response.content = self._get_asset_list( 10, total_items, 0) asset_list._fetch_page(0, 10) self.assertEqual(len(asset_list), total_items) self.assertEqual(asset_list.page_size(), 10) self.assertEqual(asset_list.page_offset(), 0) # test last two self.response.content = self._get_asset_list( 2, total_items, 40) asset_list._fetch_page(40, 10) self.assertEqual(len(asset_list), total_items) self.assertEqual(asset_list.page_size(), 2) self.assertEqual(asset_list.page_offset(), 40) def test_getting_assets(self): """Test whether AssetList will fetch a new page from api if a query is done outside the view """ # setup amount = 10 total_items = 42 offset = 10 # we have assets 10 to 19 self.response.content = self._get_asset_list( amount, total_items, offset) asset_list = self.api.asset_list() # test INSIDE current page asset = asset_list[10] self.assertIsInstance(asset, Asset) asset = asset_list[19] self.assertIsInstance(asset, Asset) # test BEFORE current page self.response.content = self._get_asset_list( 10, total_items, 0) asset = asset_list[0] self.assertIsInstance(asset, Asset) asset = asset_list[9] self.assertIsInstance(asset, Asset) # test AFTER current page self.response.content = self._get_asset_list( 10, total_items, 15) asset = asset_list[20] self.assertIsInstance(asset, Asset) # test Out of Bounds self.assertRaises(Exception, asset_list.__getitem__, -1) self.assertRaises(Exception, asset_list.__getitem__, 42) def test_iterating_over_paginated_assetlist(self): # setup total_items = 42 self.response.content = self._get_asset_list( total_items, total_items, 0) asset_list = self.api.asset_list() # test count = 0 for asset in asset_list: count += 1 # validate self.assertEqual(count, total_items)
class TestAssetResource(unittest.TestCase): def setUp(self): self.api = MediaMosaAPI('http://video.example.com') self.tt = TraceTracker() mock('self.api.session', tracker=self.tt) self.response = Mock('requests.Response') self.response.status_code = 200 self.api.session.get.mock_returns = self.response self.partial_dict = {u'is_original_file': u'FALSE', u'is_streamable': u'FALSE', u'is_downloadable': u'FALSE', u'app_id': u'2', u'transcode_inherits_acl': u'TRUE', u'tag': '', u'response_metafile_available': u'TRUE', u'mediafile_id_source': u'u2ilZNiHdl7iNUdexL7BcFMY', u'asset_id': u'g1QkoSmSeHdWfGkMKlOlldLn', u'mediafile_id': u'Md2RgaUEVFhfJMeUIbwPOMei', u'transcode_profile_id': u'17', u'filename': u'Sintel_Trailer1.1080p.DivX_Plus_HD.mp4', u'is_protected': u'FALSE', u'ega_stream_url': '', u'file_extension': u'mp4', 'metadata': { u'is_inserted_md': u'FALSE', u'fps': u'24', u'bpp': u'0.31', u'file_duration': u'00:00:52.20', u'colorspace': u'yuv420p', u'container_type': u'mov;mp4;m4a;3gp;3g2;mj2', u'height': u'478', u'channels': u'stereo', u'width': u'852', u'sample_rate': u'44100', u'filesize': u'20543936', u'audio_codec': u'aac', u'video_codec': u'h264', u'is_hinted': u'TRUE', u'bitrate': u'3012', u'mime_type': u'video/mp4'}, u'ega_download_url': '', u'ega_play_url': '', u'tool': u'ffmpeg', u'response_plain_available': u'TRUE', u'owner_id': u'krkeppen', u'response_object_available': u'TRUE', u'created': u'2012-07-05 11:38:14', u'changed': u'2012-07-05 11:38:14', u'uri': '', u'is_still': u'FALSE', u'command': u'audiocodec:libfaac;audiobitrate:128000;audiosamplingrate:44100;audiochannels:2;videocodec:libx264;videopreset_quality:slow;videopreset_profile:baseline;2_pass_h264_encoding:2;videobitrate:800000;qmax:17;size:852x480;maintain_aspect_ratio:yes', u'group_id': ''} def test_getting_full_asset(self): """Test fetching a full asset from the api. The asset is fully populated and can connect to the api.""" # setup self.response.content = open('tests/data/get_asset_id_response.xml')\ .read() # test asset = self.api.asset('g1QkoSmSeHdWfGkMKlOlldLn') # validate self.assertIsInstance(asset, Asset) self.assertEqual(asset._mmmeta.state, MediaMosaResource.STATE.FULL) self.assertTrue(asset.is_connected()) def test_getting_mediafiles_from_asset(self): """Test getting mediafiles from the asset. Each mediafile is partial and can connect to the api.""" # setup self.response.content = open('tests/data/get_asset_id_response.xml')\ .read() asset = Asset.fromdict(self.partial_dict, api=self.api, full=False) # test mediafiles = asset.list_mediafiles() self.assertEqual(len(mediafiles), 3) for mediafile in mediafiles: self.assertIsInstance(mediafile, Mediafile) self.assertEqual(mediafile._mmmeta.state, MediaMosaResource.STATE.PARTIAL) self.assertTrue(mediafile.is_connected())