def test_delete(self): sA = models.Song() sB = models.Song() songA = models.File(name="Song A") songB = models.File(name="Song B") songA.song = sA songB.song = sB session.add_all([songA, songB]) session.commit() response = self.client.get("/api/songs/{}".format(songA.song.id), headers=[("Accept", "application/json")]) self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") data = json.loads(response.data.decode("ascii")) songA = data sA = songA["file"] self.assertEqual(sA["file_name"], "Song A") self.assertEqual(sA["file_id"], 1) response = self.client.delete("/api/songs/{}".format(sA["file_id"]), headers=[("Accept", "application/json")]) response = self.client.get("/api/songs/{}".format(sA["file_id"]), headers=[("Accept", "application/json")]) self.assertEqual(response.status_code, 404) self.assertEqual(response.mimetype, "application/json") data = json.loads(response.data.decode("ascii")) self.assertEqual(data["message"], "Could not find song with id 1")
def test_get_songs(self): sA = models.Song() sB = models.Song() songA = models.File(name="Song A") songB = models.File(name="Song B") songA.song = sA songB.song = sB session.add_all([songA, songB]) 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.decode("ascii")) self.assertEqual(len(data), 2) songA = data[0] sA = songA["file"] self.assertEqual(sA["file_name"], "Song A") self.assertEqual(sA["file_id"], 1) songB = data[1] sB = songB["file"] self.assertEqual(sB["file_name"], "Song B") self.assertEqual(sB["file_id"], 2)
def test_get_songs(self): file_A = models.File(name='file_A.mp3') song_A = models.Song(file_=file_A) file_B = models.File(name='file_B.mp3') song_B = models.Song(file_=file_B) session.add_all([file_A, file_B, song_A, song_B]) 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.decode('ascii')) self.assertEqual(len(data), 2) response_song_A, response_song_B = data self.assertEqual(response_song_A['id'], song_A.id) self.assertEqual(response_song_A['file']['id'], song_A.file_.id) self.assertEqual(response_song_A['file']['name'], song_A.file_.name) self.assertEqual(response_song_B['id'], song_B.id) self.assertEqual(response_song_B['file']['id'], song_B.file_.id) self.assertEqual(response_song_B['file']['name'], song_B.file_.name)
def test_get_songs(self): """ Getting songs from a populated database """ fileA = models.File(name="test1.mp3") fileB = models.File(name="test2.mp3") songA = models.Song(file=fileA) songB = models.Song(file=fileB) session.add_all([fileA, fileB, songA, songB]) 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.decode("ascii")) self.assertEqual(len(data), 2) songA = data[0] self.assertEqual(songA['id'], 1) self.assertEqual(songA['file'], { 'name': 'test1.mp3', 'id': 1, 'path': '/uploads/test1.mp3' }) songB = data[1] self.assertEqual(songB['id'], 2) self.assertEqual(songB['file'], { 'name': 'test2.mp3', 'id': 2, 'path': '/uploads/test2.mp3' })
def test_delete_song(self): """ Deleting a single song from a populated database """ songA = models.File(filename="Drones.mp3") songA_id = models.Song(file_id=1) songB = models.File(filename="Californication.mp3") songB_id = models.Song(file_id=2) session.add_all([songA, songB, songA_id, songB_id]) session.commit() response = self.client.get("/api/songs/{}".format(songA.id), headers=[("Accept", "application/json")]) session.delete(songA_id) session.delete(songA) session.commit() response = self.client.get("/api/songs/{}".format(songB.id)) self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") songs = session.query(models.Song).all() self.assertEqual(len(songs), 1) files = session.query(models.File).all() self.assertEqual(len(files), 1) song = json.loads(response.data.decode("ascii")) print(song) self.assertEqual(song["file"]["filename"], "Californication.mp3")
def test_get_songs(self): """ Getting songs from a populated database """ songA = models.File(filename="Drones.mp3") songA_id = models.Song(file_id=1) songB = models.File(filename="Californication.mp3") songB_id = models.Song(file_id=2) session.add_all([songA, songB, songA_id, songB_id]) 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.decode("ascii")) self.assertEqual(len(data), 2) songA = data[0] self.assertEqual(songA["file"]["filename"], "Drones.mp3") self.assertEqual(songA["id"], 1) songB = data[1] self.assertEqual(songB["file"]["filename"], "Californication.mp3") self.assertEqual(songB["id"], 2)
def test_get_songs(self): """ Getting songs from a populated database """ songA = models.Song() songB = models.Song() fileA = models.File(name="fileA") fileB = models.File(name="fileB") session.add_all([fileA, fileB]) session.commit() songA.file_id = fileA.id songB.file_id = fileB.id session.add_all([songA, songB]) 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.decode("ascii")) self.assertEqual(len(data), 2) songAR = data[0] self.assertEqual(songAR, songA.as_dictionary()) songBR = data[1] self.assertEqual(songBR, songB.as_dictionary())
def test_get_songs(self): """ Getting songs from a populated database """ fileA = models.File(filename='FileA') fileB = models.File(filename='FileB') session.add_all([fileA, fileB]) session.commit() songA = models.Song(song_file_id=fileA.id) songB = models.Song(song_file_id=fileB.id) session.add_all([songA, songB]) 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) self.assertEqual(len(data), 2) songA = data[0] self.assertEqual(songA["id"], 1) self.assertEqual(songA["file"]["id"], 1) self.assertEqual(songA["file"]["name"], "FileA") songB = data[1] self.assertEqual(songB["id"], 2) self.assertEqual(songB["file"]["id"], 2) self.assertEqual(songB["file"]["name"], "FileB")
def test_get_songs(self): """ Getting songs - success """ #Add 2 Songs to DB with File Data file1 = models.File(filename="Awake.mp3") file2 = models.File(filename="Montana.mp3") song1 = models.Song(name="Awake", file=file1) song2 = models.Song(name="Montana", file=file2) session.add_all([song1, song2]) session.commit() #query api response = self.client.get("/api/songs") print(response) #assert api response contains expected response self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") data = json.loads(response.data.decode("ascii")) self.assertEqual(len(data), 2) #assert response contains expected songs/file song1 = data[0] print(song1) self.assertEqual(song1["songname"], "Awake") self.assertEqual(song1["file"]["filename"], "Awake.mp3") self.assertEqual(song1["file"]["id"], song1["id"]) song2 = data[1] self.assertEqual(song2["songname"], "Montana") self.assertEqual(song2["file"]["filename"], "Montana.mp3") self.assertEqual(song2["file"]["id"], song2["id"])
def test_delete_song(self): # test deleting a song # populate db file_A = models.File(name='file_A.mp3') song_A = models.Song(file=file_A) file_B = models.File(name='file_B.mp3') song_B = models.Song(file=file_B) session.add_all([file_A, file_B, song_A, song_B]) session.commit() response = self.client.delete("/api/songs/{}".format(song_A.id), content_type="application/json", headers=[("Accept", "application/json")]) self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") data = json.loads(response.data.decode("ascii")) self.assertEqual(data["id"], 1) self.assertEqual(data["file"]["id"], 1) self.assertEqual(data["file"]["name"], "file_A.mp3") songs = session.query(models.Song).all() self.assertEqual(len(songs), 1) files = session.query(models.File).all() self.assertEqual(len(files), 1) file = files[0] self.assertEqual(file.id, 2) self.assertEqual(file.name, 'file_B.mp3')
def test_get_songs(self): fileA = models.File(name='fileA.mp3') session.add(fileA) session.commit() songA = models.Song(file_id=fileA.id) session.add(songA) session.commit() fileB = models.File(name='fileB.mp3') session.add(fileB) session.commit() songB = models.Song(file_id=fileB.id) session.add(songB) 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.decode('ascii')) SongA, SongB = data self.assertEqual(SongA['id'], songA.id) self.assertEqual(SongA['file']['id'], songA.file_id) self.assertEqual(SongB['id'], songB.id) self.assertEqual(SongB['file']['id'], songB.file_id)
def test_get_songs(self): # test getting all songs in db # populate db file_A = models.File(name='file_A.mp3') song_A = models.Song(file=file_A) file_B = models.File(name='file_B.mp3') song_B = models.Song(file=file_B) session.add_all([file_A, file_B, song_A, song_B]) 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.decode('ascii')) self.assertEqual(len(data), 2) # store JSON structured data for each test response_song_A, response_song_B = data # assert tests for first song self.assertEqual(response_song_A['id'], song_A.id) self.assertEqual(response_song_A['file']['id'], song_A.file.id) self.assertEqual(response_song_A['file']['name'], song_A.file.name) # assert tests for second song self.assertEqual(response_song_B['id'], song_B.id) self.assertEqual(response_song_B['file']['id'], song_B.file.id) self.assertEqual(response_song_B['file']['name'], song_B.file.name)
def test_get_songs(self): """ Getting songs from a populated database """ #Create example files & songs fileA = models.File(name="SongA.mp3") fileB = models.File(name="SongB.mp3") songA = models.Song(file=fileA) songB = models.Song(file=fileB) session.add_all([fileA, fileB, songA, songB]) 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.decode("ascii")) self.assertEqual(len(data), 2) songA = data[0] 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"], 2) self.assertEqual(songB["file"]["name"], "SongB.mp3")
def test_delete_song(self): """ Deleting a song """ fileA = models.File(name="test1.mp3") fileB = models.File(name="test2.mp3") songA = models.Song(file=fileA) songB = models.Song(file=fileB) session.add_all([fileA, fileB, songA, songB]) session.commit() response = self.client.delete("/api/songs/{}".format(songB.id), headers=[("Accept", "application/json")]) self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") data = json.loads(response.data.decode("ascii")) self.assertEqual(data["message"], "Deleted song 2") songs = session.query(models.Song).all() files = session.query(models.File).all() self.assertEqual(len(songs), 1) self.assertEqual(len(files), 2)
def test_put_song(self): """ Updating a song """ songA = models.Song() fileA = models.File(name="fileA") fileB = models.File(name="fileB") session.add_all([fileA, fileB]) session.commit() songA.file_id = fileA.id session.add_all([songA]) session.commit() data = {"file": {"id": fileB.id}} response = self.client.put("/api/songs/{}".format(songA.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") songs = session.query(models.Song).all() self.assertEqual(len(songs), 1) data = json.loads(response.data.decode("ascii")) self.assertEqual(data["file"]["id"], fileB.id)
def test_delete_song(self): """ Delete a song """ data = {} song = models.Song() file = models.File(name="file") session.add_all([file]) session.commit() song.file_id = file.id session.add_all([song]) session.commit() songs = session.query(models.Song).all() self.assertEqual(len(songs), 1) response = self.client.delete("/api/songs/{}".format(song.id), data=json.dumps(data), content_type="application/json", headers=[("Accept", "application/json")]) songs = session.query(models.Song).all() self.assertEqual(len(songs), 0)
def test_edit_song(self): #Editing an existing song file = models.File(name="Example.mp3") song = models.Song(file=file) session.add(song) session.commit() data = { "name": "Edited.mp3", } response = self.client.put("/api/songs/{}".format(song.id), data=json.dumps(data), content_type="application/json", headers=[("Accept", "application/json")]) self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") self.assertEqual( urlparse(response.headers.get("Location")).path, "/api/songs/{}".format(song.id)) data = json.loads(response.data.decode("ascii")) self.assertEqual(data["id"], 1) self.assertEqual(data["file"]["name"], "Edited.mp3") # Assert that there is only one song in the database songs = session.query(models.Song).all() self.assertEqual(len(songs), 1) # Assert that the name was changed song = songs[0] self.assertEqual(file.name, "Edited.mp3")
def test_edit_song(self): fileA = models.File(filename="testA.wav") fileB = models.File(filename="testB.wav") song = models.Song(file=fileA) session.add_all([fileA, fileB, song]) session.commit() newfile = {"file": {"id": fileB.id}} data = newfile response = self.client.get("api/songs/{}".format(song.id), headers=[("Accept", "application/json")]) self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") songjson = json.loads(response.data.decode("ascii")) self.assertEqual(songjson["file"]["filename"], "testA.wav") response = self.client.put("/api/songs/{}".format(song.id), data=json.dumps(data), content_type="application/json", headers=[("Accept", "application/json")]) self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") songjson = json.loads(response.data.decode("ascii")) self.assertEqual(songjson["file"]["filename"], "testB.wav") self.assertEqual(songjson["file"]["id"], fileB.id)
def test_put_song(self): file_A = models.File(name='file_A.mp3') file_B = models.File(name='file_B.mp3') song_A = models.Song(file_=file_A) session.add_all([file_A, file_B, song_A]) session.commit() data = { "file": { "id": file_B.id } } response = self.client.put( "/api/songs/{}".format(song_A.id), data=json.dumps(data), content_type="application/json", headers=[("Accept", "application/json")]) self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") data = json.loads(response.data.decode("ascii")) self.assertEqual(data["id"], 1) self.assertEqual(data["file"]["id"], 2) self.assertEqual(data["file"]["name"], "file_B.mp3") songs = session.query(models.Song).all() self.assertEqual(len(songs), 1) song = songs[0] self.assertEqual(song.id, 1) self.assertEqual(song.file_.id, 2) self.assertEqual(song.file_.name, "file_B.mp3")
def test_delete_file(self): fileA = models.File(filename="testA.wav") songA = models.Song(file=fileA) session.add_all([fileA, songA]) session.commit() # 1st, see if song was successfully posted response = self.client.get("api/songs/{}".format(songA.id), headers=[("Accept", "application/json")]) self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") # Now test DELETE response = self.client.delete("/api/songs/{}".format(songA.id), headers=[("Accept", "application/json")]) self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") # Try GET to check if 404 response = self.client.get("api/songs/{}".format(songA.id), headers=[("Accept", "application/json")]) self.assertEqual(response.status_code, 404) self.assertEqual(response.mimetype, "application/json")
def test_get_song(self): """ Getting a single song from a populated database """ fileA = models.File(name="SongA.mp3") songA = models.Song(file=fileA) fileB = models.File(name="SongB.mp3") songB = models.Song(file=fileB) session.add_all([fileA, fileB, songA, songB]) session.commit() response = self.client.get("/api/songs/{}".format(songB.id), headers=[("Accept", "application/json")]) self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") data = json.loads(response.data.decode("ascii")) self.assertEqual(data["file"]["name"], "SongB.mp3")
def testGetSongs(self): """ Get a list of all the songs from a populated DB """ # Create testing data # Create a couple of sample files fileA = models.File(name="BornThisWay.mp3") fileB = models.File(name="PokerFace.mp3") # Add them to the session and commit session.add_all([fileA, fileB]) session.commit() # Create a couple of songs from the files songA = models.Song(file_id=fileA.id) songB = models.Song(file_id=fileB.id) # And add/commit session.add_all([songA, songB]) session.commit() # Go to the page and get the response from the server, store it here # This is the part actually being tested response = self.client.get( "/api/songs", headers=[("Accept", "application/json")], ) # This is the actual test # Was the request to the endpoint successful? self.assertEqual(response.status_code, 200) # Did the request return a JSON object? self.assertEqual(response.mimetype, "application/json") # Decode the data using json.loads data = json.loads(response.data) # Verify that two songs have been returned self.assertEqual(len(data), 2) # Verify the contents of both songs as correct songA = data[0] self.assertEqual(songA["id"], 1) fileA = songA["file"] self.assertEqual(fileA["name"], "BornThisWay.mp3") songB = data[1] self.assertEqual(songB["id"], 2) fileB = songB["file"] self.assertEqual(fileB["name"], "PokerFace.mp3")
def test_get_song(self): # test for getting one song # populate db file_A = models.File(name='file_A.mp3') song_A = models.Song(file=file_A) file_B = models.File(name='file_B.mp3') song_B = models.Song(file=file_B) session.add_all([file_A, file_B, song_A, song_B]) session.commit() response = self.client.get('/api/songs/{}'.format(song_B.id), headers=[("Accept", "application/json")]) self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, 'application/json') song = json.loads(response.data.decode('ascii')) self.assertEqual(song['id'], song_B.id) self.assertEqual(song['file']['id'], song_B.file.id) self.assertEqual(song['file']['name'], song_B.file.name)
def test_get_songs(self): """ Test GET songs from populated database """ # Add test files and songs to database fileA = models.File(filename='love_song.mp3') fileB = models.File(filename='another_song.mp3') session.add_all([fileA, fileB]) songA = models.Song(files=fileA) songB = models.Song(files=fileB) session.add_all([songA, songB]) session.commit() # Ensure endpoint exists and is returning JSON response = self.client.get("/api/songs", headers=[("Accept", "application/json")]) self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") # Ensure 'songs' table contains two entries related to those in the 'files' table data = json.loads(response.data.decode('ascii')) self.assertEqual(len(data), 2) self.assertEqual(data[0]['file']['id'], fileA.id) self.assertEqual(data[1]['file']['id'], fileB.id)
def test_delete_song(self): #Deleting songs from a populated database fileA = models.File(name="SongA.mp3") songA = models.Song(file=fileA) fileB = models.File(name="SongB.mp3") songB = models.Song(file=fileB) session.add_all([fileA, fileB, songA, songB]) session.commit() response = self.client.delete("/api/songs/{}".format(songA.id), headers=[("Accept", "application/json")]) self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") data = json.loads(response.data.decode("ascii")) self.assertEqual(data["message"], "Deleted song with id 1") # Assert that there is only one song in the database songs = session.query(models.Song).all() self.assertEqual(len(songs), 1) # Assert that the right song was deleted song = songs[0] self.assertEqual(song.file.name, "SongB.mp3")
def post_songs(self): """ Post songs Test """ test_song = {"file": {"id": 9}} new_song = models.Song(test_song) session.add(test_song) session.commit() response = self.client.post("/api/songs") self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") data = json.loads(response.data.decode("ascii")) self.assertEqual(len(data), 2)
def test_post_songs(self): """ Post songs Test """ test_file = models.File(name="test_file") session.add(test_file) session.commit() file_test = session.query(models.File).order_by( models.File.name).first() new_song = models.Song(file=file_test) session.add(new_song) session.commit() response = self.client.post("/api/songs") self.assertEqual(response.status_code, 415) self.assertEqual(response.mimetype, "application/json")
def test_delete_song(self): new_file = models.File(name='New_File') session.add(new_file) session.commit() new_song = models.Song(file_id=new_file.id) session.add(new_song) session.commit() response = self.client.delete("/api/songs/{}".format(new_song.id), headers=[("Accept", "application/json")]) session.delete(new_file) session.commit() self.assertEqual(response.status_code, 200) self.assertEqual(response.mimetype, "application/json") songs = session.query(models.Song).all() self.assertEqual(len(songs), 0)
def test_get_songs(self): """ Getting songs from a populated database """ fileA = models.File(name="Shady_Grove.mp3") songA = models.Song(filename=fileA) session.add_all([songA, fileA]) session.commit() response = self.client.get("/api/songs", headers=[("Accept", "application/json")]) #Was request to endpoint successful? self.assertEqual(response.status_code, 200) #Was the response a JSON object self.assertEqual(response.mimetype, "application/json") #decode data data = json.loads(response.data.decode("ascii")) #check to see if it is only one song in data self.assertEqual(len(data), 1) songA = data[0] self.assertEqual(fileA.name, "Shady_Grove.mp3") self.assertEqual(songA["id"], 1)
def add_song(): drones = models.File(filename="Drones.mp3") drones_id = models.Song(file_id=1) session.add_all([drones, drones_id]) session.commit()