Example #1
0
    def testGetSongs(self):
        """ Query Song List """

        # Add files and songs to db
        file1 = models.File(filename="SongFile 1")
        file2 = models.File(filename="SongFile 2")
        session.add_all([file1, file2])
        session.commit()
        song1 = models.Song(file_id=file1.id)
        song2 = models.Song(file_id=file2.id)
        session.add_all([song1, song2])
        session.commit()

        response = self.client.get("/api/songs",
                                   headers=[("Accept", "application/json")])

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.mimetype, "application/json")

        songs = json.loads(response.data)
        self.assertEqual(len(songs), 2)

        song1 = songs[0]
        self.assertEqual(song1["id"], 1)
        self.assertEqual(song1["file"]["id"], 1)
        self.assertEqual(song1["file"]["name"], "SongFile 1")

        song2 = songs[1]
        self.assertEqual(song2["id"], 2)
        self.assertEqual(song2["file"]["id"], 2)
        self.assertEqual(song2["file"]["name"], "SongFile 2")
Example #2
0
    def testGetSongs(self):
        """getting a list of songs"""

        """original test data
        songA = models.Song(file=models.File(filename="songA.mp3"))
        songB = models.Song(file=models.File(filename="songB.mp3"))
        songC = models.Song(file=models.File(filename="songC.mp3"))
        session.add_all([songA, songB, songC])
        session.commit()
        """
        #add files to files table
        songA_file = models.File(id=1, filename="songA.mp3")
        songB_file = models.File(id=3, filename="songB.mp3")
        songC_file = models.File(id=5, filename="songC.mp3")
        session.add_all([songA_file, songB_file, songC_file])

        #add songs to songs table
        songA = models.Song(file_id=1)
        songB = models.Song(file_id=3)
        songC = models.Song(file_id=5)
        session.add_all([songA, songB, songC])
        
        session.commit()

        response = self.client.get("/api/songs",
            headers=[("Accept", "application/json")]
            )

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.mimetype,"application/json")

        data = json.loads(response.data)

        songA = data[0]
        print (songA)
        self.assertEqual(songA["id"], 1)
        self.assertEqual(songA["file"]["id"], 1)
        self.assertEqual(songA["file"]["name"], "songA.mp3")

        songB = data[1]
        self.assertEqual(songB["id"], 2)
        self.assertEqual(songB["file"]["id"], 3)
        self.assertEqual(songB["file"]["name"], "songB.mp3")

        songC = data[2]
        self.assertEqual(songC["id"], 3)
        self.assertEqual(songC["file"]["id"], 5)
        self.assertEqual(songC["file"]["name"], "songC.mp3")
Example #3
0
    def testPostSong(self):
        """ Posting a new Song to db """

        # Add a new file to db
        file1 = models.File(filename="Happy Birthday")
        session.add(file1)
        session.commit()

        # Add a new song via endpoint
        song = {"file": {"id": 1}}

        response = self.client.post("/api/songs",
                                    data=json.dumps(song),
                                    content_type="application/json",
                                    headers=[("Accept", "application/json")])

        self.assertEqual(response.status_code, 201)
        self.assertEqual(response.mimetype, "application/json")

        # Check response data
        data = json.loads(response.data)
        self.assertEqual(data["id"], 1)
        self.assertEqual(data["file"]["id"], 1)
        self.assertEqual(data["file"]["name"], "Happy Birthday")

        # Check db
        songs = session.query(models.Song).all()
        self.assertEqual(len(songs), 1)

        song = songs[0]
        self.assertEqual(song.file_id, file1.id)
        self.assertEqual(song.file.filename, "Happy Birthday")
        self.assertEqual(song.file.id, 1)
