Example #1
0
        public async Task CrudTest()
        {
            await TestFixture.WithTempDb(async db =>
            {
                await db.CreateTables(typeof(Widget), typeof(WidgetDoodad), typeof(Doodad));

                var widget1 = new Widget {
                    Value = 1
                };
                var widget2 = new Widget {
                    Value = 2
                };
                var widget3 = new Widget {
                    Value = 4
                };

                var count = await db.Write(widget1, widget2, widget3);

                widget1.ID.Should().BeGreaterThan(0);
                widget2.ID.Should().BeGreaterThan(0);
                widget3.ID.Should().BeGreaterThan(0);
                widget1.ID.Should().NotBe(widget2.ID);
                widget2.ID.Should().NotBe(widget3.ID);
                count.Should().Be(3);

                var widgets = await db.Read <Widget>();
                foreach (var ab in widgets.Zip(new Widget[] { widget1, widget2, widget3 }, (a, b) => (a, b)))
                {
                    ab.a.Should().BeEquivalentTo(ab.b);
                }

                (await db.Read <Widget>(widget2.ID)).Should().BeEquivalentTo(widget2);

                var doodad1 = new Doodad
                {
                    Name            = "First",
                    PrimaryWidgetId = widget1.In(db)
                };

                var doodad2 = new Doodad
                {
                    Name            = "Second",
                    PrimaryWidgetId = widget3.In(db)
                };

                await db.Write(doodad1, doodad2);

                await db.Write(
                    new WidgetDoodad
                {
                    DoodadId = doodad1.In(db),
                    WidgetId = widget1.In(db),
                    Active   = true,
                },
                    new WidgetDoodad
                {
                    DoodadId = doodad2.In(db),
                    WidgetId = widget2.In(db),
                    Active   = true,
                },
                    new WidgetDoodad
                {
                    DoodadId = doodad1.In(db),
                    WidgetId = widget2.In(db),
                    Active   = true,
                });

                var linksToWidget2 = (await db.Read <WidgetDoodad, int?>((r, p) => r.WidgetId == p, widget2.ID)).ToList();
                linksToWidget2.Count.Should().Be(2);

                var first = await db.Dereference(linksToWidget2.First().DoodadId);
                var last  = await db.Dereference(linksToWidget2.Last().DoodadId);

                if (first.ID == doodad1.ID)
                {
                    last.ID.Should().Be(doodad2.ID);
                }
                else if (first.ID == doodad2.ID)
                {
                    last.ID.Should().Be(doodad1.ID);
                }
                else
                {
                    false.Should().BeTrue();
                }
            });
        }