Example #1
0
class UpdateTestCase(unittest.TestCase):

    def setUp(self):
        self.trakt = Trakt()
        self.trakt.users = {"adam": {}}

    def test_no_entries(self):
        mock_get = Mock(return_value=[])
        self.trakt.get = mock_get

        self.trakt.update_user("adam")

        mock_get.assert_any_call(API_ACTIVITY.format("adam", "episodes"))
        mock_get.assert_any_call(API_ACTIVITY.format("adam", "movies"))
        self.failIf("last_sync_episodes" in self.trakt.users["adam"])
        self.failIf("last_sync_movies" in self.trakt.users["adam"])

    def test_sets_last_sync_on_first_load(self):
        mock_get = Mock(side_effect=(lambda url: [ACTIVITY_PRESET_EPISODE_1] if "episodes" in url else []))
        self.trakt.get = mock_get

        self.trakt.update_user("adam")

        self.assertEquals(self.trakt.users["adam"]["last_sync_episodes"], Trakt.get_date(ACTIVITY_PRESET_EPISODE_1["watched_at"]))
        self.failIf("last_sync_movies" in self.trakt.users["adam"])

    def test_single_episode(self):
        mock_get = Mock(side_effect=(lambda url: [ACTIVITY_PRESET_EPISODE_1] if "episodes" in url else []))
        self.trakt.users["adam"]["last_sync_episodes"] = Trakt.get_date(ACTIVITY_PRESET_EPISODE_1["watched_at"]) - relativedelta.relativedelta(days=1)
        mock_echo = Mock()
        self.trakt.get = mock_get
        self.trakt.echo = mock_echo

        self.trakt.update_user("adam")

        self.failUnless(mock_echo.called)
        self.assertEqual(mock_echo.call_args[0], (Trakt.format_activity(ACTIVITY_PRESET_EPISODE_1, "adam"),))

    def test_no_new_episodes(self):
        mock_get = Mock(side_effect=(lambda url: [ACTIVITY_PRESET_EPISODE_1] if "episodes" in url else []))
        self.trakt.users["adam"]["last_sync_episodes"] = Trakt.get_date(ACTIVITY_PRESET_EPISODE_1["watched_at"]) + relativedelta.relativedelta(days=1)
        mock_echo = Mock()
        self.trakt.get = mock_get
        self.trakt.echo = mock_echo

        self.trakt.update_user("adam")

        self.failIf(mock_echo.called)

    def test_new_activity_both_types(self):
        mock_get = Mock(side_effect=(lambda url: [ACTIVITY_PRESET_EPISODE_1] if "episodes" in url else [ACTIVITY_PRESET_MOVIE_1]))
        self.trakt.users["adam"]["last_sync_episodes"] = Trakt.get_date("2013-03-31T09:28:53.000Z")
        self.trakt.users["adam"]["last_sync_movies"] = Trakt.get_date("2013-03-31T09:28:53.000Z")
        mock_echo = Mock()
        self.trakt.get = mock_get
        self.trakt.echo = mock_echo

        self.trakt.update_user("adam")

        self.assertEqual(mock_echo.call_count, 2)
        mock_echo.assert_any_call(Trakt.format_activity(ACTIVITY_PRESET_EPISODE_1, "adam"))
        mock_echo.assert_any_call(Trakt.format_activity(ACTIVITY_PRESET_MOVIE_1, "adam"))
        self.assertEquals(self.trakt.users["adam"]["last_sync_episodes"], Trakt.get_date(ACTIVITY_PRESET_EPISODE_1["watched_at"]))
        self.assertEquals(self.trakt.users["adam"]["last_sync_movies"], Trakt.get_date(ACTIVITY_PRESET_MOVIE_1["watched_at"]))