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  }