loading up the forgejo repo on tangled to test page performance
1// Copyright The Forgejo Authors.
2// SPDX-License-Identifier: MIT
3
4package user
5
6import (
7 "bytes"
8 "image"
9 "image/png"
10 "os"
11 "testing"
12
13 "forgejo.org/models/db"
14 "forgejo.org/models/unittest"
15 user_model "forgejo.org/models/user"
16 "forgejo.org/modules/storage"
17 "forgejo.org/modules/test"
18
19 "github.com/stretchr/testify/assert"
20 "github.com/stretchr/testify/require"
21)
22
23type alreadyDeletedStorage struct {
24 storage.DiscardStorage
25}
26
27func (s alreadyDeletedStorage) Delete(_ string) error {
28 return os.ErrNotExist
29}
30
31func TestUserDeleteAvatar(t *testing.T) {
32 myImage := image.NewRGBA(image.Rect(0, 0, 1, 1))
33 var buff bytes.Buffer
34 png.Encode(&buff, myImage)
35
36 t.Run("AtomicStorageFailure", func(t *testing.T) {
37 defer test.MockProtect[storage.ObjectStorage](&storage.Avatars)()
38
39 require.NoError(t, unittest.PrepareTestDatabase())
40 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
41
42 err := UploadAvatar(db.DefaultContext, user, buff.Bytes())
43 require.NoError(t, err)
44 verification := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
45 assert.NotEmpty(t, verification.Avatar)
46
47 // fail to delete ...
48 storage.Avatars = storage.UninitializedStorage
49 err = DeleteAvatar(db.DefaultContext, user)
50 require.Error(t, err)
51
52 // ... the avatar is not removed from the database
53 verification = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
54 assert.True(t, verification.UseCustomAvatar)
55
56 // already deleted ...
57 storage.Avatars = alreadyDeletedStorage{}
58 err = DeleteAvatar(db.DefaultContext, user)
59 require.NoError(t, err)
60
61 // ... the avatar is removed from the database
62 verification = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
63 assert.Empty(t, verification.Avatar)
64 })
65
66 t.Run("Success", func(t *testing.T) {
67 require.NoError(t, unittest.PrepareTestDatabase())
68 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
69
70 err := UploadAvatar(db.DefaultContext, user, buff.Bytes())
71 require.NoError(t, err)
72 verification := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
73 assert.NotEmpty(t, verification.Avatar)
74
75 err = DeleteAvatar(db.DefaultContext, user)
76 require.NoError(t, err)
77
78 verification = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
79 assert.Empty(t, verification.Avatar)
80 })
81}