def test_question_saved_tracks_no_valid_incorrect_choices(self):
        """
        question_saved_tracks() should return None if there are not
        enough tracks from "top_tracks" to fill incorrect choices.
        """
        u = UserData(self.session)

        artists = create_artists(3)
        json_add_field(artists, 'name', ['Cassius', 'Benjamin', 'James'])

        albums = create_albums(1)
        json_add_to_field(albums, 'images', create_image())

        tracks = create_tracks(3)
        json_add_name(tracks, 'Country Track ')
        json_add_to_field(tracks, 'artists', artists, arr=True)
        json_add_field(tracks, 'album', albums[0])

        u._saved_tracks = [tracks[0]]
        u._music_taste = tracks[1:]

        quiz = Quiz.objects.create(user_id='cassius')
        q = question_saved_tracks(quiz, u)

        self.assertIsNone(q)
Пример #2
0
 def test_get_saved_tracks_exists(self): 
     """
     If _saved_tracks is not None, saved_tracks() should return it.
     """
     u = UserData(None)
     test_data = ['hello', 'goodbye']
     u._saved_tracks = test_data
     self.assertEqual(u.saved_tracks(), test_data)
    def test_question_saved_tracks(self):
        """
        question_saved_tracks() should return a question about the
        user's saved tracks.
        """
        u = UserData(self.session)

        artists = create_artists(11)
        json_add_field(artists,
                       'name', [
                           'Cash', 'Ben', 'Cassius', 'Benjamin', 'James',
                           'Jim', 'John', 'Lucy', 'Lewis', 'Lucifer', 'Lewd'
                       ],
                       arr=True)

        albums = create_albums(1)
        json_add_to_field(albums, 'images', create_image())

        u._saved_tracks = create_tracks(7)
        json_add_name(u._saved_tracks, 'Country Track ')
        json_add_to_field(u._saved_tracks, 'artists', artists[0:7], arr=True)
        json_add_field(u._saved_tracks, 'album', albums[0])

        u._music_taste = create_tracks(4, id=7)
        json_add_name(u._music_taste, 'Rock Track ')
        json_add_to_field(u._music_taste, 'artists', artists[7:11], arr=True)
        json_add_field(u._music_taste, 'album', albums[0])

        quiz = Quiz.objects.create(user_id='cassius')

        q = question_saved_tracks(quiz, u)

        self.assertEqual(q.choices.count(), 4)
        self.assertGreater(q.answers().count(), 0)
        self.assertLessEqual(q.answers().count(), 4)
        self.assertEqual(q.incorrect_answers().count(),
                         4 - q.answers().count())

        for c in q.answers():
            title = c.primary_text
            artist = c.secondary_text
            found = False
            for t in u._saved_tracks:
                if t['name'] == title and t['artists'][0]['name'] == artist:
                    found = True
            self.assertTrue(found)
            self.assertEqual(c.image_url, '200url')

        for c in q.incorrect_answers():
            title = c.primary_text
            artist = c.secondary_text
            found = False
            for t in u._music_taste:
                if t['name'] == title and t['artists'][0]['name'] == artist:
                    found = True
            self.assertTrue(found)
            self.assertEqual(c.image_url, '200url')
    def test_question_saved_tracks_only_one_correct_answer(self):
        """
        question_saved_tracks() should create a question, even if there
        is only one available track that can be correct, as long as
        there are enough tracks in "top_tracks" to fill the incorrect
        choices.
        """
        u = UserData(self.session)

        artists = create_artists(4)
        json_add_field(artists,
                       'name', ['Cassius', 'Ben', 'John', 'Jim'],
                       arr=True)

        albums = create_albums(1)
        json_add_to_field(albums, 'images', create_image())

        tracks = create_tracks(4)
        json_add_name(tracks, 'Country Track ')
        json_add_to_field(tracks, 'artists', artists, arr=True)
        json_add_field(tracks, 'album', albums[0])

        u._saved_tracks = [tracks[0]]
        u._music_taste = tracks[1:]

        quiz = Quiz.objects.create(user_id='cassius')
        q = question_saved_tracks(quiz, u)

        self.assertEqual(q.choices.count(), 4)
        self.assertEqual(q.answers().count(), 1)
        self.assertEqual(q.incorrect_answers().count(), 3)

        c = q.answers()[0]
        self.assertEqual(u._saved_tracks[0]['name'], c.primary_text)
        self.assertEqual(u._saved_tracks[0]['artists'][0]['name'],
                         c.secondary_text)

        for c in q.choices.all():
            self.assertEqual(c.image_url, '200url')

        for c in q.incorrect_answers():
            title = c.primary_text
            artist = c.secondary_text
            found = False
            for t in u._music_taste:
                if t['name'] == title and t['artists'][0]['name'] == artist:
                    found = True
            self.assertTrue(found)