python3 ./testing/dummy_testing_data.py
go test -v ./...
+
+ sudo docker stop redis
type DBWrapper struct {
RedisDb *redis.Client
- ctx context.Context
+ Ctx context.Context
PathToSongs string
}
panic(err)
}
- _, err = dbw.RedisDb.HMSet(dbw.ctx, changeSong.Key, map[string]interface{}{
+ _, err = dbw.RedisDb.HMSet(dbw.Ctx, changeSong.Key, map[string]interface{}{
"artistName": changeSong.ArtistName,
"trackName": changeSong.TrackName,
"trackViewUrl": changeSong.TrackViewURL,
panic(err)
}
- intf, err := dbw.RedisDb.HMGet(dbw.ctx, changeFilename.Key, "previewUrl").Result()
+ intf, err := dbw.RedisDb.HMGet(dbw.Ctx, changeFilename.Key, "previewUrl").Result()
if err != nil {
panic(err)
}
panic(err)
}
- _, err = dbw.RedisDb.HMSet(dbw.ctx, changeFilename.Key, map[string]interface{}{
+ _, err = dbw.RedisDb.HMSet(dbw.Ctx, changeFilename.Key, map[string]interface{}{
"previewUrl": changeFilename.NewFilename,
}).Result()
if err != nil {
return
}
- keys, err := dbw.RedisDb.Keys(dbw.ctx, "song:*").Result()
+ keys, err := dbw.RedisDb.Keys(dbw.Ctx, "song:*").Result()
if err != nil {
panic(err)
}
// way to get room information in the first place but it will have to do
allRooms := make([]DBRoom, 0)
- all_keys, _, err := dbw.RedisDb.Scan(dbw.ctx, 0, "*", int64(key_count)).Result()
+ all_keys, _, err := dbw.RedisDb.Scan(dbw.Ctx, 0, "*", int64(key_count)).Result()
if err != nil {
panic(err)
}
for _, k := range all_keys {
- t, err := dbw.RedisDb.Type(dbw.ctx, k).Result()
+ t, err := dbw.RedisDb.Type(dbw.Ctx, k).Result()
if err != nil {
panic(err)
}
if t == "zset" {
- assignedIds, err := dbw.RedisDb.ZRange(dbw.ctx, k, 0, -1).Result()
+ assignedIds, err := dbw.RedisDb.ZRange(dbw.Ctx, k, 0, -1).Result()
if err != nil {
panic(err)
}
// the database unless there ends up being significant performance implications
allSongs := make([]DBSong, key_count)
for i, k := range keys {
- intf, err := dbw.RedisDb.HMGet(dbw.ctx, k, "artistName", "trackName", "trackViewUrl", "previewUrl", "artworkUrl60", "artworkUrl100", "displayArtistNames", "displayTrackName").Result()
+ intf, err := dbw.RedisDb.HMGet(dbw.Ctx, k, "artistName", "trackName", "trackViewUrl", "previewUrl", "artworkUrl60", "artworkUrl100", "displayArtistNames", "displayTrackName").Result()
if err != nil {
panic(err)
}
import (
"encoding/json"
"net/http"
+ "strconv"
)
+/** TEST
+ * An internal method to get the total number of songs as that is just something we need sometimes
+ **/
+func (dbw *DBWrapper) getSongCount() (int, error) {
+ keys, err := dbw.RedisDb.Keys(dbw.Ctx, "song:*").Result()
+ if err != nil {
+ return -1, err
+ }
+ return len(keys), nil
+}
+
/**
* Get all songs, and all their assosciated information from the db
**/
func (dbw *DBWrapper) SongsGet(w http.ResponseWriter, r *http.Request) {
// Here we should return an entire list of songs
- keys, err := dbw.RedisDb.Keys(dbw.ctx, "song:*").Result()
+ keys, err := dbw.RedisDb.Keys(dbw.Ctx, "song:*").Result()
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
return
allSongs := make([]DBSong, key_count)
for i, k := range keys {
- intf, err := dbw.RedisDb.HMGet(dbw.ctx, k, "artistName", "trackName", "trackViewUrl", "previewUrl", "artworkUrl60", "artworkUrl100", "displayArtistNames", "displayTrackName").Result()
+ intf, err := dbw.RedisDb.HMGet(dbw.Ctx, k, "artistName", "trackName", "trackViewUrl", "previewUrl", "artworkUrl60", "artworkUrl100", "displayArtistNames", "displayTrackName").Result()
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
return
}
-/** TODO
+/**
* Create a new song in the database (only in the main list don't add to anything)
**/
func (dbw *DBWrapper) SongsCreate(w http.ResponseWriter, r *http.Request) {
+ count, err := dbw.getSongCount()
+ if err != nil {
+ w.WriteHeader(http.StatusInternalServerError)
+ return
+ }
+
+ newSong := DBSong{}
+ err = json.NewDecoder(r.Body).Decode(&newSong)
+
+ cmd := dbw.RedisDb.HSet(dbw.Ctx, "song:" + strconv.Itoa(count + 1),
+ "artistName", newSong.ArtistName,
+ "trackName", newSong.TrackName,
+ "trackViewUrl", newSong.TrackViewURL,
+ "previewUrl", newSong.PreviewURL,
+ "artworkUrl60", newSong.ArtworkURL60,
+ "artworkUrl100", newSong.ArtworkURL100,
+ "displayArtistNames", newSong.DisplayArtistNames,
+ "displayTrackName", newSong.DisplayTrackName,
+ )
+
+ _, err = cmd.Result()
+ if err != nil {
+ w.WriteHeader(http.StatusInternalServerError)
+ return
+ }
+
+ w.WriteHeader(http.StatusOK)
}
/** TODO
return 0, nil
}
+var songCreateData = dbhandling.DBSong{
+ ArtistName: "CreateTestArtistName",
+ TrackName: "CreateTestTrackName",
+ TrackViewURL: "CreateTestTrackView",
+ PreviewURL: "CreateTestPreviewUrl",
+ ArtworkURL60: "CreateTestArtworkUrl60",
+ ArtworkURL100: "CreateTestAtworkUrl100",
+ DisplayArtistNames: "CreateTestDisplayArtistNames",
+ DisplayTrackName: "CreateTestDisplayTrackName",
+}
+
+type CreateReader struct {}
+
+func (c *CreateReader) Read(p []byte) (int, error) {
+ bin, err := json.Marshal(songCreateData)
+ if err != nil {
+ return 0, err
+ }
+
+ if len(bin) > len(p) {
+ return 0, err
+ }
+
+ count := copy(p, bin)
+ return count, nil
+}
+
func TestGetSongs(t *testing.T) {
// setup some fake requests
}
})
}
+
+
+func TestSongsCreate(t *testing.T) {
+ // setup fake requests and readers
+ r := httptest.NewRequest("POST", "/api/songs/create", &CreateReader{})
+ wrapper := dbhandling.NewDbWrapper("localhost:6379", "./testing/songs")
+
+ t.Run("SongsCreate1", func(t *testing.T) {
+ recorder := httptest.NewRecorder()
+ wrapper.SongsCreate(recorder, r)
+
+ // check if the answer in the recorder is correcct
+ response := recorder.Result()
+ if response.Status != "200 OK" {
+ t.Error("Did not return an OK response code")
+ }
+
+ // check if the data is in the database
+
+ _, err := wrapper.RedisDb.HGetAll(wrapper.Ctx, "song:11").Result()
+ if err != nil {
+ t.Error("Error when getting song:11")
+ }
+
+ })
+}