package model import ( "encoding/json" "testing" "reflect" ) var recipes = [...]string { `{"id":1,"title":"My recipe","portions":4,"url":"https://example.org","notes":"Sooo delicious","created":1707591792,"last_changed":1707591799}`, `{"id":2,"title":"My nice recipe","portions":2,"url":"http://example.org","notes":"Sooooo delicious","created":1707591800,"last_changed":1707591900}`, } func TestRecipeJson(t *testing.T) { for _, v := range recipes { var r Recipe err := json.Unmarshal([]byte(v), &r) if err != nil { t.Fatal(err) } var encoded []byte encoded, err = json.Marshal(&r) if err != nil { t.Fatal(err) } if string(encoded) != v { t.Fatalf("Encoded JSON '%s' does not match original '%s'", string(encoded), v) } } } func TestRecipeCrud(t *testing.T) { InitStorage() defer RemoveStorage() InitDatabase() defer CloseDatabase() var original, readback, update, updated, deleted Recipe err := json.Unmarshal([]byte(recipes[0]), &original) if err != nil { t.Fatalf("Failed to unmarshal test recipe: %v\n", err) } err = original.Create() if err != nil { t.Fatalf("Failed to create test recipe in DB: %v\n", err) } readback.Id = original.Id err = readback.Read() if err != nil { t.Fatalf("Failed to create test recipe in DB: %v\n", err) } if !reflect.DeepEqual(original, readback) { t.Fatalf("Recipes did not match after create / read cycle") } err = json.Unmarshal([]byte(recipes[1]), &update) if err != nil { t.Fatalf("Failed to unmarshal test recipe: %v\n", err) } update.Id = original.Id err = update.Update() if err != nil { t.Fatalf("Failed to update recipe: %v\n", err) } updated.Id = original.Id err = updated.Read() if err != nil { t.Fatalf("Failed to read back updated recipe: %v\n", err) } if !reflect.DeepEqual(updated, update) { t.Fatalf("Recipes did not match after update / read cycle") } if reflect.DeepEqual(updated, original) { t.Fatalf("Updated and original recipe match") } err = updated.Delete() if err != nil { t.Fatalf("Failed to delete updated recipe: %v\n", err) } deleted.Id = updated.Id err = deleted.Read() if err == nil { t.Fatalf("Was able to read back deleted recipe") } }