Skip to content

Commit 6d0bce6

Browse files
committed
tests
1 parent 4344a15 commit 6d0bce6

File tree

4 files changed

+41
-12
lines changed

4 files changed

+41
-12
lines changed

coderd/database/dbmem/dbmem.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6543,9 +6543,11 @@ func (q *FakeQuerier) InsertProvisionerKey(_ context.Context, arg database.Inser
65436543
q.mutex.Lock()
65446544
defer q.mutex.Unlock()
65456545

6546+
newErr := *errUniqueConstraint
6547+
newErr.Constraint = string(database.UniqueProvisionerKeysOrganizationIDNameKey)
65466548
for _, key := range q.provisionerKeys {
65476549
if key.ID == arg.ID || (key.OrganizationID == arg.OrganizationID && key.Name == arg.Name) {
6548-
return database.ProvisionerKey{}, errUniqueConstraint
6550+
return database.ProvisionerKey{}, &newErr
65496551
}
65506552
}
65516553

coderd/provisionerkeys.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package coderd
33
import (
44
"database/sql"
55
"errors"
6+
"fmt"
67
"net/http"
78

89
"github.com/coder/coder/v2/coderd/database"
@@ -21,13 +22,45 @@ func (api *API) postProvisionerKey(rw http.ResponseWriter, r *http.Request) {
2122
return
2223
}
2324

25+
if req.Name == "" {
26+
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
27+
Message: "Name is required",
28+
Validations: []codersdk.ValidationError{
29+
{
30+
Field: "name",
31+
Detail: "Name is required",
32+
},
33+
},
34+
})
35+
return
36+
}
37+
38+
if len(req.Name) > 64 {
39+
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
40+
Message: "Name must be at most 64 characters",
41+
Validations: []codersdk.ValidationError{
42+
{
43+
Field: "name",
44+
Detail: "Name must be at most 64 characters",
45+
},
46+
},
47+
})
48+
return
49+
}
50+
2451
params, token, err := provisionerkey.New(organization.ID, req.Name)
2552
if err != nil {
2653
httpapi.InternalServerError(rw, err)
2754
return
2855
}
2956

3057
_, err = api.Database.InsertProvisionerKey(ctx, params)
58+
if database.IsUniqueViolation(err, database.UniqueProvisionerKeysOrganizationIDNameKey) {
59+
httpapi.Write(ctx, rw, http.StatusConflict, codersdk.Response{
60+
Message: fmt.Sprintf("Provisioner key with name '%s' already exists in organization", req.Name),
61+
})
62+
return
63+
}
3164
if err != nil {
3265
httpapi.InternalServerError(rw, err)
3366
return

coderd/provisionerkeys_test.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -70,25 +70,19 @@ func TestProvisionerKeys(t *testing.T) {
7070
_, err = orgAdmin.CreateProvisionerKey(ctx, owner.OrganizationID, codersdk.CreateProvisionerKeyRequest{
7171
Name: "key",
7272
})
73-
require.ErrorContains(t, err, "already exists")
74-
75-
// key name cannot have special characters
76-
_, err = orgAdmin.CreateProvisionerKey(ctx, owner.OrganizationID, codersdk.CreateProvisionerKeyRequest{
77-
Name: "key with spaces",
78-
})
79-
require.ErrorContains(t, err, "org admin create provisioner key")
73+
require.ErrorContains(t, err, "already exists in organization")
8074

8175
// key name cannot be too long
8276
_, err = orgAdmin.CreateProvisionerKey(ctx, owner.OrganizationID, codersdk.CreateProvisionerKeyRequest{
83-
Name: "key with spaces",
77+
Name: "Everyone please pass your watermelons to the front of the pool, the storm is approaching.",
8478
})
85-
require.ErrorContains(t, err, "less than 64 characters")
79+
require.ErrorContains(t, err, "must be at most 64 characters")
8680

8781
// key name cannot be empty
8882
_, err = orgAdmin.CreateProvisionerKey(ctx, owner.OrganizationID, codersdk.CreateProvisionerKeyRequest{
8983
Name: "",
9084
})
91-
require.ErrorContains(t, err, "cannot be empty")
85+
require.ErrorContains(t, err, "is required")
9286

9387
// org admin can list provisioner keys
9488
keys, err = orgAdmin.ListProvisionerKeys(ctx, owner.OrganizationID)

codersdk/provisionerdaemons.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ type CreateProvisionerKeyRequest struct {
278278
}
279279

280280
type CreateProvisionerKeyResponse struct {
281-
Key string
281+
Key string `json:"key"`
282282
}
283283

284284
// CreateProvisionerKey creates a new provisioner key for an organization.

0 commit comments

Comments
 (0)