1- package repo
1+ package repo_test
22
33import (
4+ "errors"
45 "testing"
56
67 "golang.org/x/crypto/bcrypt"
78
89 "github.com/aristat/golang-example-app/app/db"
10+ "github.com/aristat/golang-example-app/app/db/domain"
11+
912 mocket "github.com/selvatico/go-mocket"
13+
14+ "github.com/aristat/golang-example-app/app/db/repo"
1015 "github.com/stretchr/testify/assert"
1116)
1217
18+ var customInsertError = errors .New ("sql: custom insert error" )
19+
20+ func TestCreateUser (t * testing.T ) {
21+ mocket .Catcher .Logging = true
22+
23+ dbManager , _ , e := db .BuildTest ()
24+ assert .Nil (t , e , "DB manager error should be nil" )
25+
26+ userRepo , _ , e := repo .NewUsersRepo (dbManager .DB )
27+ assert .Nil (t , e , "Repo error should be nil" )
28+
29+ defaultEmail := "test@gmail.com"
30+ defaultPassword := "123456789"
31+ primaryKey := 333
32+
33+ mockCreateWithError := func () {
34+ mocket .Catcher .
35+ Reset ().
36+ NewMock ().
37+ WithQuery ("INSERT INTO \" users\" (\" email\" ,\" encrypted_password\" ) VALUES ($1,$2)" ).
38+ WithArgs (defaultEmail , defaultPassword ).
39+ WithError (customInsertError )
40+ }
41+ mockCreate := func () {
42+ reply := []map [string ]interface {}{{"id" : primaryKey }}
43+ mocket .Catcher .
44+ Reset ().
45+ NewMock ().
46+ WithQuery ("INSERT INTO \" users\" (\" email\" ,\" encrypted_password\" ) VALUES ($1,$2)" ).
47+ WithArgs (defaultEmail , defaultPassword ).
48+ WithReply (reply )
49+ }
50+
51+ tests := []struct {
52+ name string
53+ mock func ()
54+ asserts func (user * domain.User , err error )
55+ }{
56+ {
57+ name : "USER NOT CREATED" ,
58+ mock : mockCreateWithError ,
59+ asserts : func (user * domain.User , err error ) {
60+ assert .Nil (t , user , "user should be nil" )
61+ assert .NotNil (t , err , "err should not be nil" )
62+ assert .Equal (t , customInsertError .Error (), err .Error ())
63+ },
64+ },
65+ {
66+ name : "USER CREATED" ,
67+ mock : mockCreate ,
68+ asserts : func (user * domain.User , err error ) {
69+ assert .Equal (t , primaryKey , user .ID )
70+ assert .Nil (t , err , "err should be nil" )
71+ },
72+ },
73+ }
74+
75+ for _ , test := range tests {
76+ t .Run (test .name , func (t * testing.T ) {
77+ test .mock ()
78+
79+ user , err := userRepo .CreateUser (defaultEmail , defaultPassword )
80+ test .asserts (user , err )
81+ })
82+ }
83+ }
84+
1385func TestFindByEmail (t * testing.T ) {
1486 mocket .Catcher .Logging = true
1587
1688 dbManager , _ , e := db .BuildTest ()
1789 assert .Nil (t , e , "DB manager error should be nil" )
1890
19- repo , _ , e := NewUsersRepo (dbManager .DB )
91+ userRepo , _ , e := repo . NewUsersRepo (dbManager .DB )
2092 assert .Nil (t , e , "Repo error should be nil" )
2193
2294 ePassword , e := bcrypt .GenerateFromPassword ([]byte ("12345" ), 8 )
2395 assert .Nil (t , e , "Password is correct" )
2496
2597 defaultEmail := "test@gmail.com"
26- mockDefaultResult := func () {
98+ mockSelect := func () {
2799 reply := []map [string ]interface {}{{"id" : 1 , "email" : defaultEmail , "encrypted_password" : ePassword }}
28100 mocket .Catcher .Reset ().NewMock ().WithQuery (`WHERE (users.email = $1) LIMIT 1` ).WithArgs (defaultEmail ).WithReply (reply )
29101 }
30102
31103 tests := []struct {
32104 name string
33- email string
34105 mock func ()
35- asserts func (err error )
106+ asserts func (user * domain. User , err error )
36107 }{
37108 {
38- name : "USER IS EMPTY" ,
39- email : "" ,
40- mock : func () {},
41- asserts : func ( err error ) {
109+ name : "USER IS EMPTY" ,
110+ mock : func () {} ,
111+ asserts : func (user * domain. User , err error ) {
112+ assert . Equal ( t , "" , user . Email , "email should be equals" )
42113 assert .NotNil (t , err , "err should not be nil" )
43114 assert .Equal (t , err .Error (), "record not found" , "error should be corrects" )
44115 },
45116 },
46117 {
47- name : "USER EXIST" ,
48- email : defaultEmail ,
49- mock : mockDefaultResult ,
50- asserts : func ( err error ) {
118+ name : "USER EXIST" ,
119+ mock : mockSelect ,
120+ asserts : func ( user * domain. User , err error ) {
121+ assert . Equal ( t , defaultEmail , user . Email , "email should be equals" )
51122 assert .Nil (t , e , "err should be nil" )
52123 },
53124 },
@@ -58,9 +129,8 @@ func TestFindByEmail(t *testing.T) {
58129 mocket .Catcher .Reset ()
59130 test .mock ()
60131
61- user , err := repo .FindByEmail (defaultEmail )
62- assert .Equal (t , test .email , user .Email , "email should be equals" )
63- test .asserts (err )
132+ user , err := userRepo .FindByEmail (defaultEmail )
133+ test .asserts (user , err )
64134 })
65135 }
66136}
0 commit comments