2019-04-07 09:58:12 +02:00
|
|
|
package tests
|
|
|
|
|
|
|
|
|
|
import (
|
2019-06-11 12:47:35 +02:00
|
|
|
. "github.com/go-jet/jet/sqlbuilder"
|
2019-06-05 17:56:24 +02:00
|
|
|
"github.com/go-jet/jet/tests/.test_files/dvd_rental/test_sample/model"
|
2019-06-11 12:47:35 +02:00
|
|
|
. "github.com/go-jet/jet/tests/.test_files/dvd_rental/test_sample/table"
|
2019-04-07 09:58:12 +02:00
|
|
|
"gotest.tools/assert"
|
|
|
|
|
"testing"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestInsertValues(t *testing.T) {
|
|
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
cleanUpLinkTable(t)
|
2019-04-07 09:58:12 +02:00
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
var expectedSql = `
|
|
|
|
|
INSERT INTO test_sample.link (id, url, name, rel) VALUES
|
|
|
|
|
(100, 'http://www.postgresqltutorial.com', 'PostgreSQL Tutorial', DEFAULT),
|
|
|
|
|
(101, 'http://www.google.com', 'Google', DEFAULT),
|
|
|
|
|
(102, 'http://www.yahoo.com', 'Yahoo', NULL)
|
|
|
|
|
RETURNING link.id AS "link.id",
|
|
|
|
|
link.url AS "link.url",
|
|
|
|
|
link.name AS "link.name",
|
|
|
|
|
link.description AS "link.description",
|
|
|
|
|
link.rel AS "link.rel";
|
|
|
|
|
`
|
2019-04-07 09:58:12 +02:00
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
insertQuery := Link.INSERT(Link.ID, Link.URL, Link.Name, Link.Rel).
|
|
|
|
|
VALUES(100, "http://www.postgresqltutorial.com", "PostgreSQL Tutorial", DEFAULT).
|
|
|
|
|
VALUES(101, "http://www.google.com", "Google", DEFAULT).
|
|
|
|
|
VALUES(102, "http://www.yahoo.com", "Yahoo", nil).
|
|
|
|
|
RETURNING(Link.AllColumns)
|
2019-04-07 09:58:12 +02:00
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
assertStatementSql(t, insertQuery, expectedSql,
|
|
|
|
|
100, "http://www.postgresqltutorial.com", "PostgreSQL Tutorial",
|
|
|
|
|
101, "http://www.google.com", "Google",
|
|
|
|
|
102, "http://www.yahoo.com", "Yahoo", nil)
|
2019-04-07 09:58:12 +02:00
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
insertedLinks := []model.Link{}
|
2019-04-07 09:58:12 +02:00
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
err := insertQuery.Query(db, &insertedLinks)
|
2019-04-07 09:58:12 +02:00
|
|
|
|
|
|
|
|
assert.NilError(t, err)
|
|
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
assert.Equal(t, len(insertedLinks), 3)
|
2019-04-07 09:58:12 +02:00
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
assert.DeepEqual(t, insertedLinks[0], model.Link{
|
|
|
|
|
ID: 100,
|
2019-04-07 09:58:12 +02:00
|
|
|
URL: "http://www.postgresqltutorial.com",
|
|
|
|
|
Name: "PostgreSQL Tutorial",
|
|
|
|
|
Rel: nil,
|
|
|
|
|
})
|
|
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
assert.DeepEqual(t, insertedLinks[1], model.Link{
|
|
|
|
|
ID: 101,
|
|
|
|
|
URL: "http://www.google.com",
|
|
|
|
|
Name: "Google",
|
2019-04-07 09:58:12 +02:00
|
|
|
Rel: nil,
|
|
|
|
|
})
|
2019-06-14 14:35:50 +02:00
|
|
|
|
|
|
|
|
assert.DeepEqual(t, insertedLinks[2], model.Link{
|
|
|
|
|
ID: 102,
|
|
|
|
|
URL: "http://www.yahoo.com",
|
|
|
|
|
Name: "Yahoo",
|
|
|
|
|
Rel: nil,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
allLinks := []model.Link{}
|
|
|
|
|
|
|
|
|
|
err = Link.SELECT(Link.AllColumns).
|
|
|
|
|
WHERE(Link.ID.GT_EQ(Int(100))).
|
|
|
|
|
ORDER_BY(Link.ID).
|
|
|
|
|
Query(db, &allLinks)
|
|
|
|
|
|
|
|
|
|
assert.NilError(t, err)
|
|
|
|
|
|
|
|
|
|
assert.DeepEqual(t, insertedLinks, allLinks)
|
2019-04-07 09:58:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestInsertDataObject(t *testing.T) {
|
2019-06-14 14:35:50 +02:00
|
|
|
var expectedSql = `
|
|
|
|
|
INSERT INTO test_sample.link (url, name) VALUES
|
|
|
|
|
('http://www.duckduckgo.com', 'Duck Duck go');
|
|
|
|
|
`
|
|
|
|
|
|
2019-04-07 09:58:12 +02:00
|
|
|
linkData := model.Link{
|
|
|
|
|
URL: "http://www.duckduckgo.com",
|
|
|
|
|
Name: "Duck Duck go",
|
|
|
|
|
Rel: nil,
|
|
|
|
|
}
|
|
|
|
|
|
2019-06-11 12:47:35 +02:00
|
|
|
query := Link.
|
|
|
|
|
INSERT(Link.URL, Link.Name).
|
2019-06-14 14:35:50 +02:00
|
|
|
USING(linkData)
|
2019-04-07 09:58:12 +02:00
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
assertStatementSql(t, query, expectedSql, "http://www.duckduckgo.com", "Duck Duck go")
|
2019-04-07 09:58:12 +02:00
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
result, err := query.Exec(db)
|
2019-04-07 09:58:12 +02:00
|
|
|
|
|
|
|
|
assert.NilError(t, err)
|
|
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
rowsAffected, err := result.RowsAffected()
|
|
|
|
|
|
|
|
|
|
assert.Equal(t, rowsAffected, int64(1))
|
2019-04-07 09:58:12 +02:00
|
|
|
}
|
2019-04-07 16:54:06 +02:00
|
|
|
|
|
|
|
|
func TestInsertQuery(t *testing.T) {
|
2019-06-14 14:35:50 +02:00
|
|
|
_, err := Link.DELETE().
|
|
|
|
|
WHERE(Link.ID.NOT_EQ(Int(0)).AND(Link.Name.EQ(String("Youtube")))).
|
|
|
|
|
Exec(db)
|
2019-04-07 16:54:06 +02:00
|
|
|
assert.NilError(t, err)
|
|
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
var expectedSql = `
|
|
|
|
|
INSERT INTO test_sample.link (url, name) (
|
|
|
|
|
SELECT link.url AS "link.url",
|
|
|
|
|
link.name AS "link.name"
|
|
|
|
|
FROM test_sample.link
|
|
|
|
|
WHERE link.id = 0
|
|
|
|
|
)
|
|
|
|
|
RETURNING link.id AS "link.id",
|
|
|
|
|
link.url AS "link.url",
|
|
|
|
|
link.name AS "link.name",
|
|
|
|
|
link.description AS "link.description",
|
|
|
|
|
link.rel AS "link.rel";
|
|
|
|
|
`
|
|
|
|
|
|
2019-06-11 12:47:35 +02:00
|
|
|
query := Link.
|
|
|
|
|
INSERT(Link.URL, Link.Name).
|
2019-06-14 14:35:50 +02:00
|
|
|
QUERY(
|
|
|
|
|
SELECT(Link.URL, Link.Name).
|
|
|
|
|
FROM(Link).
|
|
|
|
|
WHERE(Link.ID.EQ(Int(0))),
|
|
|
|
|
).
|
|
|
|
|
RETURNING(Link.AllColumns)
|
2019-04-07 16:54:06 +02:00
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
assertStatementSql(t, query, expectedSql, int64(0))
|
2019-04-07 16:54:06 +02:00
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
dest := []model.Link{}
|
2019-04-07 16:54:06 +02:00
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
err = query.Query(db, &dest)
|
2019-04-07 16:54:06 +02:00
|
|
|
|
|
|
|
|
assert.NilError(t, err)
|
|
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
youtubeLinks := []model.Link{}
|
|
|
|
|
err = Link.
|
|
|
|
|
SELECT(Link.AllColumns).
|
|
|
|
|
WHERE(Link.Name.EQ(String("Youtube"))).
|
|
|
|
|
Query(db, &youtubeLinks)
|
2019-04-07 16:54:06 +02:00
|
|
|
|
2019-06-14 14:35:50 +02:00
|
|
|
assert.NilError(t, err)
|
|
|
|
|
assert.Equal(t, len(youtubeLinks), 2)
|
2019-04-07 16:54:06 +02:00
|
|
|
}
|