Ejemplo n.º 1
0
        public void end_to_end_test_using_the_transform()
        {
            using (var store = TestingDocumentStore.Basic())
            {
                var user = new User {
                    FirstName = "Jeremy", LastName = "Miller"
                };
                var json = new TestsSerializer().ToCleanJson(user);

                var func = TransformFunction.ForFile(new StoreOptions(), _getFullnameJs);

                using (var conn = store.Tenancy.Default.OpenConnection())
                {
                    conn.Execute(cmd => cmd.Sql(func.GenerateFunction()).ExecuteNonQuery());

                    var actual = conn.Execute(cmd =>
                    {
                        return(cmd.Sql("select mt_transform_get_fullname(:json)")
                               .WithJsonParameter("json", json).ExecuteScalar().As <string>());
                    });

                    actual.ShouldBe("{\"fullname\": \"Jeremy Miller\"}");
                }
            }
        }
Ejemplo n.º 2
0
        public void rebuilds_if_it_does_not_exist_in_the_schema_if_auto_create_is_create_or_update()
        {
            var schema = Substitute.For <IDocumentSchema>();

            schema.StoreOptions.Returns(new StoreOptions());

            var dbobjects = Substitute.For <IDbObjects>();

            schema.DbObjects.Returns(dbobjects);

            var func = TransformFunction.ForFile(new StoreOptions {
                AutoCreateSchemaObjects = AutoCreate.CreateOrUpdate
            }, _getFullnameJs);

            dbobjects.SchemaFunctionNames().Returns(Enumerable.Empty <FunctionName>());

            var patch = new SchemaPatch(new DdlRules());


            func.GenerateSchemaObjectsIfNecessary(AutoCreate.CreateOrUpdate, schema, patch);

            var generated = func.GenerateFunction();

            patch.UpdateDDL.ShouldContain(generated);



            patch.RollbackDDL.ShouldContain("DROP FUNCTION IF EXISTS public.mt_transform_get_fullname(JSONB)");
        }
Ejemplo n.º 3
0
        public void rebuilds_if_it_does_not_exist_in_the_schema_if_auto_create_is_all()
        {
            var schema = Substitute.For <IDocumentSchema>();

            schema.StoreOptions.Returns(new StoreOptions());

            var dbobjects = Substitute.For <IDbObjects>();

            schema.DbObjects.Returns(dbobjects);

            var func = TransformFunction.ForFile(new StoreOptions {
                AutoCreateSchemaObjects = AutoCreate.All
            }, _getFullnameJs);

            dbobjects.SchemaFunctionNames().Returns(Enumerable.Empty <FunctionName>());


            var patch = new SchemaPatch(new DdlRules());

            func.GenerateSchemaObjectsIfNecessary(AutoCreate.All, schema, patch);

            var generated = func.GenerateFunction();

            patch.UpdateDDL.ShouldContain(generated);
        }
Ejemplo n.º 4
0
        public void create_function_for_file()
        {
            var options = new StoreOptions();
            var func    = TransformFunction.ForFile(options, _getFullnameJs);

            func.Name.ShouldBe("get_fullname");

            func.Body.ShouldContain("module.exports");

            func.Identifier.Name.ShouldBe("mt_transform_get_fullname");
        }
Ejemplo n.º 5
0
        public void end_to_end_test_using_the_transform()
        {
            var user = new User {
                FirstName = "Jeremy", LastName = "Miller"
            };
            var json = new TestsSerializer().ToCleanJson(user);

            var func = TransformFunction.ForFile(new StoreOptions(), _getFullnameJs);

            using var conn = theStore.Tenancy.Default.Database.CreateConnection();
            conn.Open();
            conn.CreateCommand(func.GenerateFunction()).ExecuteNonQuery();

            var actual = (string)conn.CreateCommand("select mt_transform_get_fullname(:json)")
                         .With("json", json, NpgsqlDbType.Jsonb)
                         .ExecuteScalar();

            actual.ShouldBe("{\"fullname\": \"Jeremy Miller\"}");
        }
