summaryrefslogtreecommitdiff
path: root/internal/media/manager_test.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2022-10-13 15:16:24 +0200
committerLibravatar GitHub <noreply@github.com>2022-10-13 15:16:24 +0200
commit70d65b683fa963d2a8761182a2ddd2f4f9a86bb4 (patch)
tree9cbd8f6870569b2514683c0e8ff6ea32e6e81780 /internal/media/manager_test.go
parent[frontend] Use new GET custom_emoji admin api (#908) (diff)
downloadgotosocial-70d65b683fa963d2a8761182a2ddd2f4f9a86bb4.tar.xz
[feature] Refetch emojis when they change on remote instances (#905)
* select emoji using image_static_url * use updated on AP emojis * allow refetch of updated emojis * cheeky workaround for test * clean up old files for refreshed emoji * check error for originalPostData * shorten GetEmojiByStaticImageURL * delete kirby (sorry nintendo)
Diffstat (limited to 'internal/media/manager_test.go')
-rw-r--r--internal/media/manager_test.go101
1 files changed, 97 insertions, 4 deletions
diff --git a/internal/media/manager_test.go b/internal/media/manager_test.go
index f9c96259d..e00cdd98d 100644
--- a/internal/media/manager_test.go
+++ b/internal/media/manager_test.go
@@ -55,7 +55,7 @@ func (suite *ManagerTestSuite) TestEmojiProcessBlocking() {
emojiID := "01GDQ9G782X42BAMFASKP64343"
emojiURI := "http://localhost:8080/emoji/01GDQ9G782X42BAMFASKP64343"
- processingEmoji, err := suite.manager.ProcessEmoji(ctx, data, nil, "rainbow_test", emojiID, emojiURI, nil)
+ processingEmoji, err := suite.manager.ProcessEmoji(ctx, data, nil, "rainbow_test", emojiID, emojiURI, nil, false)
suite.NoError(err)
// do a blocking call to fetch the emoji
@@ -101,6 +101,99 @@ func (suite *ManagerTestSuite) TestEmojiProcessBlocking() {
suite.Equal(processedStaticBytesExpected, processedStaticBytes)
}
+func (suite *ManagerTestSuite) TestEmojiProcessBlockingRefresh() {
+ ctx := context.Background()
+
+ // we're going to 'refresh' the remote 'yell' emoji by changing the image url to the pixellated gts logo
+ originalEmoji := suite.testEmojis["yell"]
+
+ emojiToUpdate := &gtsmodel.Emoji{}
+ *emojiToUpdate = *originalEmoji
+ newImageRemoteURL := "http://fossbros-anonymous.io/some/image/path.png"
+
+ oldEmojiImagePath := emojiToUpdate.ImagePath
+ oldEmojiImageStaticPath := emojiToUpdate.ImageStaticPath
+
+ data := func(_ context.Context) (io.Reader, int64, error) {
+ b, err := os.ReadFile("./test/gts_pixellated-original.png")
+ if err != nil {
+ panic(err)
+ }
+ return bytes.NewBuffer(b), int64(len(b)), nil
+ }
+
+ emojiID := emojiToUpdate.ID
+ emojiURI := emojiToUpdate.URI
+
+ processingEmoji, err := suite.manager.ProcessEmoji(ctx, data, nil, "yell", emojiID, emojiURI, &media.AdditionalEmojiInfo{
+ CreatedAt: &emojiToUpdate.CreatedAt,
+ Domain: &emojiToUpdate.Domain,
+ ImageRemoteURL: &newImageRemoteURL,
+ }, true)
+ suite.NoError(err)
+
+ // do a blocking call to fetch the emoji
+ emoji, err := processingEmoji.LoadEmoji(ctx)
+ suite.NoError(err)
+ suite.NotNil(emoji)
+
+ // make sure it's got the stuff set on it that we expect
+ suite.Equal(emojiID, emoji.ID)
+
+ // file meta should be correctly derived from the image
+ suite.Equal("image/png", emoji.ImageContentType)
+ suite.Equal("image/png", emoji.ImageStaticContentType)
+ suite.Equal(10296, emoji.ImageFileSize)
+
+ // now make sure the emoji is in the database
+ dbEmoji, err := suite.db.GetEmojiByID(ctx, emojiID)
+ suite.NoError(err)
+ suite.NotNil(dbEmoji)
+
+ // make sure the processed emoji file is in storage
+ processedFullBytes, err := suite.storage.Get(ctx, emoji.ImagePath)
+ suite.NoError(err)
+ suite.NotEmpty(processedFullBytes)
+
+ // load the processed bytes from our test folder, to compare
+ processedFullBytesExpected, err := os.ReadFile("./test/gts_pixellated-original.png")
+ suite.NoError(err)
+ suite.NotEmpty(processedFullBytesExpected)
+
+ // the bytes in storage should be what we expected
+ suite.Equal(processedFullBytesExpected, processedFullBytes)
+
+ // now do the same for the thumbnail and make sure it's what we expected
+ processedStaticBytes, err := suite.storage.Get(ctx, emoji.ImageStaticPath)
+ suite.NoError(err)
+ suite.NotEmpty(processedStaticBytes)
+
+ processedStaticBytesExpected, err := os.ReadFile("./test/gts_pixellated-static.png")
+ suite.NoError(err)
+ suite.NotEmpty(processedStaticBytesExpected)
+
+ suite.Equal(processedStaticBytesExpected, processedStaticBytes)
+
+ // most fields should be different on the emoji now from what they were before
+ suite.Equal(originalEmoji.ID, dbEmoji.ID)
+ suite.NotEqual(originalEmoji.ImageRemoteURL, dbEmoji.ImageRemoteURL)
+ suite.NotEqual(originalEmoji.ImageURL, dbEmoji.ImageURL)
+ suite.NotEqual(originalEmoji.ImageStaticURL, dbEmoji.ImageStaticURL)
+ suite.NotEqual(originalEmoji.ImageFileSize, dbEmoji.ImageFileSize)
+ suite.NotEqual(originalEmoji.ImageStaticFileSize, dbEmoji.ImageStaticFileSize)
+ suite.NotEqual(originalEmoji.ImagePath, dbEmoji.ImagePath)
+ suite.NotEqual(originalEmoji.ImageStaticPath, dbEmoji.ImageStaticPath)
+ suite.NotEqual(originalEmoji.ImageStaticPath, dbEmoji.ImageStaticPath)
+ suite.NotEqual(originalEmoji.UpdatedAt, dbEmoji.UpdatedAt)
+ suite.NotEqual(originalEmoji.ImageUpdatedAt, dbEmoji.ImageUpdatedAt)
+
+ // the old image files should no longer be in storage
+ _, err = suite.storage.Get(ctx, oldEmojiImagePath)
+ suite.ErrorIs(err, storage.ErrNotFound)
+ _, err = suite.storage.Get(ctx, oldEmojiImageStaticPath)
+ suite.ErrorIs(err, storage.ErrNotFound)
+}
+
func (suite *ManagerTestSuite) TestEmojiProcessBlockingTooLarge() {
ctx := context.Background()
@@ -116,7 +209,7 @@ func (suite *ManagerTestSuite) TestEmojiProcessBlockingTooLarge() {
emojiID := "01GDQ9G782X42BAMFASKP64343"
emojiURI := "http://localhost:8080/emoji/01GDQ9G782X42BAMFASKP64343"
- processingEmoji, err := suite.manager.ProcessEmoji(ctx, data, nil, "big_panda", emojiID, emojiURI, nil)
+ processingEmoji, err := suite.manager.ProcessEmoji(ctx, data, nil, "big_panda", emojiID, emojiURI, nil, false)
suite.NoError(err)
// do a blocking call to fetch the emoji
@@ -140,7 +233,7 @@ func (suite *ManagerTestSuite) TestEmojiProcessBlockingTooLargeNoSizeGiven() {
emojiID := "01GDQ9G782X42BAMFASKP64343"
emojiURI := "http://localhost:8080/emoji/01GDQ9G782X42BAMFASKP64343"
- processingEmoji, err := suite.manager.ProcessEmoji(ctx, data, nil, "big_panda", emojiID, emojiURI, nil)
+ processingEmoji, err := suite.manager.ProcessEmoji(ctx, data, nil, "big_panda", emojiID, emojiURI, nil, false)
suite.NoError(err)
// do a blocking call to fetch the emoji
@@ -165,7 +258,7 @@ func (suite *ManagerTestSuite) TestEmojiProcessBlockingNoFileSizeGiven() {
emojiURI := "http://localhost:8080/emoji/01GDQ9G782X42BAMFASKP64343"
// process the media with no additional info provided
- processingEmoji, err := suite.manager.ProcessEmoji(ctx, data, nil, "rainbow_test", emojiID, emojiURI, nil)
+ processingEmoji, err := suite.manager.ProcessEmoji(ctx, data, nil, "rainbow_test", emojiID, emojiURI, nil, false)
suite.NoError(err)
// do a blocking call to fetch the emoji