stash/pkg/image/export_test.go

160 lines
3.0 KiB
Go

package image
import (
"errors"
"github.com/stashapp/stash/pkg/file"
"github.com/stashapp/stash/pkg/models"
"github.com/stashapp/stash/pkg/models/json"
"github.com/stashapp/stash/pkg/models/jsonschema"
"github.com/stashapp/stash/pkg/models/mocks"
"github.com/stretchr/testify/assert"
"testing"
"time"
)
const (
imageID = 1
studioID = 4
missingStudioID = 5
errStudioID = 6
)
var (
title = "title"
rating = 5
url = "http://a.com"
date = "2001-01-01"
dateObj, _ = models.ParseDate(date)
organized = true
ocounter = 2
)
const (
studioName = "studioName"
path = "path"
)
var (
createTime = time.Date(2001, 01, 01, 0, 0, 0, 0, time.UTC)
updateTime = time.Date(2002, 01, 01, 0, 0, 0, 0, time.UTC)
)
func createFullImage(id int) models.Image {
return models.Image{
ID: id,
Files: models.NewRelatedFiles([]file.File{
&file.BaseFile{
Path: path,
},
}),
Title: title,
OCounter: ocounter,
Rating: &rating,
Date: &dateObj,
URL: url,
Organized: organized,
CreatedAt: createTime,
UpdatedAt: updateTime,
}
}
func createFullJSONImage() *jsonschema.Image {
return &jsonschema.Image{
Title: title,
OCounter: ocounter,
Rating: rating,
Date: date,
URL: url,
Organized: organized,
Files: []string{path},
CreatedAt: json.JSONTime{
Time: createTime,
},
UpdatedAt: json.JSONTime{
Time: updateTime,
},
}
}
type basicTestScenario struct {
input models.Image
expected *jsonschema.Image
}
var scenarios = []basicTestScenario{
{
createFullImage(imageID),
createFullJSONImage(),
},
}
func TestToJSON(t *testing.T) {
for i, s := range scenarios {
image := s.input
json := ToBasicJSON(&image)
assert.Equal(t, s.expected, json, "[%d]", i)
}
}
func createStudioImage(studioID int) models.Image {
return models.Image{
StudioID: &studioID,
}
}
type stringTestScenario struct {
input models.Image
expected string
err bool
}
var getStudioScenarios = []stringTestScenario{
{
createStudioImage(studioID),
studioName,
false,
},
{
createStudioImage(missingStudioID),
"",
false,
},
{
createStudioImage(errStudioID),
"",
true,
},
}
func TestGetStudioName(t *testing.T) {
mockStudioReader := &mocks.StudioReaderWriter{}
studioErr := errors.New("error getting image")
mockStudioReader.On("Find", testCtx, studioID).Return(&models.Studio{
Name: studioName,
}, nil).Once()
mockStudioReader.On("Find", testCtx, missingStudioID).Return(nil, nil).Once()
mockStudioReader.On("Find", testCtx, errStudioID).Return(nil, studioErr).Once()
for i, s := range getStudioScenarios {
image := s.input
json, err := GetStudioName(testCtx, mockStudioReader, &image)
switch {
case !s.err && err != nil:
t.Errorf("[%d] unexpected error: %s", i, err.Error())
case s.err && err == nil:
t.Errorf("[%d] expected error not returned", i)
default:
assert.Equal(t, s.expected, json, "[%d]", i)
}
}
mockStudioReader.AssertExpectations(t)
}