Example #4
0
    def testGetSong(self):
        """getting a specific song by the song's id"""
        #add files to files table
        songA_file = models.File(id=1, filename="songA.mp3")
        songB_file = models.File(id=3, filename="songB.mp3")
        songC_file = models.File(id=5, filename="songC.mp3")
        session.add_all([songA_file, songB_file, songC_file])

        #add songs to songs table
        songA = models.Song(file_id=1)
        songB = models.Song(file_id=3)
        songC = models.Song(file_id=5)
        session.add_all([songA, songB, songC])
        
        session.commit()

        response = self.client.get("/api/songs/{}".format(songB.id),
            headers=[("Accept", "application/json")]
            )
        data = json.loads(response.data)

        self.assertEqual(data["id"], 2)
        print("data is {}".format(data))
        self.assertEqual(data["file"]["name"], "songB.mp3")
Example #5
0
    def testSongPost(self):
        """adding a song"""
        #first make sure the file exits by adding it to the db
        songA_file = models.File(id=7, filename="songA.mp3")
        session.add(songA_file)
        session.commit()

        #simulate song post (file already in database)
        data = {
            "file":{
                "id": 7
            }
        }

        response = self.client.post("/api/songs",
            data=json.dumps(data),
            content_type="application/json",
            headers=[("Accept", "application/json")]
            )

        self.assertEqual(response.status_code, 201)
        self.assertEqual(response.mimetype, "application/json")

        self.assertEqual(urlparse(response.headers.get("Location")).path, "/api/songs/1")

        data = json.loads(response.data)
        print ("data is {}".format(data))
        self.assertEqual(data["id"], 1)
        self.assertEqual(data["file"]["id"], 7)
        self.assertEqual(data["file"]["name"], "songA.mp3")

        songs = session.query(models.Song).all()
        self.assertEqual(len(songs), 1)

        song = songs[0]
        print ("database data is {}".format(song))
        self.assertEqual(song.id, 1)
        self.assertEqual(song.file.id, 7)
        self.assertEqual(song.file.filename, "songA.mp3")
Example #6
0
    def testSongEdit(self):
        #editing a song
        #add 3 songs to the database
        #need to make sure the files exist for each song being added
        #so need to add them to files table in database so we can simulate 
        #a song file
        #add files to files table
        songA_file = models.File(id=1, filename="songA.mp3")
        songB_file = models.File(id=3, filename="songB.mp3")
        songC_file = models.File(id=5, filename="songC.mp3")
        session.add_all([songA_file, songB_file, songC_file])

        #add songs to files table
        songA = models.Song(file_id=1)
        songB = models.Song(file_id=3)
        songC = models.Song(file_id=5)
        session.add_all([songA, songB, songC])

        session.commit()

        #Original way files added NOT CORRECT
        #songA = models.Song(file=models.File(filename="songA.mp3"))
        #songB = models.Song(file=models.File(filename="songB.mp3"))
        #songC = models.Song(file=models.File(filename="songC.mp3"))
        #
        data = {

            "filename": "SongB_new.mp3"    
        }

        response = self.client.post("/api/songs/{}".format(songB.id),
            data=json.dumps(data),
            content_type="application/json",
            headers=[("Accept", "application/json")]
            )


        self.assertEqual(response.status_code, 201)
        self.assertEqual(response.mimetype, "application/json")
        self.assertEqual(urlparse(response.headers.get("Location")).path,"/api/songs/2")


        data = json.loads(response.data)
        print ("song_edit response data is {}".format(data))
        self.assertEqual(data["id"], 2)
        self.assertEqual(data["file"]["id"], 3)
        self.assertEqual(data["file"]["name"], "SongB_new.mp3")

        #making sure 3 songs still exist in the database
        songs = session.query(models.Song).all()
        self.assertEqual(len(songs), 3)

        songA = songs[0]
        self.assertEqual(songA.id, 1)
        self.assertEqual(songA.file.id, 1)
        self.assertEqual(songA.file.filename, "songA.mp3")

        songB = songs[1]
        self.assertEqual(songB.id, 2)
        self.assertEqual(songB.file.id, 3)
        self.assertEqual(songB.file.filename, "SongB_new.mp3")

        songC = songs[2]
        self.assertEqual(songC.id, 3)
        self.assertEqual(songC.file.id, 5)
        self.assertEqual(songC.file.filename, "songC.mp3")