mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-06-17 11:59:30 +00:00
test(avatar): deleting a user avatar is idempotent
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
This commit is contained in:
parent
8b5642949a
commit
d2c4d833f4
4 changed files with 62 additions and 29 deletions
|
@ -7,6 +7,7 @@ import (
|
|||
"bytes"
|
||||
"image"
|
||||
"image/png"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"code.gitea.io/gitea/models/db"
|
||||
|
@ -18,30 +19,62 @@ import (
|
|||
"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)
|
||||
|
||||
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)
|
||||
|
||||
t.Run("AtomicStorageFailure", func(t *testing.T) {
|
||||
defer test.MockVariableValue[storage.ObjectStorage](&storage.Avatars, storage.UninitializedStorage)()
|
||||
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)
|
||||
verification := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||
|
||||
// ... 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)
|
||||
})
|
||||
|
||||
err = DeleteAvatar(db.DefaultContext, user)
|
||||
assert.NoError(t, err)
|
||||
t.Run("Success", func(t *testing.T) {
|
||||
assert.NoError(t, unittest.PrepareTestDatabase())
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||
|
||||
verification = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||
assert.Equal(t, "", verification.Avatar)
|
||||
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)
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue