def test_merge_podcasts(self): podcast1 = Podcast.objects.get(pk=self.podcast1.pk) podcast2 = Podcast.objects.get(pk=self.podcast2.pk) podcast3 = Podcast.objects.get(pk=self.podcast3.pk) # assert that the podcasts are actually grouped self.assertEqual(podcast2.group, podcast3.group) action1 = EpisodeHistoryEntry.create_entry(self.user, self.episode1, EpisodeHistoryEntry.PLAY) action2 = EpisodeHistoryEntry.create_entry( self.user, self.episode2, EpisodeHistoryEntry.DOWNLOAD) # decide which episodes to merge groups = [(0, [self.episode1.id, self.episode2.id])] counter = Counter() episode2_id = self.episode2.id pm = PodcastMerger([podcast2, podcast1], counter, groups) pm.merge() history = EpisodeHistoryEntry.objects.filter(episode=self.episode1, user=self.user) self.assertIn(action1, history) self.assertIn(action2, history) episode1 = Episode.objects.get(pk=self.episode1.pk) # episode2 has been merged into episode1, so it must contain its # merged _id self.assertEqual([x.uuid for x in episode1.merged_uuids.all()], [episode2_id])
def test_merge_podcasts(self): action1 = EpisodeHistoryEntry.create_entry( self.user, self.episode1, EpisodeHistoryEntry.PLAY, ) action2 = EpisodeHistoryEntry.create_entry( self.user, self.episode2, EpisodeHistoryEntry.DOWNLOAD, ) # decide which episodes to merge groups = [(0, [self.episode1, self.episode2])] counter = Counter() pm = PodcastMerger([self.podcast1, self.podcast2], counter, groups) pm.merge() history = EpisodeHistoryEntry.objects.filter( episode=self.episode1, user=self.user, ) # both actions must be present for the merged episode self.assertIn(action1, history) self.assertIn(action2, history)
def test_merge_podcasts(self): subscribe(self.podcast2, self.user, self.device) # merge podcast2 into podcast1 pm = PodcastMerger([self.podcast1, self.podcast2], Counter(), []) pm.merge() # get podcast for URL of podcast2 and unsubscribe from it p = Podcast.objects.get(urls__url=self.P2_URL) unsubscribe(p, self.user, self.device) subscriptions = Podcast.objects.filter(subscription__user=self.user) self.assertEqual(0, len(subscriptions))
def merge_podcasts(podcast_ids, num_groups): """ Task to merge some podcasts""" logger.info('merging podcast ids %s', podcast_ids) podcasts = list(Podcast.objects.filter(id__in=podcast_ids)) logger.info('merging podcasts %s', podcasts) actions = Counter() pm = PodcastMerger(podcasts, actions, num_groups) podcast = pm.merge() logger.info('merging result: %s', actions) return actions, podcast
def test_merge(self): p1 = Podcast.objects.get_or_create_for_url( "http://example.com/podcast1.rss" ).object p2 = Podcast.objects.get_or_create_for_url( "http://example.com/podcast2.rss" ).object e1 = Episode.objects.get_or_create_for_url( p1, "http://example.com/podcast1/e1.mp3" ).object e1.title = "Episode 1" e1.save() e2 = Episode.objects.get_or_create_for_url( p2, "http://example.com/podcast1/e2.mp3" ).object e2.title = "Episode 2" e2.save() e3 = Episode.objects.get_or_create_for_url( p2, "http://example.com/podcast2/e2.mp3" ).object e3.title = "Episode 3" e3.save() e4 = Episode.objects.get_or_create_for_url( p2, "http://example.com/podcast2/e3.mp3" ).object e4.title = "Episode 4" e4.save() User = get_user_model() user = User() user.username = "******" user.email = "*****@*****.**" user.set_password("secret") user.save() device1 = Client.objects.create(user=user, uid="dev1", id=uuid.uuid1()) device2 = Client.objects.create(user=user, uid="dev2", id=uuid.uuid1()) subscribe(p1.pk, user.pk, device1.uid) unsubscribe(p1.pk, user.pk, device1.uid) subscribe(p1.pk, user.pk, device1.uid) subscribe(p2.pk, user.pk, device2.uid) action1 = EpisodeHistoryEntry.create_entry(user, e1, EpisodeHistoryEntry.PLAY) action3 = EpisodeHistoryEntry.create_entry(user, e3, EpisodeHistoryEntry.PLAY) # we need that for later e3_id = e3.pk actions = Counter() # decide which episodes to merge groups = [(0, [e1.id]), (1, [e2.id, e3.id]), (2, [e4.id])] # carry out the merge pm = PodcastMerger([p1, p2], actions, groups) pm.merge() e1 = Episode.objects.get(pk=e1.pk) history1 = EpisodeHistoryEntry.objects.filter(episode=e1, user=user) self.assertEqual(len(history1), 1) # check if merged episode's id can still be accessed e3 = Episode.objects.filter(podcast=p1).get_by_any_id(e3_id) history3 = EpisodeHistoryEntry.objects.filter(episode=e3, user=user) self.assertEqual(len(history3), 1) p1 = Podcast.objects.get(pk=p1.get_id()) subscribed_clients = Client.objects.filter(subscription__podcast=p1) self.assertEqual(len(subscribed_clients), 2) episodes = p1.episode_set.all() self.assertEqual(len(episodes), 3)
def test_merge_podcasts(self): # decide which episodes to merge groups = [(0, [self.episode1.id, self.episode2.id])] counter = Counter() pm = PodcastMerger([self.podcast1, self.podcast2], counter, groups) pm.merge()