Adding mock services
continuous-integration/drone/push Build is passing Details

main
Drew Bednar 2 months ago
parent 0c9924102b
commit 32190b7036

@ -14,9 +14,7 @@ import (
// Create a newTestApplication helper which returns an instance of our
// application struct containing mocked dependencies.
func newTestApplication(t *testing.T) *server.RatchetApp {
rs := server.NewRatchetApp(slog.New(slog.NewTextHandler(io.Discard, nil)), nil, nil, nil)
return rs
}

@ -0,0 +1,35 @@
package mock
import (
"database/sql"
"time"
"git.runcible.io/learning/ratchet/internal/model"
)
var mockSnippet = model.Snippet{
ID: 1,
Title: sql.NullString{String: "Hello golang mocking", Valid: true},
Content: sql.NullString{String: "Hello golang mocking", Valid: true},
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
ExpiresAt: time.Now(),
}
type SnippetService struct{}
func (s *SnippetService) Insert(title, content string, expiresAt int) (int, error) {
return 2, nil
}
func (s *SnippetService) Get(id int) (model.Snippet, error) {
if id == mockSnippet.ID {
return mockSnippet, nil
} else {
return model.Snippet{}, model.ErrNoRecord
}
}
func (s *SnippetService) Lastest() ([]model.Snippet, error) {
return []model.Snippet{mockSnippet}, nil
}

@ -0,0 +1,34 @@
package mock
import "git.runcible.io/learning/ratchet/internal/model"
var MockEmail = "drew@fake.com"
var MockPassword = "thisisinsecure"
type UserService struct{}
func (u *UserService) Insert(name, email, password string) (int, error) {
switch email {
case "dupe@example.com":
return 0, model.ErrDuplicateEmail
default:
return 1, nil
}
}
func (u *UserService) Authenticate(email, password string) (int, error) {
if email == MockEmail && password == MockPassword {
return 1, nil
}
return 0, model.ErrInvalidCredentials
}
func (u *UserService) Exists(id int) (bool, error) {
switch id {
case 1:
return true, nil
default:
return false, nil
}
}

@ -23,6 +23,8 @@ type RatchetApp struct {
sessionManager *scs.SessionManager
}
// TODO this function presents some challenges because it both instantiates new data objects
// and configures route / middleware setup
func NewRatchetApp(logger *slog.Logger, tc *TemplateCache, db *sql.DB, sm *scs.SessionManager) *RatchetApp {
rs := new(RatchetApp)
rs.logger = logger

Loading…
Cancel
Save