mirror of https://github.com/stashapp/stash.git
285 lines
5.6 KiB
Go
285 lines
5.6 KiB
Go
package gallery
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"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 (
|
|
galleryID = 1
|
|
|
|
studioID = 4
|
|
missingStudioID = 5
|
|
errStudioID = 6
|
|
|
|
// noTagsID = 11
|
|
noChaptersID = 7
|
|
errChaptersID = 8
|
|
errFindByChapterID = 9
|
|
)
|
|
|
|
var (
|
|
url = "url"
|
|
title = "title"
|
|
date = "2001-01-01"
|
|
dateObj, _ = models.ParseDate(date)
|
|
rating = 5
|
|
organized = true
|
|
details = "details"
|
|
)
|
|
|
|
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 createFullGallery(id int) models.Gallery {
|
|
return models.Gallery{
|
|
ID: id,
|
|
Files: models.NewRelatedFiles([]models.File{
|
|
&models.BaseFile{
|
|
Path: path,
|
|
},
|
|
}),
|
|
Title: title,
|
|
Date: &dateObj,
|
|
Details: details,
|
|
Rating: &rating,
|
|
Organized: organized,
|
|
URLs: models.NewRelatedStrings([]string{url}),
|
|
CreatedAt: createTime,
|
|
UpdatedAt: updateTime,
|
|
}
|
|
}
|
|
|
|
func createEmptyGallery(id int) models.Gallery {
|
|
return models.Gallery{
|
|
ID: id,
|
|
Files: models.NewRelatedFiles([]models.File{
|
|
&models.BaseFile{
|
|
Path: path,
|
|
},
|
|
}),
|
|
CreatedAt: createTime,
|
|
UpdatedAt: updateTime,
|
|
}
|
|
}
|
|
|
|
func createFullJSONGallery() *jsonschema.Gallery {
|
|
return &jsonschema.Gallery{
|
|
Title: title,
|
|
Date: date,
|
|
Details: details,
|
|
Rating: rating,
|
|
Organized: organized,
|
|
URLs: []string{url},
|
|
ZipFiles: []string{path},
|
|
CreatedAt: json.JSONTime{
|
|
Time: createTime,
|
|
},
|
|
UpdatedAt: json.JSONTime{
|
|
Time: updateTime,
|
|
},
|
|
}
|
|
}
|
|
|
|
type basicTestScenario struct {
|
|
input models.Gallery
|
|
expected *jsonschema.Gallery
|
|
err bool
|
|
}
|
|
|
|
var scenarios = []basicTestScenario{
|
|
{
|
|
createFullGallery(galleryID),
|
|
createFullJSONGallery(),
|
|
false,
|
|
},
|
|
}
|
|
|
|
func TestToJSON(t *testing.T) {
|
|
for i, s := range scenarios {
|
|
gallery := s.input
|
|
json, err := ToBasicJSON(&gallery)
|
|
|
|
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)
|
|
}
|
|
}
|
|
}
|
|
|
|
func createStudioGallery(studioID int) models.Gallery {
|
|
return models.Gallery{
|
|
StudioID: &studioID,
|
|
}
|
|
}
|
|
|
|
type stringTestScenario struct {
|
|
input models.Gallery
|
|
expected string
|
|
err bool
|
|
}
|
|
|
|
var getStudioScenarios = []stringTestScenario{
|
|
{
|
|
createStudioGallery(studioID),
|
|
studioName,
|
|
false,
|
|
},
|
|
{
|
|
createStudioGallery(missingStudioID),
|
|
"",
|
|
false,
|
|
},
|
|
{
|
|
createStudioGallery(errStudioID),
|
|
"",
|
|
true,
|
|
},
|
|
}
|
|
|
|
func TestGetStudioName(t *testing.T) {
|
|
db := mocks.NewDatabase()
|
|
|
|
studioErr := errors.New("error getting image")
|
|
|
|
db.Studio.On("Find", testCtx, studioID).Return(&models.Studio{
|
|
Name: studioName,
|
|
}, nil).Once()
|
|
db.Studio.On("Find", testCtx, missingStudioID).Return(nil, nil).Once()
|
|
db.Studio.On("Find", testCtx, errStudioID).Return(nil, studioErr).Once()
|
|
|
|
for i, s := range getStudioScenarios {
|
|
gallery := s.input
|
|
json, err := GetStudioName(testCtx, db.Studio, &gallery)
|
|
|
|
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)
|
|
}
|
|
}
|
|
|
|
db.AssertExpectations(t)
|
|
}
|
|
|
|
const (
|
|
validChapterID1 = 1
|
|
validChapterID2 = 2
|
|
|
|
chapterTitle1 = "chapterTitle1"
|
|
chapterTitle2 = "chapterTitle2"
|
|
|
|
chapterImageIndex1 = 10
|
|
chapterImageIndex2 = 50
|
|
)
|
|
|
|
type galleryChaptersTestScenario struct {
|
|
input models.Gallery
|
|
expected []jsonschema.GalleryChapter
|
|
err bool
|
|
}
|
|
|
|
var getGalleryChaptersJSONScenarios = []galleryChaptersTestScenario{
|
|
{
|
|
createEmptyGallery(galleryID),
|
|
[]jsonschema.GalleryChapter{
|
|
{
|
|
Title: chapterTitle1,
|
|
ImageIndex: chapterImageIndex1,
|
|
CreatedAt: json.JSONTime{
|
|
Time: createTime,
|
|
},
|
|
UpdatedAt: json.JSONTime{
|
|
Time: updateTime,
|
|
},
|
|
},
|
|
{
|
|
Title: chapterTitle2,
|
|
ImageIndex: chapterImageIndex2,
|
|
CreatedAt: json.JSONTime{
|
|
Time: createTime,
|
|
},
|
|
UpdatedAt: json.JSONTime{
|
|
Time: updateTime,
|
|
},
|
|
},
|
|
},
|
|
false,
|
|
},
|
|
{
|
|
createEmptyGallery(noChaptersID),
|
|
nil,
|
|
false,
|
|
},
|
|
{
|
|
createEmptyGallery(errChaptersID),
|
|
nil,
|
|
true,
|
|
},
|
|
}
|
|
|
|
var validChapters = []*models.GalleryChapter{
|
|
{
|
|
ID: validChapterID1,
|
|
Title: chapterTitle1,
|
|
ImageIndex: chapterImageIndex1,
|
|
CreatedAt: createTime,
|
|
UpdatedAt: updateTime,
|
|
},
|
|
{
|
|
ID: validChapterID2,
|
|
Title: chapterTitle2,
|
|
ImageIndex: chapterImageIndex2,
|
|
CreatedAt: createTime,
|
|
UpdatedAt: updateTime,
|
|
},
|
|
}
|
|
|
|
func TestGetGalleryChaptersJSON(t *testing.T) {
|
|
db := mocks.NewDatabase()
|
|
|
|
chaptersErr := errors.New("error getting gallery chapters")
|
|
|
|
db.GalleryChapter.On("FindByGalleryID", testCtx, galleryID).Return(validChapters, nil).Once()
|
|
db.GalleryChapter.On("FindByGalleryID", testCtx, noChaptersID).Return(nil, nil).Once()
|
|
db.GalleryChapter.On("FindByGalleryID", testCtx, errChaptersID).Return(nil, chaptersErr).Once()
|
|
|
|
for i, s := range getGalleryChaptersJSONScenarios {
|
|
gallery := s.input
|
|
json, err := GetGalleryChaptersJSON(testCtx, db.GalleryChapter, &gallery)
|
|
|
|
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)
|
|
}
|
|
}
|
|
|
|
db.AssertExpectations(t)
|
|
}
|