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")
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")
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)
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")
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")
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")