2021-05-05 16:06:39 +03:00
// Copyright 2021 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package integrations
import (
"bytes"
"image/png"
"io"
"mime/multipart"
"net/http"
"net/url"
"testing"
2021-11-16 11:53:21 +03:00
"code.gitea.io/gitea/models/unittest"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2021-05-05 16:06:39 +03:00
"code.gitea.io/gitea/modules/avatar"
2021-11-17 15:34:35 +03:00
2021-05-05 16:06:39 +03:00
"github.com/stretchr/testify/assert"
)
func TestUserAvatar ( t * testing . T ) {
onGiteaRun ( t , func ( t * testing . T , u * url . URL ) {
2022-08-16 05:22:25 +03:00
user2 := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } ) // owner of the repo3, is an org
2021-05-05 16:06:39 +03:00
seed := user2 . Email
if len ( seed ) == 0 {
seed = user2 . Name
}
img , err := avatar . RandomImage ( [ ] byte ( seed ) )
if err != nil {
assert . NoError ( t , err )
return
}
session := loginUser ( t , "user2" )
csrf := GetCSRF ( t , session , "/user/settings" )
imgData := & bytes . Buffer { }
body := & bytes . Buffer { }
2022-01-20 20:46:10 +03:00
// Setup multi-part
2021-05-05 16:06:39 +03:00
writer := multipart . NewWriter ( body )
writer . WriteField ( "source" , "local" )
part , err := writer . CreateFormFile ( "avatar" , "avatar-for-testuseravatar.png" )
if err != nil {
assert . NoError ( t , err )
return
}
if err := png . Encode ( imgData , img ) ; err != nil {
assert . NoError ( t , err )
return
}
if _ , err := io . Copy ( part , imgData ) ; err != nil {
assert . NoError ( t , err )
return
}
if err := writer . Close ( ) ; err != nil {
assert . NoError ( t , err )
return
}
req := NewRequestWithBody ( t , "POST" , "/user/settings/avatar" , body )
req . Header . Add ( "X-Csrf-Token" , csrf )
req . Header . Add ( "Content-Type" , writer . FormDataContentType ( ) )
2022-03-23 07:54:07 +03:00
session . MakeRequest ( t , req , http . StatusSeeOther )
2021-05-05 16:06:39 +03:00
2022-08-16 05:22:25 +03:00
user2 = unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } ) // owner of the repo3, is an org
2021-05-05 16:06:39 +03:00
2021-10-25 08:01:16 +03:00
req = NewRequest ( t , "GET" , user2 . AvatarLinkWithSize ( 0 ) )
Avatar refactor, move avatar code from `models` to `models.avatars`, remove duplicated code (#17123)
Why this refactor
The goal is to move most files from `models` package to `models.xxx` package. Many models depend on avatar model, so just move this first.
And the existing logic is not clear, there are too many function like `AvatarLink`, `RelAvatarLink`, `SizedRelAvatarLink`, `SizedAvatarLink`, `MakeFinalAvatarURL`, `HashedAvatarLink`, etc. This refactor make everything clear:
* user.AvatarLink()
* user.AvatarLinkWithSize(size)
* avatars.GenerateEmailAvatarFastLink(email, size)
* avatars.GenerateEmailAvatarFinalLink(email, size)
And many duplicated code are deleted in route handler, the handler and the model share the same avatar logic now.
2021-10-06 02:25:46 +03:00
_ = session . MakeRequest ( t , req , http . StatusOK )
2021-05-05 16:06:39 +03:00
Avatar refactor, move avatar code from `models` to `models.avatars`, remove duplicated code (#17123)
Why this refactor
The goal is to move most files from `models` package to `models.xxx` package. Many models depend on avatar model, so just move this first.
And the existing logic is not clear, there are too many function like `AvatarLink`, `RelAvatarLink`, `SizedRelAvatarLink`, `SizedAvatarLink`, `MakeFinalAvatarURL`, `HashedAvatarLink`, etc. This refactor make everything clear:
* user.AvatarLink()
* user.AvatarLinkWithSize(size)
* avatars.GenerateEmailAvatarFastLink(email, size)
* avatars.GenerateEmailAvatarFinalLink(email, size)
And many duplicated code are deleted in route handler, the handler and the model share the same avatar logic now.
2021-10-06 02:25:46 +03:00
// Can't test if the response matches because the image is re-generated on upload but checking that this at least doesn't give a 404 should be enough.
2021-05-05 16:06:39 +03:00
} )
}