Merge pull request 'test(avatar): deleting a user avatar and file is atomic' (#4015) from earl-warren/forgejo:wip-delete-avatar into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4015 Reviewed-by: Victoria <efertone@noreply.codeberg.org>
This commit is contained in:
		
				commit
				
					
						1b3ccfffe8
					
				
			
		
					 4 changed files with 57 additions and 10 deletions
				
			
		| 
						 | 
				
			
			@ -10,7 +10,7 @@ import (
 | 
			
		|||
	"os"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var uninitializedStorage = discardStorage("uninitialized storage")
 | 
			
		||||
var UninitializedStorage = discardStorage("uninitialized storage")
 | 
			
		||||
 | 
			
		||||
type discardStorage string
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@ import (
 | 
			
		|||
 | 
			
		||||
func Test_discardStorage(t *testing.T) {
 | 
			
		||||
	tests := []discardStorage{
 | 
			
		||||
		uninitializedStorage,
 | 
			
		||||
		UninitializedStorage,
 | 
			
		||||
		discardStorage("empty"),
 | 
			
		||||
	}
 | 
			
		||||
	for _, tt := range tests {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -109,26 +109,26 @@ func SaveFrom(objStorage ObjectStorage, p string, callback func(w io.Writer) err
 | 
			
		|||
 | 
			
		||||
var (
 | 
			
		||||
	// Attachments represents attachments storage
 | 
			
		||||
	Attachments ObjectStorage = uninitializedStorage
 | 
			
		||||
	Attachments ObjectStorage = UninitializedStorage
 | 
			
		||||
 | 
			
		||||
	// LFS represents lfs storage
 | 
			
		||||
	LFS ObjectStorage = uninitializedStorage
 | 
			
		||||
	LFS ObjectStorage = UninitializedStorage
 | 
			
		||||
 | 
			
		||||
	// Avatars represents user avatars storage
 | 
			
		||||
	Avatars ObjectStorage = uninitializedStorage
 | 
			
		||||
	Avatars ObjectStorage = UninitializedStorage
 | 
			
		||||
	// RepoAvatars represents repository avatars storage
 | 
			
		||||
	RepoAvatars ObjectStorage = uninitializedStorage
 | 
			
		||||
	RepoAvatars ObjectStorage = UninitializedStorage
 | 
			
		||||
 | 
			
		||||
	// RepoArchives represents repository archives storage
 | 
			
		||||
	RepoArchives ObjectStorage = uninitializedStorage
 | 
			
		||||
	RepoArchives ObjectStorage = UninitializedStorage
 | 
			
		||||
 | 
			
		||||
	// Packages represents packages storage
 | 
			
		||||
	Packages ObjectStorage = uninitializedStorage
 | 
			
		||||
	Packages ObjectStorage = UninitializedStorage
 | 
			
		||||
 | 
			
		||||
	// Actions represents actions storage
 | 
			
		||||
	Actions ObjectStorage = uninitializedStorage
 | 
			
		||||
	Actions ObjectStorage = UninitializedStorage
 | 
			
		||||
	// Actions Artifacts represents actions artifacts storage
 | 
			
		||||
	ActionsArtifacts ObjectStorage = uninitializedStorage
 | 
			
		||||
	ActionsArtifacts ObjectStorage = UninitializedStorage
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Init init the stoarge
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										47
									
								
								services/user/avatar_test.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								services/user/avatar_test.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,47 @@
 | 
			
		|||
// Copyright The Forgejo Authors.
 | 
			
		||||
// SPDX-License-Identifier: MIT
 | 
			
		||||
 | 
			
		||||
package user
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"image"
 | 
			
		||||
	"image/png"
 | 
			
		||||
	"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"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
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)()
 | 
			
		||||
		err = DeleteAvatar(db.DefaultContext, user)
 | 
			
		||||
		assert.Error(t, err)
 | 
			
		||||
		verification := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
 | 
			
		||||
		assert.True(t, verification.UseCustomAvatar)
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	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