Skip to content

Commit b580b5d

Browse files
test: add TestUserSecrets test
1 parent 137fb71 commit b580b5d

File tree

3 files changed

+78
-1
lines changed

3 files changed

+78
-1
lines changed

coderd/user_secrets.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"github.com/coder/coder/v2/coderd/database"
55
"github.com/coder/coder/v2/coderd/database/db2sdk"
66
"github.com/coder/coder/v2/coderd/httpmw"
7+
"github.com/google/uuid"
78
"net/http"
89

910
"github.com/coder/coder/v2/coderd/httpapi"
@@ -32,6 +33,7 @@ func (api *API) createUserSecret(rw http.ResponseWriter, r *http.Request) {
3233
}
3334

3435
secret, err := api.Database.InsertUserSecret(ctx, database.InsertUserSecretParams{
36+
ID: uuid.New(),
3537
UserID: apiKey.UserID,
3638
Name: req.Name,
3739
Description: req.Description,

coderd/user_secrets_test.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package coderd_test
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"github.com/coder/coder/v2/codersdk"
7+
"github.com/stretchr/testify/require"
8+
"testing"
9+
10+
"github.com/coder/coder/v2/coderd/coderdtest"
11+
"github.com/coder/coder/v2/coderd/database/dbtestutil"
12+
"github.com/coder/coder/v2/coderd/rbac"
13+
"github.com/coder/coder/v2/testutil"
14+
)
15+
16+
func TestUserSecrets(t *testing.T) {
17+
t.Parallel()
18+
19+
ctx := testutil.Context(t, testutil.WaitShort)
20+
21+
db, ps := dbtestutil.NewDB(t, dbtestutil.WithDumpOnFailure())
22+
client := coderdtest.New(t, &coderdtest.Options{
23+
IncludeProvisionerDaemon: true,
24+
Database: db,
25+
Pubsub: ps,
26+
})
27+
owner := coderdtest.CreateFirstUser(t, client)
28+
templateAdminClient, templateAdmin := coderdtest.CreateAnotherUser(
29+
t, client, owner.OrganizationID, rbac.ScopedRoleOrgTemplateAdmin(owner.OrganizationID),
30+
)
31+
_, member := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
32+
33+
_, _, _ = ctx, templateAdminClient, member
34+
35+
userSecretName := "open-ai-api-key"
36+
userSecretDescription := "api key for open ai"
37+
userSecret, err := templateAdminClient.CreateUserSecret(ctx, codersdk.CreateUserSecretRequest{
38+
Name: userSecretName,
39+
Description: userSecretDescription,
40+
Value: "secretkey",
41+
})
42+
require.NoError(t, err)
43+
userSecretInJSON, err := json.Marshal(userSecret)
44+
require.NoError(t, err)
45+
fmt.Printf("userSecretInJSON: %s\n", userSecretInJSON)
46+
47+
require.NotNil(t, userSecret.ID)
48+
require.Equal(t, userSecret.UserID, templateAdmin.ID)
49+
require.Equal(t, userSecret.Name, userSecretName)
50+
require.Equal(t, userSecret.Description, userSecretDescription)
51+
}

codersdk/user_secrets.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
package codersdk
22

33
import (
4-
"github.com/google/uuid"
4+
"context"
5+
"encoding/json"
6+
"fmt"
7+
"net/http"
58
"time"
9+
10+
"github.com/google/uuid"
11+
"golang.org/x/xerrors"
612
)
713

814
// TODO: add and register custom validator functions. check codersdk/name.go for examples.
@@ -36,3 +42,21 @@ type UserSecretValue struct {
3642
type ListUserSecretsResponse struct {
3743
Secrets []UserSecret `json:"secrets"`
3844
}
45+
46+
func (c *Client) CreateUserSecret(ctx context.Context, req CreateUserSecretRequest) (UserSecret, error) {
47+
res, err := c.Request(ctx, http.MethodPost,
48+
fmt.Sprintf("/api/v2/users/secrets"),
49+
req,
50+
)
51+
if err != nil {
52+
return UserSecret{}, xerrors.Errorf("execute request: %w", err)
53+
}
54+
defer res.Body.Close()
55+
56+
if res.StatusCode != http.StatusCreated {
57+
return UserSecret{}, ReadBodyAsError(res)
58+
}
59+
60+
var userSecret UserSecret
61+
return userSecret, json.NewDecoder(res.Body).Decode(&userSecret)
62+
}

0 commit comments

Comments
 (0)