photoprism/internal/meta/exif_test.go
Michael Mayer c13e39e6d1 Backend: Add fields to Meta.Data struct #243
Added: Subject, Keywords, Comment, CameraOwner and CameraSerial

Todo: Read values from Exif.Image.XPTitle, XPSubject, XPKeywords,...
Signed-off-by: Michael Mayer <michael@liquidbytes.net>
2020-02-07 14:40:06 +01:00

94 lines
3.1 KiB
Go

package meta
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestExif(t *testing.T) {
t.Run("jpg file with exif data", func(t *testing.T) {
data, err := Exif("testdata/photoshop.jpg")
if err != nil {
t.Fatal(err)
}
assert.Equal(t, "Michael Mayer", data.Artist)
assert.Equal(t, "2020-01-01T16:28:23Z", data.TakenAt.Format("2006-01-02T15:04:05Z"))
assert.Equal(t, "2020-01-01T17:28:23Z", data.TakenAtLocal.Format("2006-01-02T15:04:05Z"))
assert.Equal(t, "Example file for development", data.Description)
assert.Equal(t, "This is a legal notice", data.Copyright)
assert.Equal(t, 2736, data.Height)
assert.Equal(t, 3648, data.Width)
assert.Equal(t, 52.459690093888895, data.Lat)
assert.Equal(t, 13.321831703055555, data.Lng)
assert.Equal(t, 0, data.Altitude)
assert.Equal(t, "HUAWEI", data.CameraMake)
assert.Equal(t, "ELE-L29", data.CameraModel)
assert.Equal(t, "", data.CameraOwner)
assert.Equal(t, "", data.CameraSerial)
assert.Equal(t, 27, data.FocalLength)
assert.Equal(t, 1, int(data.Orientation))
// TODO: Values are empty - why?
// assert.Equal(t, "HUAWEI P30 Rear Main Camera", data.LensModel)
})
t.Run("ladybug jpg file", func(t *testing.T) {
data, err := Exif("testdata/ladybug.jpg")
if err != nil {
t.Fatal(err)
}
// t.Logf("all: %+v", data.All)
assert.Equal(t, "Photographer: TMB", data.Artist)
assert.Equal(t, "2011-07-10T17:34:28Z", data.TakenAt.Format("2006-01-02T15:04:05Z"))
assert.Equal(t, "2011-07-10T19:34:28Z", data.TakenAtLocal.Format("2006-01-02T15:04:05Z"))
assert.Equal(t, "", data.Title) // Should be "Ladybug"
assert.Equal(t, "", data.Keywords) // Should be "Ladybug"
assert.Equal(t, "", data.Description)
assert.Equal(t, "", data.Copyright)
assert.Equal(t, 540, data.Height)
assert.Equal(t, 720, data.Width)
assert.Equal(t, 51.25485166666667, data.Lat)
assert.Equal(t, 7.389468333333333, data.Lng)
assert.Equal(t, 0, data.Altitude)
assert.Equal(t, "Canon", data.CameraMake)
assert.Equal(t, "Canon EOS 50D", data.CameraModel)
assert.Equal(t, "Thomas Meyer-Boudnik", data.CameraOwner)
assert.Equal(t, "2260716910", data.CameraSerial)
assert.Equal(t, 100, data.FocalLength)
assert.Equal(t, 1, int(data.Orientation))
})
t.Run("png file without exif", func(t *testing.T) {
_, err := Exif("testdata/tweethog.png")
assert.Error(t, err, "file does not have EXIF")
// TODO: png with exif data
})
t.Run("heic file with exif data", func(t *testing.T) {
data, err := Exif("testdata/iphone_7.heic")
if err != nil {
t.Fatal(err)
}
assert.Equal(t, "2018-09-10T03:16:13Z", data.TakenAt.Format("2006-01-02T15:04:05Z"))
assert.Equal(t, "2018-09-10T12:16:13Z", data.TakenAtLocal.Format("2006-01-02T15:04:05Z"))
assert.Equal(t, 34.79745, data.Lat)
assert.Equal(t, 134.76463333333334, data.Lng)
assert.Equal(t, 0, data.Altitude)
assert.Equal(t, "Apple", data.CameraMake)
assert.Equal(t, "iPhone 7", data.CameraModel)
assert.Equal(t, 74, data.FocalLength)
assert.Equal(t, 6, int(data.Orientation))
assert.Equal(t, "Apple", data.LensMake)
assert.Equal(t, "iPhone 7 back camera 3.99mm f/1.8", data.LensModel)
})
}