def test_cannot_delete_someone_elses_track(self): other_user = User(email="*****@*****.**") other_user.roles.append(auth.roles.DJ) other_user.put() time.sleep(0.4) other_track = PlaylistTrack( playlist=self.playlist, selector=other_user, freeform_artist_name="Peaches", freeform_track_title="Rock Show",) other_track.put() with fudge.patched_context(playlists.tasks, "_fetch_url", stub_fetch_url): resp = self.client.get(reverse('playlists_delete_event', args=[other_track.key()])) self.assertRedirects(resp, reverse('playlists_landing_page')) # simulate the redirect: resp = self.client.get(reverse('playlists_landing_page')) # should be no change: context = resp.context[0] tracks = [t.artist_name for t in context['playlist_events']] self.assertEquals(tracks, ["Peaches", "Steely Dan"])
def test_cannot_delete_someone_elses_track(self): other_user = User(email="*****@*****.**") other_user.roles.append(auth.roles.DJ) other_user.put() time.sleep(0.4) other_track = PlaylistTrack( playlist=self.playlist, selector=other_user, freeform_artist_name="Peaches", freeform_track_title="Rock Show",) other_track.put() with fudge.patched_context(playlists.tasks, "_fetch_url", stub_fetch_url): resp = self.client.get(reverse('playlists_delete_event', args=[other_track.key()])) self.assertRedirects(resp, reverse('playlists_landing_page')) # simulate the redirect: resp = self.client.get(reverse('playlists_landing_page')) # should be no change: context = resp.context[0] tracks = [t.artist_name for t in context['playlist_events']] self.assertEquals(tracks, ["Peaches", "Steely Dan"])
def test_different_tracks(self): self.count() new_trk = PlaylistTrack(playlist=self.track.playlist, selector=self.track.selector, freeform_artist_name='Prince', freeform_album_title='Purple Rain', freeform_track_title='When Doves Cry') new_trk.put() self.count(track_key=new_trk.key()) count = PlayCount.all()[0] track_ids = [str(w.key()) for w in PlayCount.all()] assert track_ids[0] != track_ids[1], ( 'Different artist/albums cannot have the same key')
def test_different_tracks(self): self.count() new_trk = PlaylistTrack( playlist=self.track.playlist, selector=self.track.selector, freeform_artist_name='Prince', freeform_album_title='Purple Rain', freeform_track_title='When Doves Cry') new_trk.put() self.count(track_key=new_trk.key()) count = PlayCount.all()[0] track_ids = [str(w.key()) for w in PlayCount.all()] assert track_ids[0] != track_ids[1], ( 'Different artist/albums cannot have the same key')
def test_count_different_track(self): self.count() # Copy the same artist/track into a new track. new_trk = PlaylistTrack( playlist=self.track.playlist, selector=self.track.selector, freeform_artist_name=self.track.freeform_artist_name, freeform_album_title=self.track.freeform_album_title, freeform_track_title='Another track from the album') new_trk.put() self.count(track_key=new_trk.key()) count = PlayCount.all()[0] eq_(count.artist_name, self.track.freeform_artist_name) eq_(count.album_title, self.track.freeform_album_title) eq_(count.label, self.track.label) eq_(count.play_count, 2)
def test_count_different_track(self): self.count() # Copy the same artist/track into a new track. new_trk = PlaylistTrack( playlist=self.track.playlist, selector=self.track.selector, freeform_artist_name=self.track.freeform_artist_name, freeform_album_title=self.track.freeform_album_title, freeform_track_title='Another track from the album') new_trk.put() self.count(track_key=new_trk.key()) count = PlayCount.all()[0] eq_(count.artist_name, self.track.freeform_artist_name) eq_(count.album_title, self.track.freeform_album_title) eq_(count.label, self.track.label) eq_(count.play_count, 2)
def test_freeform_compilation(self): stevie, talking_book, tracks = create_stevie_wonder_album_data() talking_book.is_compilation = True talking_book.put() for artist, track in (('Stevie Wonder', 'Superstition'), ('Stevie Wonder', 'Big Brother')): new_trk = PlaylistTrack( playlist=self.track.playlist, selector=self.track.selector, freeform_album_title='Talking Book', freeform_artist_name=artist, freeform_track_title=track, freeform_label='...') new_trk.put() self.count(track_key=new_trk.key()) res = self.snapshot() eq_(res.status_code, 200) snap = PlayCountSnapshot.all()[0] eq_(snap.play_count, 2) eq_(snap.artist_name, 'Various') eq_(snap.album_title, 'Talking Book')
def test_freeform_compilation(self): stevie, talking_book, tracks = create_stevie_wonder_album_data() talking_book.is_compilation = True talking_book.put() for artist, track in (('Stevie Wonder', 'Superstition'), ('Stevie Wonder', 'Big Brother')): new_trk = PlaylistTrack( playlist=self.track.playlist, selector=self.track.selector, freeform_album_title='Talking Book', freeform_artist_name=artist, freeform_track_title=track, freeform_label='...') new_trk.put() self.count(track_key=new_trk.key()) res = self.snapshot() eq_(res.status_code, 200) snap = PlayCountSnapshot.all()[0] eq_(snap.play_count, 2) eq_(snap.artist_name, 'Various') eq_(snap.album_title, 'Talking Book')
class TestDeleteTrackFromPlaylist(PlaylistViewsTest): def setUp(self): super(TestDeleteTrackFromPlaylist, self).setUp() self.playlist = ChirpBroadcast() selector = self.get_selector() self.track = PlaylistTrack( playlist=self.playlist, selector=selector, freeform_artist_name="Steely Dan", freeform_album_title="Aja", freeform_track_title="Peg") self.track.put() def test_delete_known_track(self): resp = self.client.get(reverse('playlists_landing_page')) context = resp.context[0] tracks = [t for t in context['playlist_events']] self.assertEquals(tracks[0].artist_name, "Steely Dan") def inspect_request(r): self.assertEqual(r.get_full_url(), 'http://testapi/playlist/delete/%s' % self.track.key()) self.assertEqual(r.http_method, 'DELETE') return True fake_urlopen = (fudge.Fake('urlopen', expect_call=True) .with_args(arg.passes_test(inspect_request))) fake_response = (fake_urlopen .returns_fake() .has_attr(code='200') .provides('read') .returns("<service response>")) with fudge.patched_context(playlists.tasks.urllib2, "urlopen", fake_urlopen): resp = self.client.get(reverse('playlists_delete_event', args=[self.track.key()])) self.assertRedirects(resp, reverse('playlists_landing_page')) # simulate the redirect: resp = self.client.get(reverse('playlists_landing_page')) context = resp.context[0] tracks = [t for t in context['playlist_events']] self.assertEquals(tracks, []) def test_delete_unknown_track(self): resp = self.client.get(reverse('playlists_landing_page')) context = resp.context[0] tracks = [t for t in context['playlist_events']] self.assertEquals(tracks[0].artist_name, "Steely Dan") resp = self.client.get(reverse('playlists_delete_event', args=['<bogus-key>'])) self.assertRedirects(resp, reverse('playlists_landing_page')) # simulate the redirect: resp = self.client.get(reverse('playlists_landing_page')) # should be no change: context = resp.context[0] tracks = [t for t in context['playlist_events']] self.assertEquals(tracks[0].artist_name, "Steely Dan") def test_cannot_delete_someone_elses_track(self): other_user = User(email="*****@*****.**") other_user.roles.append(auth.roles.DJ) other_user.put() time.sleep(0.4) other_track = PlaylistTrack( playlist=self.playlist, selector=other_user, freeform_artist_name="Peaches", freeform_track_title="Rock Show",) other_track.put() with fudge.patched_context(playlists.tasks, "_fetch_url", stub_fetch_url): resp = self.client.get(reverse('playlists_delete_event', args=[other_track.key()])) self.assertRedirects(resp, reverse('playlists_landing_page')) # simulate the redirect: resp = self.client.get(reverse('playlists_landing_page')) # should be no change: context = resp.context[0] tracks = [t.artist_name for t in context['playlist_events']] self.assertEquals(tracks, ["Peaches", "Steely Dan"]) def test_delete_link_appears_for_current_user(self): resp = self.client.get(reverse('playlists_landing_page')) assert '[delete]' in resp.content for track in PlaylistTrack.all(): track.delete() other_user = User(email="*****@*****.**") other_user.roles.append(auth.roles.DJ) other_user.put() other_track = PlaylistTrack( playlist=self.playlist, selector=other_user, freeform_artist_name="Peaches", freeform_track_title="Rock Show") other_track.put() resp = self.client.get(reverse('playlists_landing_page')) assert '[delete]' not in resp.content
class TestLive365PlaylistTasks(TaskTest, TestCase): def test_create_not_latin_chars(self): def inspect_request(r): # NOTE: due to URL fetching, you can only raise # AssertionError here self.assertEqual(r.get_full_url(), 'http://__dummylive365service__/cgi-bin/add_song.cgi') qs = dict(cgi.parse_qsl(r.data)) self.assertEqual(qs['member_name'], "dummy_member") self.assertEqual(qs['password'], "dummy_password") self.assertEqual(qs['seconds'], '30') # c should be replaced because latin-1 can't encode that and Live365 likes latin-1 self.assertEqual(qs['title'], 'Ivan Krsti song') self.assertEqual(qs['album'], 'Ivan Krsti album') self.assertEqual(qs['artist'], 'Ivan Krsti') return True fake_urlopen = (fudge.Fake('urlopen', expect_call=True) .with_args(arg.passes_test(inspect_request))) fake_response = (fake_urlopen .returns_fake() .has_attr(code='200') .provides('read') .returns("<service response>")) with fudge.patched_context(playlists.tasks.urllib2, "urlopen", fake_urlopen): resp = self.client.post(reverse('playlists.send_track_to_live365'), { 'id': self.track.key() }) fudge.verify() def test_create_latin_chars(self): self.playlist = ChirpBroadcast() selector = self.get_selector() self.track = PlaylistTrack( playlist=self.playlist, selector=selector, freeform_artist_name=u'Bj\xf6rk', freeform_album_title=u'Bj\xf6rk album', freeform_track_title=u'Bj\xf6rk song') self.track.put() def inspect_request(r): # NOTE: due to URL fetching, you can only raise # AssertionError here self.assertEqual(r.get_full_url(), 'http://__dummylive365service__/cgi-bin/add_song.cgi') qs = dict(cgi.parse_qsl(r.data)) self.assertEqual(qs['member_name'], "dummy_member") self.assertEqual(qs['password'], "dummy_password") self.assertEqual(qs['seconds'], '30') # c should be replaced because latin-1 can't encode that and Live365 likes latin-1 self.assertEqual(qs['title'], 'Bj\xf6rk song') self.assertEqual(qs['album'], 'Bj\xf6rk album') self.assertEqual(qs['artist'], 'Bj\xf6rk') return True fake_urlopen = (fudge.Fake('urlopen', expect_call=True) .with_args(arg.passes_test(inspect_request))) fake_response = (fake_urlopen .returns_fake() .has_attr(code='200') .provides('read') .returns("<service response>")) with fudge.patched_context(playlists.tasks.urllib2, "urlopen", fake_urlopen): resp = self.client.post(reverse('playlists.send_track_to_live365'), { 'id': self.track.key() }) fudge.verify() def test_create_ascii_chars(self): self.playlist = ChirpBroadcast() selector = self.get_selector() self.track = PlaylistTrack( playlist=self.playlist, selector=selector, freeform_artist_name=u'artist', freeform_album_title=u'album', freeform_track_title=u'song') self.track.put() def inspect_request(r): # NOTE: due to URL fetching, you can only raise # AssertionError here self.assertEqual(r.get_full_url(), 'http://__dummylive365service__/cgi-bin/add_song.cgi') qs = dict(cgi.parse_qsl(r.data)) self.assertEqual(qs['member_name'], "dummy_member") self.assertEqual(qs['password'], "dummy_password") self.assertEqual(qs['seconds'], '30') # c should be replaced because latin-1 can't encode that and Live365 likes latin-1 self.assertEqual(qs['title'], 'song') self.assertEqual(qs['album'], 'album') self.assertEqual(qs['artist'], 'artist') return True fake_urlopen = (fudge.Fake('urlopen', expect_call=True) .with_args(arg.passes_test(inspect_request))) fake_response = (fake_urlopen .returns_fake() .has_attr(code='200') .provides('read') .returns("<service response>")) with fudge.patched_context(playlists.tasks.urllib2, "urlopen", fake_urlopen): resp = self.client.post(reverse('playlists.send_track_to_live365'), { 'id': self.track.key() }) fudge.verify() def test_create_non_existant_track(self): key = self.track.key() self.track.delete() # make it non-existant resp = self.client.post(reverse('playlists.send_track_to_live365'), { 'id': key }) self.assertEqual(resp.status_code, 200)
class TestDeleteTrackFromPlaylist(PlaylistViewsTest): def setUp(self): super(TestDeleteTrackFromPlaylist, self).setUp() self.playlist = ChirpBroadcast() selector = self.get_selector() self.track = PlaylistTrack( playlist=self.playlist, selector=selector, freeform_artist_name="Steely Dan", freeform_album_title="Aja", freeform_track_title="Peg") self.track.put() def test_delete_known_track(self): resp = self.client.get(reverse('playlists_landing_page')) context = resp.context[0] tracks = [t for t in context['playlist_events']] self.assertEquals(tracks[0].artist_name, "Steely Dan") def inspect_request(r): self.assertEqual(r.get_full_url(), 'http://testapi/playlist/delete/%s' % self.track.key()) self.assertEqual(r.http_method, 'DELETE') return True fake_urlopen = (fudge.Fake('urlopen', expect_call=True) .with_args(arg.passes_test(inspect_request))) fake_response = (fake_urlopen .returns_fake() .has_attr(code='200') .provides('read') .returns("<service response>")) with fudge.patched_context(playlists.tasks.urllib2, "urlopen", fake_urlopen): resp = self.client.get(reverse('playlists_delete_event', args=[self.track.key()])) self.assertRedirects(resp, reverse('playlists_landing_page')) # simulate the redirect: resp = self.client.get(reverse('playlists_landing_page')) context = resp.context[0] tracks = [t for t in context['playlist_events']] self.assertEquals(tracks, []) def test_delete_unknown_track(self): resp = self.client.get(reverse('playlists_landing_page')) context = resp.context[0] tracks = [t for t in context['playlist_events']] self.assertEquals(tracks[0].artist_name, "Steely Dan") resp = self.client.get(reverse('playlists_delete_event', args=['<bogus-key>'])) self.assertRedirects(resp, reverse('playlists_landing_page')) # simulate the redirect: resp = self.client.get(reverse('playlists_landing_page')) # should be no change: context = resp.context[0] tracks = [t for t in context['playlist_events']] self.assertEquals(tracks[0].artist_name, "Steely Dan") def test_cannot_delete_someone_elses_track(self): other_user = User(email="*****@*****.**") other_user.roles.append(auth.roles.DJ) other_user.put() time.sleep(0.4) other_track = PlaylistTrack( playlist=self.playlist, selector=other_user, freeform_artist_name="Peaches", freeform_track_title="Rock Show",) other_track.put() with fudge.patched_context(playlists.tasks, "_fetch_url", stub_fetch_url): resp = self.client.get(reverse('playlists_delete_event', args=[other_track.key()])) self.assertRedirects(resp, reverse('playlists_landing_page')) # simulate the redirect: resp = self.client.get(reverse('playlists_landing_page')) # should be no change: context = resp.context[0] tracks = [t.artist_name for t in context['playlist_events']] self.assertEquals(tracks, ["Peaches", "Steely Dan"]) def test_delete_link_appears_for_current_user(self): resp = self.client.get(reverse('playlists_landing_page')) assert '[delete]' in resp.content for track in PlaylistTrack.all(): track.delete() other_user = User(email="*****@*****.**") other_user.roles.append(auth.roles.DJ) other_user.put() other_track = PlaylistTrack( playlist=self.playlist, selector=other_user, freeform_artist_name="Peaches", freeform_track_title="Rock Show") other_track.put() resp = self.client.get(reverse('playlists_landing_page')) assert '[delete]' not in resp.content
class TestLive365PlaylistTasks(TaskTest, TestCase): def test_create_not_latin_chars(self): def inspect_request(r): # NOTE: due to URL fetching, you can only raise # AssertionError here self.assertEqual( r.get_full_url(), 'http://__dummylive365service__/cgi-bin/add_song.cgi') qs = dict(cgi.parse_qsl(r.data)) self.assertEqual(qs['member_name'], "dummy_member") self.assertEqual(qs['password'], "dummy_password") self.assertEqual(qs['seconds'], '30') # c should be replaced because latin-1 can't encode that and Live365 likes latin-1 self.assertEqual(qs['title'], 'Ivan Krsti song') self.assertEqual(qs['album'], 'Ivan Krsti album') self.assertEqual(qs['artist'], 'Ivan Krsti') return True fake_urlopen = (fudge.Fake('urlopen', expect_call=True).with_args( arg.passes_test(inspect_request))) fake_response = (fake_urlopen.returns_fake().has_attr( code='200').provides('read').returns("<service response>")) with fudge.patched_context(playlists.tasks.urllib2, "urlopen", fake_urlopen): resp = self.client.post(reverse('playlists.send_track_to_live365'), {'id': self.track.key()}) fudge.verify() def test_create_latin_chars(self): self.playlist = ChirpBroadcast() selector = self.get_selector() self.track = PlaylistTrack(playlist=self.playlist, selector=selector, freeform_artist_name=u'Bj\xf6rk', freeform_album_title=u'Bj\xf6rk album', freeform_track_title=u'Bj\xf6rk song') self.track.put() def inspect_request(r): # NOTE: due to URL fetching, you can only raise # AssertionError here self.assertEqual( r.get_full_url(), 'http://__dummylive365service__/cgi-bin/add_song.cgi') qs = dict(cgi.parse_qsl(r.data)) self.assertEqual(qs['member_name'], "dummy_member") self.assertEqual(qs['password'], "dummy_password") self.assertEqual(qs['seconds'], '30') # c should be replaced because latin-1 can't encode that and Live365 likes latin-1 self.assertEqual(qs['title'], 'Bj\xf6rk song') self.assertEqual(qs['album'], 'Bj\xf6rk album') self.assertEqual(qs['artist'], 'Bj\xf6rk') return True fake_urlopen = (fudge.Fake('urlopen', expect_call=True).with_args( arg.passes_test(inspect_request))) fake_response = (fake_urlopen.returns_fake().has_attr( code='200').provides('read').returns("<service response>")) with fudge.patched_context(playlists.tasks.urllib2, "urlopen", fake_urlopen): resp = self.client.post(reverse('playlists.send_track_to_live365'), {'id': self.track.key()}) fudge.verify() def test_create_ascii_chars(self): self.playlist = ChirpBroadcast() selector = self.get_selector() self.track = PlaylistTrack(playlist=self.playlist, selector=selector, freeform_artist_name=u'artist', freeform_album_title=u'album', freeform_track_title=u'song') self.track.put() def inspect_request(r): # NOTE: due to URL fetching, you can only raise # AssertionError here self.assertEqual( r.get_full_url(), 'http://__dummylive365service__/cgi-bin/add_song.cgi') qs = dict(cgi.parse_qsl(r.data)) self.assertEqual(qs['member_name'], "dummy_member") self.assertEqual(qs['password'], "dummy_password") self.assertEqual(qs['seconds'], '30') # c should be replaced because latin-1 can't encode that and Live365 likes latin-1 self.assertEqual(qs['title'], 'song') self.assertEqual(qs['album'], 'album') self.assertEqual(qs['artist'], 'artist') return True fake_urlopen = (fudge.Fake('urlopen', expect_call=True).with_args( arg.passes_test(inspect_request))) fake_response = (fake_urlopen.returns_fake().has_attr( code='200').provides('read').returns("<service response>")) with fudge.patched_context(playlists.tasks.urllib2, "urlopen", fake_urlopen): resp = self.client.post(reverse('playlists.send_track_to_live365'), {'id': self.track.key()}) fudge.verify() def test_create_non_existant_track(self): key = self.track.key() self.track.delete() # make it non-existant resp = self.client.post(reverse('playlists.send_track_to_live365'), {'id': key}) self.assertEqual(resp.status_code, 200)