public void TestLocate_Field_ThrowsForNonExistentFields()
        {
            // Arrange
            var tModel = ModelFixture.Create();
            var ast    = KayleeHelper.Parse(tModel);
            var user   = ast.Locate("auth", new[] { "User" });

            // Act & Assert
            Assert.Throws <FieldNotFoundException>(() => user.Locate("VoidField"));
        }
        public void TestLocate_Field()
        {
            // Arrange
            var tModel    = ModelFixture.Create();
            var ast       = KayleeHelper.Parse(tModel);
            var user      = ast.Locate("auth", new[] { "User" });
            var fieldName = "UserId";
            var userId    = user.Fields.Single(f => f.Name == fieldName);
            // Act
            var field = user.Locate(fieldName);

            // Assert
            Assert.Equal(userId, field);
        }
        public void TestLocate_Field_PartOfParentKey()
        {
            // Arrange
            var tModel          = ModelFixture.Create();
            var ast             = KayleeHelper.Parse(tModel);
            var tenantProcedure = ast.Locate("tenant", new[] { "Tenant", "Procedure" });
            var fieldName       = "TenantId";
            var tenantId        = tenantProcedure.Parent.Fields.Single(f => f.Name == fieldName);
            // Act
            var field = tenantProcedure.Locate(fieldName);

            // Assert
            Assert.Equal(tenantId, field);
        }
        public void TestGetFullPrimaryKey()
        {
            // Arrange
            var tModel    = ModelFixture.Create();
            var ast       = KayleeHelper.Parse(tModel);
            var procedure = ast.Locate("tenant", new[] { "Tenant", "Procedure" });
            // Act
            var fullPrimaryKey = procedure.GetFullPrimaryKey();
            // Assert
            var expected = new[] {
                procedure.Parent.PrimaryKey.Single(),
                procedure.PrimaryKey.Single()
            };

            Assert.Equal(expected, fullPrimaryKey);
        }
