Skip to content

Commit

Permalink
add more clear error message for duplicate project
Browse files Browse the repository at this point in the history
  • Loading branch information
MikePresman committed Dec 12, 2023
1 parent c0a01d7 commit 9fce6f0
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 10 deletions.
8 changes: 8 additions & 0 deletions internal/db/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package db

import (
"context"
"errors"
"fmt"

"github.com/gadget-inc/dateilager/internal/pb"
Expand All @@ -13,6 +14,13 @@ func CreateProject(ctx context.Context, tx pgx.Tx, project int64, packPatterns [
INSERT INTO dl.projects (id, latest_version, pack_patterns)
VALUES ($1, 0, $2)
`, project, packPatterns)

var projectExistsError = errors.New("ERROR: duplicate key value violates unique constraint \"projects_pkey\" (SQLSTATE 23505)")

if err != nil && err.Error() == projectExistsError.Error() {
return fmt.Errorf("project id already exists")
}

if err != nil {
return fmt.Errorf("create project %v, packPatterns %v: %w", project, packPatterns, err)
}
Expand Down
19 changes: 9 additions & 10 deletions test/client_new_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,31 +42,30 @@ func TestClientNewProjectEmptyPackPattern(t *testing.T) {
}

func TestClientNewProjectDuplicateReportsError(t *testing.T) {
tc := util.NewTestCtx(t, auth.Admin, 1)
projectId := int64(1)

tc := util.NewTestCtx(t, auth.Admin, projectId)
defer tc.Close()

c, _, close := createTestClient(tc)
defer close()

err := c.NewProject(tc.Context(), 1, nil, nil)
err := c.NewProject(tc.Context(), projectId, nil, nil)
require.NoError(t, err, "NewProject")

/** Create Project Again**/

tcSecond := util.NewTestCtx(t, auth.Admin, 1)
tcSecond := util.NewTestCtx(t, auth.Admin, projectId)
defer tc.Close()

cSecond, _, closeSecond := createTestClient(tc)
defer closeSecond()

errSecond := cSecond.NewProject(tcSecond.Context(), 1, nil, nil)

want := "Project with this id already exists"
errSecond := cSecond.NewProject(tcSecond.Context(), projectId, nil, nil)
want := "project id already exists"

if errSecond.Error() != want {
if errSecond == nil {
t.Errorf("got %s want %s", errSecond, want)
}

require.NoError(t, err, "NewProject")

require.Error(t, errSecond, "NewProject")
}

0 comments on commit 9fce6f0

Please sign in to comment.