ch14.5
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
package assert
|
||||
|
||||
import "testing"
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func Equal[T comparable](t *testing.T, actual, expected T) {
|
||||
t.Helper()
|
||||
@@ -9,3 +12,11 @@ func Equal[T comparable](t *testing.T, actual, expected T) {
|
||||
t.Errorf("got: %v; want: %v", actual, expected)
|
||||
}
|
||||
}
|
||||
|
||||
func StringContains(t *testing.T, actual, expectedString string) {
|
||||
t.Helper()
|
||||
|
||||
if !strings.Contains(actual, expectedString) {
|
||||
t.Errorf("got: %q; expected to contain: %q", actual, expectedString)
|
||||
}
|
||||
}
|
||||
|
||||
34
internal/models/mocks/snippets.go
Normal file
34
internal/models/mocks/snippets.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package mocks
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gitea.local.lab/Lbenedar/snippetbox/internal/models"
|
||||
)
|
||||
|
||||
var mockSnippet = &models.Snippet{
|
||||
ID: 1,
|
||||
Title: "An old silent pond",
|
||||
Content: "An old silent pond...",
|
||||
Created: time.Now(),
|
||||
Expires: time.Now(),
|
||||
}
|
||||
|
||||
type SnippetModel struct{}
|
||||
|
||||
func (m *SnippetModel) Insert(title string, content string, expires int) (int, error) {
|
||||
return 2, nil
|
||||
}
|
||||
|
||||
func (m *SnippetModel) Get(id int) (*models.Snippet, error) {
|
||||
switch id {
|
||||
case 1:
|
||||
return mockSnippet, nil
|
||||
default:
|
||||
return nil, models.ErrNoRecord
|
||||
}
|
||||
}
|
||||
|
||||
func (m *SnippetModel) Latest() ([]*models.Snippet, error) {
|
||||
return []*models.Snippet{mockSnippet}, nil
|
||||
}
|
||||
31
internal/models/mocks/users.go
Normal file
31
internal/models/mocks/users.go
Normal file
@@ -0,0 +1,31 @@
|
||||
package mocks
|
||||
|
||||
import "gitea.local.lab/Lbenedar/snippetbox/internal/models"
|
||||
|
||||
type UserModel struct{}
|
||||
|
||||
func (m *UserModel) Insert(name, email, password string) error {
|
||||
switch email {
|
||||
case "dupe@example.com":
|
||||
return models.ErrDuplicateEmail
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func (m *UserModel) Authenticate(email, password string) (int, error) {
|
||||
if email == "alice@example.com" && password == "pa$$word" {
|
||||
return 1, nil
|
||||
}
|
||||
|
||||
return 0, models.ErrInvalidCredentials
|
||||
}
|
||||
|
||||
func (m *UserModel) Exists(id int) (bool, error) {
|
||||
switch id {
|
||||
case 1:
|
||||
return true, nil
|
||||
default:
|
||||
return false, nil
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,11 @@ type Snippet struct {
|
||||
Created time.Time
|
||||
Expires time.Time
|
||||
}
|
||||
|
||||
type SnippetModelInterface interface {
|
||||
Insert(title string, content string, expires int) (int, error)
|
||||
Get(id int) (*Snippet, error)
|
||||
Latest() ([]*Snippet, error)
|
||||
}
|
||||
type SnippetModel struct {
|
||||
DB *sql.DB
|
||||
}
|
||||
|
||||
@@ -18,6 +18,12 @@ type User struct {
|
||||
Created time.Time
|
||||
}
|
||||
|
||||
type UserModelInterface interface {
|
||||
Insert(name, email, password string) error
|
||||
Authenticate(email, password string) (int, error)
|
||||
Exists(id int) (bool, error)
|
||||
}
|
||||
|
||||
type UserModel struct {
|
||||
DB *sql.DB
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user