photoprism/internal/meta/json_motion_test.go

327 lines
12 KiB
Go
Raw Normal View History

package meta
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/photoprism/photoprism/pkg/media"
)
func TestJSON_Motion(t *testing.T) {
t.Run("google_pixel2.jpg.json", func(t *testing.T) {
data, err := JSON("testdata/motion/google_pixel2.jpg.json", "")
if err != nil {
t.Fatal(err)
}
// t.Logf("DATA: %#v", data)
assert.Equal(t, "pixel2.jpg", data.FileName)
assert.Equal(t, media.Live, data.MediaType)
assert.Equal(t, true, data.HasThumbEmbedded)
assert.Equal(t, true, data.HasVideoEmbedded)
assert.Equal(t, CodecJpeg, data.Codec)
assert.Equal(t, int64(0), data.Duration.Milliseconds())
assert.Equal(t, "0s", data.Duration.String())
assert.Equal(t, "2018-03-18 19:21:15 +0000 UTC", data.TakenAtLocal.String())
assert.Equal(t, "2018-03-18 23:21:15 +0000 UTC", data.TakenAt.String())
assert.Equal(t, 796940000, data.TakenNs)
assert.Equal(t, "America/New_York", data.TimeZone)
assert.Equal(t, 3024, data.Width)
assert.Equal(t, 4032, data.Height)
assert.Equal(t, 3024, data.ActualWidth())
assert.Equal(t, 4032, data.ActualHeight())
assert.Equal(t, 1, data.Orientation)
assert.Equal(t, float32(35.42307), data.Lat)
assert.Equal(t, float32(-78.65212), data.Lng)
assert.Equal(t, "Google", data.CameraMake)
assert.Equal(t, "Pixel 2", data.CameraModel)
assert.Equal(t, "", data.LensModel)
})
t.Run("google_pixel4a.jpg.json", func(t *testing.T) {
data, err := JSON("testdata/motion/google_pixel4a.jpg.json", "")
if err != nil {
t.Fatal(err)
}
// t.Logf("DATA: %#v", data)
assert.Equal(t, "pixel4a.jpg", data.FileName)
assert.Equal(t, media.Live, data.MediaType)
assert.Equal(t, false, data.HasThumbEmbedded)
assert.Equal(t, true, data.HasVideoEmbedded)
assert.Equal(t, CodecJpeg, data.Codec)
assert.Equal(t, int64(0), data.Duration.Milliseconds())
assert.Equal(t, "0s", data.Duration.String())
assert.Equal(t, "2021-09-17 19:31:36 +0000 UTC", data.TakenAtLocal.String())
assert.Equal(t, "2021-09-17 23:31:36 +0000 UTC", data.TakenAt.String())
assert.Equal(t, 844000000, data.TakenNs)
assert.Equal(t, "America/New_York", data.TimeZone)
assert.Equal(t, 4032, data.Width)
assert.Equal(t, 3024, data.Height)
assert.Equal(t, 3024, data.ActualWidth())
assert.Equal(t, 4032, data.ActualHeight())
assert.Equal(t, 6, data.Orientation)
assert.Equal(t, float32(35.778152), data.Lat)
assert.Equal(t, float32(-78.63687), data.Lng)
assert.Equal(t, "Google", data.CameraMake)
assert.Equal(t, "Pixel 4a", data.CameraModel)
assert.Equal(t, "", data.LensModel)
})
t.Run("google_pixel6.jpg.json", func(t *testing.T) {
data, err := JSON("testdata/motion/google_pixel6.jpg.json", "")
if err != nil {
t.Fatal(err)
}
// t.Logf("DATA: %#v", data)
assert.Equal(t, "PXL_20211227_151322429.MP.jpg", data.FileName)
assert.Equal(t, media.Live, data.MediaType)
assert.Equal(t, true, data.HasThumbEmbedded)
assert.Equal(t, true, data.HasVideoEmbedded)
assert.Equal(t, CodecJpeg, data.Codec)
assert.Equal(t, int64(0), data.Duration.Milliseconds())
assert.Equal(t, "0s", data.Duration.String())
assert.Equal(t, "2021-12-27 16:13:22 +0000 UTC", data.TakenAtLocal.String())
assert.Equal(t, "2021-12-27 15:13:22 +0000 UTC", data.TakenAt.String())
assert.Equal(t, 429000000, data.TakenNs)
assert.Equal(t, "Europe/Berlin", data.TimeZone)
assert.Equal(t, 4032, data.Width)
assert.Equal(t, 2268, data.Height)
assert.Equal(t, 4032, data.ActualWidth())
assert.Equal(t, 2268, data.ActualHeight())
assert.Equal(t, 1, data.Orientation)
assert.Equal(t, float32(48.610027), data.Lat)
assert.Equal(t, float32(8.861558), data.Lng)
assert.Equal(t, "Google", data.CameraMake)
assert.Equal(t, "Pixel 6", data.CameraModel)
assert.Equal(t, "Pixel 6 back camera 6.81mm f/1.85", data.LensModel)
})
t.Run("google_pixel7pro.jpg.json", func(t *testing.T) {
data, err := JSON("testdata/motion/google_pixel7pro.jpg.json", "")
if err != nil {
t.Fatal(err)
}
// t.Logf("DATA: %#v", data)
assert.Equal(t, "PXL_20230329_144843201.MP.jpg", data.FileName)
assert.Equal(t, media.Live, data.MediaType)
assert.Equal(t, true, data.HasThumbEmbedded)
assert.Equal(t, true, data.HasVideoEmbedded)
assert.Equal(t, CodecJpeg, data.Codec)
assert.Equal(t, int64(0), data.Duration.Milliseconds())
assert.Equal(t, "0s", data.Duration.String())
assert.Equal(t, "2023-03-29 15:48:43 +0000 UTC", data.TakenAtLocal.String())
assert.Equal(t, "2023-03-29 14:48:43 +0000 UTC", data.TakenAt.String())
assert.Equal(t, 201000000, data.TakenNs)
assert.Equal(t, "Europe/London", data.TimeZone)
assert.Equal(t, 4080, data.Width)
assert.Equal(t, 3072, data.Height)
assert.Equal(t, 4080, data.ActualWidth())
assert.Equal(t, 3072, data.ActualHeight())
assert.Equal(t, 1, data.Orientation)
assert.Equal(t, float32(52.70636), data.Lat)
assert.Equal(t, float32(-2.7605944), data.Lng)
assert.Equal(t, "Google", data.CameraMake)
assert.Equal(t, "Pixel 7 Pro", data.CameraModel)
assert.Equal(t, "Pixel 7 Pro back camera 19.0mm f/3.5", data.LensModel)
})
t.Run("samsung_galaxys20.jpg.json", func(t *testing.T) {
data, err := JSON("testdata/motion/samsung_galaxys20.jpg.json", "")
if err != nil {
t.Fatal(err)
}
// t.Logf("DATA: %#v", data)
assert.Equal(t, "20230822_143803.jpg", data.FileName)
assert.Equal(t, media.Live, data.MediaType)
assert.Equal(t, true, data.HasThumbEmbedded)
assert.Equal(t, true, data.HasVideoEmbedded)
assert.Equal(t, CodecJpeg, data.Codec)
assert.Equal(t, int64(0), data.Duration.Milliseconds())
assert.Equal(t, "0s", data.Duration.String())
assert.Equal(t, "2023-08-22 14:38:03 +0000 UTC", data.TakenAtLocal.String())
assert.Equal(t, "2023-08-22 14:38:03 +0000 UTC", data.TakenAt.String())
assert.Equal(t, 583000000, data.TakenNs)
assert.Equal(t, "UTC+3", data.TimeZone)
assert.Equal(t, "+03:00", data.TimeOffset)
assert.Equal(t, 4032, data.Width)
assert.Equal(t, 3024, data.Height)
assert.Equal(t, 3024, data.ActualWidth())
assert.Equal(t, 4032, data.ActualHeight())
assert.Equal(t, 6, data.Orientation)
assert.Equal(t, float32(0), data.Lat)
assert.Equal(t, float32(0), data.Lng)
assert.Equal(t, "samsung", data.CameraMake)
assert.Equal(t, "SM-G780F", data.CameraModel)
assert.Equal(t, "", data.LensModel)
})
t.Run("samsung_galaxys20.mp4.json", func(t *testing.T) {
data, err := JSON("testdata/motion/samsung_galaxys20.mp4.json", "")
if err != nil {
t.Fatal(err)
}
// t.Logf("DATA: %#v", data)
assert.Equal(t, "20230822_143803.mp4", data.FileName)
assert.Equal(t, media.Unknown, data.MediaType)
assert.Equal(t, false, data.HasThumbEmbedded)
assert.Equal(t, false, data.HasVideoEmbedded)
assert.Equal(t, CodecAvc1, data.Codec)
assert.Equal(t, int64(2990), data.Duration.Milliseconds())
assert.Equal(t, "2.99s", data.Duration.String())
assert.Equal(t, "2023-08-22 14:38:06 +0000 UTC", data.TakenAtLocal.String())
assert.Equal(t, "2023-08-22 11:38:06 +0000 UTC", data.TakenAt.String())
assert.Equal(t, 0, data.TakenNs)
assert.Equal(t, "Europe/Kyiv", data.TimeZone)
assert.Equal(t, 1440, data.Width)
assert.Equal(t, 1080, data.Height)
assert.Equal(t, 1080, data.ActualWidth())
assert.Equal(t, 1440, data.ActualHeight())
assert.Equal(t, 6, data.Orientation)
assert.Equal(t, float32(48.4565), data.Lat)
assert.Equal(t, float32(35.072), data.Lng)
assert.Equal(t, "", data.CameraMake)
assert.Equal(t, "", data.CameraModel)
assert.Equal(t, "", data.LensModel)
})
t.Run("samsung_galaxys20fe.heif.json", func(t *testing.T) {
data, err := JSON("testdata/motion/samsung_galaxys20fe.heif.json", "")
if err != nil {
t.Fatal(err)
}
// t.Logf("DATA: %#v", data)
assert.Equal(t, "20220423_085935.heif", data.FileName)
assert.Equal(t, media.Live, data.MediaType)
assert.Equal(t, false, data.HasThumbEmbedded)
assert.Equal(t, true, data.HasVideoEmbedded)
assert.Equal(t, CodecHeic, data.Codec)
assert.Equal(t, int64(0), data.Duration.Milliseconds())
assert.Equal(t, "0s", data.Duration.String())
assert.Equal(t, "2022-04-23 08:59:35 +0000 UTC", data.TakenAtLocal.String())
assert.Equal(t, "2022-04-23 06:59:35 +0000 UTC", data.TakenAt.String())
assert.Equal(t, 0, data.TakenNs)
assert.Equal(t, "Europe/Berlin", data.TimeZone)
assert.Equal(t, 4032, data.Width)
assert.Equal(t, 3024, data.Height)
assert.Equal(t, 3024, data.ActualWidth())
assert.Equal(t, 4032, data.ActualHeight())
assert.Equal(t, 6, data.Orientation)
assert.Equal(t, float32(51.433468), data.Lat)
assert.Equal(t, float32(12.110732), data.Lng)
assert.Equal(t, "samsung", data.CameraMake)
assert.Equal(t, "SM-G781B", data.CameraModel)
assert.Equal(t, "", data.LensModel)
})
t.Run("samsung_galaxys21ultra.jpg.json", func(t *testing.T) {
data, err := JSON("testdata/motion/samsung_galaxys21ultra.jpg.json", "")
if err != nil {
t.Fatal(err)
}
// t.Logf("DATA: %#v", data)
assert.Equal(t, "20211011_113427.jpg", data.FileName)
assert.Equal(t, media.Live, data.MediaType)
assert.Equal(t, true, data.HasThumbEmbedded)
assert.Equal(t, true, data.HasVideoEmbedded)
assert.Equal(t, CodecJpeg, data.Codec)
assert.Equal(t, int64(0), data.Duration.Milliseconds())
assert.Equal(t, "0s", data.Duration.String())
assert.Equal(t, "2021-10-11 11:34:27 +0000 UTC", data.TakenAtLocal.String())
assert.Equal(t, "2021-10-11 11:34:27 +0000 UTC", data.TakenAt.String())
assert.Equal(t, 0, data.TakenNs)
assert.Equal(t, "UTC+2", data.TimeZone)
assert.Equal(t, "+02:00", data.TimeOffset)
assert.Equal(t, 4000, data.Width)
assert.Equal(t, 2252, data.Height)
assert.Equal(t, 4000, data.ActualWidth())
assert.Equal(t, 2252, data.ActualHeight())
assert.Equal(t, 1, data.Orientation)
assert.Equal(t, float32(0), data.Lat)
assert.Equal(t, float32(0), data.Lng)
assert.Equal(t, "samsung", data.CameraMake)
assert.Equal(t, "SM-G998B", data.CameraModel)
assert.Equal(t, "", data.LensModel)
})
t.Run("samsung_galaxys21ultra.mp4.json", func(t *testing.T) {
data, err := JSON("testdata/motion/samsung_galaxys21ultra.mp4.json", "")
if err != nil {
t.Fatal(err)
}
// t.Logf("DATA: %#v", data)
assert.Equal(t, "20211011_113427.mp4", data.FileName)
assert.Equal(t, media.Unknown, data.MediaType)
assert.Equal(t, false, data.HasThumbEmbedded)
assert.Equal(t, false, data.HasVideoEmbedded)
assert.Equal(t, CodecAvc1, data.Codec)
assert.Equal(t, int64(2670), data.Duration.Milliseconds())
assert.Equal(t, "2.67s", data.Duration.String())
assert.Equal(t, "2021-10-11 09:34:29 +0000 UTC", data.TakenAtLocal.String())
assert.Equal(t, "2021-10-11 09:34:29 +0000 UTC", data.TakenAt.String())
assert.Equal(t, 0, data.TakenNs)
assert.Equal(t, "UTC", data.TimeZone)
assert.Equal(t, "", data.TimeOffset)
assert.Equal(t, 1920, data.Width)
assert.Equal(t, 1080, data.Height)
assert.Equal(t, 1920, data.ActualWidth())
assert.Equal(t, 1080, data.ActualHeight())
assert.Equal(t, 1, data.Orientation)
assert.Equal(t, float32(0), data.Lat)
assert.Equal(t, float32(0), data.Lng)
assert.Equal(t, "", data.CameraMake)
assert.Equal(t, "", data.CameraModel)
assert.Equal(t, "", data.LensModel)
})
t.Run("samsung_galaxya71.jpg.json", func(t *testing.T) {
data, err := JSON("testdata/motion/samsung_galaxya71.jpg.json", "")
if err != nil {
t.Fatal(err)
}
// t.Logf("DATA: %#v", data)
assert.Equal(t, "motion-photo.jpg", data.FileName)
assert.Equal(t, media.Live, data.MediaType)
assert.Equal(t, true, data.HasThumbEmbedded)
assert.Equal(t, true, data.HasVideoEmbedded)
assert.Equal(t, CodecJpeg, data.Codec)
assert.Equal(t, int64(0), data.Duration.Milliseconds())
assert.Equal(t, "0s", data.Duration.String())
assert.Equal(t, 308000000, data.TakenNs)
assert.Equal(t, "2023-04-24 13:03:58 +0000 UTC", data.TakenAtLocal.String())
assert.Equal(t, "2023-04-24 13:03:58 +0000 UTC", data.TakenAt.String())
assert.Equal(t, "UTC+2", data.TimeZone)
assert.Equal(t, "+02:00", data.TimeOffset)
assert.Equal(t, 4624, data.Width)
assert.Equal(t, 3468, data.Height)
assert.Equal(t, 3468, data.ActualWidth())
assert.Equal(t, 4624, data.ActualHeight())
assert.Equal(t, 6, data.Orientation)
assert.Equal(t, float32(0), data.Lat)
assert.Equal(t, float32(0), data.Lng)
assert.Equal(t, "Samsung", data.CameraMake)
assert.Equal(t, "Galaxy A71", data.CameraModel)
assert.Equal(t, "", data.LensModel)
})
}