Esempio n. 5
0
        public void TestParse()
        {
            // Arrange
            var tModel = ModelFixture.Create();
            // Act
            var ast = KayleeHelper.Parse(tModel);

            // Assert
            Assert.Collection(ast.Schemata,
                              s =>
            {
                Assert.Equal("auth", s.Name);
                Assert.Collection(s.Entities, e =>
                {
                    Assert.Equal("User", e.Name);
                    Assert.False(e.IsQuery);
                    Assert.Collection(e.Fields, f =>
                    {
                        Assert.Equal("UserId", f.Name);
                        Assert.Equal(FieldType.GUID, f.Type);
                        Assert.Equal("NEWID()", f.DefaultExpression);
                        Assert.False(f.Nullable);
                        Assert.False(f.Computed);
                    }, f =>
                    {
                        Assert.Equal("CreatedAt", f.Name);
                        Assert.Equal(FieldType.DATE, f.Type);
                        Assert.Equal("SYSDATETIMEOFFSET()", f.DefaultExpression);
                        Assert.False(f.Nullable);
                        Assert.False(f.Computed);
                    }, f =>
                    {
                        Assert.Equal("FirstName", f.Name);
                        Assert.Equal(FieldType.TEXT, f.Type);
                        Assert.Equal(100, f.Size.Size);
                        Assert.Equal(0, f.Size.Precision);
                        Assert.Null(f.DefaultExpression);
                        Assert.True(f.Nullable);
                        Assert.False(f.Computed);
                    }, f =>
                    {
                        Assert.Equal("LastName", f.Name);
                        Assert.Equal(FieldType.TEXT, f.Type);
                        Assert.Equal(100, f.Size.Size);
                        Assert.Equal(0, f.Size.Precision);
                        Assert.Null(f.DefaultExpression);
                        Assert.True(f.Nullable);
                        Assert.False(f.Computed);
                    }, f =>
                    {
                        Assert.Equal("ContactEmail", f.Name);
                        Assert.Equal(FieldType.TEXT, f.Type);
                        Assert.Equal(254, f.Size.Size);
                        Assert.Equal(0, f.Size.Precision);
                        Assert.Null(f.DefaultExpression);
                        Assert.True(f.Nullable);
                        Assert.False(f.Computed);
                    }, f =>
                    {
                        Assert.Equal("ContactPhone", f.Name);
                        Assert.Equal(FieldType.TEXT, f.Type);
                        Assert.Equal(50, f.Size.Size);
                        Assert.Equal(0, f.Size.Precision);
                        Assert.Null(f.DefaultExpression);
                        Assert.True(f.Nullable);
                        Assert.False(f.Computed);
                    }, f =>
                    {
                        Assert.Equal("Verified", f.Name);
                        Assert.Equal(FieldType.BIT, f.Type);
                        Assert.Equal("0", f.DefaultExpression);
                        Assert.False(f.Nullable);
                        Assert.False(f.Computed);
                    }, f =>
                    {
                        Assert.Equal("SuperUser", f.Name);
                        Assert.Equal(FieldType.BIT, f.Type);
                        Assert.Equal("0", f.DefaultExpression);
                        Assert.False(f.Nullable);
                        Assert.False(f.Computed);
                    }, f =>
                    {
                        Assert.Equal("NormalizedContactEmail", f.Name);
                        Assert.Equal(FieldType.TEXT, f.Type);
                        Assert.Equal(254, f.Size.Size);
                        Assert.Equal(0, f.Size.Precision);
                        Assert.Null(f.DefaultExpression);
                        Assert.False(f.Nullable);
                        Assert.True(f.Computed);
                    }, f =>
                    {
                        Assert.Equal("Hash", f.Name);
                        Assert.Equal(FieldType.BINARY, f.Type);
                        Assert.Equal(128, f.Size.Size);
                        Assert.Equal(0, f.Size.Precision);
                        Assert.Null(f.DefaultExpression);
                        Assert.False(f.Nullable);
                        Assert.False(f.Computed);
                    }, f =>
                    {
                        Assert.Equal("Picture", f.Name);
                        Assert.Equal(FieldType.VARBINARY, f.Type);
                        Assert.Equal(8192, f.Size.Size);
                        Assert.Equal(0, f.Size.Precision);
                        Assert.Null(f.DefaultExpression);
                        Assert.False(f.Nullable);
                        Assert.False(f.Computed);
                    }, f =>
                    {
                        Assert.Equal("CV", f.Name);
                        Assert.Equal(FieldType.VARBINARY, f.Type);
                        Assert.True(f.Size.IsMax);
                        Assert.Null(f.DefaultExpression);
                        Assert.False(f.Nullable);
                        Assert.False(f.Computed);
                    }, f =>
                    {
                        Assert.Equal("RAM4", f.Name);
                        Assert.Equal(FieldType.BIGINT, f.Type);
                        Assert.Null(f.DefaultExpression);
                        Assert.False(f.Nullable);
                        Assert.False(f.Computed);
                    }, f =>
                    {
                        Assert.Equal("Price", f.Name);
                        Assert.Equal(FieldType.DECIMAL, f.Type);
                        Assert.Equal(19, f.Size.Size);
                        Assert.Equal(4, f.Size.Precision);
                        Assert.Null(f.DefaultExpression);
                        Assert.False(f.Nullable);
                        Assert.False(f.Computed);
                    });
                    Assert.Collection(e.PrimaryKey, fr =>
                    {
                        Assert.Equal("UserId", fr.FieldName);
                        Assert.True(fr.IsResolved);
                        Assert.Equal(e.Fields.Single(f => f.Name == "UserId"), fr.ResolvedField);
                    });
                    Assert.Collection(e.Mutations, m =>
                    {
                        Assert.Equal("Name", m.Name);
                        Assert.Collection(m.FieldReferences, fr =>
                        {
                            Assert.Equal("FirstName", fr.FieldName);
                            Assert.True(fr.IsResolved);
                            Assert.Equal(e.Fields.Single(f => f.Name == "FirstName"), fr.ResolvedField);
                        }, fr =>
                        {
                            Assert.Equal("LastName", fr.FieldName);
                            Assert.True(fr.IsResolved);
                            Assert.Equal(e.Fields.Single(f => f.Name == "LastName"), fr.ResolvedField);
                        });
                    }, m =>
                    {
                        Assert.Equal("ContactInformation", m.Name);
                        Assert.Collection(m.FieldReferences, fr =>
                        {
                            Assert.Equal("ContactEmail", fr.FieldName);
                            Assert.True(fr.IsResolved);
                            Assert.Equal(e.Fields.Single(f => f.Name == "ContactEmail"), fr.ResolvedField);
                        }, fr =>
                        {
                            Assert.Equal("ContactPhone", fr.FieldName);
                            Assert.True(fr.IsResolved);
                            Assert.Equal(e.Fields.Single(f => f.Name == "ContactPhone"), fr.ResolvedField);
                        });
                    }, m =>
                    {
                        Assert.Equal("Verified", m.Name);
                        Assert.Collection(m.FieldReferences, fr =>
                        {
                            Assert.Equal("Verified", fr.FieldName);
                            Assert.True(fr.IsResolved);
                            Assert.Equal(e.Fields.Single(f => f.Name == "Verified"), fr.ResolvedField);
                        });
                    });
                });
            },
                              s =>
            {
                Assert.Equal("tenant", s.Name);
                Assert.Collection(s.Entities, e =>
                {
                    Assert.Equal("Tenant", e.Name);
                    Assert.False(e.IsQuery);
                    Assert.Collection(e.Children, e =>
                    {
                        Assert.Equal("Task", e.Name);
                        Assert.True(e.IsQuery);
                        Assert.Collection(e.PrimaryKey, fr =>
                        {
                            Assert.Equal("TaskId", fr.FieldName);
                            Assert.Equal(e.Fields.Single(f => f.Name == "TaskId"), fr.ResolvedField);
                        });
                    }, e =>
                    {
                        Assert.Equal("Procedure", e.Name);
                        Assert.False(e.IsQuery);
                        Assert.Collection(e.Children, e =>
                        {
                            Assert.Equal("Revision", e.Name);
                            Assert.False(e.IsQuery);
                            Assert.Collection(e.Children, e =>
                            {
                                Assert.Equal("Execution", e.Name);
                                Assert.False(e.IsQuery);
                                Assert.Collection(e.Children, e =>
                                {
                                    Assert.Equal("Comment", e.Name);
                                    Assert.False(e.IsQuery);
                                    Assert.Collection(e.Children, e =>
                                    {
                                        Assert.Equal("Delivery", e.Name);
                                        Assert.False(e.IsQuery);
                                        Assert.Collection(e.References, r =>
                                        {
                                            Assert.Collection(r.Source, fr =>
                                            {
                                                Assert.Equal("UserId", fr.FieldName);
                                                Assert.True(fr.IsResolved);
                                                Assert.Equal(e.Fields.Single(f => f.Name == "UserId"), fr.ResolvedField);
                                            });
                                            Assert.Collection(r.Target, fr =>
                                            {
                                                Assert.Equal("UserId", fr.FieldName);
                                                Assert.True(fr.IsResolved);
                                                Assert.Equal(s.Ast.Locate("auth", new[] { "User" }).Fields.Single(f => f.Name == "UserId"), fr.ResolvedField);
                                            });
                                        });
                                        Assert.Collection(e.References, r =>
                                        {
                                            Assert.Collection(r.Source, fr =>
                                            {
                                                Assert.Equal("UserId", fr.FieldName);
                                                Assert.True(fr.IsResolved);
                                                Assert.Equal(e.Fields.Single(f => f.Name == "UserId"), fr.ResolvedField);
                                            });
                                            Assert.Collection(r.Target, fr =>
                                            {
                                                Assert.Equal("UserId", fr.FieldName);
                                                Assert.True(fr.IsResolved);
                                                Assert.Equal(s.Ast.Locate("auth", new[] { "User" }).Fields.Single(f => f.Name == "UserId"), fr.ResolvedField);
                                            });
                                        });
                                    }, e =>
                                    {
                                        Assert.Equal("Reaction", e.Name);
                                        Assert.False(e.IsQuery);
                                        Assert.Collection(e.References, r =>
                                        {
                                            Assert.Collection(r.Source, fr =>
                                            {
                                                Assert.Equal("UserId", fr.FieldName);
                                                Assert.True(fr.IsResolved);
                                                Assert.Equal(e.Fields.Single(f => f.Name == "UserId"), fr.ResolvedField);
                                            });
                                            Assert.Collection(r.Target, fr =>
                                            {
                                                Assert.Equal("UserId", fr.FieldName);
                                                Assert.True(fr.IsResolved);
                                                Assert.Equal(s.Ast.Locate("auth", new[] { "User" }).Fields.Single(f => f.Name == "UserId"), fr.ResolvedField);
                                            });
                                        });
                                        Assert.Collection(e.UniqueKeys, k =>
                                        {
                                            Assert.Collection(k.FieldReferences, fr =>
                                            {
                                                Assert.Equal("CommentId", fr.FieldName);
                                                Assert.True(fr.IsResolved);
                                                Assert.Equal(e.Parent.Fields.Single(f => f.Name == "CommentId"), fr.ResolvedField);
                                            }, fr =>
                                            {
                                                Assert.Equal("Emoji", fr.FieldName);
                                                Assert.True(fr.IsResolved);
                                                Assert.Equal(e.Fields.Single(f => f.Name == "Emoji"), fr.ResolvedField);
                                            });
                                        });
                                    });
                                });
                            });
                        });
                    });
                });
            });
        }