From b7309b8ccb16f6303ae300b755baef9f9713d457 Mon Sep 17 00:00:00 2001
From: KN4CK3R <admin@oldschoolhack.me>
Date: Thu, 29 Sep 2022 05:27:33 +0200
Subject: [PATCH] Add name field for org api (#21270)

related #21205

The field `UserName` is not really usefull for an organization.
This adds a second `Name` field.

The [GitHub API](https://docs.github.com/en/rest/orgs/orgs#get-an-organization) uses `name` too. `UserName` should be deprecated then.
---
 modules/convert/convert.go              | 1 +
 modules/structs/org.go                  | 4 +++-
 templates/swagger/v1_json.tmpl          | 5 +++++
 tests/integration/api_admin_org_test.go | 2 +-
 tests/integration/api_org_test.go       | 6 +++---
 tests/integration/api_user_orgs_test.go | 4 ++++
 6 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/modules/convert/convert.go b/modules/convert/convert.go
index 0e67563077..af759cb938 100644
--- a/modules/convert/convert.go
+++ b/modules/convert/convert.go
@@ -296,6 +296,7 @@ func ToOrganization(org *organization.Organization) *api.Organization {
 	return &api.Organization{
 		ID:                        org.ID,
 		AvatarURL:                 org.AsUser().AvatarLink(),
+		Name:                      org.Name,
 		UserName:                  org.Name,
 		FullName:                  org.FullName,
 		Description:               org.Description,
diff --git a/modules/structs/org.go b/modules/structs/org.go
index d8bd59e1ec..1e98c59ba4 100644
--- a/modules/structs/org.go
+++ b/modules/structs/org.go
@@ -7,7 +7,7 @@ package structs
 // Organization represents an organization
 type Organization struct {
 	ID                        int64  `json:"id"`
-	UserName                  string `json:"username"`
+	Name                      string `json:"name"`
 	FullName                  string `json:"full_name"`
 	AvatarURL                 string `json:"avatar_url"`
 	Description               string `json:"description"`
@@ -15,6 +15,8 @@ type Organization struct {
 	Location                  string `json:"location"`
 	Visibility                string `json:"visibility"`
 	RepoAdminChangeTeamAccess bool   `json:"repo_admin_change_team_access"`
+	// deprecated
+	UserName string `json:"username"`
 }
 
 // OrganizationPermissions list different users permissions on an organization
diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl
index 52553e2e89..b0e94b8bb5 100644
--- a/templates/swagger/v1_json.tmpl
+++ b/templates/swagger/v1_json.tmpl
@@ -17326,11 +17326,16 @@
           "type": "string",
           "x-go-name": "Location"
         },
+        "name": {
+          "type": "string",
+          "x-go-name": "Name"
+        },
         "repo_admin_change_team_access": {
           "type": "boolean",
           "x-go-name": "RepoAdminChangeTeamAccess"
         },
         "username": {
+          "description": "deprecated",
           "type": "string",
           "x-go-name": "UserName"
         },
diff --git a/tests/integration/api_admin_org_test.go b/tests/integration/api_admin_org_test.go
index 720f6fc6b6..a8770db4ca 100644
--- a/tests/integration/api_admin_org_test.go
+++ b/tests/integration/api_admin_org_test.go
@@ -37,7 +37,7 @@ func TestAPIAdminOrgCreate(t *testing.T) {
 		var apiOrg api.Organization
 		DecodeJSON(t, resp, &apiOrg)
 
-		assert.Equal(t, org.UserName, apiOrg.UserName)
+		assert.Equal(t, org.UserName, apiOrg.Name)
 		assert.Equal(t, org.FullName, apiOrg.FullName)
 		assert.Equal(t, org.Description, apiOrg.Description)
 		assert.Equal(t, org.Website, apiOrg.Website)
diff --git a/tests/integration/api_org_test.go b/tests/integration/api_org_test.go
index 4b8c5c97a8..16e53d6b81 100644
--- a/tests/integration/api_org_test.go
+++ b/tests/integration/api_org_test.go
@@ -38,7 +38,7 @@ func TestAPIOrgCreate(t *testing.T) {
 		var apiOrg api.Organization
 		DecodeJSON(t, resp, &apiOrg)
 
-		assert.Equal(t, org.UserName, apiOrg.UserName)
+		assert.Equal(t, org.UserName, apiOrg.Name)
 		assert.Equal(t, org.FullName, apiOrg.FullName)
 		assert.Equal(t, org.Description, apiOrg.Description)
 		assert.Equal(t, org.Website, apiOrg.Website)
@@ -54,7 +54,7 @@ func TestAPIOrgCreate(t *testing.T) {
 		req = NewRequestf(t, "GET", "/api/v1/orgs/%s?token=%s", org.UserName, token)
 		resp = MakeRequest(t, req, http.StatusOK)
 		DecodeJSON(t, resp, &apiOrg)
-		assert.EqualValues(t, org.UserName, apiOrg.UserName)
+		assert.EqualValues(t, org.UserName, apiOrg.Name)
 
 		req = NewRequestf(t, "GET", "/api/v1/orgs/%s/repos?token=%s", org.UserName, token)
 		resp = MakeRequest(t, req, http.StatusOK)
@@ -94,7 +94,7 @@ func TestAPIOrgEdit(t *testing.T) {
 		var apiOrg api.Organization
 		DecodeJSON(t, resp, &apiOrg)
 
-		assert.Equal(t, "user3", apiOrg.UserName)
+		assert.Equal(t, "user3", apiOrg.Name)
 		assert.Equal(t, org.FullName, apiOrg.FullName)
 		assert.Equal(t, org.Description, apiOrg.Description)
 		assert.Equal(t, org.Website, apiOrg.Website)
diff --git a/tests/integration/api_user_orgs_test.go b/tests/integration/api_user_orgs_test.go
index 622dfdcf21..c28bf391eb 100644
--- a/tests/integration/api_user_orgs_test.go
+++ b/tests/integration/api_user_orgs_test.go
@@ -32,6 +32,7 @@ func TestUserOrgs(t *testing.T) {
 	assert.Equal(t, []*api.Organization{
 		{
 			ID:          17,
+			Name:        user17.Name,
 			UserName:    user17.Name,
 			FullName:    user17.FullName,
 			AvatarURL:   user17.AvatarLink(),
@@ -42,6 +43,7 @@ func TestUserOrgs(t *testing.T) {
 		},
 		{
 			ID:          3,
+			Name:        user3.Name,
 			UserName:    user3.Name,
 			FullName:    user3.FullName,
 			AvatarURL:   user3.AvatarLink(),
@@ -99,6 +101,7 @@ func TestMyOrgs(t *testing.T) {
 	assert.Equal(t, []*api.Organization{
 		{
 			ID:          17,
+			Name:        user17.Name,
 			UserName:    user17.Name,
 			FullName:    user17.FullName,
 			AvatarURL:   user17.AvatarLink(),
@@ -109,6 +112,7 @@ func TestMyOrgs(t *testing.T) {
 		},
 		{
 			ID:          3,
+			Name:        user3.Name,
 			UserName:    user3.Name,
 			FullName:    user3.FullName,
 			AvatarURL:   user3.AvatarLink(),