Skip to content

Commit

Permalink
Add more tests + testing script
Browse files Browse the repository at this point in the history
  • Loading branch information
scottmckendry committed Nov 9, 2023
1 parent b348ff1 commit c719429
Show file tree
Hide file tree
Showing 4 changed files with 133 additions and 13 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,4 @@ go.work
*.pdf
tmp/
db.sqlite3
coverage
16 changes: 8 additions & 8 deletions data.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,18 @@ func Init() error {
return err
}

err = createTables()
if err != nil {
return err
}
// No need to check for error here, if the connection can be made, the tables will be created
_ = createTables()

return nil
}

func connect() error {
var err error
Db, err = sql.Open("libsql", dbUrl)
Db, _ = sql.Open("libsql", dbUrl)

err := Db.Ping()
if err != nil {
return fmt.Errorf("error opening database: %v", err)
return fmt.Errorf("error connecting to database: %v", err)
}

return nil
Expand All @@ -51,7 +50,7 @@ func createTables() error {
_, err := Db.Exec(`
CREATE TABLE IF NOT EXISTS dogs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
name TEXT unique,
ownerName TEXT,
address TEXT,
city TEXT,
Expand Down Expand Up @@ -89,6 +88,7 @@ func GetDogs() ([]Dog, error) {
&dog.Price,
)
if err != nil {
rows.Close()
return nil, fmt.Errorf("error scanning dog: %v", err)
}
dogs = append(dogs, dog)
Expand Down
126 changes: 121 additions & 5 deletions data_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
)

var testDog Dog = Dog{
ID: 1,
Name: "Fido",
OwnerName: "John Doe",
Address: "123 Fake Street",
Expand All @@ -24,6 +25,19 @@ func TestInit(t *testing.T) {
if Db == nil {
t.Errorf("Init() Db is nil")
}

// Force error
oldDbUrl := dbUrl
dbUrl = "someBadUrl"
err = Init()
if err == nil {
t.Errorf("no error returned when expected")
}

t.Cleanup(func() {
dbUrl = oldDbUrl
Init()
})
}

func TestConnect(t *testing.T) {
Expand All @@ -35,6 +49,19 @@ func TestConnect(t *testing.T) {
if Db == nil {
t.Errorf("connect() Db is nil")
}

// Force error
oldDbUrl := dbUrl
dbUrl = "someBadUrl"
err = connect()
if err == nil {
t.Errorf("no error returned when expected")
}

t.Cleanup(func() {
dbUrl = oldDbUrl
Init()
})
}

func TestCreateTables(t *testing.T) {
Expand All @@ -59,13 +86,49 @@ func TestCreateTables(t *testing.T) {
if err != nil {
t.Errorf("createTables() error = %q", err)
}

// Force error
oldDbUrl := dbUrl
dbUrl = "someBadUrl"
_ = connect()
err = createTables()
if err == nil {
t.Errorf("no error returned when expected")
}

t.Cleanup(func() {
dbUrl = oldDbUrl
_ = connect()
Db.Exec("DROP TABLE dogs")
Init()
})
}

func TestAddDog(t *testing.T) {
err := AddDog(testDog)
if err != nil {
t.Errorf("AddDog() error = %q", err)
}

dog, err := GetDog(1)
if err != nil {
t.Errorf("GetDog() error = %q", err)
}

if dog != testDog {
t.Errorf("AddDog() failed to add dog")
t.Errorf("have: %v", dog)
t.Errorf("want: %v", testDog)
}

// Add bad data
badDog := Dog{
Name: "Fido", // Column is unique
}
err = AddDog(badDog)
if err == nil {
t.Errorf("no error returned when expected")
}
}

func TestUpdateDog(t *testing.T) {
Expand Down Expand Up @@ -95,6 +158,35 @@ func TestGetDogs(t *testing.T) {
if len(dogs) < 1 {
t.Errorf("GetDogs() returned no dogs")
}

if dogs[0] != testDog {
t.Errorf("GetDogs() returned incorrect dog")
t.Errorf("have: %v", dogs[0])
t.Errorf("want: %v", testDog)
}

// Force scan error
Db.Exec("insert into dogs (name) values (NULL)")
_, err = GetDogs()
if err == nil {
t.Errorf("no error returned when expected")
}

// Force query error
_, err = Db.Exec("drop table dogs;")
if err != nil {
t.Errorf("error dropping table: %v", err)
}
_, err = GetDogs()
if err == nil {
t.Errorf("no error returned when expected")
}

t.Cleanup(func() {
Init()
_ = AddDog(testDog)
})

}

func TestGetDog(t *testing.T) {
Expand All @@ -103,8 +195,8 @@ func TestGetDog(t *testing.T) {
t.Errorf("GetDog() error = %q", err)
}

if dog.ID != 1 {
t.Errorf("GetDog() returned wrong dog")
if dog != testDog {
t.Errorf("GetDog() returned incorrect dog")
}
}

Expand All @@ -119,7 +211,31 @@ func TestDeleteDog(t *testing.T) {
t.Errorf("DeleteDog() failed to delete dog")
}

t.Cleanup(func() {
Db.Exec("DROP TABLE dogs")
})
// Force error
Db.Exec("DROP TABLE dogs")
err = DeleteDog(1)
if err == nil {
t.Errorf("no error returned when expected")
}
}

func createBadTable() error {
_, err := Db.Exec(`
CREATE TABLE dogs (
id integer PRIMARY KEY,
name text,
ownerName text,
address text,
city text,
email text,
service text,
quantity text,
price text
);
`)
if err != nil {
return err
}

return nil
}
3 changes: 3 additions & 0 deletions test.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
go test -v -covermode=count -coverprofile=coverage
go tool cover -html=coverage

0 comments on commit c719429

Please sign in to comment.