Skip to content

Commit

Permalink
dialect/sql/sqlgraph: adding unit tests for IsConstraintError (#1318)
Browse files Browse the repository at this point in the history
* dialect/sql/sqlgraph: adding unit tests for IsConstraintError group of checks in second phase of #1310

* renaming test for loop variable names

* use backtick strings to improve readability
  • Loading branch information
rotemtam committed Mar 10, 2021
1 parent 17608ff commit 36e3492
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 1 deletion.
64 changes: 64 additions & 0 deletions dialect/sql/sqlgraph/graph_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ package sqlgraph
import (
"context"
"database/sql/driver"
"errors"
"fmt"
"regexp"
"strings"
Expand Down Expand Up @@ -1955,6 +1956,69 @@ func TestQueryEdgesSchema(t *testing.T) {
require.Equal(t, [][]int64{{4, 5}, {4, 6}}, edges)
}

func TestIsConstraintError(t *testing.T) {
tests := []struct {
name string
errMessage string
expectedConstraint bool
expectedFK bool
expectedUnique bool
}{
{
name: "MySQL FK",
errMessage: `insert node to table "pets": Error 1452: Cannot add or update a child row: a foreign key` +
" constraint fails (`test`.`pets`, CONSTRAINT `pets_users_pets` FOREIGN KEY (`user_pets`) REFERENCES " +
"`users` (`id`) ON DELETE SET NULL)",
expectedConstraint: true,
expectedFK: true,
expectedUnique: false,
},
{
name: "SQLite FK",
errMessage: `insert node to table "pets": FOREIGN KEY constraint failed`,
expectedConstraint: true,
expectedFK: true,
expectedUnique: false,
},
{
name: "Postgres FK",
errMessage: `insert node to table "pets": pq: insert or update on table "pets" violates foreign key constraint "pets_users_pets"`,
expectedConstraint: true,
expectedFK: true,
expectedUnique: false,
},
{
name: "MySQL Unique",
errMessage: `insert node to table "file_types": UNIQUE constraint failed: file_types.name ent: constraint failed: insert node to table "file_types": UNIQUE constraint failed: file_types.name`,
expectedConstraint: true,
expectedFK: false,
expectedUnique: true,
},
{
name: "SQLite Unique",
errMessage: `insert node to table "file_types": UNIQUE constraint failed: file_types.name ent: constraint failed: insert node to table "file_types": UNIQUE constraint failed: file_types.name`,
expectedConstraint: true,
expectedFK: false,
expectedUnique: true,
},
{
name: "Postgres Unique",
errMessage: `insert node to table "file_types": pq: duplicate key value violates unique constraint "file_types_name_key" ent: constraint failed: insert node to table "file_types": pq: duplicate key value violates unique constraint "file_types_name_key"`,
expectedConstraint: true,
expectedFK: false,
expectedUnique: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := errors.New(tt.errMessage)
require.EqualValues(t, tt.expectedConstraint, IsConstraintError(err))
require.EqualValues(t, tt.expectedFK, IsForeignKeyConstraintError(err))
require.EqualValues(t, tt.expectedUnique, IsUniqueConstraintError(err))
})
}
}

func escape(query string) string {
rows := strings.Split(query, "\n")
for i := range rows {
Expand Down
1 change: 0 additions & 1 deletion entc/integration/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1363,7 +1363,6 @@ func ConstraintChecks(t *testing.T, client *ent.Client) {

client.FileType.Create().SetName("a unique name").SaveX(context.Background())
_, err = client.FileType.Create().SetName("a unique name").Save(context.Background())
t.Logf("err %T %+v", err, err)
require.True(t, errors.As(err, &cerr))
require.False(t, sqlgraph.IsForeignKeyConstraintError(err))
require.True(t, sqlgraph.IsUniqueConstraintError(err))
Expand Down

0 comments on commit 36e3492

Please sign in to comment.