Skip to content

Commit 26b7a93

Browse files
authored
Merge pull request #1 from kannan83/playing
2 parents befafe6 + becb324 commit 26b7a93

File tree

11 files changed

+128
-51
lines changed

11 files changed

+128
-51
lines changed

.env

+25-15
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
# Postgres Live
2-
DB_HOST=127.0.0.1
3-
DB_DRIVER=postgres
4-
API_SECRET=98hbun98h #Used for creating a JWT. Can be anything
5-
DB_USER=steven
6-
DB_PASSWORD=
7-
DB_NAME=fullstack_api
8-
DB_PORT=5432
2+
# DB_HOST=127.0.0.1
3+
# DB_DRIVER=postgres
4+
# API_SECRET=98hbun98h #Used for creating a JWT. Can be anything
5+
# DB_USER=steven
6+
# DB_PASSWORD=
7+
# DB_NAME=fullstack_api
8+
# DB_PORT=5432
99

1010
# Postgres Test
11-
TestDbHost=127.0.0.1
12-
TestDbDriver=postgres
13-
TestApiSecret=98hbun98h
14-
TestDbUser=steven
15-
TestDbPassword=
16-
TestDbName=fullstack_api_test
17-
TestDbPort=5432
11+
# TestDbHost=127.0.0.1
12+
# TestDbDriver=postgres
13+
# TestApiSecret=98hbun98h
14+
# TestDbUser=steven
15+
# TestDbPassword=
16+
# TestDbName=fullstack_api_test
17+
# TestDbPort=5432
1818

1919
# Mysql Live
2020
# DB_HOST=127.0.0.1
@@ -32,4 +32,14 @@ TestDbPort=5432
3232
# TestDbUser=steven
3333
# TestDbPassword=here
3434
# TestDbName=fullstack_api_test
35-
# TestDbPort=3306
35+
# TestDbPort=3306
36+
37+
# sqlite live
38+
DB_DRIVER=sqlite3
39+
API_SECRET=98hbun98h #Used for creating a JWT. Can be anything
40+
DB_NAME=fullstack.sqlite
41+
42+
# sqlite test
43+
TestDbDriver=sqlite3
44+
TestApiSecret=98hbun98h
45+
TestDbName=fullstack_test.sqlite

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
*.sqlite
2+
*.idea/*
3+
*.idea
4+
*.idea/.*

api/controllers/base.go

+12-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010

1111
_ "github.com/jinzhu/gorm/dialects/mysql" //mysql database driver
1212
_ "github.com/jinzhu/gorm/dialects/postgres" //postgres database driver
13-
13+
_ "github.com/jinzhu/gorm/dialects/sqlite" // sqlite database driver
1414
"github.com/victorsteven/fullstack/api/models"
1515
)
1616

@@ -43,6 +43,17 @@ func (server *Server) Initialize(Dbdriver, DbUser, DbPassword, DbPort, DbHost, D
4343
fmt.Printf("We are connected to the %s database", Dbdriver)
4444
}
4545
}
46+
if Dbdriver == "sqlite3" {
47+
//DBURL := fmt.Sprintf("host=%s port=%s user=%s dbname=%s sslmode=disable password=%s", DbHost, DbPort, DbUser, DbName, DbPassword)
48+
server.DB, err = gorm.Open(Dbdriver, DbName)
49+
if err != nil {
50+
fmt.Printf("Cannot connect to %s database\n", Dbdriver)
51+
log.Fatal("This is the error:", err)
52+
} else {
53+
fmt.Printf("We are connected to the %s database\n", Dbdriver)
54+
}
55+
server.DB.Exec("PRAGMA foreign_keys = ON")
56+
}
4657

4758
server.DB.Debug().AutoMigrate(&models.User{}, &models.Post{}) //database migration
4859

api/models/Post.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ type Post struct {
1414
Title string `gorm:"size:255;not null;unique" json:"title"`
1515
Content string `gorm:"size:255;not null;" json:"content"`
1616
Author User `json:"author"`
17-
AuthorID uint32 `gorm:"not null" json:"author_id"`
17+
AuthorID uint32 `sql:"type:int REFERENCES users(id)" json:"author_id"`
1818
CreatedAt time.Time `gorm:"default:CURRENT_TIMESTAMP" json:"created_at"`
1919
UpdatedAt time.Time `gorm:"default:CURRENT_TIMESTAMP" json:"updated_at"`
2020
}

api/seed/seeder.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,12 @@ func Load(db *gorm.DB) {
4242
log.Fatalf("cannot migrate table: %v", err)
4343
}
4444

45-
err = db.Debug().Model(&models.Post{}).AddForeignKey("author_id", "users(id)", "cascade", "cascade").Error
46-
if err != nil {
47-
log.Fatalf("attaching foreign key error: %v", err)
48-
}
45+
/*
46+
err = db.Debug().Model(&models.Post{}).AddForeignKey("author_id", "users(id)", "cascade", "cascade").Error
47+
if err != nil {
48+
log.Fatalf("attaching foreign key error: %v", err)
49+
}
50+
*/
4951

