Exemple #1
0
class SearchTests(testtools.TestCase):
    @mock.patch('resources.lib.search.addon',
                fakes.FakeAddon(SEARCH_HISTORY='["foo", "bar", "FOOBAR"]'))
    def test_get_search_history(self):
        expected = ['foo', 'bar', 'FOOBAR']
        observed = search.get_search_history()
        self.assertEqual(expected, observed)

    @mock.patch('xbmcgui.Dialog.input')
    @mock.patch('resources.lib.search.add_to_search_history')
    @responses.activate
    def test_get_search_input(self, mock_add, mock_input):
        mock_input.return_value = 'foobar'
        mock_resources = mock.MagicMock()
        with mock.patch.dict('sys.modules', {'resources': mock_resources}):
            search.get_search_input()
            mock_resources.lib.index.make_search_list.assert_called_once_with(
                {'name': 'foobar'})
            mock_add.assert_called_once_with('foobar')

    @mock.patch('resources.lib.search.addon', new_callable=fakes.FakeAddon)
    def test_set_search_history(self, mock_addon):
        search.set_search_history(['foo', 'bar', 'FOOBAR'])
        self.assertEqual('["foo", "bar", "FOOBAR"]',
                         mock_addon.getSetting('SEARCH_HISTORY'))

    @mock.patch('resources.lib.search.get_search_history')
    def test_get_search_history_listing(self, mock_history):
        mock_history.return_value = ['foo', 'bar', 'FOOBAR']
        observed = search.get_search_history_listing()
        expected = ['New Search', 'foo', 'bar', 'FOOBAR']
        self.assertEqual(expected, observed)

    @mock.patch('resources.lib.search.addon', new_callable=fakes.FakeAddon)
    @mock.patch('resources.lib.search.get_search_history')
    def test_add_to_search_history(self, mock_history, mock_addon):
        mock_history.return_value = ['foo', 'bar', 'FOOBAR']
        search.add_to_search_history('Baz')
        observed = json.loads(mock_addon.getSetting('SEARCH_HISTORY'))
        expected = ['foo', 'bar', 'FOOBAR', 'Baz']
        self.assertEqual(expected, observed)

    @mock.patch('resources.lib.search.addon', new_callable=fakes.FakeAddon)
    @mock.patch('resources.lib.search.get_search_history')
    def test_remove_from_search_history(self, mock_history, mock_addon):
        mock_history.return_value = ['foo', 'bar', 'FOOBAR']
        search.remove_from_search_history('foo')
        observed = json.loads(mock_addon.getSetting('SEARCH_HISTORY'))
        expected = ['bar', 'FOOBAR']
        self.assertEqual(expected, observed)
Exemple #2
0
 def test_get_stream_kodi18(self, mock_addon, mock_token, mock_uuid,
                            mock_ver):
     mock_addon.return_value = fakes.FakeAddon(user_token='foo', DAI='true')
     mock_ver.return_value = 18
     mock_uuid.side_effect = fakes.UUID
     mock_token.return_value = 'foo'
     program = comm.classes.Program()
     program.id = '1234'
     url = re.compile('^https://www.sbs.com.au/api/v3/video_stream')
     responses.add(responses.GET,
                   url,
                   body=self.VIDEO_STREAM_JSON,
                   status=200)
     observed = comm.get_stream(program)
     self.assertEqual({'stream_url': 'https://foo.bar/content.m3u8'},
                      observed)
    def test_make_index_list_logged_in(self, mock_listitem, mock_version,
                                       mock_addon):
        mock_addon.return_value = fakes.FakeAddon(user_token='foo')
        mock_version.return_value = 18
        mock_plugin = fakes.FakePlugin()
        mock_listitem.side_effect = fakes.FakeListItem
        responses.add(responses.GET, config.CONFIG_URL,
                      body=self.VIDEO_CONFIG_JSON)
        with mock.patch.dict('sys.modules', xbmcplugin=mock_plugin):
            import resources.lib.index as index
            index.make_index_list()
            observed = []
            expected = ['Featured', 'Programs', 'Movies', 'Catchup',
                        'Search', 'Favourites', 'Settings']
            for res in mock_plugin.directory:
                observed.append(res.get('listitem').getLabel())

            self.assertEqual(expected, observed)
 def test_make_entries_list_context_items(
         self, mock_listitem, mock_version, mock_addon):
     mock_addon.return_value = fakes.FakeAddon(user_token='foo')
     mock_version.return_value = 18
     mock_plugin = fakes.FakePlugin()
     mock_listitem.side_effect = fakes.FakeListItem
     feed_url = 'http://foo.bar/api/v3/video_program&range=1-50'
     responses.add(responses.GET, feed_url,
                   body=self.VIDEO_PROGRAM_COLLECTION_JSON)
     with mock.patch.dict('sys.modules', xbmcplugin=mock_plugin):
         import resources.lib.index as index
         params = index.utils.get_url(sys.argv[2][1:])
         index.make_entries_list(params)
         observed = []
         for res in mock_plugin.directory:
             if res.get('listitem').context_items:
                 observed.extend(res.get('listitem').context_items)
         self.assertEqual(27, len(observed))
         seen = False
         for item in observed:
             if '3236' in item[1]:
                 seen = True
         self.assertIs(True, seen)
