2019-12-25 07:24:30 +01:00
|
|
|
package psql
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func simpleInsert(t *testing.T) {
|
|
|
|
gql := `mutation {
|
|
|
|
user(insert: $data) {
|
|
|
|
id
|
|
|
|
}
|
|
|
|
}`
|
|
|
|
|
|
|
|
vars := map[string]json.RawMessage{
|
|
|
|
"data": json.RawMessage(`{"email": "reannagreenholt@orn.com", "full_name": "Flo Barton"}`),
|
|
|
|
}
|
|
|
|
|
2020-02-10 07:45:37 +01:00
|
|
|
compileGQLToPSQL(t, gql, vars, "user")
|
2019-12-25 07:24:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func singleInsert(t *testing.T) {
|
|
|
|
gql := `mutation {
|
|
|
|
product(id: 15, insert: $insert) {
|
|
|
|
id
|
|
|
|
name
|
|
|
|
}
|
|
|
|
}`
|
|
|
|
|
|
|
|
vars := map[string]json.RawMessage{
|
|
|
|
"insert": json.RawMessage(` { "name": "my_name", "price": 6.95, "description": "my_desc", "user_id": 5 }`),
|
|
|
|
}
|
|
|
|
|
2020-02-10 07:45:37 +01:00
|
|
|
compileGQLToPSQL(t, gql, vars, "anon")
|
2019-12-25 07:24:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func bulkInsert(t *testing.T) {
|
|
|
|
gql := `mutation {
|
|
|
|
product(name: "test", id: 15, insert: $insert) {
|
|
|
|
id
|
|
|
|
name
|
|
|
|
}
|
|
|
|
}`
|
|
|
|
|
|
|
|
vars := map[string]json.RawMessage{
|
|
|
|
"insert": json.RawMessage(` [{ "name": "my_name", "description": "my_desc" }]`),
|
|
|
|
}
|
|
|
|
|
2020-02-10 07:45:37 +01:00
|
|
|
compileGQLToPSQL(t, gql, vars, "anon")
|
2019-12-25 07:24:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func simpleInsertWithPresets(t *testing.T) {
|
|
|
|
gql := `mutation {
|
|
|
|
product(insert: $data) {
|
|
|
|
id
|
|
|
|
}
|
|
|
|
}`
|
|
|
|
|
|
|
|
vars := map[string]json.RawMessage{
|
|
|
|
"data": json.RawMessage(`{"name": "Tomato", "price": 5.76}`),
|
|
|
|
}
|
|
|
|
|
2020-02-10 07:45:37 +01:00
|
|
|
compileGQLToPSQL(t, gql, vars, "user")
|
2019-12-25 07:24:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func nestedInsertManyToMany(t *testing.T) {
|
|
|
|
gql := `mutation {
|
|
|
|
purchase(insert: $data) {
|
|
|
|
sale_type
|
|
|
|
quantity
|
|
|
|
due_date
|
|
|
|
customer {
|
|
|
|
id
|
|
|
|
full_name
|
|
|
|
email
|
|
|
|
}
|
|
|
|
product {
|
|
|
|
id
|
|
|
|
name
|
|
|
|
price
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}`
|
|
|
|
|
|
|
|
vars := map[string]json.RawMessage{
|
|
|
|
"data": json.RawMessage(` {
|
|
|
|
"sale_type": "bought",
|
|
|
|
"quantity": 5,
|
|
|
|
"due_date": "now",
|
|
|
|
"customer": {
|
|
|
|
"email": "thedude@rug.com",
|
|
|
|
"full_name": "The Dude"
|
|
|
|
},
|
|
|
|
"product": {
|
|
|
|
"name": "Apple",
|
|
|
|
"price": 1.25
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`),
|
|
|
|
}
|
|
|
|
|
2020-02-10 07:45:37 +01:00
|
|
|
compileGQLToPSQL(t, gql, vars, "admin")
|
2019-12-25 07:24:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func nestedInsertOneToMany(t *testing.T) {
|
|
|
|
gql := `mutation {
|
|
|
|
user(insert: $data) {
|
|
|
|
id
|
|
|
|
full_name
|
|
|
|
email
|
|
|
|
product {
|
|
|
|
id
|
|
|
|
name
|
|
|
|
price
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}`
|
|
|
|
|
|
|
|
vars := map[string]json.RawMessage{
|
|
|
|
"data": json.RawMessage(`{
|
|
|
|
"email": "thedude@rug.com",
|
|
|
|
"full_name": "The Dude",
|
|
|
|
"created_at": "now",
|
|
|
|
"updated_at": "now",
|
|
|
|
"product": {
|
|
|
|
"name": "Apple",
|
|
|
|
"price": 1.25,
|
|
|
|
"created_at": "now",
|
|
|
|
"updated_at": "now"
|
|
|
|
}
|
|
|
|
}`),
|
|
|
|
}
|
|
|
|
|
2020-02-10 07:45:37 +01:00
|
|
|
compileGQLToPSQL(t, gql, vars, "admin")
|
2019-12-25 07:24:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func nestedInsertOneToOne(t *testing.T) {
|
|
|
|
gql := `mutation {
|
|
|
|
product(insert: $data) {
|
|
|
|
id
|
|
|
|
name
|
|
|
|
user {
|
|
|
|
id
|
|
|
|
full_name
|
|
|
|
email
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}`
|
|
|
|
|
|
|
|
vars := map[string]json.RawMessage{
|
|
|
|
"data": json.RawMessage(`{
|
|
|
|
"name": "Apple",
|
|
|
|
"price": 1.25,
|
|
|
|
"created_at": "now",
|
|
|
|
"updated_at": "now",
|
|
|
|
"user": {
|
|
|
|
"hey": {
|
|
|
|
"now": "what's the matter"
|
|
|
|
},
|
|
|
|
"email": "thedude@rug.com",
|
|
|
|
"full_name": "The Dude",
|
|
|
|
"created_at": "now",
|
|
|
|
"updated_at": "now"
|
|
|
|
}
|
|
|
|
}`),
|
|
|
|
}
|
|
|
|
|
2020-02-10 07:45:37 +01:00
|
|
|
compileGQLToPSQL(t, gql, vars, "admin")
|
2019-12-25 07:24:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func nestedInsertOneToManyWithConnect(t *testing.T) {
|
|
|
|
gql := `mutation {
|
|
|
|
user(insert: $data) {
|
|
|
|
id
|
|
|
|
full_name
|
|
|
|
email
|
|
|
|
product {
|
|
|
|
id
|
|
|
|
name
|
|
|
|
price
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}`
|
|
|
|
|
|
|
|
vars := map[string]json.RawMessage{
|
|
|
|
"data": json.RawMessage(`{
|
|
|
|
"email": "thedude@rug.com",
|
|
|
|
"full_name": "The Dude",
|
|
|
|
"created_at": "now",
|
|
|
|
"updated_at": "now",
|
|
|
|
"product": {
|
|
|
|
"connect": { "id": 5 }
|
|
|
|
}
|
|
|
|
}`),
|
|
|
|
}
|
|
|
|
|
2020-02-10 07:45:37 +01:00
|
|
|
compileGQLToPSQL(t, gql, vars, "admin")
|
2019-12-25 07:24:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func nestedInsertOneToOneWithConnect(t *testing.T) {
|
|
|
|
gql := `mutation {
|
|
|
|
product(insert: $data) {
|
|
|
|
id
|
|
|
|
name
|
2020-01-26 07:10:54 +01:00
|
|
|
tags {
|
|
|
|
id
|
|
|
|
name
|
|
|
|
}
|
2019-12-25 07:24:30 +01:00
|
|
|
user {
|
|
|
|
id
|
|
|
|
full_name
|
|
|
|
email
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}`
|
|
|
|
|
|
|
|
vars := map[string]json.RawMessage{
|
|
|
|
"data": json.RawMessage(`{
|
|
|
|
"name": "Apple",
|
|
|
|
"price": 1.25,
|
|
|
|
"created_at": "now",
|
|
|
|
"updated_at": "now",
|
|
|
|
"user": {
|
|
|
|
"connect": { "id": 5 }
|
|
|
|
}
|
|
|
|
}`),
|
|
|
|
}
|
|
|
|
|
2020-02-10 07:45:37 +01:00
|
|
|
compileGQLToPSQL(t, gql, vars, "admin")
|
2019-12-25 07:24:30 +01:00
|
|
|
}
|
|
|
|
|
2020-01-26 07:10:54 +01:00
|
|
|
func nestedInsertOneToOneWithConnectArray(t *testing.T) {
|
|
|
|
gql := `mutation {
|
|
|
|
product(insert: $data) {
|
|
|
|
id
|
|
|
|
name
|
|
|
|
user {
|
|
|
|
id
|
|
|
|
full_name
|
|
|
|
email
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}`
|
|
|
|
|
|
|
|
vars := map[string]json.RawMessage{
|
|
|
|
"data": json.RawMessage(`{
|
|
|
|
"name": "Apple",
|
|
|
|
"price": 1.25,
|
|
|
|
"created_at": "now",
|
|
|
|
"updated_at": "now",
|
|
|
|
"user": {
|
|
|
|
"connect": { "id": [1,2] }
|
|
|
|
}
|
|
|
|
}`),
|
|
|
|
}
|
|
|
|
|
2020-02-10 07:45:37 +01:00
|
|
|
compileGQLToPSQL(t, gql, vars, "admin")
|
2020-01-26 07:10:54 +01:00
|
|
|
}
|
|
|
|
|
2019-12-25 07:24:30 +01:00
|
|
|
func TestCompileInsert(t *testing.T) {
|
|
|
|
t.Run("simpleInsert", simpleInsert)
|
|
|
|
t.Run("singleInsert", singleInsert)
|
|
|
|
t.Run("bulkInsert", bulkInsert)
|
|
|
|
t.Run("simpleInsertWithPresets", simpleInsertWithPresets)
|
|
|
|
t.Run("nestedInsertManyToMany", nestedInsertManyToMany)
|
|
|
|
t.Run("nestedInsertOneToMany", nestedInsertOneToMany)
|
|
|
|
t.Run("nestedInsertOneToOne", nestedInsertOneToOne)
|
|
|
|
t.Run("nestedInsertOneToManyWithConnect", nestedInsertOneToManyWithConnect)
|
|
|
|
t.Run("nestedInsertOneToOneWithConnect", nestedInsertOneToOneWithConnect)
|
2020-01-26 07:10:54 +01:00
|
|
|
t.Run("nestedInsertOneToOneWithConnectArray", nestedInsertOneToOneWithConnectArray)
|
2019-12-25 07:24:30 +01:00
|
|
|
}
|