5052
for i, _ := range users {
5153
err = db.Debug().Model(&models.User{}).Create(&users[i]).Error

fullstack

-11.2 MB
Binary file not shown.

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/victorsteven/fullstack
22

3-
go 1.12
3+
go 1.13
44

55
require (
66
github.com/DATA-DOG/go-sqlmock v1.3.3

tests/controllertests/controller_test.go

+28-6
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ var userInstance = models.User{}
1717
var postInstance = models.Post{}
1818

1919
func TestMain(m *testing.M) {
20-
var err error
21-
err = godotenv.Load(os.ExpandEnv("../../.env"))
20+
err := godotenv.Load(os.ExpandEnv("../../.env"))
2221
if err != nil {
2322
log.Fatalf("Error getting env %v\n", err)
2423
}
@@ -54,18 +53,41 @@ func Database() {
5453
fmt.Printf("We are connected to the %s database\n", TestDbDriver)
5554
}
5655
}
56+
if TestDbDriver == "sqlite3" {
57+
//DBURL := fmt.Sprintf("host=%s port=%s user=%s dbname=%s sslmode=disable password=%s", DbHost, DbPort, DbUser, DbName, DbPassword)
58+
testDbName := os.Getenv("TestDbName")
59+
server.DB, err = gorm.Open(TestDbDriver, testDbName)
60+
if err != nil {
61+
fmt.Printf("Cannot connect to %s database\n", TestDbDriver)
62+
log.Fatal("This is the error:", err)
63+
} else {
64+
fmt.Printf("We are connected to the %s database\n", TestDbDriver)
65+
}
66+
server.DB.Exec("PRAGMA foreign_keys = ON")
67+
}
5768
}
5869

5970
func refreshUserTable() error {
60-
err := server.DB.DropTableIfExists(&models.User{}).Error
71+
/*
72+
err := server.DB.DropTableIfExists(&models.User{}).Error
73+
if err != nil {
74+
return err
75+
}
76+
err = server.DB.AutoMigrate(&models.User{}).Error
77+
if err != nil {
78+
return err
79+
}
80+
*/
81+
err := server.DB.DropTableIfExists(&models.Post{}, &models.User{}).Error
6182
if err != nil {
6283
return err
6384
}
64-
err = server.DB.AutoMigrate(&models.User{}).Error
85+
err = server.DB.AutoMigrate(&models.User{}, &models.Post{}).Error
6586
if err != nil {
6687
return err
6788
}
68-
log.Printf("Successfully refreshed table")
89+
90+
log.Printf("Successfully refreshed table(s)")
6991
return nil
7092
}
7193

@@ -118,7 +140,7 @@ func seedUsers() ([]models.User, error) {
118140

119141
func refreshUserAndPostTable() error {
120142

121-
err := server.DB.DropTableIfExists(&models.User{}, &models.Post{}).Error
143+
err := server.DB.DropTableIfExists(&models.Post{}, &models.User{}).Error
122144
if err != nil {
123145
return err
124146
}

tests/modeltests/model_test.go

+42-14
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ func TestMain(m *testing.M) {
2424
}
2525
Database()
2626

27-
os.Exit(m.Run())
27+
log.Printf("Before calling m.Run() !!!")
28+
ret := m.Run()
29+
log.Printf("After calling m.Run() !!!")
30+
//os.Exit(m.Run())
31+
os.Exit(ret)
2832
}
2933

3034
func Database() {
@@ -53,35 +57,52 @@ func Database() {
5357
fmt.Printf("We are connected to the %s database\n", TestDbDriver)
5458
}
5559
}
60+
if TestDbDriver == "sqlite3" {
61+
//DBURL := fmt.Sprintf("host=%s port=%s user=%s dbname=%s sslmode=disable password=%s", DbHost, DbPort, DbUser, DbName, DbPassword)
62+
testDbName := os.Getenv("TestDbName")
63+
server.DB, err = gorm.Open(TestDbDriver, testDbName)
64+
if err != nil {
65+
fmt.Printf("Cannot connect to %s database\n", TestDbDriver)
66+
log.Fatal("This is the error:", err)
67+
} else {
68+
fmt.Printf("We are connected to the %s database\n", TestDbDriver)
69+
}
70+
server.DB.Exec("PRAGMA foreign_keys = ON")
71+
}
72+
5673
}
5774

5875
func refreshUserTable() error {
59-
err := server.DB.DropTableIfExists(&models.User{}).Error
76+
err := server.DB.Debug().DropTableIfExists(&models.User{}).Error
6077
if err != nil {
6178
return err
6279
}
63-
err = server.DB.AutoMigrate(&models.User{}).Error
80+
err = server.DB.Debug().AutoMigrate(&models.User{}).Error
6481
if err != nil {
6582
return err
6683
}
84+
6785
log.Printf("Successfully refreshed table")
86+
log.Printf("refreshUserTable routine OK !!!")
6887
return nil
6988
}
7089

7190
func seedOneUser() (models.User, error) {
7291

73-
refreshUserTable()
92+
_ = refreshUserTable()
7493

7594
user := models.User{
7695
Nickname: "Pet",
7796
Email: "pet@gmail.com",
7897
Password: "password",
7998
}
8099

81-
err := server.DB.Model(&models.User{}).Create(&user).Error
100+
err := server.DB.Debug().Model(&models.User{}).Create(&user).Error
82101
if err != nil {
83102
log.Fatalf("cannot seed users table: %v", err)
84103
}
104+
105+
log.Printf("seedOneUser routine OK !!!")
85106
return user, nil
86107
}
87108

@@ -100,26 +121,30 @@ func seedUsers() error {
100121
},
101122
}
102123

