Skip to content

Commit 8ca0a75

Browse files
committed
Use mock repositories for testing and fix initialization issues
1 parent d56090c commit 8ca0a75

File tree

7 files changed

+80
-24
lines changed

7 files changed

+80
-24
lines changed

main.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ import (
55
"fmt"
66
"log"
77
"math/big"
8+
"os"
89

910
"github.com/Jetlum/WalletAlertService/config"
1011
"github.com/Jetlum/WalletAlertService/database"
12+
"github.com/Jetlum/WalletAlertService/mock"
1113
"github.com/Jetlum/WalletAlertService/models"
1214
nfts "github.com/Jetlum/WalletAlertService/nft"
1315
"github.com/Jetlum/WalletAlertService/repository"
@@ -17,6 +19,9 @@ import (
1719
)
1820

1921
func init() {
22+
if os.Getenv("GO_ENV") == "test" {
23+
return
24+
}
2025
cfg, err := config.LoadConfig()
2126
if err != nil {
2227
log.Fatal("Failed to load config:", err)
@@ -34,8 +39,17 @@ func main() {
3439
log.Fatal("Failed to load config:", err)
3540
}
3641

37-
eventRepo := repository.NewEventRepository(database.DB)
38-
userPrefRepo := repository.NewUserPreferenceRepository(database.DB)
42+
var eventRepo repository.EventRepositoryInterface
43+
var userPrefRepo repository.UserPreferenceRepositoryInterface
44+
45+
if os.Getenv("GO_ENV") == "test" {
46+
eventRepo = mock.NewMockEventRepository()
47+
userPrefRepo = mock.NewMockUserPreferenceRepository()
48+
} else {
49+
eventRepo = repository.NewEventRepository(database.DB)
50+
userPrefRepo = repository.NewUserPreferenceRepository(database.DB)
51+
}
52+
3953
emailNotification := services.NewEmailNotification(cfg.SendGridAPIKey)
4054
nftDetector := nfts.NewNFTDetector()
4155

main_test.go

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

33
import (
4+
"os"
45
"testing"
56

67
"github.com/Jetlum/WalletAlertService/mock"
78
"github.com/Jetlum/WalletAlertService/models"
89
"github.com/stretchr/testify/assert"
910
)
1011

12+
func TestMain(m *testing.M) {
13+
os.Setenv("GO_ENV", "test")
14+
os.Exit(m.Run())
15+
}
16+
1117
func TestNotifyUsers(t *testing.T) {
1218
// Create a sample event to pass to notifyUsers
1319
event := &models.Event{

mock/database_mock.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package mock
2+
3+
import (
4+
"github.com/Jetlum/WalletAlertService/models"
5+
"gorm.io/gorm"
6+
)
7+
8+
type MockDB struct {
9+
Events []models.Event
10+
UserPreferences []models.UserPreference
11+
}
12+
13+
func NewMockDB() *MockDB {
14+
return &MockDB{
15+
Events: []models.Event{},
16+
UserPreferences: []models.UserPreference{},
17+
}
18+
}
19+
20+
func (db *MockDB) Create(value interface{}) *gorm.DB {
21+
switch v := value.(type) {
22+
case *models.Event:
23+
db.Events = append(db.Events, *v)
24+
case *models.UserPreference:
25+
db.UserPreferences = append(db.UserPreferences, *v)
26+
}
27+
return &gorm.DB{}
28+
}
29+
30+
func (db *MockDB) Find(out interface{}, where ...interface{}) *gorm.DB {
31+
switch out := out.(type) {
32+
case *[]models.Event:
33+
*out = db.Events
34+
case *[]models.UserPreference:
35+
*out = db.UserPreferences
36+
}
37+
return &gorm.DB{}
38+
}

mock/repository_mock.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,13 @@ func (m *MockEventRepository) Create(event *models.Event) error {
2323
}
2424
return nil
2525
}
26+
27+
// Constructor for MockUserPreferenceRepository
28+
func NewMockUserPreferenceRepository() *MockUserPreferenceRepository {
29+
return &MockUserPreferenceRepository{}
30+
}
31+
32+
// Constructor for MockEventRepository
33+
func NewMockEventRepository() *MockEventRepository {
34+
return &MockEventRepository{}
35+
}

repository/event_repository.go

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,10 @@ type EventRepository struct {
99
db *gorm.DB
1010
}
1111

12-
var _ EventRepositoryInterface = (*EventRepository)(nil)
13-
1412
func NewEventRepository(db *gorm.DB) *EventRepository {
1513
return &EventRepository{db: db}
1614
}
1715

18-
func (er *EventRepository) Create(event *models.Event) error {
19-
return er.db.Create(event).Error
20-
}
21-
22-
func (er *EventRepository) GetUnnotifiedEvents() ([]models.Event, error) {
23-
return nil, nil
24-
}
25-
26-
func (er *EventRepository) MarkAsNotified(eventID uint) error {
27-
return nil
16+
func (r *EventRepository) Create(event *models.Event) error {
17+
return r.db.Create(event).Error
2818
}

repository/repository.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@ package repository
22

33
import "github.com/Jetlum/WalletAlertService/models"
44

5-
type UserPreferenceRepositoryInterface interface {
6-
GetMatchingPreferences(event *models.Event) ([]models.UserPreference, error)
7-
}
8-
95
type EventRepositoryInterface interface {
106
Create(event *models.Event) error
11-
GetUnnotifiedEvents() ([]models.Event, error)
12-
MarkAsNotified(eventID uint) error
7+
}
8+
9+
type UserPreferenceRepositoryInterface interface {
10+
GetMatchingPreferences(event *models.Event) ([]models.UserPreference, error)
1311
}

repository/user_preference.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ type UserPreferenceRepository struct {
99
db *gorm.DB
1010
}
1111

12-
var _ UserPreferenceRepositoryInterface = (*UserPreferenceRepository)(nil)
13-
1412
func NewUserPreferenceRepository(db *gorm.DB) *UserPreferenceRepository {
1513
return &UserPreferenceRepository{db: db}
1614
}
1715

18-
func (upr *UserPreferenceRepository) GetMatchingPreferences(event *models.Event) ([]models.UserPreference, error) {
19-
return nil, nil
16+
func (r *UserPreferenceRepository) GetMatchingPreferences(event *models.Event) ([]models.UserPreference, error) {
17+
var preferences []models.UserPreference
18+
err := r.db.Where("wallet_address = ?", event.ToAddress).Find(&preferences).Error
19+
return preferences, err
2020
}

0 commit comments

Comments
 (0)