2021-05-25 11:38:04 +02:00
|
|
|
package entity
|
|
|
|
|
|
|
|
import (
|
2021-08-28 13:55:37 +02:00
|
|
|
"testing"
|
|
|
|
|
2021-09-05 11:05:33 +02:00
|
|
|
"github.com/photoprism/photoprism/internal/crop"
|
2021-08-27 15:33:06 +02:00
|
|
|
"github.com/photoprism/photoprism/internal/form"
|
2021-05-25 11:38:04 +02:00
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
2021-09-03 16:14:09 +02:00
|
|
|
var testArea = crop.Area{
|
|
|
|
Name: "face",
|
|
|
|
X: 0.308333,
|
|
|
|
Y: 0.206944,
|
|
|
|
W: 0.355556,
|
|
|
|
H: 0.355556,
|
|
|
|
}
|
|
|
|
|
2021-05-25 11:38:04 +02:00
|
|
|
func TestMarker_TableName(t *testing.T) {
|
2021-08-13 20:31:41 +02:00
|
|
|
m := &Marker{}
|
|
|
|
assert.Contains(t, m.TableName(), "markers")
|
2021-05-25 11:38:04 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestNewMarker(t *testing.T) {
|
2021-09-20 16:17:10 +02:00
|
|
|
m := NewMarker(FileFixtures.Get("exampleFileName.jpg"), testArea, "lt9k3pw1wowuy3c3", SrcImage, MarkerLabel, 100, 29)
|
2021-05-25 11:38:04 +02:00
|
|
|
assert.IsType(t, &Marker{}, m)
|
2021-09-01 20:46:15 +02:00
|
|
|
assert.Equal(t, "ft8es39w45bnlqdw", m.FileUID)
|
2021-09-20 16:17:10 +02:00
|
|
|
assert.Equal(t, "2cad9168fa6acc5c5c2965ddf6ec465ca42fd818-1340ce163163", m.Thumb)
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.Equal(t, "lt9k3pw1wowuy3c3", m.SubjUID)
|
2021-09-20 16:17:10 +02:00
|
|
|
assert.True(t, m.MarkerReview)
|
|
|
|
assert.Equal(t, 119, m.Q)
|
|
|
|
assert.Equal(t, 29, m.Score)
|
2021-05-25 11:38:04 +02:00
|
|
|
assert.Equal(t, SrcImage, m.MarkerSrc)
|
|
|
|
assert.Equal(t, MarkerLabel, m.MarkerType)
|
|
|
|
}
|
|
|
|
|
2021-08-30 14:58:37 +02:00
|
|
|
func TestMarker_SaveForm(t *testing.T) {
|
|
|
|
t.Run("fa-ge add new name to marker then rename marker", func(t *testing.T) {
|
|
|
|
m := MarkerFixtures.Get("fa-gr-1")
|
|
|
|
m2 := MarkerFixtures.Get("fa-gr-2")
|
|
|
|
m3 := MarkerFixtures.Get("fa-gr-3")
|
|
|
|
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.Empty(t, m.SubjUID)
|
|
|
|
assert.Empty(t, m2.SubjUID)
|
|
|
|
assert.Empty(t, m3.SubjUID)
|
2021-08-30 14:58:37 +02:00
|
|
|
|
|
|
|
m.MarkerInvalid = true
|
|
|
|
m.Score = 50
|
|
|
|
|
|
|
|
//set new name
|
|
|
|
|
2021-09-17 14:26:12 +02:00
|
|
|
f := form.Marker{SubjSrc: SrcManual, MarkerName: "Jane Doe", MarkerInvalid: false}
|
2021-08-30 14:58:37 +02:00
|
|
|
|
2021-09-17 18:51:24 +02:00
|
|
|
changed, err := m.SaveForm(f)
|
2021-08-30 14:58:37 +02:00
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2021-09-17 18:51:24 +02:00
|
|
|
assert.True(t, changed)
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.NotEmpty(t, m.SubjUID)
|
2021-08-30 14:58:37 +02:00
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
if s := m.Subject(); s != nil {
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.Equal(t, "Jane Doe", s.SubjName)
|
2021-09-01 20:46:15 +02:00
|
|
|
}
|
|
|
|
if m := FindMarker("mt9k3pw1wowuy777"); m != nil {
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.Equal(t, "Jane Doe", m.Subject().SubjName)
|
2021-09-01 20:46:15 +02:00
|
|
|
}
|
|
|
|
if m := FindMarker("mt9k3pw1wowuy888"); m != nil {
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.Equal(t, "Jane Doe", m.Subject().SubjName)
|
2021-09-01 20:46:15 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Rename subject.
|
2021-09-17 14:26:12 +02:00
|
|
|
f3 := form.Marker{SubjSrc: SrcManual, MarkerName: "Franzilein", MarkerInvalid: false}
|
2021-08-30 14:58:37 +02:00
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
if m := FindMarker("mt9k3pw1wowuy777"); m == nil {
|
|
|
|
t.Fatal("result is nil")
|
2021-09-17 18:51:24 +02:00
|
|
|
} else if changed, err := m.SaveForm(f3); err != nil {
|
2021-09-01 20:46:15 +02:00
|
|
|
t.Fatal(err)
|
2021-09-17 18:51:24 +02:00
|
|
|
} else {
|
|
|
|
assert.True(t, changed)
|
2021-08-30 14:58:37 +02:00
|
|
|
}
|
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
if m := FindMarker("mt9k3pw1wowuy666"); m != nil {
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.Equal(t, "Franzilein", m.Subject().SubjName)
|
2021-09-01 20:46:15 +02:00
|
|
|
}
|
|
|
|
if m := FindMarker("mt9k3pw1wowuy777"); m != nil {
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.Equal(t, "Franzilein", m.Subject().SubjName)
|
2021-09-01 20:46:15 +02:00
|
|
|
}
|
|
|
|
if m := FindMarker("mt9k3pw1wowuy888"); m != nil {
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.Equal(t, "Franzilein", m.Subject().SubjName)
|
2021-09-01 20:46:15 +02:00
|
|
|
}
|
2021-08-30 14:58:37 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-05-26 14:41:59 +02:00
|
|
|
func TestUpdateOrCreateMarker(t *testing.T) {
|
2021-05-25 11:38:04 +02:00
|
|
|
t.Run("success", func(t *testing.T) {
|
2021-09-20 16:17:10 +02:00
|
|
|
m := NewMarker(FileFixtures.Get("exampleFileName.jpg"), testArea, "lt9k3pw1wowuy3c3", SrcImage, MarkerLabel, 100, 65)
|
2021-05-25 11:38:04 +02:00
|
|
|
assert.IsType(t, &Marker{}, m)
|
2021-09-01 20:46:15 +02:00
|
|
|
assert.Equal(t, "ft8es39w45bnlqdw", m.FileUID)
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.Equal(t, "lt9k3pw1wowuy3c3", m.SubjUID)
|
2021-05-25 11:38:04 +02:00
|
|
|
assert.Equal(t, SrcImage, m.MarkerSrc)
|
|
|
|
assert.Equal(t, MarkerLabel, m.MarkerType)
|
|
|
|
|
2021-05-26 14:41:59 +02:00
|
|
|
m, err := UpdateOrCreateMarker(m)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2021-05-25 11:38:04 +02:00
|
|
|
|
|
|
|
if m == nil {
|
|
|
|
t.Fatal("result should not be nil")
|
|
|
|
}
|
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
if m.MarkerUID == "" || m.FileUID == "" {
|
|
|
|
t.Errorf("UIDs should not be empty")
|
2021-05-25 11:38:04 +02:00
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMarker_Updates(t *testing.T) {
|
|
|
|
t.Run("success", func(t *testing.T) {
|
2021-09-20 16:17:10 +02:00
|
|
|
m := NewMarker(FileFixtures.Get("exampleFileName.jpg"), testArea, "lt9k3pw1wowuy3c4", SrcImage, MarkerLabel, 100, 65)
|
2021-05-26 14:41:59 +02:00
|
|
|
m, err := UpdateOrCreateMarker(m)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2021-05-25 11:38:04 +02:00
|
|
|
|
|
|
|
assert.Equal(t, SrcImage, m.MarkerSrc)
|
|
|
|
assert.Equal(t, MarkerLabel, m.MarkerType)
|
|
|
|
|
2021-05-26 14:41:59 +02:00
|
|
|
if err := m.Updates(Marker{MarkerSrc: SrcMeta}); err != nil {
|
2021-05-25 11:38:04 +02:00
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
assert.Equal(t, SrcMeta, m.MarkerSrc)
|
|
|
|
assert.Equal(t, MarkerLabel, m.MarkerType)
|
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
if m.MarkerUID == "" || m.FileUID == "" {
|
|
|
|
t.Errorf("UIDs should not be empty")
|
2021-05-25 11:38:04 +02:00
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMarker_Update(t *testing.T) {
|
|
|
|
t.Run("success", func(t *testing.T) {
|
2021-09-20 16:17:10 +02:00
|
|
|
m := NewMarker(FileFixtures.Get("exampleFileName.jpg"), testArea, "lt9k3pw1wowuy3c4", SrcImage, MarkerLabel, 100, 65)
|
2021-05-26 14:41:59 +02:00
|
|
|
m, err := UpdateOrCreateMarker(m)
|
2021-05-25 11:38:04 +02:00
|
|
|
|
2021-05-26 14:41:59 +02:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2021-05-25 11:38:04 +02:00
|
|
|
|
2021-05-26 14:41:59 +02:00
|
|
|
assert.Equal(t, MarkerLabel, m.MarkerType)
|
2021-05-25 11:38:04 +02:00
|
|
|
|
2021-05-26 14:41:59 +02:00
|
|
|
if err := m.Update("MarkerSrc", SrcMeta); err != nil {
|
2021-05-25 11:38:04 +02:00
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
assert.Equal(t, SrcMeta, m.MarkerSrc)
|
|
|
|
assert.Equal(t, MarkerLabel, m.MarkerType)
|
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
if m.MarkerUID == "" || m.FileUID == "" {
|
|
|
|
t.Errorf("UIDs should not be empty")
|
2021-05-25 11:38:04 +02:00
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMarker_Save(t *testing.T) {
|
|
|
|
t.Run("success", func(t *testing.T) {
|
2021-09-20 16:17:10 +02:00
|
|
|
m := NewMarker(FileFixtures.Get("exampleFileName.jpg"), testArea, "lt9k3pw1wowuy3c4", SrcImage, MarkerLabel, 100, 65)
|
2021-09-03 16:14:09 +02:00
|
|
|
|
2021-05-26 14:41:59 +02:00
|
|
|
m, err := UpdateOrCreateMarker(m)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2021-05-25 11:38:04 +02:00
|
|
|
|
|
|
|
assert.Equal(t, MarkerLabel, m.MarkerType)
|
|
|
|
|
|
|
|
m.MarkerSrc = SrcMeta
|
|
|
|
|
|
|
|
assert.Equal(t, SrcMeta, m.MarkerSrc)
|
|
|
|
|
|
|
|
initialDate := m.UpdatedAt
|
|
|
|
|
2021-05-26 14:41:59 +02:00
|
|
|
if err := m.Save(); err != nil {
|
2021-05-25 11:38:04 +02:00
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
afterDate := m.UpdatedAt
|
|
|
|
|
|
|
|
assert.Equal(t, SrcMeta, m.MarkerSrc)
|
|
|
|
assert.True(t, afterDate.After(initialDate))
|
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
if m.MarkerUID == "" || m.FileUID == "" {
|
|
|
|
t.Errorf("UIDs should not be empty")
|
2021-05-25 11:38:04 +02:00
|
|
|
}
|
2021-05-31 15:40:52 +02:00
|
|
|
|
|
|
|
p := PhotoFixtures.Get("19800101_000002_D640C559")
|
|
|
|
assert.Empty(t, p.Files)
|
2021-09-02 11:12:42 +02:00
|
|
|
p.PreloadFiles()
|
2021-05-31 15:40:52 +02:00
|
|
|
assert.NotEmpty(t, p.Files)
|
2021-05-25 11:38:04 +02:00
|
|
|
})
|
2021-08-27 16:21:10 +02:00
|
|
|
t.Run("invalid position", func(t *testing.T) {
|
|
|
|
m := Marker{X: 0, Y: 0}
|
|
|
|
err := m.Save()
|
|
|
|
assert.Equal(t, "marker: invalid position", err.Error())
|
|
|
|
})
|
2021-05-25 11:38:04 +02:00
|
|
|
}
|
2021-08-21 17:11:02 +02:00
|
|
|
|
|
|
|
func TestMarker_ClearSubject(t *testing.T) {
|
|
|
|
t.Run("1000003-2", func(t *testing.T) {
|
|
|
|
m := MarkerFixtures.Get("1000003-2")
|
|
|
|
|
|
|
|
assert.NotEmpty(t, m.MarkerName)
|
|
|
|
|
|
|
|
err := m.ClearSubject(SrcAuto)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
assert.Empty(t, m.MarkerName)
|
|
|
|
})
|
2021-08-30 17:20:39 +02:00
|
|
|
t.Run("actor-1", func(t *testing.T) {
|
|
|
|
m := MarkerFixtures.Get("actor-a-4") // id 18
|
|
|
|
m2 := MarkerFixtures.Get("actor-a-3") // id 17
|
|
|
|
m3 := MarkerFixtures.Get("actor-a-2") // id 16
|
|
|
|
m4 := MarkerFixtures.Get("actor-a-1") // id 15
|
|
|
|
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.Equal(t, "jqy1y111h1njaaad", m.SubjUID)
|
|
|
|
assert.Equal(t, "jqy1y111h1njaaad", m2.SubjUID)
|
|
|
|
assert.Equal(t, "jqy1y111h1njaaad", m3.SubjUID)
|
|
|
|
assert.Equal(t, "jqy1y111h1njaaad", m4.SubjUID)
|
2021-09-01 20:46:15 +02:00
|
|
|
assert.NotNil(t, m.Face())
|
|
|
|
assert.NotNil(t, m2.Face())
|
|
|
|
assert.NotNil(t, m3.Face())
|
|
|
|
assert.NotNil(t, m4.Face())
|
|
|
|
|
|
|
|
if m := FindMarker("mt9k3pw1wowu1002"); m == nil {
|
|
|
|
t.Fatal("marker is nil")
|
|
|
|
} else if f := m.Face(); f == nil {
|
|
|
|
t.Fatal("face is nil")
|
|
|
|
}
|
|
|
|
|
|
|
|
assert.Equal(t, "PI6A2XGOTUXEFI7CBF4KCI5I2I3JEJHS", m.Face().ID)
|
|
|
|
assert.Equal(t, "PI6A2XGOTUXEFI7CBF4KCI5I2I3JEJHS", m2.Face().ID)
|
|
|
|
assert.Equal(t, "PI6A2XGOTUXEFI7CBF4KCI5I2I3JEJHS", m3.Face().ID)
|
|
|
|
assert.Equal(t, "PI6A2XGOTUXEFI7CBF4KCI5I2I3JEJHS", m4.Face().ID)
|
|
|
|
assert.Equal(t, int(0), FindMarker("mt9k3pw1wowu1002").Face().Collisions)
|
|
|
|
|
|
|
|
// Reset face subject.
|
2021-08-30 13:40:14 +02:00
|
|
|
err := m.ClearSubject(SrcAuto)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
assert.NotNil(t, FindMarker("mt9k3pw1wowu1004"))
|
|
|
|
assert.NotNil(t, FindMarker("mt9k3pw1wowu1003"))
|
|
|
|
assert.NotNil(t, FindMarker("mt9k3pw1wowu1002"))
|
2021-09-01 14:05:15 +02:00
|
|
|
assert.NotNil(t, FindFace("PI6A2XGOTUXEFI7CBF4KCI5I2I3JEJHS"))
|
2021-08-30 13:40:14 +02:00
|
|
|
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.Empty(t, m.SubjUID)
|
|
|
|
assert.Equal(t, "", FindMarker("mt9k3pw1wowu1004").SubjUID)
|
|
|
|
assert.Equal(t, "", FindMarker("mt9k3pw1wowu1003").SubjUID)
|
|
|
|
assert.Equal(t, "", FindMarker("mt9k3pw1wowu1002").SubjUID)
|
2021-08-30 13:40:14 +02:00
|
|
|
assert.Empty(t, m.FaceID)
|
2021-09-01 20:46:15 +02:00
|
|
|
assert.Equal(t, "", FindMarker("mt9k3pw1wowu1004").FaceID)
|
|
|
|
assert.Equal(t, "", FindMarker("mt9k3pw1wowu1003").FaceID)
|
|
|
|
assert.Equal(t, "", FindMarker("mt9k3pw1wowu1002").FaceID)
|
2021-08-30 17:20:39 +02:00
|
|
|
assert.Equal(t, int(1), FindFace("PI6A2XGOTUXEFI7CBF4KCI5I2I3JEJHS").Collisions)
|
2021-08-30 13:40:14 +02:00
|
|
|
})
|
2021-08-21 17:11:02 +02:00
|
|
|
}
|
2021-08-22 21:06:44 +02:00
|
|
|
|
|
|
|
func TestMarker_ClearFace(t *testing.T) {
|
|
|
|
t.Run("1000003-2", func(t *testing.T) {
|
|
|
|
m := MarkerFixtures.Get("1000003-2")
|
|
|
|
|
|
|
|
assert.NotEmpty(t, m.FaceID)
|
|
|
|
|
|
|
|
updated, err := m.ClearFace()
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
assert.True(t, updated)
|
|
|
|
assert.Empty(t, m.FaceID)
|
|
|
|
})
|
2021-08-30 14:58:37 +02:00
|
|
|
t.Run("empty face id", func(t *testing.T) {
|
|
|
|
m := Marker{FaceID: ""}
|
2021-08-27 15:33:06 +02:00
|
|
|
|
2021-08-30 14:58:37 +02:00
|
|
|
updated, err := m.ClearFace()
|
2021-08-27 15:33:06 +02:00
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2021-08-30 14:58:37 +02:00
|
|
|
assert.False(t, updated)
|
|
|
|
assert.Empty(t, m.FaceID)
|
|
|
|
})
|
|
|
|
t.Run("subject src manual", func(t *testing.T) {
|
2021-09-06 00:52:10 +02:00
|
|
|
m := Marker{MarkerUID: "mqyz9x61edicxf8j", FaceID: "123ab"}
|
2021-08-27 16:21:10 +02:00
|
|
|
|
2021-08-30 14:58:37 +02:00
|
|
|
assert.NotEmpty(t, m.FaceID)
|
|
|
|
assert.Empty(t, m.MatchedAt)
|
|
|
|
updated, err := m.ClearFace()
|
2021-08-27 16:21:10 +02:00
|
|
|
|
2021-08-30 14:58:37 +02:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
2021-08-27 16:21:10 +02:00
|
|
|
}
|
|
|
|
|
2021-08-30 14:58:37 +02:00
|
|
|
assert.True(t, updated)
|
|
|
|
assert.Empty(t, m.FaceID)
|
|
|
|
assert.NotEmpty(t, m.MatchedAt)
|
2021-08-27 16:21:10 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMarker_SyncSubject(t *testing.T) {
|
|
|
|
t.Run("no face marker", func(t *testing.T) {
|
2021-09-01 20:46:15 +02:00
|
|
|
m := Marker{MarkerType: "test", subject: nil}
|
2021-08-27 16:21:10 +02:00
|
|
|
assert.Nil(t, m.SyncSubject(false))
|
|
|
|
})
|
|
|
|
t.Run("subject is nil", func(t *testing.T) {
|
2021-09-01 20:46:15 +02:00
|
|
|
m := Marker{MarkerType: MarkerFace, subject: nil}
|
2021-08-27 16:21:10 +02:00
|
|
|
assert.Nil(t, m.SyncSubject(false))
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMarker_Create(t *testing.T) {
|
|
|
|
t.Run("invalid position", func(t *testing.T) {
|
|
|
|
m := Marker{X: 0, Y: 0}
|
|
|
|
err := m.Create()
|
|
|
|
assert.Equal(t, "marker: invalid position", err.Error())
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMarker_Embeddings(t *testing.T) {
|
|
|
|
t.Run("success", func(t *testing.T) {
|
|
|
|
m := MarkerFixtures.Get("1000003-4")
|
|
|
|
|
|
|
|
assert.Equal(t, 0.013083286379677253, m.Embeddings()[0][0])
|
|
|
|
})
|
|
|
|
t.Run("empty embedding", func(t *testing.T) {
|
|
|
|
m := Marker{}
|
|
|
|
m.EmbeddingsJSON = []byte("")
|
|
|
|
|
|
|
|
assert.Empty(t, m.Embeddings())
|
|
|
|
})
|
|
|
|
t.Run("invalid embedding json", func(t *testing.T) {
|
|
|
|
m := Marker{}
|
|
|
|
m.EmbeddingsJSON = []byte("[false]")
|
2021-08-27 15:33:06 +02:00
|
|
|
|
2021-08-27 16:21:10 +02:00
|
|
|
assert.Empty(t, m.Embeddings()[0])
|
2021-08-27 15:33:06 +02:00
|
|
|
})
|
|
|
|
}
|
2021-08-29 13:26:05 +02:00
|
|
|
|
|
|
|
func TestMarker_HasFace(t *testing.T) {
|
|
|
|
t.Run("true", func(t *testing.T) {
|
|
|
|
m := MarkerFixtures.Get("1000003-6")
|
|
|
|
|
|
|
|
assert.True(t, m.HasFace(nil, -1))
|
|
|
|
assert.True(t, m.HasFace(FaceFixtures.Pointer("joe-biden"), -1))
|
|
|
|
})
|
|
|
|
t.Run("false", func(t *testing.T) {
|
|
|
|
m := MarkerFixtures.Get("1000003-6")
|
|
|
|
|
|
|
|
assert.False(t, m.HasFace(FaceFixtures.Pointer("joe-biden"), 0.1))
|
|
|
|
})
|
2021-08-30 14:58:37 +02:00
|
|
|
t.Run("face id empty", func(t *testing.T) {
|
|
|
|
m := Marker{FaceID: ""}
|
|
|
|
|
|
|
|
assert.False(t, m.HasFace(FaceFixtures.Pointer("joe-biden"), 0.1))
|
|
|
|
})
|
|
|
|
t.Run("face dist < 0", func(t *testing.T) {
|
|
|
|
m := Marker{FaceID: "123", FaceDist: -1}
|
|
|
|
|
|
|
|
assert.False(t, m.HasFace(FaceFixtures.Pointer("joe-biden"), 0.1))
|
|
|
|
})
|
|
|
|
t.Run("face id = f.ID", func(t *testing.T) {
|
|
|
|
m := Marker{FaceID: "VF7ANLDET2BKZNT4VQWJMMC6HBEFDOG6"}
|
|
|
|
|
|
|
|
assert.True(t, m.HasFace(FaceFixtures.Pointer("joe-biden"), 0.1))
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
func TestMarker_Subject(t *testing.T) {
|
2021-09-17 14:26:12 +02:00
|
|
|
t.Run("EmptySubjUID", func(t *testing.T) {
|
|
|
|
m := Marker{SubjUID: "", subject: &Subject{SubjUID: "", SubjName: "Test Subject"}}
|
2021-08-30 14:58:37 +02:00
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
if s := m.Subject(); s == nil {
|
2021-09-01 12:48:17 +02:00
|
|
|
t.Fatal("return value must not be nil")
|
|
|
|
} else {
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.Equal(t, "Test Subject", s.SubjName)
|
|
|
|
assert.Equal(t, "", m.SubjUID)
|
|
|
|
assert.Equal(t, "", s.SubjUID)
|
2021-09-01 12:48:17 +02:00
|
|
|
}
|
|
|
|
})
|
2021-09-17 14:26:12 +02:00
|
|
|
t.Run("ConflictingSubjUID", func(t *testing.T) {
|
|
|
|
m := Marker{SubjUID: "", subject: &Subject{SubjUID: "xyz", SubjName: "Test Subject"}}
|
2021-09-01 12:48:17 +02:00
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
if s := m.Subject(); s != nil {
|
2021-09-01 12:48:17 +02:00
|
|
|
t.Fatal("return value must be nil")
|
|
|
|
}
|
2021-08-30 14:58:37 +02:00
|
|
|
})
|
2021-09-17 14:26:12 +02:00
|
|
|
t.Run("SubjSrcAuto", func(t *testing.T) {
|
|
|
|
m := Marker{SubjSrc: SrcAuto, SubjUID: "", MarkerName: "Hans Mayer"}
|
2021-09-01 12:48:17 +02:00
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
if s := m.Subject(); s != nil {
|
2021-09-01 12:48:17 +02:00
|
|
|
t.Fatal("return value must be nil")
|
|
|
|
} else {
|
|
|
|
assert.Equal(t, "Hans Mayer", m.MarkerName)
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.Empty(t, m.SubjUID)
|
|
|
|
assert.Equal(t, SrcAuto, m.SubjSrc)
|
2021-09-01 12:48:17 +02:00
|
|
|
}
|
|
|
|
})
|
2021-09-17 14:26:12 +02:00
|
|
|
t.Run("SubjSrcManual", func(t *testing.T) {
|
|
|
|
m := Marker{SubjSrc: SrcManual, SubjUID: "", MarkerName: "Hans Mayer"}
|
2021-09-01 12:48:17 +02:00
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
if s := m.Subject(); s == nil {
|
2021-09-01 12:48:17 +02:00
|
|
|
t.Fatal("return value must not be nil")
|
|
|
|
} else {
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.Equal(t, "Hans Mayer", s.SubjName)
|
|
|
|
assert.NotEmpty(t, s.SubjUID)
|
2021-09-01 12:48:17 +02:00
|
|
|
}
|
2021-08-30 14:58:37 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMarker_GetFace(t *testing.T) {
|
2021-09-01 12:48:17 +02:00
|
|
|
t.Run("ExistingFaceID", func(t *testing.T) {
|
2021-09-20 16:17:10 +02:00
|
|
|
m := Marker{MarkerUID: "mqzop6s14ahkyd24", FaceID: "1234", face: &Face{ID: "1234"}}
|
2021-08-30 14:58:37 +02:00
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
if f := m.Face(); f == nil {
|
2021-09-01 12:48:17 +02:00
|
|
|
t.Fatal("return value must not be nil")
|
|
|
|
} else {
|
|
|
|
assert.Equal(t, "1234", f.ID)
|
|
|
|
assert.Equal(t, "1234", m.FaceID)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
t.Run("ConflictingFaceID", func(t *testing.T) {
|
2021-09-20 16:17:10 +02:00
|
|
|
m := Marker{MarkerUID: "mqzop6s14ahkyd24", FaceID: "8888", face: &Face{ID: "1234"}}
|
2021-09-01 12:48:17 +02:00
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
if f := m.Face(); f != nil {
|
2021-09-01 12:48:17 +02:00
|
|
|
t.Fatal("return value must be nil")
|
|
|
|
} else {
|
|
|
|
assert.Equal(t, "8888", m.FaceID)
|
2021-09-01 20:46:15 +02:00
|
|
|
assert.Nil(t, m.face)
|
2021-09-01 12:48:17 +02:00
|
|
|
}
|
2021-08-30 14:58:37 +02:00
|
|
|
})
|
|
|
|
t.Run("find face with ID", func(t *testing.T) {
|
2021-09-20 16:17:10 +02:00
|
|
|
m := Marker{MarkerUID: "mqzop6s14ahkyd24", FaceID: "VF7ANLDET2BKZNT4VQWJMMC6HBEFDOG6"}
|
2021-09-01 12:48:17 +02:00
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
if f := m.Face(); f == nil {
|
2021-09-01 12:48:17 +02:00
|
|
|
t.Fatal("return value must not be nil")
|
|
|
|
} else {
|
2021-09-17 14:26:12 +02:00
|
|
|
assert.Equal(t, "jqy3y652h8njw0sx", f.SubjUID)
|
2021-09-01 12:48:17 +02:00
|
|
|
}
|
2021-08-30 14:58:37 +02:00
|
|
|
})
|
|
|
|
t.Run("low quality marker", func(t *testing.T) {
|
2021-09-20 16:17:10 +02:00
|
|
|
m := Marker{MarkerUID: "", FaceID: "", SubjSrc: SrcManual, Size: 130}
|
2021-09-01 12:48:17 +02:00
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
assert.Nil(t, m.Face())
|
2021-08-30 14:58:37 +02:00
|
|
|
})
|
|
|
|
t.Run("create face", func(t *testing.T) {
|
2021-08-31 20:08:53 +02:00
|
|
|
m := Marker{
|
2021-09-20 16:17:10 +02:00
|
|
|
MarkerUID: "mqzop6s14ahkyd24",
|
2021-08-31 20:08:53 +02:00
|
|
|
FaceID: "",
|
|
|
|
EmbeddingsJSON: MarkerFixtures.Get("actress-a-1").EmbeddingsJSON,
|
2021-09-17 14:26:12 +02:00
|
|
|
SubjSrc: SrcManual,
|
2021-08-31 20:08:53 +02:00
|
|
|
Size: 160,
|
|
|
|
Score: 40,
|
|
|
|
}
|
|
|
|
|
2021-09-01 20:46:15 +02:00
|
|
|
if m.Face() == nil {
|
2021-09-01 12:48:17 +02:00
|
|
|
t.Fatal("return value must not be nil")
|
2021-08-31 20:08:53 +02:00
|
|
|
} else {
|
2021-09-01 20:46:15 +02:00
|
|
|
assert.NotEmpty(t, m.Face().ID)
|
2021-08-31 20:08:53 +02:00
|
|
|
}
|
2021-08-30 14:58:37 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestFindMarker(t *testing.T) {
|
|
|
|
t.Run("nil", func(t *testing.T) {
|
2021-09-01 20:46:15 +02:00
|
|
|
assert.Nil(t, FindMarker("0000"))
|
2021-08-30 14:58:37 +02:00
|
|
|
})
|
2021-08-29 13:26:05 +02:00
|
|
|
}
|
2021-08-30 15:34:41 +02:00
|
|
|
|
|
|
|
func TestMarker_SetFace(t *testing.T) {
|
|
|
|
t.Run("face == nil", func(t *testing.T) {
|
|
|
|
m := MarkerFixtures.Pointer("1000003-6")
|
|
|
|
assert.Equal(t, "PN6QO5INYTUSAATOFL43LL2ABAV5ACZK", m.FaceID)
|
|
|
|
updated, _ := m.SetFace(nil, -1)
|
|
|
|
assert.False(t, updated)
|
|
|
|
assert.Equal(t, "PN6QO5INYTUSAATOFL43LL2ABAV5ACZK", m.FaceID)
|
|
|
|
})
|
|
|
|
t.Run("wrong marker type", func(t *testing.T) {
|
|
|
|
m := Marker{MarkerType: "xxx"}
|
|
|
|
updated, _ := m.SetFace(&Face{ID: "99876"}, -1)
|
|
|
|
assert.False(t, updated)
|
|
|
|
assert.Equal(t, "", m.FaceID)
|
|
|
|
})
|
|
|
|
t.Run("skip same face", func(t *testing.T) {
|
2021-09-17 14:26:12 +02:00
|
|
|
m := Marker{MarkerType: MarkerFace, SubjUID: "jqu0xs11qekk9jx8", FaceID: "99876uyt"}
|
|
|
|
updated, _ := m.SetFace(&Face{ID: "99876uyt", SubjUID: "jqu0xs11qekk9jx8"}, -1)
|
2021-08-30 15:34:41 +02:00
|
|
|
assert.False(t, updated)
|
|
|
|
assert.Equal(t, "99876uyt", m.FaceID)
|
|
|
|
})
|
|
|
|
t.Run("set new face", func(t *testing.T) {
|
2021-09-17 14:26:12 +02:00
|
|
|
m := Marker{MarkerUID: "mqyz9x61edicxf8j", MarkerType: MarkerFace, SubjUID: "", FaceID: ""}
|
2021-08-30 17:20:39 +02:00
|
|
|
|
2021-08-30 15:34:41 +02:00
|
|
|
updated, _ := m.SetFace(FaceFixtures.Pointer("john-doe"), -1)
|
|
|
|
assert.True(t, updated)
|
|
|
|
assert.Equal(t, "PN6QO5INYTUSAATOFL43LL2ABAV5ACZK", m.FaceID)
|
2021-08-30 17:20:39 +02:00
|
|
|
updated2, err := m.ClearFace()
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
assert.True(t, updated2)
|
|
|
|
assert.Empty(t, m.FaceID)
|
2021-08-30 15:34:41 +02:00
|
|
|
})
|
|
|
|
}
|
2021-09-06 00:52:10 +02:00
|
|
|
|
|
|
|
func TestMarker_RefreshPhotos(t *testing.T) {
|
|
|
|
m := MarkerFixtures.Get("1000003-6")
|
|
|
|
|
|
|
|
if err := m.RefreshPhotos(); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
}
|
2021-09-20 22:19:54 +02:00
|
|
|
|
|
|
|
func TestMarker_SurfaceRatio(t *testing.T) {
|
|
|
|
m1 := *NewMarker(FileFixtures.Get("exampleFileName.jpg"), cropArea1, "lt9k3pw1wowuy1c1", SrcImage, MarkerFace, 100, 65)
|
|
|
|
m2 := *NewMarker(FileFixtures.Get("exampleFileName.jpg"), cropArea2, "lt9k3pw1wowuy1c2", SrcImage, MarkerFace, 100, 65)
|
|
|
|
m3 := *NewMarker(FileFixtures.Get("exampleFileName.jpg"), cropArea3, "lt9k3pw1wowuy1c3", SrcImage, MarkerFace, 100, 65)
|
|
|
|
m4 := *NewMarker(FileFixtures.Get("exampleFileName.jpg"), cropArea4, "lt9k3pw1wowuy1c3", SrcImage, MarkerFace, 100, 65)
|
|
|
|
|
|
|
|
assert.Equal(t, 99, int(m1.SurfaceRatio(m1.OverlapArea(m1))*100))
|
|
|
|
assert.Equal(t, 99, int(m1.SurfaceRatio(m1.OverlapArea(m2))*100))
|
|
|
|
assert.Equal(t, 29, int(m2.SurfaceRatio(m2.OverlapArea(m1))*100))
|
|
|
|
assert.Equal(t, 0, int(m1.SurfaceRatio(m1.OverlapArea(m3))*100))
|
|
|
|
assert.Equal(t, 30, int(m1.SurfaceRatio(m1.OverlapArea(m4))*100))
|
|
|
|
assert.Equal(t, 0, int(m1.SurfaceRatio(m3.OverlapArea(m1))*100))
|
|
|
|
assert.Equal(t, 30, int(m1.SurfaceRatio(m4.OverlapArea(m1))*100))
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMarker_OverlapArea(t *testing.T) {
|
|
|
|
m1 := *NewMarker(FileFixtures.Get("exampleFileName.jpg"), cropArea1, "lt9k3pw1wowuy1c1", SrcImage, MarkerFace, 100, 65)
|
|
|
|
m2 := *NewMarker(FileFixtures.Get("exampleFileName.jpg"), cropArea2, "lt9k3pw1wowuy1c2", SrcImage, MarkerFace, 100, 65)
|
|
|
|
m3 := *NewMarker(FileFixtures.Get("exampleFileName.jpg"), cropArea3, "lt9k3pw1wowuy1c3", SrcImage, MarkerFace, 100, 65)
|
|
|
|
m4 := *NewMarker(FileFixtures.Get("exampleFileName.jpg"), cropArea4, "lt9k3pw1wowuy1c3", SrcImage, MarkerFace, 100, 65)
|
|
|
|
|
|
|
|
assert.Equal(t, 0.1264200823986168, m1.OverlapArea(m1))
|
|
|
|
assert.Equal(t, int(m1.Surface()*10000), int(m1.OverlapArea(m1)*10000))
|
|
|
|
assert.Equal(t, 0.1264200823986168, m1.OverlapArea(m2))
|
|
|
|
assert.Equal(t, 0.1264200823986168, m2.OverlapArea(m1))
|
|
|
|
assert.Equal(t, 0.0, m1.OverlapArea(m3))
|
|
|
|
assert.Equal(t, 0.038166598943088825, m1.OverlapArea(m4))
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMarker_OverlapPercent(t *testing.T) {
|
|
|
|
m1 := *NewMarker(FileFixtures.Get("exampleFileName.jpg"), cropArea1, "lt9k3pw1wowuy1c1", SrcImage, MarkerFace, 100, 65)
|
|
|
|
m2 := *NewMarker(FileFixtures.Get("exampleFileName.jpg"), cropArea2, "lt9k3pw1wowuy1c2", SrcImage, MarkerFace, 100, 65)
|
|
|
|
m3 := *NewMarker(FileFixtures.Get("exampleFileName.jpg"), cropArea3, "lt9k3pw1wowuy1c3", SrcImage, MarkerFace, 100, 65)
|
|
|
|
m4 := *NewMarker(FileFixtures.Get("exampleFileName.jpg"), cropArea4, "lt9k3pw1wowuy1c3", SrcImage, MarkerFace, 100, 65)
|
|
|
|
|
|
|
|
assert.Equal(t, 100, m1.OverlapPercent(m1))
|
|
|
|
assert.Equal(t, 29, m1.OverlapPercent(m2))
|
|
|
|
assert.Equal(t, 100, m2.OverlapPercent(m1))
|
|
|
|
assert.Equal(t, 0, m1.OverlapPercent(m3))
|
|
|
|
assert.Equal(t, 96, m1.OverlapPercent(m4))
|
|
|
|
}
|