Esempio n. 1
0
    def test_input_valiate(self):
        p = PlayList()

        ## playlist's user_id is invalid
        input = """
            {
              "users" : [{"id" : "1", "name" : "Albin Jaye"} ],
              "playlists" : [{"id" : "1", "user_id" : "2", "song_ids" : ["1"] } ],
              "songs": [{"id" : "1", "artist": "Camila Cabello", "title": "Never Be the Same"}
              ]
            }
        """
        with self.assertRaises(PlayListException):
            p.load_data(StringIO(input))

        # playlist's song_id is invalid
        input = """
            {
              "users" : [{"id" : "1", "name" : "Albin Jaye"} ],
              "playlists" : [{"id" : "1", "user_id" : "1", "song_ids" : ["2"] } ],
              "songs": [{"id" : "1", "artist": "Camila Cabello", "title": "Never Be the Same"}
              ]
            }
        """
        with self.assertRaises(PlayListException):
            p.load_data(StringIO(input))
Esempio n. 2
0
    def test_operate_on_not_exists_playlist(self):
        change = """
            [
                {
                    "type": "remove_playlist",
                    "playlist_id": "10"
                }
            ]
        """
        p = PlayList()
        p.load_data(StringIO(INPUT))
        with self.assertRaises(PlayListException):
            p.apply_changes(StringIO(change))

        change = """
            [
                {
                    "type": "add_song_to_playlist",
                    "playlist_id": "100",
                    "song_ids" : ["2"]
                }
            ]
        """
        p = PlayList()
        p.load_data(StringIO(INPUT))
        with self.assertRaises(PlayListException):
            p.apply_changes(StringIO(change))
Esempio n. 3
0
    def test_change_input(self):
        p = PlayList()
        p.load_data(StringIO(INPUT))

        # below schema in change:
        # 1. option type is not valid
        # 2. miss filed 'song_ids'
        change = """
            [
                {
                    "type": "invalid_option"
                }
            ]
        """
        with self.assertRaises(PlayListException):
            p.apply_changes(StringIO(change))

        change = """
            [
                {
                    "type": "add_song_to_playlist",
                    "playlist_id": "2"
                }
            ]
        """
        with self.assertRaises(PlayListException):
            p.apply_changes(StringIO(change))
Esempio n. 4
0
    def test_normal_case(self):
        p = PlayList()

        p.load_data(StringIO(INPUT))
        p.apply_changes(StringIO(CHANGE))
        output = StringIO()
        p.gen_output(output)
        obj = json.loads(output.getvalue())
        self.assertEqual(len(obj['users']), 1)
        self.assertEqual(obj['users'][0]['id'], '1')
        self.assertEqual(len(obj['playlists']), 2)
        self.assertEqual(obj['playlists'][0]['id'], '2')
        self.assertEqual(obj['playlists'][0]['song_ids'], ['1', '2'])
        self.assertEqual(obj['playlists'][1]['id'], '3')
        self.assertEqual(obj['playlists'][1]['song_ids'], ['1', '2'])
Esempio n. 5
0
 def test_not_allow_duplicate_song_in_playlist(self):
     change = """
         [
             {
                 "type": "add_song_to_playlist",
                 "playlist_id": "1",
                 "song_ids" : ["1"]
             }
         ]
     """
     p = PlayList()
     p.load_data(StringIO(INPUT))
     p.apply_changes(StringIO(change))
     output = StringIO()
     p.gen_output(output)
     obj = json.loads(output.getvalue())
     self.assertEqual(len(obj['playlists'][0]['song_ids']), 2)