Exemple #5
0
class StreamAuthTests(testtools.TestCase):
    @classmethod
    def setUpClass(self):
        cwd = os.path.join(os.getcwd(), 'resources/tests')
        with open(os.path.join(cwd, 'fakes/json/AUTH.json'), 'rb') as f:
            self.AUTH_JSON = io.BytesIO(f.read()).read()
        with open(os.path.join(cwd, 'fakes/json/AUTH_FAILED.json'), 'rb') as f:
            self.AUTH_FAILED_JSON = io.BytesIO(f.read()).read()
        with open(os.path.join(cwd, 'fakes/json/BP_AUTH.json'), 'rb') as f:
            self.BP_AUTH_JSON = io.BytesIO(f.read()).read()
        with open(os.path.join(cwd, 'fakes/json/BP_AUTH_FAIL.json'),
                  'rb') as f:
            self.BP_AUTH_FAIL_JSON = io.BytesIO(f.read()).read()
        with open(os.path.join(cwd, 'fakes/json/EMBED_TOKEN.json'), 'rb') as f:
            self.EMBED_TOKEN_JSON = io.BytesIO(f.read()).read()
        with open(os.path.join(cwd, 'fakes/json/EMBED_TOKEN_FAIL.json'),
                  'rb') as f:
            self.EMBED_TOKEN_FAIL_JSON = io.BytesIO(f.read()).read()
        with open(os.path.join(cwd, 'fakes/json/SESSION.json'), 'rb') as f:
            self.SESSION_JSON = io.BytesIO(f.read()).read()

    @mock.patch('resources.lib.stream_auth.cache.delete')
    def test_clear_ticket(self, mock_delete):
        stream_auth.clear_token()
        mock_delete.assert_called_with('AFLTOKEN')

    @mock.patch('resources.lib.stream_auth.addon.getSetting')
    @mock.patch('resources.lib.stream_auth.cache.get')
    def test_get_user_ticket_cached(self, mock_ticket, mock_sub_type):
        mock_ticket.return_value = 'foobar123456'
        mock_sub_type.return_value = '0'
        observed = stream_auth.get_user_token()
        self.assertEqual('foobar123456', observed)

    @mock.patch(
        'resources.lib.stream_auth.telstra_auth.TelstraAuth.get_free_token')
    @mock.patch('resources.lib.stream_auth.addon.getSetting')
    @mock.patch('resources.lib.stream_auth.cache.get')
    def test_get_user_ticket_free(self, mock_ticket, mock_sub_type,
                                  mock_token):
        mock_ticket.return_value = ''
        mock_sub_type.return_value = '1'
        mock_token.return_value = 'foobar456789'

    @mock.patch(
        'resources.lib.stream_auth.telstra_auth.TelstraAuth.get_mobile_token')
    @mock.patch('resources.lib.stream_auth.addon.getSetting')
    @mock.patch('resources.lib.stream_auth.cache.get')
    @responses.activate
    def test_get_user_ticket_mobile(self, mock_ticket, mock_setting,
                                    mock_token):
        def get_setting(param):
            if param == 'LIVE_SUBSCRIPTION':
                return 'true'
            else:
                return 3

        responses.add(responses.POST,
                      config.TOKEN_URL,
                      body=json.dumps({'token': 'abcdef'}),
                      status=200)
        mock_ticket.return_value = ''
        mock_setting.side_effect = get_setting
        mock_token.return_value = 'foobar654321'
        observed = stream_auth.get_user_token()
        self.assertEqual('foobar654321', observed)

    @mock.patch('resources.lib.stream_auth.addon', fakes.FakeAddon(sub_type=0))
    @mock.patch('resources.lib.stream_auth.cache.get')
    @responses.activate
    def test_get_user_ticket_paid(self, mock_ticket):
        responses.add(responses.POST,
                      config.TOKEN_URL,
                      body=json.dumps({'token': 'abcdef'}),
                      status=200)
        responses.add(responses.POST,
                      config.LOGIN_URL,
                      body=self.BP_AUTH_JSON,
                      status=200)
        responses.add(responses.GET,
                      config.SESSION_URL.format('artifactstring%23'),
                      body=self.SESSION_JSON,
                      status=200)
        mock_ticket.return_value = ''
        observed = stream_auth.get_user_token()
        self.assertEqual(fakes.MIS_UUID, observed)

    @mock.patch('resources.lib.stream_auth.addon', fakes.FakeAddon(sub_type=0))
    @mock.patch('resources.lib.stream_auth.cache.get')
    @responses.activate
    def test_get_user_ticket_paid_fail(self, mock_ticket):
        responses.add(responses.POST,
                      config.TOKEN_URL,
                      body=json.dumps({'token': 'abcdef'}),
                      status=200)
        responses.add(responses.POST,
                      config.LOGIN_URL,
                      body=self.BP_AUTH_FAIL_JSON,
                      status=200)
        mock_ticket.return_value = ''
        self.assertRaises(stream_auth.AussieAddonsException,
                          stream_auth.get_user_token)

    @mock.patch('resources.lib.stream_auth.addon',
                fakes.FakeAddon(sub_type=0, live_sub=False))
    def test_get_user_ticket_nosub(self):
        with testtools.ExpectedException(stream_auth.AussieAddonsException,
                                         'AFL Live Pass sub*'):
            stream_auth.get_user_token()

    @mock.patch('resources.lib.stream_auth.addon', fakes.FakeAddon(sub_type=2))
    def test_get_user_ticket_iap(self):
        observed = stream_auth.get_user_token()
        self.assertEqual(fakes.MIS_UUID, observed)

    @mock.patch('resources.lib.stream_auth.addon',
                fakes.FakeAddon(sub_type=2, iap_token='gghhiijjkkllmm'))
    def test_get_user_ticket_iap_fail_bad_format(self):
        with testtools.ExpectedException(stream_auth.AussieAddonsException,
                                         'mis-uuid token must*'):
            stream_auth.get_user_token()

    @responses.activate
    def test_get_embed_token(self):
        responses.add(responses.GET,
                      config.EMBED_TOKEN_URL.format(fakes.MIS_UUID, 'foo'),
                      body=self.EMBED_TOKEN_JSON,
                      status=200)
        responses.add(responses.POST,
                      config.TOKEN_URL,
                      body=json.dumps({'token': 'abcdef'}),
                      status=200)
        observed = stream_auth.get_embed_token(fakes.MIS_UUID, 'foo')
        self.assertEqual(quote('http://foobar.com/video'), observed)

    @responses.activate
    @mock.patch('resources.lib.stream_auth.addon', fakes.FakeAddon(sub_type=1))
    @mock.patch('resources.lib.stream_auth.cache.delete')
    def test_get_embed_token_fail(self, mock_delete):
        responses.add(responses.GET,
                      config.EMBED_TOKEN_URL.format(fakes.MIS_UUID, 'foo'),
                      body=self.EMBED_TOKEN_FAIL_JSON,
                      status=400)
        responses.add(responses.POST,
                      config.TOKEN_URL,
                      body=json.dumps({'token': 'abcdef'}),
                      status=200)
        with testtools.ExpectedException(stream_auth.AussieAddonsException,
                                         'Stored login token*'):
            stream_auth.get_embed_token(fakes.MIS_UUID, 'foo')
        mock_delete.assert_called_with('AFLTOKEN')

    @responses.activate
    def test_get_secure_token(self):
        responses.add(responses.GET,
                      'https://foo.bar/',
                      body=self.AUTH_JSON,
                      status=200)
        observed = stream_auth.get_secure_token('https://foo.bar/',
                                                fakes.VIDEO_ID)
        self.assertEqual(fakes.M3U8_URL_OOYALA, observed)

    @responses.activate
    def test_get_secure_token_fail_keyerror(self):
        responses.add(responses.GET,
                      'https://foo.bar/',
                      body=self.AUTH_FAILED_JSON,
                      status=200)
        self.assertRaises(stream_auth.AussieAddonsException,
                          stream_auth.get_secure_token, 'https://foo.bar/',
                          fakes.VIDEO_ID)

    @responses.activate
    @mock.patch('resources.lib.stream_auth.cache.get')
    def test_get_m3u8_playlist(self, mock_ticket):
        mock_ticket.return_value = 'foobar123456'
        auth_url = config.AUTH_URL.format(
            config.PCODE, fakes.VIDEO_ID,
            quote_plus('http://foobar.com/video'))
        responses.add(responses.GET, auth_url, body=self.AUTH_JSON, status=200)
        responses.add(responses.GET,
                      config.EMBED_TOKEN_URL.format(fakes.MIS_UUID,
                                                    fakes.VIDEO_ID),
                      body=self.EMBED_TOKEN_JSON,
                      status=200)
        observed = stream_auth.get_m3u8_playlist(fakes.VIDEO_ID, '')
        self.assertEqual(fakes.M3U8_URL_OOYALA, observed)