mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09: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.
This commit is contained in:
		| @@ -8,6 +8,7 @@ import ( | ||||
| 	"net/http" | ||||
| 	"net/http/httptest" | ||||
| 	"os" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| @@ -24,6 +25,17 @@ func (m mockFileInfo) ModTime() time.Time { return time.Time{} } | ||||
| func (m mockFileInfo) IsDir() bool        { return false } | ||||
| func (m mockFileInfo) Sys() interface{}   { return nil } | ||||
|  | ||||
| func countFormalHeaders(h http.Header) (c int) { | ||||
| 	for k := range h { | ||||
| 		// ignore our headers for internal usage | ||||
| 		if strings.HasPrefix(k, "X-Gitea-") { | ||||
| 			continue | ||||
| 		} | ||||
| 		c++ | ||||
| 	} | ||||
| 	return c | ||||
| } | ||||
|  | ||||
| func TestHandleFileETagCache(t *testing.T) { | ||||
| 	fi := mockFileInfo{} | ||||
| 	etag := `"MTBnaXRlYS50ZXN0TW9uLCAwMSBKYW4gMDAwMSAwMDowMDowMCBHTVQ="` | ||||
| @@ -35,7 +47,7 @@ func TestHandleFileETagCache(t *testing.T) { | ||||
| 		handled := HandleFileETagCache(req, w, fi) | ||||
|  | ||||
| 		assert.False(t, handled) | ||||
| 		assert.Len(t, w.Header(), 2) | ||||
| 		assert.Equal(t, 2, countFormalHeaders(w.Header())) | ||||
| 		assert.Contains(t, w.Header(), "Cache-Control") | ||||
| 		assert.Contains(t, w.Header(), "Etag") | ||||
| 		assert.Equal(t, etag, w.Header().Get("Etag")) | ||||
| @@ -49,7 +61,7 @@ func TestHandleFileETagCache(t *testing.T) { | ||||
| 		handled := HandleFileETagCache(req, w, fi) | ||||
|  | ||||
| 		assert.False(t, handled) | ||||
| 		assert.Len(t, w.Header(), 2) | ||||
| 		assert.Equal(t, 2, countFormalHeaders(w.Header())) | ||||
| 		assert.Contains(t, w.Header(), "Cache-Control") | ||||
| 		assert.Contains(t, w.Header(), "Etag") | ||||
| 		assert.Equal(t, etag, w.Header().Get("Etag")) | ||||
| @@ -63,7 +75,7 @@ func TestHandleFileETagCache(t *testing.T) { | ||||
| 		handled := HandleFileETagCache(req, w, fi) | ||||
|  | ||||
| 		assert.True(t, handled) | ||||
| 		assert.Len(t, w.Header(), 1) | ||||
| 		assert.Equal(t, 1, countFormalHeaders(w.Header())) | ||||
| 		assert.Contains(t, w.Header(), "Etag") | ||||
| 		assert.Equal(t, etag, w.Header().Get("Etag")) | ||||
| 		assert.Equal(t, http.StatusNotModified, w.Code) | ||||
| @@ -80,7 +92,7 @@ func TestHandleGenericETagCache(t *testing.T) { | ||||
| 		handled := HandleGenericETagCache(req, w, etag) | ||||
|  | ||||
| 		assert.False(t, handled) | ||||
| 		assert.Len(t, w.Header(), 2) | ||||
| 		assert.Equal(t, 2, countFormalHeaders(w.Header())) | ||||
| 		assert.Contains(t, w.Header(), "Cache-Control") | ||||
| 		assert.Contains(t, w.Header(), "Etag") | ||||
| 		assert.Equal(t, etag, w.Header().Get("Etag")) | ||||
| @@ -94,7 +106,7 @@ func TestHandleGenericETagCache(t *testing.T) { | ||||
| 		handled := HandleGenericETagCache(req, w, etag) | ||||
|  | ||||
| 		assert.False(t, handled) | ||||
| 		assert.Len(t, w.Header(), 2) | ||||
| 		assert.Equal(t, 2, countFormalHeaders(w.Header())) | ||||
| 		assert.Contains(t, w.Header(), "Cache-Control") | ||||
| 		assert.Contains(t, w.Header(), "Etag") | ||||
| 		assert.Equal(t, etag, w.Header().Get("Etag")) | ||||
| @@ -108,7 +120,7 @@ func TestHandleGenericETagCache(t *testing.T) { | ||||
| 		handled := HandleGenericETagCache(req, w, etag) | ||||
|  | ||||
| 		assert.True(t, handled) | ||||
| 		assert.Len(t, w.Header(), 1) | ||||
| 		assert.Equal(t, 1, countFormalHeaders(w.Header())) | ||||
| 		assert.Contains(t, w.Header(), "Etag") | ||||
| 		assert.Equal(t, etag, w.Header().Get("Etag")) | ||||
| 		assert.Equal(t, http.StatusNotModified, w.Code) | ||||
| @@ -122,7 +134,7 @@ func TestHandleGenericETagCache(t *testing.T) { | ||||
| 		handled := HandleGenericETagCache(req, w, etag) | ||||
|  | ||||
| 		assert.False(t, handled) | ||||
| 		assert.Len(t, w.Header(), 2) | ||||
| 		assert.Equal(t, 2, countFormalHeaders(w.Header())) | ||||
| 		assert.Contains(t, w.Header(), "Cache-Control") | ||||
| 		assert.Contains(t, w.Header(), "Etag") | ||||
| 		assert.Equal(t, etag, w.Header().Get("Etag")) | ||||
| @@ -136,7 +148,7 @@ func TestHandleGenericETagCache(t *testing.T) { | ||||
| 		handled := HandleGenericETagCache(req, w, etag) | ||||
|  | ||||
| 		assert.True(t, handled) | ||||
| 		assert.Len(t, w.Header(), 1) | ||||
| 		assert.Equal(t, 1, countFormalHeaders(w.Header())) | ||||
| 		assert.Contains(t, w.Header(), "Etag") | ||||
| 		assert.Equal(t, etag, w.Header().Get("Etag")) | ||||
| 		assert.Equal(t, http.StatusNotModified, w.Code) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user