mirror of
https://github.com/stashapp/stash.git
synced 2025-12-18 04:44:37 +03:00
Data layer restructuring (#997)
* Move query builders to sqlite package * Add transaction system * Wrap model resolvers in transaction * Add error return value for StringSliceToIntSlice * Update/refactor mutation resolvers * Convert query builders * Remove unused join types * Add stash id unit tests * Use WAL journal mode
This commit is contained in:
@@ -7,7 +7,6 @@ import (
|
||||
"github.com/stashapp/stash/pkg/manager/jsonschema"
|
||||
"github.com/stashapp/stash/pkg/models"
|
||||
"github.com/stashapp/stash/pkg/models/mocks"
|
||||
"github.com/stashapp/stash/pkg/models/modelstest"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"testing"
|
||||
@@ -92,33 +91,33 @@ var updateTime time.Time = time.Date(2002, 01, 01, 0, 0, 0, 0, time.UTC)
|
||||
func createFullScene(id int) models.Scene {
|
||||
return models.Scene{
|
||||
ID: id,
|
||||
Title: modelstest.NullString(title),
|
||||
AudioCodec: modelstest.NullString(audioCodec),
|
||||
Bitrate: modelstest.NullInt64(bitrate),
|
||||
Checksum: modelstest.NullString(checksum),
|
||||
Title: models.NullString(title),
|
||||
AudioCodec: models.NullString(audioCodec),
|
||||
Bitrate: models.NullInt64(bitrate),
|
||||
Checksum: models.NullString(checksum),
|
||||
Date: models.SQLiteDate{
|
||||
String: date,
|
||||
Valid: true,
|
||||
},
|
||||
Details: modelstest.NullString(details),
|
||||
Details: models.NullString(details),
|
||||
Duration: sql.NullFloat64{
|
||||
Float64: duration,
|
||||
Valid: true,
|
||||
},
|
||||
Format: modelstest.NullString(format),
|
||||
Format: models.NullString(format),
|
||||
Framerate: sql.NullFloat64{
|
||||
Float64: framerate,
|
||||
Valid: true,
|
||||
},
|
||||
Height: modelstest.NullInt64(height),
|
||||
Height: models.NullInt64(height),
|
||||
OCounter: ocounter,
|
||||
OSHash: modelstest.NullString(oshash),
|
||||
Rating: modelstest.NullInt64(rating),
|
||||
OSHash: models.NullString(oshash),
|
||||
Rating: models.NullInt64(rating),
|
||||
Organized: organized,
|
||||
Size: modelstest.NullString(size),
|
||||
VideoCodec: modelstest.NullString(videoCodec),
|
||||
Width: modelstest.NullInt64(width),
|
||||
URL: modelstest.NullString(url),
|
||||
Size: models.NullString(size),
|
||||
VideoCodec: models.NullString(videoCodec),
|
||||
Width: models.NullInt64(width),
|
||||
URL: models.NullString(url),
|
||||
CreatedAt: models.SQLiteTimestamp{
|
||||
Timestamp: createTime,
|
||||
},
|
||||
@@ -213,9 +212,9 @@ func TestToJSON(t *testing.T) {
|
||||
|
||||
imageErr := errors.New("error getting image")
|
||||
|
||||
mockSceneReader.On("GetSceneCover", sceneID).Return(imageBytes, nil).Once()
|
||||
mockSceneReader.On("GetSceneCover", noImageID).Return(nil, nil).Once()
|
||||
mockSceneReader.On("GetSceneCover", errImageID).Return(nil, imageErr).Once()
|
||||
mockSceneReader.On("GetCover", sceneID).Return(imageBytes, nil).Once()
|
||||
mockSceneReader.On("GetCover", noImageID).Return(nil, nil).Once()
|
||||
mockSceneReader.On("GetCover", errImageID).Return(nil, imageErr).Once()
|
||||
|
||||
for i, s := range scenarios {
|
||||
scene := s.input
|
||||
@@ -235,7 +234,7 @@ func TestToJSON(t *testing.T) {
|
||||
|
||||
func createStudioScene(studioID int) models.Scene {
|
||||
return models.Scene{
|
||||
StudioID: modelstest.NullInt64(int64(studioID)),
|
||||
StudioID: models.NullInt64(int64(studioID)),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -269,7 +268,7 @@ func TestGetStudioName(t *testing.T) {
|
||||
studioErr := errors.New("error getting image")
|
||||
|
||||
mockStudioReader.On("Find", studioID).Return(&models.Studio{
|
||||
Name: modelstest.NullString(studioName),
|
||||
Name: models.NullString(studioName),
|
||||
}, nil).Once()
|
||||
mockStudioReader.On("Find", missingStudioID).Return(nil, nil).Once()
|
||||
mockStudioReader.On("Find", errStudioID).Return(nil, studioErr).Once()
|
||||
@@ -436,44 +435,44 @@ var getSceneMoviesJSONScenarios = []sceneMoviesTestScenario{
|
||||
var validMovies = []models.MoviesScenes{
|
||||
{
|
||||
MovieID: validMovie1,
|
||||
SceneIndex: modelstest.NullInt64(movie1Scene),
|
||||
SceneIndex: models.NullInt64(movie1Scene),
|
||||
},
|
||||
{
|
||||
MovieID: validMovie2,
|
||||
SceneIndex: modelstest.NullInt64(movie2Scene),
|
||||
SceneIndex: models.NullInt64(movie2Scene),
|
||||
},
|
||||
}
|
||||
|
||||
var invalidMovies = []models.MoviesScenes{
|
||||
{
|
||||
MovieID: invalidMovie,
|
||||
SceneIndex: modelstest.NullInt64(movie1Scene),
|
||||
SceneIndex: models.NullInt64(movie1Scene),
|
||||
},
|
||||
}
|
||||
|
||||
func TestGetSceneMoviesJSON(t *testing.T) {
|
||||
mockMovieReader := &mocks.MovieReaderWriter{}
|
||||
mockJoinReader := &mocks.JoinReaderWriter{}
|
||||
mockSceneReader := &mocks.SceneReaderWriter{}
|
||||
|
||||
joinErr := errors.New("error getting scene movies")
|
||||
movieErr := errors.New("error getting movie")
|
||||
|
||||
mockJoinReader.On("GetSceneMovies", sceneID).Return(validMovies, nil).Once()
|
||||
mockJoinReader.On("GetSceneMovies", noMoviesID).Return(nil, nil).Once()
|
||||
mockJoinReader.On("GetSceneMovies", errMoviesID).Return(nil, joinErr).Once()
|
||||
mockJoinReader.On("GetSceneMovies", errFindMovieID).Return(invalidMovies, nil).Once()
|
||||
mockSceneReader.On("GetMovies", sceneID).Return(validMovies, nil).Once()
|
||||
mockSceneReader.On("GetMovies", noMoviesID).Return(nil, nil).Once()
|
||||
mockSceneReader.On("GetMovies", errMoviesID).Return(nil, joinErr).Once()
|
||||
mockSceneReader.On("GetMovies", errFindMovieID).Return(invalidMovies, nil).Once()
|
||||
|
||||
mockMovieReader.On("Find", validMovie1).Return(&models.Movie{
|
||||
Name: modelstest.NullString(movie1Name),
|
||||
Name: models.NullString(movie1Name),
|
||||
}, nil).Once()
|
||||
mockMovieReader.On("Find", validMovie2).Return(&models.Movie{
|
||||
Name: modelstest.NullString(movie2Name),
|
||||
Name: models.NullString(movie2Name),
|
||||
}, nil).Once()
|
||||
mockMovieReader.On("Find", invalidMovie).Return(nil, movieErr).Once()
|
||||
|
||||
for i, s := range getSceneMoviesJSONScenarios {
|
||||
scene := s.input
|
||||
json, err := GetSceneMoviesJSON(mockMovieReader, mockJoinReader, &scene)
|
||||
json, err := GetSceneMoviesJSON(mockMovieReader, mockSceneReader, &scene)
|
||||
|
||||
if !s.err && err != nil {
|
||||
t.Errorf("[%d] unexpected error: %s", i, err.Error())
|
||||
|
||||
Reference in New Issue
Block a user