func TestAll(t *testing.T) { setup(t) p1 := &Post{Title: "Post 1", Content: "Content 1", CreatedAt: time.Now()} p2 := &Post{Title: "Post 2", Content: "Content 2", CreatedAt: time.Now()} p3 := &Post{Title: "Post 3", Content: "Content 3", CreatedAt: time.Now()} p4 := &Post{Title: "Post 4", Content: "Content 4", CreatedAt: time.Now()} posts := []*Post{p1, p2, p3, p4} for _, p := range posts { if err := rebecca.Save(p); err != nil { t.Fatal(err) } } expected := []Post{*p1, *p2, *p3, *p4} actual := []Post{} if err := rebecca.All(&actual); err != nil { t.Fatal(err) } if !equalPosts(actual, expected) { t.Errorf("Expected %+v to equal %+v", actual, expected) } }
func TestRemove(t *testing.T) { setup(t) p1 := &Person{Name: "John", Age: 9} p2 := &Person{Name: "Sarah", Age: 27} p3 := &Person{Name: "James", Age: 11} p4 := &Person{Name: "Monika", Age: 12} people := []*Person{p1, p2, p3, p4} for _, p := range people { if err := rebecca.Save(p); err != nil { t.Fatal(err) } } if err := rebecca.Remove(p3); err != nil { t.Fatal(err) } expected := []Person{*p1, *p2, *p4} actual := []Person{} if err := rebecca.All(&actual); err != nil { t.Fatal(err) } if !reflect.DeepEqual(actual, expected) { t.Errorf("Expected %+v to equal %+v", actual, expected) } }
func ExampleAll() { type Person struct { // ... } people := []Person{} if err := rebecca.All(&people); err != nil { panic(err) } // At this point people contains all Person records. fmt.Print(people) }
func TestTransactions(t *testing.T) { d := fake.NewDriver() rebecca.SetupDriver(d) d.RegisterWhere("title = $1", func(record []field.Field, args ...interface{}) (bool, error) { for _, f := range record { if f.DriverName == "title" { return f.Value.(string) == args[0].(string), nil } } return false, fmt.Errorf("record %+v does not have title field", record) }) txa, err := rebecca.Begin() if err != nil { t.Fatal(err) } defer txa.Rollback() txb, err := rebecca.Begin() if err != nil { t.Fatal(err) } defer txb.Rollback() pa := &Post{Title: "Hello world", Content: "Content of Hello World, many hellos", CreatedAt: time.Now()} if err := txa.Save(pa); err != nil { t.Fatal(err) } pa2 := &Post{Title: "Hello Blog", Content: "More hellos here!", CreatedAt: time.Now()} if err := txa.Save(pa2); err != nil { t.Fatal(err) } actual := &Post{} if err := txa.Get(pa.ID, actual); err != nil { t.Fatal(err) } actual = &Post{} if err := txb.Get(pa.ID, actual); err == nil { t.Errorf( "Expected transaction B not to find record saved in transaction A, but got: %+v", actual, ) } pb := &Post{Title: "Super Post", Content: "Super Content", CreatedAt: time.Now()} if err := txb.Save(pb); err != nil { t.Fatal(err) } actual = &Post{} if err := txa.Get(pb.ID, actual); err == nil { t.Errorf( "Expected transaction A not to find record saved in transaction B, but got: %+v", actual, ) } expecteds := []Post{*pa, *pa2} actuals := []Post{} if err := txa.All(&actuals); err != nil { t.Fatal(err) } if !equalPosts(actuals, expecteds) { t.Errorf("Expected %+v to equal %+v", actuals, expecteds) } expecteds = []Post{*pa} actuals = []Post{} if err := txa.Where(&actuals, "title = $1", "Hello world"); err != nil { t.Fatal(err) } if !equalPosts(actuals, expecteds) { t.Errorf("Expected %+v to equal %+v", actuals, expecteds) } expecteds = []Post{*pa2} actuals = []Post{} if err := txa.Where(&actuals, "title = $1", "Hello Blog"); err != nil { t.Fatal(err) } if !equalPosts(actuals, expecteds) { t.Errorf("Expected %+v to equal %+v", actuals, expecteds) } expecteds = []Post{} actuals = []Post{} if err := txa.Where(&actuals, "title = $1", "Super Post"); err != nil { t.Fatal(err) } if !equalPosts(actuals, expecteds) { t.Errorf("Expected %+v to equal %+v", actuals, expecteds) } expecteds = []Post{*pb} actuals = []Post{} if err := txb.All(&actuals); err != nil { t.Fatal(err) } if !equalPosts(actuals, expecteds) { t.Errorf("Expected %+v to equal %+v", actuals, expecteds) } if err := txa.Commit(); err != nil { t.Fatal(err) } txb.Rollback() txc, err := rebecca.Begin() if err != nil { t.Fatal(err) } actual = &Post{} if err := txc.Get(pa.ID, actual); err != nil { t.Fatal(err) } if !actual.Equal(pa) { t.Errorf("Expected %+v to equal %+v", actual, pa) } expecteds = []Post{} actuals = []Post{} if err := txc.Where(&actuals, "title = $1", "Super Post"); err != nil { t.Fatal(err) } if !equalPosts(actuals, expecteds) { t.Errorf("Expected %+v to equal %+v", actuals, expecteds) } expected := pa2 actual = &Post{} if err := txc.First(actual, "title = $1", "Hello Blog"); err != nil { t.Fatal(err) } if !actual.Equal(expected) { t.Errorf("Expected %+v to equal %+v", actual, expected) } txd, err := rebecca.Begin() if err != nil { t.Fatal(err) } if err := txd.Remove(pa); err != nil { t.Fatal(err) } expecteds = []Post{*pa2} actuals = []Post{} if err := txd.All(&actuals); err != nil { t.Fatal(err) } if !equalPosts(actuals, expecteds) { t.Errorf("Expected %+v to equal %+v", actuals, expecteds) } expecteds = []Post{*pa, *pa2} actuals = []Post{} if err := txc.All(&actuals); err != nil { t.Fatal(err) } if !equalPosts(actuals, expecteds) { t.Errorf("Expected %+v to equal %+v", actuals, expecteds) } expecteds = []Post{*pa, *pa2} actuals = []Post{} if err := rebecca.All(&actuals); err != nil { t.Fatal(err) } if !equalPosts(actuals, expecteds) { t.Errorf("Expected %+v to equal %+v", actuals, expecteds) } if err := txd.Commit(); err != nil { t.Fatal(err) } expecteds = []Post{*pa2} actuals = []Post{} if err := rebecca.All(&actuals); err != nil { t.Fatal(err) } if !equalPosts(actuals, expecteds) { t.Errorf("Expected %+v to equal %+v", actuals, expecteds) } }