github.com/ecodeclub/eorm@v0.0.2-0.20231001112437-dae71da914d0/internal/integration/delete_masterslave_test.go (about) 1 // Copyright 2021 ecodeclub 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 //go:build e2e 16 17 package integration 18 19 import ( 20 "context" 21 "testing" 22 23 "github.com/ecodeclub/eorm" 24 "github.com/ecodeclub/eorm/internal/test" 25 "github.com/stretchr/testify/assert" 26 "github.com/stretchr/testify/require" 27 "github.com/stretchr/testify/suite" 28 ) 29 30 type DeleteMasterSlaveTestSuite struct { 31 MasterSlaveSuite 32 } 33 34 func (s *DeleteMasterSlaveTestSuite) SetupSuite() { 35 s.MasterSlaveSuite.SetupSuite() 36 data1 := test.NewSimpleStruct(1) 37 data2 := test.NewSimpleStruct(2) 38 data3 := test.NewSimpleStruct(3) 39 res := eorm.NewInserter[test.SimpleStruct](s.orm).Values(data1, data2, data3).Exec(context.Background()) 40 if res.Err() != nil { 41 s.T().Fatal(res.Err()) 42 } 43 } 44 45 func (s *DeleteMasterSlaveTestSuite) TearDownTest() { 46 res := eorm.RawQuery[any](s.orm, "DELETE FROM `simple_struct`").Exec(context.Background()) 47 if res.Err() != nil { 48 s.T().Fatal(res.Err()) 49 } 50 } 51 52 func (s *DeleteMasterSlaveTestSuite) TestDeleter() { 53 testcases := []struct { 54 name string 55 i *eorm.Deleter[test.SimpleStruct] 56 rowsAffected int64 57 slaveName string 58 wantErr error 59 }{ 60 { 61 name: "delete", 62 i: eorm.NewDeleter[test.SimpleStruct](s.orm).From(&test.SimpleStruct{}).Where(eorm.C("Id").EQ("1")), 63 rowsAffected: 1, 64 }, 65 } 66 for _, tc := range testcases { 67 s.T().Run(tc.name, func(t *testing.T) { 68 ctx := context.Background() 69 res := tc.i.Exec(ctx) 70 affected, err := res.RowsAffected() 71 slaveName := "" 72 select { 73 case slaveName = <-s.testSlaves.ch: 74 default: 75 } 76 require.Nil(t, err) 77 assert.Equal(t, tc.rowsAffected, affected) 78 assert.Equal(t, tc.slaveName, slaveName) 79 }) 80 } 81 82 } 83 84 func TestMasterSlaveDelete(t *testing.T) { 85 suite.Run(t, &DeleteMasterSlaveTestSuite{ 86 MasterSlaveSuite: MasterSlaveSuite{ 87 driver: "mysql", 88 masterDsn: "root:root@tcp(localhost:13307)/integration_test", 89 slaveDsns: []string{"root:root@tcp(localhost:13308)/integration_test"}, 90 initSlaves: newRoundRobinSlaves, 91 }, 92 }) 93 }