Skip to content

Commit

Permalink
fixed tests
Browse files Browse the repository at this point in the history
  • Loading branch information
tomvodi committed Aug 25, 2024
1 parent d64dddf commit cbef2c6
Show file tree
Hide file tree
Showing 7 changed files with 154 additions and 95 deletions.
5 changes: 4 additions & 1 deletion internal/common/import_file_info.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@ type ImportFileInfo struct {
Data []byte
}

func NewImportFileInfoFromLocalFile(originalPath string, fType file_type.Type) (*ImportFileInfo, error) {
func NewImportFileInfoFromLocalFile(
originalPath string,
fType file_type.Type,
) (*ImportFileInfo, error) {
fHash, err := HashFromFile(originalPath)
if err != nil {
return nil, err
Expand Down
7 changes: 5 additions & 2 deletions internal/common/import_file_info_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package common

import (
. "github.com/onsi/gomega"
"github.com/tomvodi/limepipes-plugin-api/plugin/v1/file_type"
"github.com/tomvodi/limepipes/internal/utils"
"testing"
)
Expand All @@ -28,6 +29,7 @@ func Test_NewImportFileInfoFromLocalFile(t *testing.T) {
Name: "test",
Hash: "534b1d50f10ee4ea30604ce01660e2429682fe6e53a4ef6a9d01c835ef73b866",
Data: []byte(`Bagpipe Reader:1.0`),
FileType: file_type.Type_BWW,
}
f.wantErr = false
},
Expand All @@ -42,7 +44,7 @@ func Test_NewImportFileInfoFromLocalFile(t *testing.T) {
tt.prepare(f)
}

fileInfo, err := NewImportFileInfoFromLocalFile(f.originalPath)
fileInfo, err := NewImportFileInfoFromLocalFile(f.originalPath, file_type.Type_BWW)
if f.wantErr {
g.Expect(err).Should(HaveOccurred())
} else {
Expand Down Expand Up @@ -77,6 +79,7 @@ func Test_NewImportFileInfo(t *testing.T) {
Name: "test",
Hash: "534b1d50f10ee4ea30604ce01660e2429682fe6e53a4ef6a9d01c835ef73b866",
Data: f.fileData,
FileType: file_type.Type_BWW,
}
f.wantErr = false
},
Expand All @@ -91,7 +94,7 @@ func Test_NewImportFileInfo(t *testing.T) {
tt.prepare(f)
}

fileInfo, err := NewImportFileInfo(f.fileName, f.fileData)
fileInfo, err := NewImportFileInfo(f.fileName, file_type.Type_BWW, f.fileData)
if f.wantErr {
g.Expect(err).Should(HaveOccurred())
} else {
Expand Down
159 changes: 108 additions & 51 deletions internal/database/db_data_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -276,9 +276,13 @@ func (d *dbService) MusicSets() ([]*apimodel.MusicSet, error) {
return nil, err
}

var apiSets []*apimodel.MusicSet
if err := copier.Copy(&apiSets, sets); err != nil {
return nil, err
apiSets := make([]*apimodel.MusicSet, len(sets))
for i, set := range sets {
var err error
apiSets[i], err = apiSetFromDbSet(&set)
if err != nil {
return nil, err
}
}

for _, apiSet := range apiSets {
Expand All @@ -305,6 +309,7 @@ func (d *dbService) CreateMusicSet(
if err := copier.Copy(&dbSet, &musicSet); err != nil {
return &apimodel.MusicSet{}, fmt.Errorf("could not create db object")
}
dbSet.Tunes = nil

newTunes, err := d.dbTunesFromIds(musicSet.Tunes)
if err != nil {
Expand All @@ -327,9 +332,9 @@ func (d *dbService) CreateMusicSet(
}

dbSet.Tunes = newTunes
apiSet := &apimodel.MusicSet{}
if err := copier.Copy(apiSet, dbSet); err != nil {
return nil, err
apiSet, err := apiSetFromDbSet(&dbSet)
if err != nil {
return &apimodel.MusicSet{}, err
}

return apiSet, nil
Expand All @@ -341,8 +346,8 @@ func (d *dbService) GetMusicSet(id uuid.UUID) (*apimodel.MusicSet, error) {
return &apimodel.MusicSet{}, common.NotFound
}

apiSet := &apimodel.MusicSet{}
if err := copier.Copy(apiSet, set); err != nil {
apiSet, err := apiSetFromDbSet(set)
if err != nil {
return &apimodel.MusicSet{}, err
}

Expand All @@ -353,6 +358,20 @@ func (d *dbService) GetMusicSet(id uuid.UUID) (*apimodel.MusicSet, error) {
return apiSet, nil
}

func apiSetFromDbSet(dbSet *model.MusicSet) (*apimodel.MusicSet, error) {
apiSet := &apimodel.MusicSet{}
if err := copier.Copy(apiSet, dbSet); err != nil {
return nil, err
}
// Copier creates a default empty slice if the tunes are nil
// so we set it to nil if there are no tunes
if len(apiSet.Tunes) == 0 {
apiSet.Tunes = nil
}

return apiSet, nil
}

func (d *dbService) getMusicSetByTuneIds(tuneIds []uuid.UUID) (*apimodel.MusicSet, error) {
allMusicSets, err := d.MusicSets()
if err != nil {
Expand Down Expand Up @@ -395,8 +414,10 @@ func (d *dbService) setTunesInApiSet(apiSet *apimodel.MusicSet) error {
return fmt.Errorf("failed getting music set tunes: %s", err.Error())
}

if err := copier.Copy(&apiSet.Tunes, &setTunes); err != nil {
return err
if len(setTunes) > 0 {
if err := copier.Copy(&apiSet.Tunes, &setTunes); err != nil {
return err
}
}

return nil
Expand Down Expand Up @@ -442,8 +463,8 @@ func (d *dbService) UpdateMusicSet(id uuid.UUID, updateSet apimodel.UpdateSet) (
}

dbSet.Tunes = newTunes
apiSet := &apimodel.MusicSet{}
if err := copier.Copy(apiSet, dbSet); err != nil {
apiSet, err := apiSetFromDbSet(dbSet)
if err != nil {
return nil, err
}

Expand Down Expand Up @@ -593,6 +614,7 @@ func (d *dbService) ImportTunes(
fileInfo *common.ImportFileInfo,
) ([]*apimodel.ImportTune, *apimodel.BasicMusicSet, error) {
var apiTunes []*apimodel.ImportTune
var musicSet *apimodel.BasicMusicSet

if fileInfo == nil {
return nil, nil, fmt.Errorf("no file info given")
Expand All @@ -619,29 +641,29 @@ func (d *dbService) ImportTunes(
if timeSig != nil {
timeSigStr = timeSig.DisplayString()
}
alreadyImportedTune := apiTuneWithTitle(newTune.Title, apiTunes)
if alreadyImportedTune != nil {
impTune := &apimodel.ImportTune{}
err := copier.Copy(impTune, alreadyImportedTune)
if err != nil {
return fmt.Errorf("failed creating import tune from already imported tune: %s", err.Error())
}
apiTunes = append(apiTunes, impTune)
continue
}

// when impTune has the same title but for example another arranger,
// the impTune should be added to database
tuneInDb, err := d.getIdenticalTuneFromDb(newTune)
if err == nil {
tune := &apimodel.ImportTune{}
err = copier.Copy(tune, tuneInDb)
if impTune.TuneFileData != nil {
hasData, err := d.hasSingleFileData(impTune.TuneFileData)
if err != nil {
return fmt.Errorf("failed creating import newTune: %s", err.Error())
return err
}

apiTunes = append(apiTunes, tune)
continue
if hasData {
alreadyImportedTune, err := d.getTuneWithSingleFileData(impTune.TuneFileData)
if err != nil {
return err
}

if alreadyImportedTune != nil {
impTune := &apimodel.ImportTune{}
err = copier.Copy(impTune, alreadyImportedTune)
if err != nil {
return fmt.Errorf("failed creating import tune from already imported tune: %s", err.Error())
}
apiTunes = append(apiTunes, impTune)
continue
}
}
}

createTune := apimodel.CreateTune{
Expand All @@ -655,22 +677,22 @@ func (d *dbService) ImportTunes(
if err != nil {
return err
}
tuneFile, err := model.TuneFileFromTune(newTune)
muMoTuneFile, err := model.TuneFileFromMusicModelTune(newTune)
if err != nil {
return err
}

if err = d.AddFileToTune(apiTune.Id, tuneFile); err != nil {
if err = d.AddFileToTune(apiTune.Id, muMoTuneFile); err != nil {
return err
}

if impTune.TuneFileData != nil {
tuneFile = &model.TuneFile{
muMoTuneFile = &model.TuneFile{
Type: fileInfo.FileType,
Data: impTune.TuneFileData,
SingleTuneData: true,
}
if err = d.AddFileToTune(apiTune.Id, tuneFile); err != nil {
if err = d.AddFileToTune(apiTune.Id, muMoTuneFile); err != nil {
return err
}
}
Expand All @@ -684,8 +706,6 @@ func (d *dbService) ImportTunes(
apiTunes = append(apiTunes, importTune)
}

var musicSet *apimodel.BasicMusicSet

if len(tunes) > 1 {
var apiSet *apimodel.MusicSet
var err error
Expand Down Expand Up @@ -720,7 +740,7 @@ func (d *dbService) ImportTunes(
return nil, nil, err
}

return apiTunes, nil, nil
return apiTunes, musicSet, nil
}

func musicSetTitleFromTunes(tunes []*apimodel.ImportTune) string {
Expand Down Expand Up @@ -801,25 +821,62 @@ func isMsr(tunes []*apimodel.ImportTune) bool {
return false
}

func apiTuneWithTitle(
title string,
apiTunes []*apimodel.ImportTune,
) *apimodel.ImportTune {
if apiTunes == nil {
return nil
// hasSingleFileData true if a tune with the same single tune file data exists in the database.
func (d *dbService) hasSingleFileData(
data []byte,
) (bool, error) {
if data == nil || len(data) == 0 {
return false, nil
}

for _, tune := range apiTunes {
if tune.Title == title {
return tune
}
_, err := d.getSingleTuneFileByData(data)
if errors.Is(err, gorm.ErrRecordNotFound) {
return false, nil
}
return nil
if err != nil {
return false, err
}

return true, nil
}

// getTuneWithSingleFileData returns the tune with the same single tune file data in database
func (d *dbService) getTuneWithSingleFileData(
data []byte,
) (*apimodel.Tune, error) {
if data == nil || len(data) == 0 {
return nil, fmt.Errorf("no file data given to search for")
}

tf, err := d.getSingleTuneFileByData(data)
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil // no tune with this data found => return nil for tune
}
if err != nil {
return nil, err
}

ft, err := d.GetTune(tf.TuneID)
if err != nil {
return nil, err
}

return ft, nil
}

func (d *dbService) getSingleTuneFileByData(data []byte) (*model.TuneFile, error) {
tf := &model.TuneFile{}
if err := d.db.Where("data = ? AND single_tune_data IS TRUE", data).
First(tf).Error; err != nil {
return nil, err
}

return tf, nil
}

func setMessagesToApiTune(apiTune *apimodel.ImportTune, tune *tune.Tune) {
messages := tune.ImportMessages()
for _, message := range messages {
im := tune.ImportMessages()
for _, message := range im {
switch message.Severity {
case measure.Severity_Error:
apiTune.Errors = append(apiTune.Errors, message.Text)
Expand Down
4 changes: 2 additions & 2 deletions internal/database/db_data_service_crud_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ var _ = Describe("DbDataService", func() {

BeforeEach(func() {
testTune = model.TestImportedTune("test tune")
tuneFile, err = model.TuneFileFromTune(testTune.Tune)
tuneFile, err = model.TuneFileFromMusicModelTune(testTune.Tune)
Expect(err).ShouldNot(HaveOccurred())
err = service.AddFileToTune(tune.Id, tuneFile)
})
Expand All @@ -274,7 +274,7 @@ var _ = Describe("DbDataService", func() {
It("should contain that same music model tune", func() {
returnTune, err := returnTuneFile.MusicModelTune()
Expect(err).ShouldNot(HaveOccurred())
Expect(returnTune).Should(BeComparableTo(testTune, helper.MusicModelCompareOptions))
Expect(returnTune).Should(BeComparableTo(testTune.Tune, helper.MusicModelCompareOptions))
})
})

Expand Down
Loading

0 comments on commit cbef2c6

Please sign in to comment.