mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-30 01:04:25 +01:00 
			
		
		
		
	Fixes #28660 Fixes an admin api bug related to `user.LoginSource` Fixed `/user/emails` response not identical to GitHub api This PR unifies the user update methods. The goal is to keep the logic only at one place (having audit logs in mind). For example, do the password checks only in one method not everywhere a password is updated. After that PR is merged, the user creation should be next.
		
			
				
	
	
		
			130 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2021 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package integration
 | |
| 
 | |
| import (
 | |
| 	"net/http"
 | |
| 	"testing"
 | |
| 
 | |
| 	auth_model "code.gitea.io/gitea/models/auth"
 | |
| 	api "code.gitea.io/gitea/modules/structs"
 | |
| 	"code.gitea.io/gitea/tests"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| func TestAPIListEmails(t *testing.T) {
 | |
| 	defer tests.PrepareTestEnv(t)()
 | |
| 
 | |
| 	normalUsername := "user2"
 | |
| 	session := loginUser(t, normalUsername)
 | |
| 	token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadUser)
 | |
| 
 | |
| 	req := NewRequest(t, "GET", "/api/v1/user/emails").
 | |
| 		AddTokenAuth(token)
 | |
| 	resp := MakeRequest(t, req, http.StatusOK)
 | |
| 
 | |
| 	var emails []*api.Email
 | |
| 	DecodeJSON(t, resp, &emails)
 | |
| 
 | |
| 	assert.EqualValues(t, []*api.Email{
 | |
| 		{
 | |
| 			Email:    "user2@example.com",
 | |
| 			Verified: true,
 | |
| 			Primary:  true,
 | |
| 		},
 | |
| 		{
 | |
| 			Email:    "user2-2@example.com",
 | |
| 			Verified: false,
 | |
| 			Primary:  false,
 | |
| 		},
 | |
| 	}, emails)
 | |
| }
 | |
| 
 | |
| func TestAPIAddEmail(t *testing.T) {
 | |
| 	defer tests.PrepareTestEnv(t)()
 | |
| 
 | |
| 	normalUsername := "user2"
 | |
| 	session := loginUser(t, normalUsername)
 | |
| 	token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteUser)
 | |
| 
 | |
| 	opts := api.CreateEmailOption{
 | |
| 		Emails: []string{"user101@example.com"},
 | |
| 	}
 | |
| 
 | |
| 	req := NewRequestWithJSON(t, "POST", "/api/v1/user/emails", &opts).
 | |
| 		AddTokenAuth(token)
 | |
| 	MakeRequest(t, req, http.StatusUnprocessableEntity)
 | |
| 
 | |
| 	opts = api.CreateEmailOption{
 | |
| 		Emails: []string{"user2-3@example.com"},
 | |
| 	}
 | |
| 	req = NewRequestWithJSON(t, "POST", "/api/v1/user/emails", &opts).
 | |
| 		AddTokenAuth(token)
 | |
| 	resp := MakeRequest(t, req, http.StatusCreated)
 | |
| 
 | |
| 	var emails []*api.Email
 | |
| 	DecodeJSON(t, resp, &emails)
 | |
| 	assert.EqualValues(t, []*api.Email{
 | |
| 		{
 | |
| 			Email:    "user2@example.com",
 | |
| 			Verified: true,
 | |
| 			Primary:  true,
 | |
| 		},
 | |
| 		{
 | |
| 			Email:    "user2-2@example.com",
 | |
| 			Verified: false,
 | |
| 			Primary:  false,
 | |
| 		},
 | |
| 		{
 | |
| 			Email:    "user2-3@example.com",
 | |
| 			Verified: true,
 | |
| 			Primary:  false,
 | |
| 		},
 | |
| 	}, emails)
 | |
| 
 | |
| 	opts = api.CreateEmailOption{
 | |
| 		Emails: []string{"notAEmail"},
 | |
| 	}
 | |
| 	req = NewRequestWithJSON(t, "POST", "/api/v1/user/emails", &opts).
 | |
| 		AddTokenAuth(token)
 | |
| 	MakeRequest(t, req, http.StatusUnprocessableEntity)
 | |
| }
 | |
| 
 | |
| func TestAPIDeleteEmail(t *testing.T) {
 | |
| 	defer tests.PrepareTestEnv(t)()
 | |
| 
 | |
| 	normalUsername := "user2"
 | |
| 	session := loginUser(t, normalUsername)
 | |
| 	token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteUser)
 | |
| 
 | |
| 	opts := api.DeleteEmailOption{
 | |
| 		Emails: []string{"user2-3@example.com"},
 | |
| 	}
 | |
| 	req := NewRequestWithJSON(t, "DELETE", "/api/v1/user/emails", &opts).
 | |
| 		AddTokenAuth(token)
 | |
| 	MakeRequest(t, req, http.StatusNotFound)
 | |
| 
 | |
| 	opts = api.DeleteEmailOption{
 | |
| 		Emails: []string{"user2-2@example.com"},
 | |
| 	}
 | |
| 	req = NewRequestWithJSON(t, "DELETE", "/api/v1/user/emails", &opts).
 | |
| 		AddTokenAuth(token)
 | |
| 	MakeRequest(t, req, http.StatusNoContent)
 | |
| 
 | |
| 	req = NewRequest(t, "GET", "/api/v1/user/emails").
 | |
| 		AddTokenAuth(token)
 | |
| 	resp := MakeRequest(t, req, http.StatusOK)
 | |
| 
 | |
| 	var emails []*api.Email
 | |
| 	DecodeJSON(t, resp, &emails)
 | |
| 	assert.EqualValues(t, []*api.Email{
 | |
| 		{
 | |
| 			Email:    "user2@example.com",
 | |
| 			Verified: true,
 | |
| 			Primary:  true,
 | |
| 		},
 | |
| 	}, emails)
 | |
| }
 |