* 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.7.0-dev
@@ -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": [ |