Skip to content

Commit 335d899

Browse files
authored
Merge pull request #50 from dpordomingo/kallaxTests
Kallax tests
2 parents 004ee3d + fab522f commit 335d899

File tree

11 files changed

+1460
-939
lines changed

11 files changed

+1460
-939
lines changed

generator/templates/model.tgo

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,20 @@ func (r *{{.Name}}) Value(col string) (interface{}, error) {
2626
}
2727

2828
func (r *{{.Name}}) NewRelationshipRecord(field string) (kallax.Record, error) {
29+
{{if .Relationships -}}
2930
switch field {
3031
{{range .Relationships}}case "{{.Name}}":
3132
return new({{$.GenTypeName .}}), nil
3233
{{end}}
3334
}
3435
return nil, fmt.Errorf("kallax: model {{.Name}} has no relationship %s", field)
36+
{{- else -}}
37+
return nil, fmt.Errorf("kallax: model {{.Name}} has no relationships")
38+
{{- end}}
3539
}
3640

3741
func (r *{{.Name}}) SetRelationship(field string, rel interface{}) error {
42+
{{if .Relationships -}}
3843
switch field {
3944
{{range .Relationships}}{{if not .IsOneToManyRelationship}}case "{{.Name}}":
4045
val, ok := rel.(*{{$.GenTypeName .}})
@@ -64,6 +69,9 @@ func (r *{{.Name}}) SetRelationship(field string, rel interface{}) error {
6469
{{end}}{{end}}
6570
}
6671
return fmt.Errorf("kallax: model {{.Name}} has no relationship %s", field)
72+
{{- else -}}
73+
return fmt.Errorf("kallax: model {{.Name}} has no relationships")
74+
{{- end}}
6775
}
6876

6977
// {{.StoreName}} is the entity to access the records of the type {{.Name}}
@@ -125,6 +133,7 @@ func (s *{{.StoreName}}) Insert(record *{{.Name}}) error {
125133
{{end}}
126134
{{if .Events.Has "BeforeInsert"}}
127135
if err := record.BeforeInsert(); err != nil {
136+
return err
128137
}
129138
{{end}}
130139
{{if .HasRelationships}}

tests/common_test.go

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"database/sql"
55
"fmt"
66
"os"
7+
"reflect"
78

89
"github.com/stretchr/testify/suite"
910
)
@@ -83,11 +84,32 @@ func (s *BaseTestSuite) QueryFails(queries ...string) bool {
8384

8485
func (s *BaseTestSuite) resetSchema() bool {
8586
return s.QuerySucceed(
86-
fmt.Sprintf(`DROP SCHEMA %s CASCADE;`, database),
87+
fmt.Sprintf(`DROP SCHEMA IF EXISTS %s CASCADE;`, database),
8788
fmt.Sprintf(`CREATE SCHEMA %s;`, database),
8889
)
8990
}
9091

92+
func (s *BaseTestSuite) resultOrError(res interface{}, err error) bool {
93+
if !reflect.ValueOf(res).Elem().IsValid() {
94+
res = nil
95+
}
96+
97+
if err == nil && res == nil {
98+
s.Fail(
99+
`FindOne should return an error or a document, but nothing was returned
100+
TODO: https://github.com/src-d/go-kallax/issues/49`,
101+
)
102+
return false
103+
}
104+
105+
if err != nil && res != nil {
106+
s.Fail("FindOne should return only an error or a document, but it was returned both")
107+
return false
108+
}
109+
110+
return true
111+
}
112+
91113
func envOrDefault(key string, def string) string {
92114
v := os.Getenv(key)
93115
if v == "" {

tests/events.go

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,83 @@
11
package tests
2+
3+
import "github.com/src-d/go-kallax"
4+
5+
type EventsFixture struct {
6+
kallax.Model `table:"event"`
7+
Checks map[string]bool
8+
MustFailBefore error
9+
MustFailAfter error
10+
}
11+
12+
func newEventsFixture() *EventsFixture {
13+
return &EventsFixture{
14+
Checks: make(map[string]bool, 0),
15+
}
16+
}
17+
18+
func (s *EventsFixture) BeforeInsert() error {
19+
if s.MustFailBefore != nil {
20+
return s.MustFailBefore
21+
}
22+
23+
s.Checks["BeforeInsert"] = true
24+
return nil
25+
}
26+
27+
func (s *EventsFixture) AfterInsert() error {
28+
if s.MustFailAfter != nil {
29+
return s.MustFailAfter
30+
}
31+
32+
s.Checks["AfterInsert"] = true
33+
return nil
34+
}
35+
36+
func (s *EventsFixture) BeforeUpdate() error {
37+
if s.MustFailBefore != nil {
38+
return s.MustFailBefore
39+
}
40+
41+
s.Checks["BeforeUpdate"] = true
42+
return nil
43+
}
44+
45+
func (s *EventsFixture) AfterUpdate() error {
46+
if s.MustFailAfter != nil {
47+
return s.MustFailAfter
48+
}
49+
50+
s.Checks["AfterUpdate"] = true
51+
return nil
52+
}
53+
54+
type EventsSaveFixture struct {
55+
kallax.Model `table:"event"`
56+
Checks map[string]bool
57+
MustFailBefore error
58+
MustFailAfter error
59+
}
60+
61+
func newEventsSaveFixture() *EventsSaveFixture {
62+
return &EventsSaveFixture{
63+
Checks: make(map[string]bool, 0),
64+
}
65+
}
66+
67+
func (s *EventsSaveFixture) BeforeSave() error {
68+
if s.MustFailBefore != nil {
69+
return s.MustFailBefore
70+
}
71+
72+
s.Checks["BeforeSave"] = true
73+
return nil
74+
}
75+
76+
func (s *EventsSaveFixture) AfterSave() error {
77+
if s.MustFailAfter != nil {
78+
return s.MustFailAfter
79+
}
80+
81+
s.Checks["AfterSave"] = true
82+
return nil
83+
}

tests/events_test.go

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
package tests
22

3-
/*
3+
import (
4+
"errors"
5+
"fmt"
6+
"testing"
7+
8+
"github.com/stretchr/testify/suite"
9+
)
10+
411
type EventsSuite struct {
512
BaseTestSuite
613
}
@@ -17,13 +24,26 @@ func TestEventsSuite(t *testing.T) {
1724
suite.Run(t, &EventsSuite{BaseTestSuite{initQueries: schema}})
1825
}
1926

27+
type eventsCheck map[string]bool
28+
29+
func assertEventsPassed(s *EventsSuite, expected eventsCheck, received eventsCheck) {
30+
for expectedEvent, expectedSign := range expected {
31+
receivedSign, ok := received[expectedEvent]
32+
if s.True(ok, fmt.Sprintf("Event '%s' was not received", expectedEvent)) {
33+
s.Equal(expectedSign, receivedSign, expectedEvent)
34+
}
35+
}
36+
37+
s.Equal(len(expected), len(received))
38+
}
39+
2040
func (s *EventsSuite) TestEventsInsert() {
2141
store := NewEventsFixtureStore(s.db)
2242

2343
doc := NewEventsFixture()
2444
err := store.Insert(doc)
2545
s.Nil(err)
26-
s.Equal(map[string]bool{
46+
assertEventsPassed(s, map[string]bool{
2747
"BeforeInsert": true,
2848
"AfterInsert": true,
2949
}, doc.Checks)
@@ -40,7 +60,7 @@ func (s *EventsSuite) TestEventsUpdate() {
4060
updatedRows, err := store.Update(doc)
4161
s.Nil(err)
4262
s.True(updatedRows > 0)
43-
s.Equal(map[string]bool{
63+
assertEventsPassed(s, map[string]bool{
4464
"BeforeUpdate": true,
4565
"AfterUpdate": true,
4666
}, doc.Checks)
@@ -55,12 +75,12 @@ func (s *EventsSuite) TestEventsUpdateError() {
5575

5676
doc.MustFailAfter = errors.New("kallax: after")
5777
updatedRows, err := store.Update(doc)
58-
s.True(updatedRows == 0)
78+
s.Equal(int64(0), updatedRows)
5979
s.Equal(doc.MustFailAfter, err)
6080

6181
doc.MustFailBefore = errors.New("kallax: before")
6282
updatedRows, err = store.Update(doc)
63-
s.True(updatedRows == 0)
83+
s.Equal(int64(0), updatedRows)
6484
s.Equal(doc.MustFailBefore, err)
6585
}
6686

@@ -71,7 +91,7 @@ func (s *EventsSuite) TestEventsSaveOnInsert() {
7191
updated, err := store.Save(doc)
7292
s.Nil(err)
7393
s.False(updated)
74-
s.Equal(map[string]bool{
94+
assertEventsPassed(s, map[string]bool{
7595
"BeforeInsert": true,
7696
"AfterInsert": true,
7797
}, doc.Checks)
@@ -87,7 +107,7 @@ func (s *EventsSuite) TestEventsSaveOnUpdate() {
87107
updated, err := store.Save(doc)
88108
s.Nil(err)
89109
s.True(updated)
90-
s.Equal(map[string]bool{
110+
assertEventsPassed(s, map[string]bool{
91111
"BeforeUpdate": true,
92112
"AfterUpdate": true,
93113
}, doc.Checks)
@@ -99,7 +119,7 @@ func (s *EventsSuite) TestEventsSaveInsert() {
99119
doc := NewEventsSaveFixture()
100120
err := store.Insert(doc)
101121
s.Nil(err)
102-
s.Equal(map[string]bool{
122+
assertEventsPassed(s, map[string]bool{
103123
"BeforeSave": true,
104124
"AfterSave": true,
105125
}, doc.Checks)
@@ -116,7 +136,7 @@ func (s *EventsSuite) TestEventsSaveUpdate() {
116136
updatedRows, err := store.Update(doc)
117137
s.Nil(err)
118138
s.True(updatedRows > 0)
119-
s.Equal(map[string]bool{
139+
assertEventsPassed(s, map[string]bool{
120140
"BeforeSave": true,
121141
"AfterSave": true,
122142
}, doc.Checks)
@@ -132,10 +152,9 @@ func (s *EventsSuite) TestEventsSaveSave() {
132152
updated, err := store.Save(doc)
133153
s.Nil(err)
134154
s.True(updated)
135-
s.Equal(map[string]bool{
155+
assertEventsPassed(s, map[string]bool{
136156
"AfterInsert": true,
137157
"BeforeSave": true,
138158
"AfterSave": true,
139159
}, doc.Checks)
140160
}
141-
*/

0 commit comments

Comments
 (0)