70 lines
1.3 KiB
Go
70 lines
1.3 KiB
Go
package pokemon
|
|
|
|
import (
|
|
"github.com/stretchr/testify/assert"
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
"testing"
|
|
)
|
|
|
|
func pokeTest(name string) pokemon {
|
|
return pokemon{
|
|
Name: name,
|
|
Weight: 124,
|
|
Height: 356,
|
|
}
|
|
}
|
|
|
|
func TestRepo_Find(t *testing.T) {
|
|
cases := []struct {
|
|
label string
|
|
searchFor string
|
|
pokes []pokemon
|
|
expectResult pokemon
|
|
}{
|
|
{
|
|
label: "No pokes in db",
|
|
searchFor: "Jos",
|
|
pokes: []pokemon{},
|
|
expectResult: pokemon{},
|
|
},
|
|
{
|
|
label: "No pokes matching the name in db",
|
|
searchFor: "Jos",
|
|
pokes: []pokemon{
|
|
pokeTest("Snul"),
|
|
pokeTest("Muesli"),
|
|
pokeTest("Bonnie"),
|
|
},
|
|
expectResult: pokemon{},
|
|
},
|
|
{
|
|
label: "Unique poke name found",
|
|
searchFor: "Jos",
|
|
pokes: []pokemon{
|
|
pokeTest("Jos"),
|
|
pokeTest("Miel"),
|
|
},
|
|
expectResult: pokeTest("Jos"),
|
|
},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
t.Run(tc.label, func(t *testing.T) {
|
|
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
|
assert.NoError(t, err)
|
|
db.AutoMigrate(&pokemon{})
|
|
repo := NewRepo(db)
|
|
|
|
for _, p := range tc.pokes {
|
|
db.Save(&p)
|
|
}
|
|
|
|
result, err := repo.Find(tc.searchFor)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, tc.expectResult.Name, result.Name)
|
|
assert.Equal(t, tc.expectResult.Weight, result.Weight)
|
|
})
|
|
}
|
|
}
|