class HDSerialsServiceTest(unittest.TestCase):
    def setUp(self):
        self.service = HDSerialsService()

    def test_get_get_categories(self):
        menu_items = self.service.get_categories()

        for item in menu_items:
            self.assertTrue(len(item['path']) > 0)
            self.assertTrue(len(item['title']) > 0)

    def test_get_new_series(self):
        items = self.service.get_new_series()

        for item in items:
            self.assertTrue(len(item['path']) > 0)
            self.assertTrue(len(item['title']) > 0)

    def test_get_popular(self):
        response = self.service.get_popular()

        for item in response['items']:
            self.assertTrue(len(item['path']) > 0)
            self.assertTrue(len(item['title']) > 0)
            self.assertTrue(len(item['thumb']) > 0)

        print(json.dumps(response, indent=4))

    def test_get_subcategories(self):
        items = self.service.get_subcategories('/Filmy.html')

        print(json.dumps(items, indent=4))

        for item in items['data']:
            self.assertTrue(len(item['path']) > 0)
            self.assertTrue(len(item['title']) > 0)

        print(json.dumps(items, indent=4))

    def test_get_category_items(self):
        items = self.service.get_category_items('/Filmy.html')

        for item in items['items']:
            self.assertTrue(len(item['path']) > 0)
            self.assertTrue(len(item['title']) > 0)
            self.assertTrue(len(item['thumb']) > 0)

        print(json.dumps(items, indent=4))

    def test_pagination_in_category_items(self):
        result = self.service.get_category_items('/Filmy.html', page=1)

        #print(json.dumps(result, indent=4))

        pagination = result['pagination']

        self.assertEqual(pagination['has_next'], True)
        self.assertEqual(pagination['has_previous'], False)
        self.assertEqual(pagination['page'], 1)

        result = self.service.get_category_items('/Filmy.html', page=2)

        # print(json.dumps(result, indent=4))

        pagination = result['pagination']

        self.assertEqual(pagination['has_next'], True)
        self.assertEqual(pagination['has_previous'], True)
        self.assertEqual(pagination['page'], 2)

    def test_search(self):
        query = 'castle'

        result = self.service.search(query)

        print(json.dumps(result, indent=4))

    def test_pagination_in_popular(self):
        result = self.service.get_popular(page=1)

        # print(json.dumps(result, indent=4))

        pagination = result['pagination']

        self.assertEqual(pagination['has_next'], True)
        self.assertEqual(pagination['has_previous'], False)
        self.assertEqual(pagination['page'], 1)

        result = self.service.get_popular(page=2)

        # print(json.dumps(result, indent=4))

        pagination = result['pagination']

        self.assertEqual(pagination['has_next'], True)
        self.assertEqual(pagination['has_previous'], True)
        self.assertEqual(pagination['page'], 2)

    def test_pagination_in_subcategories(self):
        path = '/Serialy.html'

        result = self.service.get_subcategories(path=path, page=1)

        #print(json.dumps(result, indent=4))

        pagination = result['pagination']

        self.assertEqual(pagination['has_next'], True)
        self.assertEqual(pagination['has_previous'], False)
        self.assertEqual(pagination['page'], 1)

        result = self.service.get_subcategories(path=path, page=2)

        print(json.dumps(result, indent=4))

        pagination = result['pagination']

        self.assertEqual(pagination['has_next'], True)
        self.assertEqual(pagination['has_previous'], True)
        self.assertEqual(pagination['page'], 2)

    def test_get_media_data(self):
        new_series = self.service.get_new_series()

        path = new_series[0]['path']

        document = self.service.fetch_document(path)

        data = self.service.get_media_data(document)

        print(json.dumps(data, indent=4))

        for key, value in data.iteritems():
            self.assertTrue(data['rating'] > 0)
            self.assertTrue(data['thumb'] > 0)
            self.assertTrue(data['title'] > 0)

    def test_retrieve_urls(self):
        new_series = self.service.get_new_series()

        path = new_series[0]['path']

        urls = self.service.retrieve_urls(path)

        print(json.dumps(urls, indent=4))

    def test_retrieve_episode_urls(self):
        new_series = self.service.get_new_series()

        path = new_series[0]['path']

        urls = self.service.retrieve_urls(path, season=1, episode=2)

        print(json.dumps(urls, indent=4))

    def test_get_play_list(self):
        new_series = self.service.get_new_series()

        path = new_series[0]['path']

        urls = self.service.retrieve_urls(path)

        play_list = self.service.get_play_list(urls[0]['url'])

        print(play_list)

    def test_get_episode_info(self):
        new_series = self.service.get_new_series()

        text = new_series[0]['text']

        print text

        result = self.service.get_episode_info(text)

        print(json.dumps(result, indent=4))

    def test_is_serial(self):
        new_series = self.service.get_new_series()

        path = new_series[0]['path']

        result = self.service.is_serial(path)

        print(json.dumps(result, indent=4))

    def test_get_movie_documents(self):
        path = 'http://www.hdserials.tv/Serialy/Bulvarnye-uzhasy-/-Penny-Dreadful/Bulvarnye-uzhasy-/-Strashnye-skazki-/-Penny-Dreadful.html'

        result = self.service.get_movie_documents(path)

        print(result)

    def test_convert_duration(self):
        text = u' ~  22 мин'

        result = self.service.convert_duration(text)

        print result

    def test_json(self):
        l = '''
{
    partner: null,
    d_id: 21609,
    video_token: "b69eb1607ccbc9c0",
    content_type: "serial",
    access_key: "0fb74eb4b2c16d45fe",
    cd: 0
  }
        '''

        print(json.loads(self.service.replace_keys(l, ['partner', 'd_id', 'video_token', 'content_type', 'access_key', 'cd'])))
 def setUp(self):
     self.service = HDSerialsService()