* add api for user to create org * remove unused blank line on the swagger file end * fix create and add test * fix tests * fix routes of create org API * fix bug * add copyright headstags/v1.21.12.1
| @@ -0,0 +1,48 @@ | |||
| // Copyright 2018 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 ( | |||
| "net/http" | |||
| "strings" | |||
| "testing" | |||
| "code.gitea.io/gitea/models" | |||
| api "code.gitea.io/sdk/gitea" | |||
| "github.com/stretchr/testify/assert" | |||
| ) | |||
| func TestAPIOrg(t *testing.T) { | |||
| prepareTestEnv(t) | |||
| session := loginUser(t, "user1") | |||
| token := getTokenForLoggedInUser(t, session) | |||
| var org = api.CreateOrgOption{ | |||
| UserName: "user1_org", | |||
| FullName: "User1's organization", | |||
| Description: "This organization created by user1", | |||
| Website: "https://try.gitea.io", | |||
| Location: "Shanghai", | |||
| } | |||
| req := NewRequestWithJSON(t, "POST", "/api/v1/orgs?token="+token, &org) | |||
| resp := session.MakeRequest(t, req, http.StatusCreated) | |||
| var apiOrg api.Organization | |||
| DecodeJSON(t, resp, &apiOrg) | |||
| assert.Equal(t, org.UserName, apiOrg.UserName) | |||
| assert.Equal(t, org.FullName, apiOrg.FullName) | |||
| assert.Equal(t, org.Description, apiOrg.Description) | |||
| assert.Equal(t, org.Website, apiOrg.Website) | |||
| assert.Equal(t, org.Location, apiOrg.Location) | |||
| models.AssertExistsAndLoadBean(t, &models.User{ | |||
| Name: org.UserName, | |||
| LowerName: strings.ToLower(org.UserName), | |||
| FullName: org.FullName, | |||
| }) | |||
| } | |||
| @@ -1,4 +1,5 @@ | |||
| // Copyright 2015 The Gogs Authors. All rights reserved. | |||
| // Copyright 2018 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. | |||
| @@ -578,6 +579,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||
| // Organizations | |||
| m.Get("/user/orgs", reqToken(), org.ListMyOrgs) | |||
| m.Get("/users/:username/orgs", org.ListUserOrgs) | |||
| m.Post("/orgs", reqToken(), bind(api.CreateOrgOption{}), org.Create) | |||
| m.Group("/orgs/:orgname", func() { | |||
| m.Get("/repos", user.ListOrgRepos) | |||
| m.Combo("").Get(org.Get). | |||
| @@ -1,4 +1,5 @@ | |||
| // Copyright 2015 The Gogs Authors. All rights reserved. | |||
| // Copyright 2018 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. | |||
| @@ -62,6 +63,56 @@ func ListUserOrgs(ctx *context.APIContext) { | |||
| listUserOrgs(ctx, u, false) | |||
| } | |||
| // Create api for create organization | |||
| func Create(ctx *context.APIContext, form api.CreateOrgOption) { | |||
| // swagger:operation POST /orgs organization orgCreate | |||
| // --- | |||
| // summary: Create an organization | |||
| // consumes: | |||
| // - application/json | |||
| // produces: | |||
| // - application/json | |||
| // parameters: | |||
| // - name: organization | |||
| // in: body | |||
| // required: true | |||
| // schema: { "$ref": "#/definitions/CreateOrgOption" } | |||
| // responses: | |||
| // "201": | |||
| // "$ref": "#/responses/Organization" | |||
| // "403": | |||
| // "$ref": "#/responses/forbidden" | |||
| // "422": | |||
| // "$ref": "#/responses/validationError" | |||
| if !ctx.User.AllowCreateOrganization { | |||
| ctx.Error(403, "Create organization not allowed", nil) | |||
| return | |||
| } | |||
| org := &models.User{ | |||
| Name: form.UserName, | |||
| FullName: form.FullName, | |||
| Description: form.Description, | |||
| Website: form.Website, | |||
| Location: form.Location, | |||
| IsActive: true, | |||
| Type: models.UserTypeOrganization, | |||
| } | |||
| if err := models.CreateOrganization(org, ctx.User); err != nil { | |||
| if models.IsErrUserAlreadyExist(err) || | |||
| models.IsErrNameReserved(err) || | |||
| models.IsErrNamePatternNotAllowed(err) { | |||
| ctx.Error(422, "", err) | |||
| } else { | |||
| ctx.Error(500, "CreateOrganization", err) | |||
| } | |||
| return | |||
| } | |||
| ctx.JSON(201, convert.ToOrganization(org)) | |||
| } | |||
| // Get get an organization | |||
| func Get(ctx *context.APIContext) { | |||
| // swagger:operation GET /orgs/{org} organization orgGet | |||
| @@ -406,6 +406,42 @@ | |||
| } | |||
| } | |||
| }, | |||
| "/orgs": { | |||
| "post": { | |||
| "consumes": [ | |||
| "application/json" | |||
| ], | |||
| "produces": [ | |||
| "application/json" | |||
| ], | |||
| "tags": [ | |||
| "organization" | |||
| ], | |||
| "summary": "Create an organization", | |||
| "operationId": "orgCreate", | |||
| "parameters": [ | |||
| { | |||
| "name": "organization", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/CreateOrgOption" | |||
| } | |||
| } | |||
| ], | |||
| "responses": { | |||
| "201": { | |||
| "$ref": "#/responses/Organization" | |||
| }, | |||
| "403": { | |||
| "$ref": "#/responses/forbidden" | |||
| }, | |||
| "422": { | |||
| "$ref": "#/responses/validationError" | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| "/orgs/{org}": { | |||
| "get": { | |||
| "produces": [ | |||