From e74e090b0af8d68fb76748cf913b8dd38c4ab246 Mon Sep 17 00:00:00 2001 From: go-jet Date: Sat, 20 Jul 2019 11:22:01 +0200 Subject: [PATCH] Additional unit tests. --- clause.go | 2 +- clause_test.go | 33 +++++++++++++++ select_statement_test.go | 88 ++++++++++++++++++++++++++++++++++++++++ tests/insert_test.go | 22 ++++++++++ 4 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 clause_test.go diff --git a/clause.go b/clause.go index 43ce624..8714992 100644 --- a/clause.go +++ b/clause.go @@ -246,7 +246,7 @@ func argToString(value interface{}) string { case time.Time: return stringQuote(string(utils.FormatTimestamp(bindVal))) default: - return "[Unknown type]" + return "[Unsupported type]" } } diff --git a/clause_test.go b/clause_test.go new file mode 100644 index 0000000..a105cb3 --- /dev/null +++ b/clause_test.go @@ -0,0 +1,33 @@ +package jet + +import ( + "github.com/google/uuid" + "gotest.tools/assert" + "testing" + "time" +) + +func TestArgToString(t *testing.T) { + assert.Equal(t, argToString(true), "TRUE") + assert.Equal(t, argToString(false), "FALSE") + + assert.Equal(t, argToString(int8(-8)), "-8") + assert.Equal(t, argToString(int16(-16)), "-16") + assert.Equal(t, argToString(int(-32)), "-32") + assert.Equal(t, argToString(int32(-32)), "-32") + assert.Equal(t, argToString(int64(-64)), "-64") + assert.Equal(t, argToString(uint8(8)), "8") + assert.Equal(t, argToString(uint16(16)), "16") + assert.Equal(t, argToString(uint(32)), "32") + assert.Equal(t, argToString(uint32(32)), "32") + assert.Equal(t, argToString(uint64(64)), "64") + + assert.Equal(t, argToString("john"), "'john'") + assert.Equal(t, argToString([]byte("john")), "'john'") + assert.Equal(t, argToString(uuid.MustParse("b68dbff4-a87d-11e9-a7f2-98ded00c39c6")), "'b68dbff4-a87d-11e9-a7f2-98ded00c39c6'") + + time, err := time.Parse("Mon Jan 2 15:04:05 -0700 MST 2006", "Mon Jan 2 15:04:05 -0700 MST 2006") + assert.NilError(t, err) + assert.Equal(t, argToString(time), "'2006-01-02 15:04:05-07:00'") + assert.Equal(t, argToString(map[string]bool{}), "[Unsupported type]") +} diff --git a/select_statement_test.go b/select_statement_test.go index 50cfc00..7c432ef 100644 --- a/select_statement_test.go +++ b/select_statement_test.go @@ -122,3 +122,91 @@ FROM db.table1 FOR NO KEY UPDATE SKIP LOCKED; `) } + +func TestSelectSets(t *testing.T) { + select1 := SELECT(table1ColBool).FROM(table1) + select2 := SELECT(table2ColBool).FROM(table2) + + assertStatement(t, select1.UNION(select2), ` +( + ( + SELECT table1.col_bool AS "table1.col_bool" + FROM db.table1 + ) + UNION + ( + SELECT table2.col_bool AS "table2.col_bool" + FROM db.table2 + ) +); +`) + assertStatement(t, select1.UNION_ALL(select2), ` +( + ( + SELECT table1.col_bool AS "table1.col_bool" + FROM db.table1 + ) + UNION ALL + ( + SELECT table2.col_bool AS "table2.col_bool" + FROM db.table2 + ) +); +`) + + assertStatement(t, select1.INTERSECT(select2), ` +( + ( + SELECT table1.col_bool AS "table1.col_bool" + FROM db.table1 + ) + INTERSECT + ( + SELECT table2.col_bool AS "table2.col_bool" + FROM db.table2 + ) +); +`) + + assertStatement(t, select1.INTERSECT_ALL(select2), ` +( + ( + SELECT table1.col_bool AS "table1.col_bool" + FROM db.table1 + ) + INTERSECT ALL + ( + SELECT table2.col_bool AS "table2.col_bool" + FROM db.table2 + ) +); +`) + assertStatement(t, select1.EXCEPT(select2), ` +( + ( + SELECT table1.col_bool AS "table1.col_bool" + FROM db.table1 + ) + EXCEPT + ( + SELECT table2.col_bool AS "table2.col_bool" + FROM db.table2 + ) +); +`) + + assertStatement(t, select1.EXCEPT_ALL(select2), ` +( + ( + SELECT table1.col_bool AS "table1.col_bool" + FROM db.table1 + ) + EXCEPT ALL + ( + SELECT table2.col_bool AS "table2.col_bool" + FROM db.table2 + ) +); +`) + +} diff --git a/tests/insert_test.go b/tests/insert_test.go index b5783c8..8c6f17d 100644 --- a/tests/insert_test.go +++ b/tests/insert_test.go @@ -109,6 +109,28 @@ INSERT INTO test_sample.link (url, name) VALUES assertExec(t, query, 1) } +func TestInsertModelObjectEmptyColumnList(t *testing.T) { + cleanUpLinkTable(t) + var expectedSQL = ` +INSERT INTO test_sample.link VALUES + (1000, 'http://www.duckduckgo.com', 'Duck Duck go', NULL); +` + + linkData := model.Link{ + ID: 1000, + URL: "http://www.duckduckgo.com", + Name: "Duck Duck go", + } + + query := Link. + INSERT(). + MODEL(linkData) + + assertStatementSql(t, query, expectedSQL, int32(1000), "http://www.duckduckgo.com", "Duck Duck go", nil) + + assertExec(t, query, 1) +} + func TestInsertModelsObject(t *testing.T) { expectedSQL := ` INSERT INTO test_sample.link (url, name) VALUES