diff --git a/assets/examples/example.mp4 b/assets/examples/example.mp4 new file mode 100644 index 000000000..5e4215a95 Binary files /dev/null and b/assets/examples/example.mp4 differ diff --git a/internal/photoprism/filename_test.go b/internal/photoprism/filename_test.go index 316d5b716..e2e3ac8d8 100644 --- a/internal/photoprism/filename_test.go +++ b/internal/photoprism/filename_test.go @@ -20,3 +20,24 @@ func TestFileName(t *testing.T) { }) } + +func TestCacheName(t *testing.T) { + t.Run("cacheKey empty", func(t *testing.T) { + r, err := CacheName("abcdghoj", "test", "") + assert.Error(t, err) + assert.Empty(t, r) + }) + + t.Run("success", func(t *testing.T) { + r, err := CacheName("abcdghoj", "test", "juh") + if err != nil { + t.Fatal(err) + } + assert.Contains(t, r, "test/a/b/c/abcdghoj_juh") + }) + t.Run("filehash too short", func(t *testing.T) { + r, err := CacheName("ab", "test", "juh") + assert.Error(t, err) + assert.Empty(t, r) + }) +} diff --git a/internal/photoprism/index_mediafile_test.go b/internal/photoprism/index_mediafile_test.go index d27369b30..74a95242f 100644 --- a/internal/photoprism/index_mediafile_test.go +++ b/internal/photoprism/index_mediafile_test.go @@ -50,5 +50,28 @@ func TestIndex_MediaFile(t *testing.T) { result := ind.MediaFile(nil, indexOpt, "blue-go-video.mp4") assert.Equal(t, IndexStatus("failed"), result.Status) }) - +} + +func TestIndexResult_Archived(t *testing.T) { + t.Run("true", func(t *testing.T) { + r := &IndexResult{IndexArchived, nil, 5, "", 5, ""} + assert.True(t, r.Archived()) + }) + + t.Run("false", func(t *testing.T) { + r := &IndexResult{IndexAdded, nil, 5, "", 5, ""} + assert.False(t, r.Archived()) + }) +} + +func TestIndexResult_Skipped(t *testing.T) { + t.Run("true", func(t *testing.T) { + r := &IndexResult{IndexSkipped, nil, 5, "", 5, ""} + assert.True(t, r.Skipped()) + }) + + t.Run("false", func(t *testing.T) { + r := &IndexResult{IndexAdded, nil, 5, "", 5, ""} + assert.False(t, r.Skipped()) + }) } diff --git a/internal/photoprism/index_options_test.go b/internal/photoprism/index_options_test.go index 728dd6788..18b50a66b 100644 --- a/internal/photoprism/index_options_test.go +++ b/internal/photoprism/index_options_test.go @@ -18,3 +18,10 @@ func TestIndexOptions_SkipUnchanged(t *testing.T) { result.Rescan = true assert.False(t, result.SkipUnchanged()) } + +func TestIndexOptionsSingle(t *testing.T) { + r := IndexOptionsSingle() + assert.Equal(t, false, r.Stack) + assert.Equal(t, true, r.Convert) + assert.Equal(t, true, r.Rescan) +} diff --git a/internal/photoprism/mediafile_test.go b/internal/photoprism/mediafile_test.go index 6bb30dccf..c72a82b34 100644 --- a/internal/photoprism/mediafile_test.go +++ b/internal/photoprism/mediafile_test.go @@ -417,7 +417,7 @@ func TestMediaFile_RelatedFiles(t *testing.T) { t.Fatal(err) } - assert.Len(t, related.Files, 5) + assert.Len(t, related.Files, 6) assert.True(t, related.ContainsJpeg()) for _, result := range related.Files { @@ -647,6 +647,37 @@ func TestMediaFile_RootRelName(t *testing.T) { }) } +func TestMediaFile_RootRelPath(t *testing.T) { + conf := config.TestConfig() + + mediaFile, err := NewMediaFile(conf.ExamplesPath() + "/tree_white.jpg") + mediaFile.fileRoot = entity.RootImport + if err != nil { + t.Fatal(err) + } + + t.Run("examples_path", func(t *testing.T) { + path := mediaFile.RootRelPath() + assert.Equal(t, conf.ExamplesPath(), path) + }) +} + +func TestMediaFile_RootPath(t *testing.T) { + conf := config.TestConfig() + + mediaFile, err := NewMediaFile(conf.ExamplesPath() + "/tree_white.jpg") + + if err != nil { + t.Fatal(err) + } + + mediaFile.fileRoot = entity.RootImport + t.Run("examples_path", func(t *testing.T) { + path := mediaFile.RootPath() + assert.Contains(t, path, "import") + }) +} + func TestMediaFile_RelName(t *testing.T) { conf := config.TestConfig() @@ -1416,6 +1447,17 @@ func TestMediaFile_HasJpeg(t *testing.T) { t.Fatal(err) } + assert.True(t, f.HasJpeg()) + }) + t.Run("Random.docx with jpg", func(t *testing.T) { + conf := config.TestConfig() + + f, err := NewMediaFile(conf.ExamplesPath() + "/Random.docx") + f.hasJpeg = true + if err != nil { + t.Fatal(err) + } + assert.True(t, f.HasJpeg()) }) } @@ -1575,6 +1617,22 @@ func TestMediaFile_decodeDimension(t *testing.T) { assert.Equal(t, 1920, mediaFile.Width()) assert.Equal(t, 1080, mediaFile.Height()) }) + t.Run("blue-go-video.mp4 with orientation >4 and <8", func(t *testing.T) { + conf := config.TestConfig() + + mediaFile, err := NewMediaFile(conf.ExamplesPath() + "/blue-go-video.mp4") + mediaFile.metaData.Orientation = 5 + if err != nil { + t.Fatal(err) + } + + if err := mediaFile.decodeDimensions(); err != nil { + t.Fatal(err) + } + + assert.Equal(t, 1080, mediaFile.Width()) + assert.Equal(t, 1920, mediaFile.Height()) + }) } func TestMediaFile_Width(t *testing.T) {