瀏覽代碼

feat: handle case in shuffle repository when there are no songs in the database

Fela Maslen 4 年之前
父節點
當前提交
f793b9152a
共有 2 個文件被更改,包括 21 次插入2 次删除
  1. 6 2
      gmus-backend/pkg/repository/player.go
  2. 15 0
      gmus-backend/pkg/repository/player_test.go

+ 6 - 2
gmus-backend/pkg/repository/player.go

@@ -38,10 +38,14 @@ func GetShuffledSong(db *sqlx.DB, currentSongId *int) (shuffledSong *types.Song,
 
 	if currentSongId == nil {
 		err = db.QueryRowx(querySelectFirstShuffledSong).StructScan(shuffledSong)
-		return
+	} else {
+		err = db.QueryRowx(querySelectNextShuffledSong, *currentSongId).StructScan(shuffledSong)
 	}
 
-	err = db.QueryRowx(querySelectNextShuffledSong, *currentSongId).StructScan(shuffledSong)
+	if err != nil && err == sql.ErrNoRows {
+		err = nil
+		shuffledSong = &types.Song{Id: 0}
+	}
 
 	return
 }

+ 15 - 0
gmus-backend/pkg/repository/player_test.go

@@ -7,6 +7,7 @@ import (
 	"github.com/felamaslen/gmus-backend/pkg/database"
 	"github.com/felamaslen/gmus-backend/pkg/repository"
 	"github.com/felamaslen/gmus-backend/pkg/testing"
+	"github.com/felamaslen/gmus-backend/pkg/types"
 )
 
 var _ = Describe("Player repository", func() {
@@ -177,5 +178,19 @@ var _ = Describe("Player repository", func() {
 				Expect(result.Id).To(BeElementOf(ids))
 			})
 		})
+
+		Context("when there are no songs in the database", func() {
+			BeforeEach(func() {
+				db.MustExec(`truncate songs`)
+			})
+
+			It("should return an empty result", func() {
+				result, err := repository.GetShuffledSong(db, nil)
+				Expect(err).To(BeNil())
+				Expect(result).To(Equal(&types.Song{
+					Id: 0,
+				}))
+			})
+		})
 	})
 })