public void get_all_passes_entities_through_to_subclass()
        {
            var sut = new RepositoryBuilder()
                      .WithOnEntityLoaded(
                (e, c) =>
            {
                e.Column1 = "replacement" + e.Id;
                return(e);
            })
                      .Build();

            sut.Save(
                new TestEntity
            {
                Id      = 13,
                Column1 = "original"
            });
            sut.Save(
                new TestEntity
            {
                Id      = 42,
                Column1 = "original"
            });

            var results = sut.GetAll();

            Assert.NotNull(results);
            Assert.Equal(2, results.Count);
            Assert.Equal("replacement13", results[0].Column1);
            Assert.Equal("replacement42", results[1].Column1);
        }
        public void get_returns_entity_if_entity_is_found(int id)
        {
            var sut = new RepositoryBuilder()
                      .Build();

            sut.Save(
                new TestEntity
            {
                Id = id
            });

            Assert.NotNull(sut.Get(id));
        }
        public void save_can_update_existing_entities(string column1, string column2)
        {
            var sut = new RepositoryBuilder()
                      .Build();
            var initialSave = sut
                              .Save(new TestEntity());

            Assert.NotNull(initialSave.Id);
            var update = sut
                         .Save(
                new TestEntity
            {
                Id      = initialSave.Id,
                Column1 = column1,
                Column2 = column2
            });
            var load = sut.Get(update.Id.Value);

            Assert.NotNull(load);
            Assert.Equal(update.Id, load.Id);
            Assert.Equal(column1, load.Column1);
            Assert.Equal(column2, load.Column2);
        }
        public void delete_returns_number_of_entities_deleted(int entityCount)
        {
            var sut = new RepositoryBuilder()
                      .Build();

            for (var i = 0; i < entityCount; ++i)
            {
                sut.Save(
                    new TestEntity
                {
                    Id = i
                });
            }

            Assert.Equal(entityCount, sut.DeleteAll());
        }
        public void delete_returns_true_if_entity_is_deleted(int id)
        {
            var sut = new RepositoryBuilder()
                      .Build();

            sut.Save(
                new TestEntity
            {
                Id = id
            });

            Assert.NotNull(sut.Get(id));

            Assert.True(sut.Delete(id));

            Assert.Null(sut.Get(id));
        }
        public void delete_all_does_not_pass_entity_through_to_subclass()
        {
            var called = false;
            var sut    = new RepositoryBuilder()
                         .WithOnEntityDeleted(
                (e, c) => called = true)
                         .Build();
            var result = sut
                         .Save(
                new TestEntity
            {
                Column1 = "original"
            });

            Assert.False(called);
            sut.DeleteAll();
            Assert.False(called);
        }
        public void delete_passes_entity_through_to_subclass_if_it_is_deleted()
        {
            var called = false;
            var sut    = new RepositoryBuilder()
                         .WithOnEntityDeleted(
                (e, c) => called = true)
                         .Build();
            var result = sut
                         .Save(
                new TestEntity
            {
                Column1 = "original"
            });

            Assert.False(called);
            sut.Delete(result.Id.Value);
            Assert.True(called);
        }
        public void save_passes_entities_through_to_subclass_after_save()
        {
            var sut = new RepositoryBuilder()
                      .WithOnEntitySaved(
                (e, c) =>
            {
                e.Column1 = "replacement";
                return(e);
            })
                      .Build();
            var result = sut
                         .Save(
                new TestEntity
            {
                Column1 = "original"
            });

            Assert.NotNull(result);
            Assert.Equal("replacement", result.Column1);
        }
        public void save_saves_the_entity_returned_to_it_by_on_entity_saving()
        {
            var sut = new RepositoryBuilder()
                      .WithOnEntitySaving((e, c) => new TestEntity {
                Id = 42, Column1 = "replacement"
            })
                      .Build();

            sut
            .Save(
                new TestEntity
            {
                Id      = 42,
                Column1 = "original"
            });
            var result = sut.Get(42);

            Assert.NotNull(result);
            Assert.Equal("replacement", result.Column1);
        }
        public void save_can_insert_new_entities(string column1, string column2)
        {
            var sut = new RepositoryBuilder()
                      .Build();
            var result = sut
                         .Save(
                new TestEntity
            {
                Column1 = column1,
                Column2 = column2
            });

            Assert.NotNull(result.Id);
            var reload = sut.Get(result.Id.Value);

            Assert.NotNull(reload);
            Assert.Equal(result.Id, reload.Id);
            Assert.Equal(column1, reload.Column1);
            Assert.Equal(column2, reload.Column2);
        }
        public void save_passes_entities_through_to_subclass_before_save()
        {
            var called = false;
            var sut    = new RepositoryBuilder()
                         .WithOnEntitySaving(
                (e, c) =>
            {
                called = true;
                return(e);
            })
                         .Build();

            sut
            .Save(
                new TestEntity
            {
                Column1 = "original"
            });

            Assert.True(called);
        }
        public void get_passes_entity_through_to_subclass()
        {
            var sut = new RepositoryBuilder()
                      .WithOnEntityLoaded(
                (e, c) =>
            {
                e.Column1 = "replacement";
                return(e);
            })
                      .Build();

            sut.Save(
                new TestEntity
            {
                Id      = 42,
                Column1 = "original"
            });

            var entity = sut.Get(42);

            Assert.Equal("replacement", entity.Column1);
        }
        public void get_all_orders_entities_by_the_default_order()
        {
            var sut = new RepositoryBuilder()
                      .WithColumns(
                new[]
            {
                new Column("id", true),
                new Column("column_1", sortOrder: SortOrder.Ascending),
                new Column("column_2", sortOrder: SortOrder.Descending),
            })
                      .Build();

            sut.Save(
                new TestEntity
            {
                Column1 = "z",
                Column2 = "c"
            });
            sut.Save(
                new TestEntity
            {
                Column1 = "m",
                Column2 = "a"
            });
            sut.Save(
                new TestEntity
            {
                Column1 = "a",
                Column2 = "z"
            });
            sut.Save(
                new TestEntity
            {
                Column1 = "b",
                Column2 = "zz"
            });
            sut.Save(
                new TestEntity
            {
                Column1 = "a",
                Column2 = "m"
            });
            sut.Save(
                new TestEntity
            {
                Column1 = "z",
                Column2 = "e"
            });

            var results = sut.GetAll();

            Assert.NotNull(results);
            Assert.Equal(6, results.Count);
            Assert.Equal("a", results[0].Column1);
            Assert.Equal("z", results[0].Column2);
            Assert.Equal("a", results[1].Column1);
            Assert.Equal("m", results[1].Column2);
            Assert.Equal("b", results[2].Column1);
            Assert.Equal("zz", results[2].Column2);
            Assert.Equal("m", results[3].Column1);
            Assert.Equal("a", results[3].Column2);
            Assert.Equal("z", results[4].Column1);
            Assert.Equal("e", results[4].Column2);
            Assert.Equal("z", results[5].Column1);
            Assert.Equal("c", results[5].Column2);
        }