mirror of
https://github.com/photoprism/photoprism.git
synced 2026-07-22 01:31:21 +00:00
90 lines
2 KiB
Go
90 lines
2 KiB
Go
package entity
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"gorm.io/gorm"
|
|
|
|
"github.com/photoprism/photoprism/pkg/rnd"
|
|
)
|
|
|
|
func TestSave(t *testing.T) {
|
|
t.Run("HasCreatedUpdatedAt", func(t *testing.T) {
|
|
id := missingPhotoID()
|
|
m := Photo{ID: id, PhotoUID: rnd.GenerateUID(PhotoUID), UpdatedAt: Now(), CreatedAt: Now()}
|
|
|
|
if err := m.Save(); err != nil {
|
|
t.Fatal(err)
|
|
return
|
|
}
|
|
|
|
assert.Equal(t, id, m.ID)
|
|
assert.NotNil(t, FindPhoto(m))
|
|
})
|
|
t.Run("HasCreatedAt", func(t *testing.T) {
|
|
m := Photo{PhotoUID: rnd.GenerateUID(PhotoUID), CreatedAt: Now()}
|
|
|
|
if err := m.Save(); err != nil {
|
|
t.Fatal(err)
|
|
return
|
|
}
|
|
|
|
assert.NotNil(t, FindPhoto(m))
|
|
})
|
|
t.Run("NoCreatedAt", func(t *testing.T) {
|
|
m := Photo{PhotoUID: rnd.GenerateUID(PhotoUID), CreatedAt: Now()}
|
|
|
|
if err := m.Save(); err != nil {
|
|
t.Fatal(err)
|
|
return
|
|
}
|
|
|
|
assert.NotNil(t, FindPhoto(m))
|
|
})
|
|
|
|
t.Run("NewParentPhotoWithNewChildDetails", func(t *testing.T) {
|
|
stmt := Db()
|
|
labelotter := Label{LabelName: "otterz", LabelSlug: "otterz"}
|
|
var deletedAt = gorm.DeletedAt{Time: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC), Valid: true}
|
|
labelsnake := Label{LabelName: "snakez", LabelSlug: "snakez", DeletedAt: deletedAt}
|
|
|
|
err := labelsnake.Save()
|
|
if err != nil {
|
|
assert.Nil(t, err)
|
|
t.FailNow()
|
|
}
|
|
|
|
err = labelotter.Save()
|
|
if err != nil {
|
|
assert.Nil(t, err)
|
|
t.FailNow()
|
|
}
|
|
|
|
details := &Details{Keywords: "cow, flower, snakez, otterz"}
|
|
photo := Photo{ID: 934567, Details: details}
|
|
|
|
log.Info("Expect 2 x foreign key violation Error or SQLSTATE from entity_save")
|
|
err = photo.Save()
|
|
assert.Nil(t, err)
|
|
if err != nil {
|
|
UnscopedDb().Delete(&labelotter)
|
|
UnscopedDb().Delete(&labelsnake)
|
|
t.FailNow()
|
|
}
|
|
|
|
photo2 := Photo{ID: 934567}
|
|
res := stmt.Preload("Details").First(&photo2)
|
|
if res.Error != nil {
|
|
assert.Nil(t, res.Error)
|
|
t.FailNow()
|
|
}
|
|
|
|
assert.NotNil(t, photo2.Details)
|
|
if photo2.Details != nil {
|
|
assert.Equal(t, details.Keywords, photo2.Details.Keywords)
|
|
}
|
|
photo2.DeletePermanently()
|
|
})
|
|
}
|