mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-23 12:59:11 -05:00
d2c4d833f4
If the avatar file in storage does not exist, it is not an error and
the database can be updated.
See 1be797faba
Fix bug on avatar
80 lines
2.3 KiB
Go
80 lines
2.3 KiB
Go
// Copyright The Forgejo Authors.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package user
|
|
|
|
import (
|
|
"bytes"
|
|
"image"
|
|
"image/png"
|
|
"os"
|
|
"testing"
|
|
|
|
"code.gitea.io/gitea/models/db"
|
|
"code.gitea.io/gitea/models/unittest"
|
|
user_model "code.gitea.io/gitea/models/user"
|
|
"code.gitea.io/gitea/modules/storage"
|
|
"code.gitea.io/gitea/modules/test"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
type alreadyDeletedStorage struct {
|
|
storage.DiscardStorage
|
|
}
|
|
|
|
func (s alreadyDeletedStorage) Delete(_ string) error {
|
|
return os.ErrNotExist
|
|
}
|
|
|
|
func TestUserDeleteAvatar(t *testing.T) {
|
|
myImage := image.NewRGBA(image.Rect(0, 0, 1, 1))
|
|
var buff bytes.Buffer
|
|
png.Encode(&buff, myImage)
|
|
|
|
t.Run("AtomicStorageFailure", func(t *testing.T) {
|
|
defer test.MockProtect[storage.ObjectStorage](&storage.Avatars)()
|
|
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
|
|
|
err := UploadAvatar(db.DefaultContext, user, buff.Bytes())
|
|
assert.NoError(t, err)
|
|
verification := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
|
assert.NotEqual(t, "", verification.Avatar)
|
|
|
|
// fail to delete ...
|
|
storage.Avatars = storage.UninitializedStorage
|
|
err = DeleteAvatar(db.DefaultContext, user)
|
|
assert.Error(t, err)
|
|
|
|
// ... the avatar is not removed from the database
|
|
verification = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
|
assert.True(t, verification.UseCustomAvatar)
|
|
|
|
// already deleted ...
|
|
storage.Avatars = alreadyDeletedStorage{}
|
|
err = DeleteAvatar(db.DefaultContext, user)
|
|
assert.NoError(t, err)
|
|
|
|
// ... the avatar is removed from the database
|
|
verification = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
|
assert.Equal(t, "", verification.Avatar)
|
|
})
|
|
|
|
t.Run("Success", func(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
|
|
|
err := UploadAvatar(db.DefaultContext, user, buff.Bytes())
|
|
assert.NoError(t, err)
|
|
verification := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
|
assert.NotEqual(t, "", verification.Avatar)
|
|
|
|
err = DeleteAvatar(db.DefaultContext, user)
|
|
assert.NoError(t, err)
|
|
|
|
verification = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
|
assert.Equal(t, "", verification.Avatar)
|
|
})
|
|
}
|