コード例 #1
0
        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.");
        }
コード例 #2
0
        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)}""();");
        }
コード例 #3
0
        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;");
        }
コード例 #4
0
        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}"");");
        }
コード例 #5
0
        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'");
        }
コード例 #6
0
        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" }
            });
        }
コード例 #7
0
        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;");
        }