Skip to content

Commit 5220525

Browse files
authored
feat: improve the database relation set (#21)
* feat: improve the database relation set * add unique id --------- Co-authored-by: rick <[email protected]>
1 parent e6c7982 commit 5220525

File tree

6 files changed

+48
-32
lines changed

6 files changed

+48
-32
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ test:
77
go test ./... -cover -v -coverprofile=coverage.out
88
go tool cover -func=coverage.out
99
build-image:
10-
docker build .
10+
docker build . -t e2e-extension
1111
hd:
1212
curl https://linuxsuren.github.io/tools/install.sh|bash
1313
init-env: hd

e2e/test-suite.yaml

+12
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,18 @@ items:
112112
expect:
113113
bodyFieldsExpect:
114114
api: http://localhost:8080/server.Runner
115+
- name: deleteDuplicatedSuite
116+
request:
117+
api: /suites/{{.param.suiteName}}-copy
118+
header:
119+
X-Store-Name: "{{.param.store}}"
120+
- name: getDeletedTestcase
121+
request:
122+
api: /suites/{{.param.suiteName}}-copy/cases/{{.param.caseName}}
123+
header:
124+
X-Store-Name: "{{.param.store}}"
125+
response:
126+
statusCode: 500
115127
- name: GetSuggestedAPIs
116128
request:
117129
api: /suggestedAPIs

go.mod

+1-5
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.22.4
55
toolchain go1.22.6
66

77
require (
8-
github.com/linuxsuren/api-testing v0.0.18-0.20241009151758-7de67ca381a6
8+
github.com/linuxsuren/api-testing v0.0.18-0.20241010082942-dcdac9e032e5
99
github.com/spf13/cobra v1.8.0
1010
github.com/stretchr/testify v1.9.0
1111
google.golang.org/protobuf v1.33.0
@@ -97,7 +97,3 @@ require (
9797
gopkg.in/yaml.v2 v2.4.0 // indirect
9898
gopkg.in/yaml.v3 v3.0.1 // indirect
9999
)
100-
101-
replace github.com/linuxsuren/api-testing => github.com/SamYSF/api-testing v0.0.0-20240913070731-63814573b192
102-
103-
//replace github.com/linuxsuren/api-testing => /home/ysf/project/api-testing

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0
55
github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
66
github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=
77
github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM=
8-
github.com/SamYSF/api-testing v0.0.0-20240913070731-63814573b192 h1:hHFszkA9lWWQ0UmyE8/C8uXRP4hAyQHAXilVSg87e/w=
9-
github.com/SamYSF/api-testing v0.0.0-20240913070731-63814573b192/go.mod h1:uu0hyEYSgdSju31EugGwIGE2I/uv7VYNM/6ODPKKD7I=
108
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
119
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
1210
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
@@ -95,6 +93,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
9593
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
9694
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
9795
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
96+
github.com/linuxsuren/api-testing v0.0.18-0.20241010082942-dcdac9e032e5 h1:WCe+p6aOJVALuIzDT7H2ALhL+PaGj7FMyRQj3f7si3k=
97+
github.com/linuxsuren/api-testing v0.0.18-0.20241010082942-dcdac9e032e5/go.mod h1:W97lpQseS5SfGE+FOAY29udSbp+KRxUu/EoIJWAVkIw=
9898
github.com/linuxsuren/go-fake-runtime v0.0.4 h1:y+tvBuw6MKTCav8Bo5HWwaXhBx1Z//VAvqI3gpOWqvw=
9999
github.com/linuxsuren/go-fake-runtime v0.0.4/go.mod h1:zmh6J78hSnWZo68faMA2eKOdaEp8eFbERHi3ZB9xHCQ=
100100
github.com/linuxsuren/oauth-hub v0.0.0-20240809060240-e78c21b5d8d4 h1:muVmKxx+JneaVgUKHqLc+As5vpgKXZAfVu6h+iyb5LQ=

pkg/server.go

+29-17
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,9 @@ func createDB(user, password, address, database, driver string) (db *gorm.DB, er
8282
return
8383
}
8484

85-
db.AutoMigrate(&TestCase{})
86-
db.AutoMigrate(&TestSuite{})
87-
db.AutoMigrate(&HistoryTestResult{})
85+
err = errors.Join(err, db.AutoMigrate(&TestCase{}))
86+
err = errors.Join(err, db.AutoMigrate(&TestSuite{}))
87+
err = errors.Join(err, db.AutoMigrate(&HistoryTestResult{}))
8888
return
8989
}
9090

@@ -149,7 +149,11 @@ func (s *dbserver) CreateTestSuite(ctx context.Context, testSuite *remote.TestSu
149149
return
150150
}
151151

152-
const nameQuery = `name = ?`
152+
const (
153+
nameQuery = `name = ?`
154+
suiteNameQuery = "suite_name = ?"
155+
idQuery = "id = ?"
156+
)
153157

154158
func (s *dbserver) GetTestSuite(ctx context.Context, suite *remote.TestSuite) (reply *remote.TestSuite, err error) {
155159
query := &TestSuite{}
@@ -208,7 +212,13 @@ func (s *dbserver) DeleteTestSuite(ctx context.Context, suite *remote.TestSuite)
208212
return
209213
}
210214

211-
err = db.Delete(TestSuite{}, nameQuery, suite.Name).Error
215+
err = db.Transaction(func(tx *gorm.DB) (err error) {
216+
err = db.Delete(TestSuite{}, nameQuery, suite.Name).Error
217+
if err == nil {
218+
err = db.Delete(TestCase{}, suiteNameQuery, suite.Name).Error
219+
}
220+
return
221+
})
212222
return
213223
}
214224