103-
for i, _ := range users {
104-
err := server.DB.Model(&models.User{}).Create(&users[i]).Error
124+
for i := range users {
125+
err := server.DB.Debug().Model(&models.User{}).Create(&users[i]).Error
105126
if err != nil {
106127
return err
107128
}
108129
}
130+
131+
log.Printf("seedUsers routine OK !!!")
109132
return nil
110133
}
111134

112135
func refreshUserAndPostTable() error {
113136

114-
err := server.DB.DropTableIfExists(&models.User{}, &models.Post{}).Error
137+
// NOTE: when deleting first delete Post as Post is depending on User table
138+
err := server.DB.Debug().DropTableIfExists(&models.Post{}, &models.User{}).Error
115139
if err != nil {
116140
return err
117141
}
118-
err = server.DB.AutoMigrate(&models.User{}, &models.Post{}).Error
142+
err = server.DB.Debug().AutoMigrate(&models.User{}, &models.Post{}).Error
119143
if err != nil {
120144
return err
121145
}
122146
log.Printf("Successfully refreshed tables")
147+
log.Printf("refreshUserAndPostTable routine OK !!!")
123148
return nil
124149
}
125150

@@ -134,7 +159,7 @@ func seedOneUserAndOnePost() (models.Post, error) {
134159
Email: "sam@gmail.com",
135160
Password: "password",
136161
}
137-
err = server.DB.Model(&models.User{}).Create(&user).Error
162+
err = server.DB.Debug().Model(&models.User{}).Create(&user).Error
138163
if err != nil {
139164
return models.Post{}, err
140165
}
@@ -143,10 +168,12 @@ func seedOneUserAndOnePost() (models.Post, error) {
143168
Content: "This is the content sam",
144169
AuthorID: user.ID,
145170
}
146-
err = server.DB.Model(&models.Post{}).Create(&post).Error
171+
err = server.DB.Debug().Model(&models.Post{}).Create(&post).Error
147172
if err != nil {
148173
return models.Post{}, err
149174
}
175+
176+
log.Printf("seedOneUserAndOnePost routine OK !!!")
150177
return post, nil
151178
}
152179

@@ -180,17 +207,18 @@ func seedUsersAndPosts() ([]models.User, []models.Post, error) {
180207
},
181208
}
182209

183-
for i, _ := range users {
184-
err = server.DB.Model(&models.User{}).Create(&users[i]).Error
210+
for i := range users {
211+
err = server.DB.Debug().Model(&models.User{}).Create(&users[i]).Error
185212
if err != nil {
186213
log.Fatalf("cannot seed users table: %v", err)
187214
}
188215
posts[i].AuthorID = users[i].ID
189216

190-
err = server.DB.Model(&models.Post{}).Create(&posts[i]).Error
217+
err = server.DB.Debug().Model(&models.Post{}).Create(&posts[i]).Error
191218
if err != nil {
192219
log.Fatalf("cannot seed posts table: %v", err)
193220
}
194221
}
222+
log.Printf("seedUsersAndPosts routine OK !!!")
195223
return users, posts, nil
196224
}

tests/modeltests/post_model_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ func TestFindAllPosts(t *testing.T) {
1717
}
1818
_, _, err = seedUsersAndPosts()
1919
if err != nil {
20-
log.Fatalf("Error seeding user and post table %v\n", err)
20+
log.Fatalf("Error seeding user and post table %v\n", err)
2121
}
2222
posts, err := postInstance.FindAllPosts(server.DB)
2323
if err != nil {
@@ -65,7 +65,7 @@ func TestGetPostByID(t *testing.T) {
6565
}
6666
post, err := seedOneUserAndOnePost()
6767
if err != nil {
68-
log.Fatalf("Error Seeding table")
68+
log.Fatalf("Error Seeding User and post table")
6969
}
7070
foundPost, err := postInstance.FindPostByID(server.DB, post.ID)
7171
if err != nil {
@@ -116,7 +116,7 @@ func TestDeleteAPost(t *testing.T) {
116116
}
117117
isDeleted, err := postInstance.DeleteAPost(server.DB, post.ID, post.AuthorID)
118118
if err != nil {
119-
t.Errorf("this is the error updating the user: %v\n", err)
119+
t.Errorf("this is the error deleting the user: %v\n", err)
120120
return
121121
}
122122
//one shows that the record has been deleted or:

0 commit comments

Comments
 (0)