summaryrefslogtreecommitdiff
path: root/internal/media/manager_test.go
diff options
context:
space:
mode:
authorLibravatar KEINOS <github@keinos.com>2023-10-25 21:58:45 +0900
committerLibravatar GitHub <noreply@github.com>2023-10-25 14:58:45 +0200
commit27f465913916505197b06503efd7c30a79ac2016 (patch)
tree9aed4c711f85bdc99e5aae077d76e8debbe560ca /internal/media/manager_test.go
parent[bugfix/frontend] Export/import CSV correctly (#2294) (diff)
downloadgotosocial-27f465913916505197b06503efd7c30a79ac2016.tar.xz
[bugfix] allow store smaller PNG image than 261 bytes (#2263) (#2298)
* chore: add test of golden cases before fix of #2263 * chore: add test case to reproduce error of #2263 * [bugfix] allow store smaller PNG image than 261 bytes (#2263)
Diffstat (limited to 'internal/media/manager_test.go')
-rw-r--r--internal/media/manager_test.go70
1 files changed, 70 insertions, 0 deletions
diff --git a/internal/media/manager_test.go b/internal/media/manager_test.go
index 7b9b66147..cd0f9c24b 100644
--- a/internal/media/manager_test.go
+++ b/internal/media/manager_test.go
@@ -1248,6 +1248,76 @@ func (suite *ManagerTestSuite) TestSimpleJpegProcessBlockingWithDiskStorage() {
suite.Equal(processedThumbnailBytesExpected, processedThumbnailBytes)
}
+func (suite *ManagerTestSuite) TestSmallSizedMediaTypeDetection_issue2263() {
+ for index, test := range []struct {
+ name string // Test title
+ path string // File path
+ expected string // Expected ContentType
+ }{
+ {
+ name: "big size JPEG",
+ path: "./test/test-jpeg.jpg",
+ expected: "image/jpeg",
+ },
+ {
+ name: "big size PNG",
+ path: "./test/test-png-noalphachannel.png",
+ expected: "image/png",
+ },
+ {
+ name: "small size JPEG",
+ path: "./test/test-jpeg-1x1px-white.jpg",
+ expected: "image/jpeg",
+ },
+ {
+ name: "golden case PNG (big size)",
+ path: "./test/test-png-alphachannel-1x1px.png",
+ expected: "image/png",
+ },
+ } {
+ suite.Run(test.name, func() {
+ ctx, cncl := context.WithTimeout(context.Background(), time.Second*60)
+ defer cncl()
+
+ data := func(_ context.Context) (io.ReadCloser, int64, error) {
+ // load bytes from a test image
+ b, err := os.ReadFile(test.path)
+ suite.NoError(err, "Test %d: failed during test setup", index+1)
+
+ return io.NopCloser(bytes.NewBuffer(b)), int64(len(b)), nil
+ }
+
+ accountID := "01FS1X72SK9ZPW0J1QQ68BD264"
+
+ // process the media with no additional info provided
+ processingMedia, err := suite.manager.ProcessMedia(ctx, data, accountID, nil)
+ suite.NoError(err)
+
+ // fetch the attachment id from the processing media
+ attachmentID := processingMedia.AttachmentID()
+
+ // wait for processing to complete
+ var attachment *gtsmodel.MediaAttachment
+ if !testrig.WaitFor(func() bool {
+ attachment, err = suite.db.GetAttachmentByID(ctx, attachmentID)
+ return err == nil && attachment != nil
+ }) {
+ suite.FailNow("timed out waiting for attachment to process")
+ }
+
+ // make sure it's got the stuff set on it that we expect
+ // the attachment ID and accountID we expect
+ suite.Equal(attachmentID, attachment.ID)
+ suite.Equal(accountID, attachment.AccountID)
+
+ actual := attachment.File.ContentType
+ expect := test.expected
+
+ suite.Equal(expect, actual, "Test %d: %s", index+1, test.name)
+ })
+ }
+}
+
func TestManagerTestSuite(t *testing.T) {
suite.Run(t, &ManagerTestSuite{})
}