@@ -218,11 +228,11 @@ func (s *dbserver) ListTestCases(ctx context.Context, suite *remote.TestSuite) (
218228
if db, err = s.getClient(ctx); err != nil {
219229
return
220230
}
221-
db.Find(&items, "suite_name = ?", suite.Name)
222-
223-
result = &server.TestCases{}
224-
for i := range items {
225-
result.Data = append(result.Data, ConvertToRemoteTestCase(items[i]))
231+
if err = db.Find(&items, suiteNameQuery, suite.Name).Error; err == nil {
232+
result = &server.TestCases{}
233+
for i := range items {
234+
result.Data = append(result.Data, ConvertToRemoteTestCase(items[i]))
235+
}
226236
}
227237
return
228238
}
@@ -312,9 +322,9 @@ func (s *dbserver) GetTestCase(ctx context.Context, testcase *server.TestCase) (
312322
if db, err = s.getClient(ctx); err != nil {
313323
return
314324
}
315-
db.Find(&item, "suite_name = ? AND name = ?", testcase.SuiteName, testcase.Name)
316-
317-
result = ConvertToRemoteTestCase(item)
325+
if err = db.Find(&item, "suite_name = ? AND name = ?", testcase.SuiteName, testcase.Name).Error; err == nil {
326+
result = ConvertToRemoteTestCase(item)
327+
}
318328
return
319329
}
320330

@@ -324,7 +334,7 @@ func (s *dbserver) GetHistoryTestCaseWithResult(ctx context.Context, testcase *s
324334
if db, err = s.getClient(ctx); err != nil {
325335
return
326336
}
327-
db.Find(&item, "id = ? ", testcase.ID)
337+
db.Find(&item, idQuery, testcase.ID)
328338

329339
result = ConvertToRemoteHistoryTestResult(item)
330340
return
@@ -336,7 +346,7 @@ func (s *dbserver) GetHistoryTestCase(ctx context.Context, testcase *server.Hist
336346
if db, err = s.getClient(ctx); err != nil {
337347
return
338348
}
339-
db.Find(&item, "id = ? ", testcase.ID)
349+
db.Find(&item, idQuery, testcase.ID)
340350

341351
result = ConvertToGRPCHistoryTestCase(item)
342352
return
@@ -364,7 +374,9 @@ func (s *dbserver) UpdateTestCase(ctx context.Context, testcase *server.TestCase
364374
if db, err = s.getClient(ctx); err != nil {
365375
return
366376
}
367-
testCaseIdentity(db, input).Updates(input)
377+
if err = testCaseIdentity(db, input).Updates(input).Error; err != nil {
378+
return
379+
}
368380

369381
data := make(map[string]interface{})
370382
if input.ExpectBody == "" {
@@ -375,7 +387,7 @@ func (s *dbserver) UpdateTestCase(ctx context.Context, testcase *server.TestCase
375387
}
376388

377389
if len(data) > 0 {
378-
testCaseIdentity(db, input).Updates(data)
390+
err = testCaseIdentity(db, input).Updates(data).Error
379391
}
380392
return
381393
}

pkg/types.go

+3-7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package pkg
22

33
type TestCase struct {
4-
SuiteName string `json:"suiteName"`
5-
Name string `json:"name"`
4+
SuiteName string `json:"suiteName" gorm:"type:varchar(200);uniqueIndex:idx_name_and_suite_name"`
5+
Name string `gorm:"type:varchar(200);uniqueIndex:idx_name_and_suite_name"`
66
API string
77
Method string
88
Body string
@@ -20,17 +20,13 @@ type TestCase struct {
2020
}
2121

2222
type TestSuite struct {
23-
Name string
23+
Name string `gorm:"primaryKey"`
2424
API string
2525
SpecKind string
2626
SpecURL string
2727
Param string
2828
}
2929

30-
type HistoryTestSuite struct {
31-
Name string
32-
}
33-
3430
type HistoryTestResult struct {
3531
ID string `gorm:"primaryKey"`
3632
HistorySuiteName string

0 commit comments

Comments
 (0)