Ejemplo n.º 6
0
        public void does_not_regenerate_the_function_if_it_exists()
        {
            var schema    = Substitute.For <IDocumentSchema>();
            var dbobjects = Substitute.For <IDbObjects>();

            schema.DbObjects.Returns(dbobjects);

            var func = TransformFunction.ForFile(new StoreOptions(), "get_fullname.js");

            dbobjects.DefinitionForFunction(func.Function).Returns(func.GenerateFunction());

            var runner = Substitute.For <IDDLRunner>();

            func.GenerateSchemaObjectsIfNecessary(AutoCreate.All, schema, runner);

            var generated = func.GenerateFunction();

            runner.DidNotReceive().Apply(func, generated);
        }
Ejemplo n.º 7
0
        public void end_to_end_test_using_the_transform()
        {
            var user = new User {
                FirstName = "Jeremy", LastName = "Miller"
            };
            var json = new TestsSerializer().ToCleanJson(user);

            var func = TransformFunction.ForFile(new StoreOptions(), _getFullnameJs);

            using (var conn = theStore.Tenancy.Default.OpenConnection())
            {
                var cmd = new NpgsqlCommand(func.GenerateFunction());
                conn.Execute(cmd);

                var cmd2   = new NpgsqlCommand("select mt_transform_get_fullname(:json)").WithJsonParameter("json", json);
                var actual = conn.QueryScalar <string>(cmd2);

                actual.ShouldBe("{\"fullname\": \"Jeremy Miller\"}");
            }
        }
Ejemplo n.º 8
0
        public void throws_exception_if_auto_create_is_none_and_the_function_does_not_exist()
        {
            var schema    = Substitute.For <IDocumentSchema>();
            var dbobjects = Substitute.For <IDbObjects>();

            schema.DbObjects.Returns(dbobjects);

            var func = TransformFunction.ForFile(new StoreOptions {
                AutoCreateSchemaObjects = AutoCreate.None
            }, "get_fullname.js");

            dbobjects.SchemaFunctionNames().Returns(Enumerable.Empty <FunctionName>());

            var runner = Substitute.For <IDDLRunner>();


            Exception <InvalidOperationException> .ShouldBeThrownBy(() =>
            {
                func.GenerateSchemaObjectsIfNecessary(AutoCreate.None, schema, runner);
            });
        }
Ejemplo n.º 9
0
        public void does_not_regenerate_the_function_if_it_exists()
        {
            var schema    = Substitute.For <IDocumentSchema>();
            var dbobjects = Substitute.For <IDbObjects>();

            schema.DbObjects.Returns(dbobjects);

            var func = TransformFunction.ForFile(new StoreOptions(), _getFullnameJs);

            var body = new FunctionBody(func.Function, new string[0], func.GenerateFunction());

            dbobjects.DefinitionForFunction(func.Function).Returns(body);

            var patch = new SchemaPatch(new DdlRules());

            func.GenerateSchemaObjectsIfNecessary(AutoCreate.All, schema, patch);

            var generated = func.GenerateFunction();

            patch.UpdateDDL.ShouldNotContain(generated);
            patch.RollbackDDL.ShouldNotContain(func.Function.QualifiedName);
        }
Ejemplo n.º 10
0
        public void rebuilds_if_it_does_not_exist_in_the_schema_if_auto_create_is_create_only()
        {
            var schema    = Substitute.For <IDocumentSchema>();
            var dbobjects = Substitute.For <IDbObjects>();

            schema.DbObjects.Returns(dbobjects);

            var func = TransformFunction.ForFile(new StoreOptions {
                AutoCreateSchemaObjects = AutoCreate.CreateOnly
            }, "get_fullname.js");

            dbobjects.SchemaFunctionNames().Returns(Enumerable.Empty <FunctionName>());

            var runner = Substitute.For <IDDLRunner>();


            func.GenerateSchemaObjectsIfNecessary(AutoCreate.CreateOnly, schema, runner);

            var generated = func.GenerateFunction();

            runner.Received().Apply(func, generated);
        }