public void VerifyExceptionForCreateColumnsIfTypeNotRegistered() { var mockContext = GetMockContext(); var repo = new NpgsqlRepository(mockContext.Object, _insertBatchSize); ((Func <Task>)(async() => await repo.CreateColumnsForTypeIfNotExist <TestModel>())) .Should() .Throw <Exception>() .WithMessage($@"TypeProjection for type '{typeof(TestModel).FullName}' has not been generated. Call 'GenerateTypeProjection' first."); }
public async Task VerifyStatementsForCreateTable() { var mockContext = GetMockContext(); var repo = new NpgsqlRepository(mockContext.Object, _insertBatchSize); repo.RegisterType <TestModel>(null); await repo.CreateTableIfNotExist <TestModel>(); VerifyInvocationOfExecuteNonQuery( mockContext, $@"CREATE TABLE IF NOT EXISTS ""{_expectedSchema}"".""{nameof(TestModel)}""();"); }
public async Task VerifyStatementsForCreateColumnWithPrimaryKey() { var mockContext = GetMockContext(); var repo = new NpgsqlRepository(mockContext.Object, _insertBatchSize); repo.RegisterType <TestModel>(null); await repo.CreateColumnWithPrimaryKeyIfNotExist <TestModel>(_dummyColumnName); VerifyInvocationOfExecuteNonQuery( mockContext, $@"ALTER TABLE ""{_expectedSchema}"".""{nameof(TestModel)}"" ADD COLUMN ""{_dummyColumnName}"" SERIAL PRIMARY KEY;"); }
public async Task VerifyStatementsForCreateColumnWithForeignKey() { var mockContext = GetMockContext(); var repo = new NpgsqlRepository(mockContext.Object, _insertBatchSize); repo.RegisterType <TestModel>(null); repo.RegisterType <TestForForeignKeyModel>(null); const string dummyTargetColumnName = "dummy_id"; await repo.CreateColumnWithForeignKeyIfNotExist <TestModel, TestForForeignKeyModel>(_dummyColumnName, dummyTargetColumnName); VerifyInvocationOfExecuteNonQuery( mockContext, $@"ALTER TABLE ""{_expectedSchema}"".""{nameof(TestModel)}"" ADD COLUMN ""{_dummyColumnName}"" INTEGER REFERENCES ""{_expectedSchema}"".""{nameof(TestForForeignKeyModel)}""(""{dummyTargetColumnName}"");"); }
public async Task VerifyStatementsForCreateDatabase() { var mockContext = GetMockContext(); var repo = new NpgsqlRepository(mockContext.Object, _insertBatchSize); await repo.CreateDatabaseIfNotExist(); VerifyInvocationOfExecuteScalarWithoutDatabase <bool>( mockContext, $@"SELECT EXISTS ( SELECT datname FROM pg_catalog.pg_database WHERE datname = '{_testDatabaseName}' );"); VerifyInvocationOfExecuteNonQueryWithoutDatabase( mockContext, $@"CREATE DATABASE ""{_testDatabaseName}"" ENCODING 'UTF8'"); }
public async Task VerifyStatementsForInsertRowWithReturnValue() { var mockContext = GetMockContext(); var repo = new NpgsqlRepository(mockContext.Object, _insertBatchSize); repo.RegisterType <TestModel>(null); const string fakeColumnName = "FakeColumnNameToReturn"; var dummyReturnValue = await repo.InsertRowWithReturnValue <TestModel, int>( new TestModel() { Birthday = new DateTime(2020, 1, 1), MoleCount = 10, Name = "Bob", Points = 20, Registered = true, SubpixelPosition = 30.5m, Weight = 40 }, fakeColumnName, new Dictionary <string, object>() { { "DummyColumn", "DummyValue" } }); await repo.Flush(); VerifyInvocationOfExecuteScalarWithParams <int>(mockContext, $@"INSERT INTO ""{_expectedSchema}"".""{nameof(TestModel)}"" (""Birthday"", ""MoleCount"", ""Name"", ""Points"", ""Registered"", ""SubpixelPosition"", ""Weight"", ""DummyColumn"") VALUES (@Birthday, @MoleCount, @Name, @Points, @Registered, @SubpixelPosition, @Weight, @DummyColumn) RETURNING ""{fakeColumnName}"";", new Dictionary <string, object>() { { "Birthday", new DateTime(2020, 1, 1) }, { "MoleCount", 10 }, { "Name", "Bob" }, { "Points", 20 }, { "Registered", true }, { "SubpixelPosition", 30.5m }, { "Weight", 40 }, { "DummyColumn", "DummyValue" } }); }
public async Task VerifyStatementsForCreateColumns() { var mockContext = GetMockContext(); var repo = new NpgsqlRepository(mockContext.Object, _insertBatchSize); repo.RegisterType <TestModel>(null); await repo.CreateColumnsForTypeIfNotExist <TestModel>(); VerifyInvocationOfExecuteNonQuery( mockContext, $@"ALTER TABLE ""{_expectedSchema}"".""{nameof(TestModel)}"" ADD COLUMN ""Birthday"" timestamp;"); VerifyInvocationOfExecuteNonQuery( mockContext, $@"ALTER TABLE ""{_expectedSchema}"".""{nameof(TestModel)}"" ADD COLUMN ""MoleCount"" bigint;"); VerifyInvocationOfExecuteNonQuery( mockContext, $@"ALTER TABLE ""{_expectedSchema}"".""{nameof(TestModel)}"" ADD COLUMN ""Name"" text;"); VerifyInvocationOfExecuteNonQuery( mockContext, $@"ALTER TABLE ""{_expectedSchema}"".""{nameof(TestModel)}"" ADD COLUMN ""Points"" integer;"); VerifyInvocationOfExecuteNonQuery( mockContext, $@"ALTER TABLE ""{_expectedSchema}"".""{nameof(TestModel)}"" ADD COLUMN ""Registered"" boolean;"); VerifyInvocationOfExecuteNonQuery( mockContext, $@"ALTER TABLE ""{_expectedSchema}"".""{nameof(TestModel)}"" ADD COLUMN ""SubpixelPosition"" numeric;"); VerifyInvocationOfExecuteNonQuery( mockContext, $@"ALTER TABLE ""{_expectedSchema}"".""{nameof(TestModel)}"" ADD COLUMN ""Weight"" double precision;"); }