gitlab.com/beacon-software/gadget@v0.0.0-20181217202115-54565ea1ed5e/database/qb/delete_test.go (about) 1 package qb 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 8 "gitlab.com/beacon-software/gadget/generator" 9 ) 10 11 func TestDeleteQuery(t *testing.T) { 12 assert := assert.New(t) 13 expectedID := generator.TestID() 14 query := Delete(Person) 15 query.Where(Person.ID.Equal(expectedID)) 16 actual, values, err := query.SQL() 17 assert.NoError(err) 18 if assert.Equal(len(values), 1) { 19 assert.Equal(expectedID, values[0]) 20 } 21 assert.Equal("DELETE FROM `person` WHERE `person`.`id` = ?", actual) 22 } 23 24 func TestDeleteQueryInnerJoin(t *testing.T) { 25 assert := assert.New(t) 26 query := Delete(Person, Address).From(Person) 27 query.InnerJoin(Address).On(Address.ID, Equal, Person.AddressID) 28 query.Where(Address.Country.NotEqual("US")) 29 actual, values, err := query.SQL() 30 assert.NoError(err) 31 if assert.Equal(1, len(values)) { 32 assert.Equal("US", values[0]) 33 } 34 assert.Equal("DELETE `person`, `address` "+ 35 "FROM `person` "+ 36 "INNER JOIN `address` AS `address` ON `address`.`id` = `person`.`address_id` "+ 37 "WHERE `address`.`country` != ?", actual) 38 } 39 40 func TestDeleteQueryOuterJoin(t *testing.T) { 41 assert := assert.New(t) 42 query := Delete(Person, Address).From(Person) 43 query.OuterJoin(Left, Address).On(Address.ID, Equal, Person.AddressID) 44 query.Where(Address.Country.NotEqual("US")) 45 actual, values, err := query.SQL() 46 assert.NoError(err) 47 if assert.Equal(1, len(values)) { 48 assert.Equal("US", values[0]) 49 } 50 assert.Equal("DELETE `person`, `address` "+ 51 "FROM `person` "+ 52 "LEFT OUTER JOIN `address` AS `address` ON `address`.`id` = `person`.`address_id` "+ 53 "WHERE `address`.`country` != ?", actual) 54 } 55 56 func TestDeleteNoTablesSpecified(t *testing.T) { 57 assert := assert.New(t) 58 query := Delete() 59 query.Where(Person.ID.Equal(0)) 60 _, _, err := query.SQL() 61 assert.EqualError(err, "at least one table must be specified to delete from") 62 } 63 64 func TestDeleteNoWhereClause(t *testing.T) { 65 assert := assert.New(t) 66 query := Delete().From(Person) 67 _, _, err := query.SQL() 68 assert.EqualError(err, "delete requires a where clause") 69 } 70 71 func TestJoinWithNoCondition(t *testing.T) { 72 assert := assert.New(t) 73 query := Delete().From(Person) 74 query.InnerJoin(Address) 75 query.Where(Person.AddressID.Equal(Address.ID)) 76 _, _, err := query.SQL() 77 assert.EqualError(err, "no condition specified for join") 78 }