diff --git a/model/file_info_test.go b/model/file_info_test.go index bf2e449ac2..04920270e4 100644 --- a/model/file_info_test.go +++ b/model/file_info_test.go @@ -24,109 +24,182 @@ func TestFileInfoIsValid(t *testing.T) { Path: "fake/path.png", } - require.Nil(t, info.IsValid()) + t.Run("Valid File Info", func(t *testing.T) { + assert.Nil(t, info.IsValid()) + }) - info.Id = "" - require.NotNil(t, info.IsValid(), "empty Id isn't valid") + t.Run("Empty ID is not valid", func(t *testing.T) { + info.Id = "" + assert.NotNil(t, info.IsValid(), "empty Id isn't valid") + info.Id = NewId() + }) - info.Id = NewId() - info.CreateAt = 0 - require.NotNil(t, info.IsValid(), "empty CreateAt isn't valid") + t.Run("CreateAt 0 is not valid", func(t *testing.T) { + info.CreateAt = 0 + assert.NotNil(t, info.IsValid(), "empty CreateAt isn't valid") + info.CreateAt = 1234 + }) - info.CreateAt = 1234 - info.UpdateAt = 0 - require.NotNil(t, info.IsValid(), "empty UpdateAt isn't valid") + t.Run("UpdateAt 0 is not valid", func(t *testing.T) { + info.UpdateAt = 0 + assert.NotNil(t, info.IsValid(), "empty UpdateAt isn't valid") + info.UpdateAt = 1234 + }) - info.UpdateAt = 1234 - info.PostId = NewId() - require.Nil(t, info.IsValid()) + t.Run("New Post ID is valid", func(t *testing.T) { + info.PostId = NewId() + assert.Nil(t, info.IsValid()) + }) - info.Path = "" - require.NotNil(t, info.IsValid(), "empty Path isn't valid") - - info.Path = "fake/path.png" - require.Nil(t, info.IsValid()) + t.Run("Empty path is not valid", func(t *testing.T) { + info.Path = "" + assert.NotNil(t, info.IsValid(), "empty Path isn't valid") + info.Path = "fake/path.png" + }) } func TestFileInfoIsImage(t *testing.T) { - info := &FileInfo{MimeType: "image/png"} - assert.True(t, info.IsImage(), "file is an image") + info := &FileInfo{} + t.Run("MimeType set to image/png is considered an image", func(t *testing.T) { + info.MimeType = "image/png" + assert.True(t, info.IsImage(), "PNG file should be considered as an image") + }) - info.MimeType = "text/plain" - assert.False(t, info.IsImage(), "file is not an image") + t.Run("MimeType set to text/plain is not considered an image", func(t *testing.T) { + info.MimeType = "text/plain" + assert.False(t, info.IsImage(), "Text file should not be considered as an image") + }) } func TestGetInfoForFile(t *testing.T) { fakeFile := make([]byte, 1000) - info, errApp := GetInfoForBytes("file.txt", fakeFile) - require.Nil(t, errApp) - assert.Equalf(t, info.Name, "file.txt", "Got incorrect filename: %v", info.Name) - assert.Equalf(t, info.Extension, "txt", "Got incorrect extension: %v", info.Extension) - assert.EqualValuesf(t, info.Size, 1000, "Got incorrect size: %v", info.Size) - assert.Truef(t, strings.HasPrefix(info.MimeType, "text/plain"), "Got incorrect mime type: %v", info.MimeType) - assert.Equalf(t, info.Width, 0, "Got incorrect width: %v", info.Width) - assert.Equalf(t, info.Height, 0, "Got incorrect height: %v", info.Height) - assert.Falsef(t, info.HasPreviewImage, "Got incorrect has preview image: %v", info.HasPreviewImage) - pngFile, err := ioutil.ReadFile("../tests/test.png") require.Nilf(t, err, "Failed to load test.png") - info, err = GetInfoForBytes("test.png", pngFile) - require.Nil(t, err) - assert.Equalf(t, info.Name, "test.png", "Got incorrect filename: %v", info.Name) - assert.Equalf(t, info.Extension, "png", "Got incorrect extension: %v", info.Extension) - assert.EqualValues(t, info.Size, 279591, "Got incorrect size: %v", info.Size) - assert.Equalf(t, info.MimeType, "image/png", "Got incorrect mime type: %v", info.MimeType) - assert.Equalf(t, info.Width, 408, "Got incorrect width: %v", info.Width) - assert.Equalf(t, info.Height, 336, "Got incorrect height: %v", info.Height) - assert.Truef(t, info.HasPreviewImage, "Got incorrect has preview image: %v", info.HasPreviewImage) - // base 64 encoded version of handtinywhite.gif from http://probablyprogramming.com/2009/03/15/the-tiniest-gif-ever gifFile, _ := base64.StdEncoding.DecodeString("R0lGODlhAQABAIABAP///wAAACwAAAAAAQABAAACAkQBADs=") - info, err = GetInfoForBytes("handtinywhite.gif", gifFile) - require.Nil(t, err) - assert.Equalf(t, info.Name, "handtinywhite.gif", "Got incorrect filename: %v", info.Name) - assert.Equalf(t, info.Extension, "gif", "Got incorrect extension: %v", info.Extension) - assert.EqualValuesf(t, info.Size, 35, "Got incorrect size: %v", info.Size) - assert.Equalf(t, info.MimeType, "image/gif", "Got incorrect mime type: %v", info.MimeType) - assert.Equalf(t, info.Width, 1, "Got incorrect width: %v", info.Width) - assert.Equalf(t, info.Height, 1, "Got incorrect height: %v", info.Height) - assert.Truef(t, info.HasPreviewImage, "Got incorrect has preview image: %v", info.HasPreviewImage) animatedGifFile, err := ioutil.ReadFile("../tests/testgif.gif") require.Nilf(t, err, "Failed to load testgif.gif") - info, err = GetInfoForBytes("testgif.gif", animatedGifFile) - require.Nil(t, err) - assert.Equalf(t, info.Name, "testgif.gif", "Got incorrect filename: %v", info.Name) - assert.Equalf(t, info.Extension, "gif", "Got incorrect extension: %v", info.Extension) - assert.EqualValuesf(t, info.Size, 38689, "Got incorrect size: %v", info.Size) - assert.Equalf(t, info.MimeType, "image/gif", "Got incorrect mime type: %v", info.MimeType) - assert.Equalf(t, info.Width, 118, "Got incorrect width: %v", info.Width) - assert.Equalf(t, info.Height, 118, "Got incorrect height: %v", info.Height) - assert.Falsef(t, info.HasPreviewImage, "Got incorrect has preview image: %v", info.HasPreviewImage) + var ttc = []struct { + testName string + filename string + file []byte + usePrefixForMime bool + expectedExtension string + expectedSize int + expectedMime string + expectedWidth int + expectedHeight int + expectedHasPreviewImage bool + }{ + { + testName: "Text File", + filename: "file.txt", + file: fakeFile, + usePrefixForMime: true, + expectedExtension: "txt", + expectedSize: 1000, + expectedMime: "text/plain", + expectedWidth: 0, + expectedHeight: 0, + expectedHasPreviewImage: false, + }, + { + testName: "PNG file", + filename: "test.png", + file: pngFile, + usePrefixForMime: false, + expectedExtension: "png", + expectedSize: 279591, + expectedMime: "image/png", + expectedWidth: 408, + expectedHeight: 336, + expectedHasPreviewImage: true, + }, + { + testName: "Static Gif File", + filename: "handtinywhite.gif", + file: gifFile, + usePrefixForMime: false, + expectedExtension: "gif", + expectedSize: 35, + expectedMime: "image/gif", + expectedWidth: 1, + expectedHeight: 1, + expectedHasPreviewImage: true, + }, + { + testName: "Animated Gif File", + filename: "testgif.gif", + file: animatedGifFile, + usePrefixForMime: false, + expectedExtension: "gif", + expectedSize: 38689, + expectedMime: "image/gif", + expectedWidth: 118, + expectedHeight: 118, + expectedHasPreviewImage: false, + }, + { + testName: "No extension File", + filename: "filewithoutextension", + file: fakeFile, + usePrefixForMime: false, + expectedExtension: "", + expectedSize: 1000, + expectedMime: "", + expectedWidth: 0, + expectedHeight: 0, + expectedHasPreviewImage: false, + }, + { + // Always make the extension lower case to make it easier to use in other places + testName: "Uppercase extension File", + filename: "file.TXT", + file: fakeFile, + usePrefixForMime: true, + expectedExtension: "txt", + expectedSize: 1000, + expectedMime: "text/plain", + expectedWidth: 0, + expectedHeight: 0, + expectedHasPreviewImage: false, + }, + { + // Don't error out for image formats we don't support + testName: "Not supported File", + filename: "file.tif", + file: fakeFile, + usePrefixForMime: false, + expectedExtension: "tif", + expectedSize: 1000, + expectedMime: "image/tiff", + expectedWidth: 0, + expectedHeight: 0, + expectedHasPreviewImage: false, + }, + } - info, err = GetInfoForBytes("filewithoutextension", fakeFile) - require.Nil(t, err) - assert.Equalf(t, info.Name, "filewithoutextension", "Got incorrect filename: %v", info.Name) - assert.Equalf(t, info.Extension, "", "Got incorrect extension: %v", info.Extension) - assert.EqualValuesf(t, info.Size, 1000, "Got incorrect size: %v", info.Size) - assert.Equalf(t, info.MimeType, "", "Got incorrect mime type: %v", info.MimeType) - assert.Equalf(t, info.Width, 0, "Got incorrect width: %v", info.Width) - assert.Equalf(t, info.Height, 0, "Got incorrect height: %v", info.Height) - assert.Falsef(t, info.HasPreviewImage, "Got incorrect has preview image: %v", info.HasPreviewImage) + for _, tc := range ttc { + t.Run(tc.testName, func(t *testing.T) { + info, errApp := GetInfoForBytes(tc.filename, tc.file) + require.Nil(t, errApp) - // Always make the extension lower case to make it easier to use in other places - info, err = GetInfoForBytes("file.TXT", fakeFile) - require.Nil(t, err) - assert.Equalf(t, info.Name, "file.TXT", "Got incorrect filename: %v", info.Name) - assert.Equalf(t, info.Extension, "txt", "Got incorrect extension: %v", info.Extension) + assert.Equalf(t, tc.filename, info.Name, "Got incorrect filename: %v", info.Name) + assert.Equalf(t, tc.expectedExtension, info.Extension, "Got incorrect extension: %v", info.Extension) + assert.EqualValuesf(t, tc.expectedSize, info.Size, "Got incorrect size: %v", info.Size) + assert.Equalf(t, tc.expectedWidth, info.Width, "Got incorrect width: %v", info.Width) + assert.Equalf(t, tc.expectedHeight, info.Height, "Got incorrect height: %v", info.Height) + assert.Equalf(t, tc.expectedHasPreviewImage, info.HasPreviewImage, "Got incorrect has preview image: %v", info.HasPreviewImage) - // Don't error out for image formats we don't support - info, err = GetInfoForBytes("file.tif", fakeFile) - require.Nil(t, err) - assert.Equalf(t, info.Name, "file.tif", "Got incorrect filename: %v", info.Name) - assert.Equalf(t, info.Extension, "tif", "Got incorrect extension: %v", info.Extension) - assert.True(t, info.MimeType == "image/x-tiff" || info.MimeType == "image/tiff", "Got incorrect mime type: %v", info.MimeType) + if tc.usePrefixForMime { + assert.Truef(t, strings.HasPrefix(info.MimeType, tc.expectedMime), "Got incorrect mime type: %v", info.MimeType) + } else { + assert.Equalf(t, tc.expectedMime, info.MimeType, "Got incorrect mime type: %v", info.MimeType) + } + }) + } }