Ejemplo n.º 1
0
        public void RenderEntity_HasRows(Type paperType)
        {
            // Given
            var template    = "/{id}";
            var path        = "/17";
            var queryString = "?text=Hello, world!";

            var renderer = new QueryRenderer(injector.Object, registry.Object);

            renderer.PathTemplate = template;
            renderer.PaperType    = paperType;

            // When
            httpRequest.Setup(x => x.Path).Returns(path);
            httpRequest.Setup(x => x.QueryString).Returns(new QueryString(queryString));
            var entity   = renderer.RenderEntity(httpContext.Object, path);
            var firstRow = entity.Data?.Entities?.FirstOrDefault();

            // Then
            var expected = new object[] { 1, "ODD", 17, "Hello, world!" };
            var obtained = new object[] {
                firstRow?.Properties?["Id"]?.Value,
                firstRow?.Properties?["Title"]?.Value,
                firstRow?.Properties?["GroupId"]?.Value,
                firstRow?.Properties?["GroupTitle"]?.Value
            };

            Assert.Equal(expected, obtained);
        }
Ejemplo n.º 2
0
        public void RenderEntity_HasRows_HasHeaders(Type paperType)
        {
            // Given
            var template = "/{id}";
            var path     = "/17";

            var renderer = new QueryRenderer(injector.Object, registry.Object);

            renderer.PathTemplate = template;
            renderer.PaperType    = paperType;

            // When
            httpRequest.Setup(x => x.Path).Returns(path);
            var entity  = renderer.RenderEntity(httpContext.Object, path);
            var headers = entity.Data?.Properties?.GetRowsHeaders();

            // Then
            var expected = new object[] {
                "Custom Id",
                "Custom Title",
                "Custom Group Id",
                "Custom Group Title"
            };
            var obtained = new object[] {
                headers?["Id"]?.Title,
                headers?["Title"]?.Title,
                headers?["GroupId"]?.Title,
                headers?["GroupTitle"]?.Title
            };

            Assert.Equal(expected, obtained);
        }
Ejemplo n.º 3
0
        public void RenderEntity_HasProperties(Type paperType)
        {
            // Given
            var template = "/";
            var path     = "/";

            var renderer = new QueryRenderer(injector.Object, registry.Object);

            renderer.PathTemplate = template;
            renderer.PaperType    = paperType;

            // When
            httpRequest.Setup(x => x.Path).Returns(path);
            var entity  = renderer.RenderEntity(httpContext.Object, path);
            var version = entity.Data?.Properties["Version"]?.Value as PropertyCollection;

            // Then
            var expected = new object[] { "TestApp", 1, 2, 3, null };
            var obtained = new object[] {
                entity.Data?.Properties["Name"]?.Value,
                version["Major"]?.Value,
                version["Minor"]?.Value,
                version["Revision"]?.Value,
                entity.Data?.Properties["Undefined"]?.Value
            };

            Assert.Equal(expected, obtained);
        }
Ejemplo n.º 4
0
        public void Then_String_Argument_Values_Are_Serialized()
        {
            var argumentValue =
                @"Lorem ipsum dolor sit amet, ""consectetur adipiscing"" elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
    Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in 'voluptate' velit esse cillum dolore eu fugiat nulla pariatur.

    Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";

            var argument = ArgumentBuilder.Build("description", argumentValue);

            var selectionSet = SelectionSetBuilder.For <Customer>()
                               .AddScalarField(customer => customer.Id, new ArgumentCollection {
                argument
            })
                               .Build();

            var result = new QueryRenderer().Render(selectionSet);

            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                Snapshot.Match(result, new SnapshotNameExtension("Windows"));
            }
            else
            {
                Snapshot.Match(result);
            }
        }
Ejemplo n.º 5
0
        public void Then_Arguments_Are_Rendered_Properly()
        {
            var addressSelectionSet = SelectionSetBuilder.For <Address>()
                                      .AddScalarField("postalCode", address => address.ZipCode)
                                      .Build();
            var phoneSelectionSet = SelectionSetBuilder.For <PhoneNumber>()
                                    .AddScalarField(phone => phone.Number)
                                    .Build();

            var nameArguments = new ArgumentCollection
            {
                ArgumentBuilder.Build("initials", true),
                ArgumentBuilder.Build("length", 3),
                ArgumentBuilder.Build("filter", (string)null)
            };
            var addressArguments = new ArgumentCollection
            {
                ArgumentBuilder.Build("state", "CA"),
                ArgumentBuilder.Build("withApartments", false),
                ArgumentBuilder.Build("distanceFromDc", 300.25)
            };
            var phoneNumberArguments = new ArgumentCollection
            {
                ArgumentBuilder.Build("areaCode", "231"),
                ArgumentBuilder.Build("foobar")
            };

            var contactSelectionSet = SelectionSetBuilder.For <Contact>()
                                      .AddScalarField(contact => contact.FirstName, nameArguments)
                                      .AddObjectField(contact => contact.Address, addressArguments, addressSelectionSet)
                                      .AddObjectCollectionField("phones", contact => contact.PhoneNumbers, phoneNumberArguments, phoneSelectionSet)
                                      .Build();

            var contactArguments = new ArgumentCollection
            {
                ArgumentBuilder.Build("isActive", true)
            };
            var favoriteNumberArguments = new ArgumentCollection
            {
                ArgumentBuilder.Build("isEven", false),
                ArgumentBuilder.Build("greaterThan", 10)
            };

            var customerSelectionSet = SelectionSetBuilder.For <Customer>()
                                       .AddObjectField(customer => customer.CustomerContact, contactArguments, contactSelectionSet)
                                       .AddScalarCollectionField("favoriteOddNumbersGreaterThan10", customer => customer.FavoriteNumbers, favoriteNumberArguments)
                                       .Build();

            var result = new QueryRenderer().Render(customerSelectionSet);

            Snapshot.Match(result);
        }
        public void Then_Field_Arguments_Are_Rendered(
            [Values] GraphQLOperationType operationType,
            [Values(null, "", "   ", "MyQuery")] string operationName)
        {
            var phoneNumberSelectionSet = SelectionSetBuilder.For <PhoneNumber>()
                                          .AddScalarField(phone => phone.Number)
                                          .Build();

            var phoneArguments = new ArgumentCollection
            {
                ArgumentBuilder.Build("areaCode", "231"),
                ArgumentBuilder.Build("foobar")
            };


            var contactSelectionSet = SelectionSetBuilder.For <Contact>()
                                      .AddObjectCollectionField("michiganNumbers", contact => contact.PhoneNumbers, phoneArguments,
                                                                phoneNumberSelectionSet)
                                      .Build();

            var numberArguments = new ArgumentCollection
            {
                ArgumentBuilder.Build("isEven", true),
                ArgumentBuilder.Build("greaterThan", 22)
            };

            var customerSelectionSet = SelectionSetBuilder.For <Customer>()
                                       .AddScalarCollectionField("favEvenNumbersGreaterThan22", customer => customer.FavoriteNumbers,
                                                                 numberArguments)
                                       .Build();

            var customersArguments = new ArgumentCollection
            {
                ArgumentBuilder.Build("isActive", true),
                ArgumentBuilder.Build("lastName", "Smith"),
                ArgumentBuilder.Build("minRating", 3.2)
            };

            var query = QueryOperationBuilder.ForSchema <SimpleSchema>(operationType, operationName)
                        .AddObjectCollectionField(schema => schema.Customers, customersArguments, customerSelectionSet)
                        .AddObjectCollectionField("foobar", schema => schema.Customers, customersArguments,
                                                  customerSelectionSet)
                        .AddObjectField(schema => schema.Administrator, contactSelectionSet)
                        .Build();

            var result = new QueryRenderer().Render(query);

            Snapshot.Match(result);
        }
        public void Then_Added_Fields_Are_Rendered(
            [Values] GraphQLOperationType operationType,
            [Values(null, "", "   ", "MyQuery")] string operationName)
        {
            var addressSelectionSet = SelectionSetBuilder.For <Address>()
                                      .AddScalarField("line1", address => address.Street1)
                                      .AddScalarField("line2", address => address.Street2)
                                      .AddScalarField(address => address.City)
                                      .AddScalarField(address => address.State)
                                      .AddScalarField(address => address.ZipCode)
                                      .Build();

            var phoneNumberSelectionSet = SelectionSetBuilder.For <PhoneNumber>()
                                          .AddScalarField(phone => phone.Number)
                                          .AddScalarField("ext", phone => phone.Extension)
                                          .Build();

            var contactSelectionSet = SelectionSetBuilder.For <Contact>()
                                      .AddScalarField(contact => contact.FirstName)
                                      .AddScalarField("surname", contact => contact.LastName)
                                      .AddScalarCollectionField("names", contact => contact.Nicknames)
                                      .AddObjectField(contact => contact.Address, addressSelectionSet)
                                      .AddObjectCollectionField(contact => contact.PhoneNumbers, phoneNumberSelectionSet)
                                      .AddObjectCollectionField("foobar", contact => contact.PhoneNumbers, phoneNumberSelectionSet)
                                      .Build();

            var customerSelectionSet = SelectionSetBuilder.For <Customer>()
                                       .AddScalarField(customer => customer.Id)
                                       .AddScalarField("acctNum", customer => customer.AccountNumber)
                                       .AddObjectField("contactInfo", customer => customer.CustomerContact, contactSelectionSet)
                                       .AddScalarCollectionField(customer => customer.FavoriteNumbers)
                                       .Build();

            var queryOperation = QueryOperationBuilder.ForSchema <SimpleSchema>(operationType, operationName)
                                 .AddScalarField(schema => schema.Version)
                                 .AddScalarCollectionField("versions", schema => schema.PastVersions)
                                 .AddObjectCollectionField("users", schema => schema.Customers, customerSelectionSet)
                                 .AddObjectField("admin", schema => schema.Administrator, contactSelectionSet)
                                 .Build();

            var result = new QueryRenderer().Render(queryOperation);

            Snapshot.Match(result);
        }
Ejemplo n.º 8
0
        public void RenderEntity_HasTitle(Type paperType)
        {
            // Given
            var template = "/";
            var path     = "/";

            var renderer = new QueryRenderer(injector.Object, registry.Object);

            renderer.PathTemplate = template;
            renderer.PaperType    = paperType;

            // When
            httpRequest.Setup(x => x.Path).Returns(path);
            var entity = renderer.RenderEntity(httpContext.Object, path);

            // Then
            var expected = "Test Query";
            var obtained = entity.Data?.Title;

            Assert.Equal(expected, obtained);
        }
Ejemplo n.º 9
0
        public void RenderEntity_InferTitle(Type paperType)
        {
            // Given
            var template = "/";
            var path     = "/";

            var renderer = new QueryRenderer(injector.Object, registry.Object);

            renderer.PathTemplate = template;
            renderer.PaperType    = paperType;

            // When
            httpRequest.Setup(x => x.Path).Returns(path);
            var entity = renderer.RenderEntity(httpContext.Object, path);

            // Then
            var expected = paperType.Name.Replace("Query", "").ChangeCase(TextCase.ProperCase);
            var obtained = entity.Data?.Title;

            Assert.Equal(expected, obtained);
        }
Ejemplo n.º 10
0
        public void RenderEntity_HasCustomRel(Type paperType)
        {
            // Given
            var template = "/";
            var path     = "/";

            var renderer = new QueryRenderer(injector.Object, registry.Object);

            renderer.PathTemplate = template;
            renderer.PaperType    = paperType;

            // When
            httpRequest.Setup(x => x.Path).Returns(path);
            var entity = renderer.RenderEntity(httpContext.Object, path);

            // Then
            var expected   = "customRel";
            var collection = entity.Data?.Rel?.ToString();

            Assert.Contains(expected, collection);
        }
Ejemplo n.º 11
0
        public void RenderEntity_HasRowsLinks(Type paperType)
        {
            var template = "/{id}";
            var path     = "/17";

            var renderer = new QueryRenderer(injector.Object, registry.Object);

            renderer.PathTemplate = template;
            renderer.PaperType    = paperType;

            //... mock da classe link referenciada ...
            var linkedRenderer = new PaperRendererInfo
            {
                PaperRendererType = typeof(QueryRenderer),
                PaperType         = typeof(DataAndRowsQuery),
                PathTemplate      = "/{id}/RowLink"
            };

            registry
            .Setup(x => x.FindPaperRenderers(It.IsAny <Type>()))
            .Returns(linkedRenderer.AsSingle());

            // When
            httpRequest.Setup(x => x.Path).Returns(path);
            var entity    = renderer.RenderEntity(httpContext.Object, path);
            var secondRow = entity?.Data?.Entities?.Skip(1).FirstOrDefault();

            // Then
            var expected = new string[] {
                "rows.link.com?q=2",
                "http://localhost:90/Tests/2/RowLink?offset=1&limit=2&sort[]=id:desc"
            };
            var obtained =
                secondRow?.Links
                .Where(x => x.Class?.Contains("rowLink") == true)
                .Select(x => x.Href)
                .ToArray();

            Assert.Equal(expected, obtained);
        }
Ejemplo n.º 12
0
        public void RenderEntity_HasSelfLink(Type paperType)
        {
            // Given
            var template = "/{id}";
            var path     = "/17";

            var renderer = new QueryRenderer(injector.Object, registry.Object);

            renderer.PathTemplate = template;
            renderer.PaperType    = paperType;

            // When
            httpRequest.Setup(x => x.Path).Returns(path);
            var entity   = renderer.RenderEntity(httpContext.Object, path);
            var selfLink = entity.Data?.Links.FirstOrDefault(x => x.Rel.Contains("self"));

            // Then
            var expected = $"http://localhost:90/Tests/17";
            var obtained = selfLink?.Href;

            Assert.Equal(expected, obtained);
        }
Ejemplo n.º 13
0
        public void RenderEntity_Paginated(Type paperType)
        {
            // Given
            var template    = "/{id}";
            var path        = "/17";
            var queryString = "?offset=1&limit=2";

            var renderer = new QueryRenderer(injector.Object, registry.Object);

            renderer.PathTemplate = template;
            renderer.PaperType    = paperType;

            // When
            httpRequest.Setup(x => x.Path).Returns(path);
            httpRequest.Setup(x => x.QueryString).Returns(new QueryString(queryString));
            var entity = renderer.RenderEntity(httpContext.Object, path);

            // Then
            var expected = new object[] { 2, 3 };
            var obtained = entity?.Data?.Entities?.Select(x => x.Properties["Id"]?.Value).ToArray();

            Assert.Equal(expected, obtained);
        }
Ejemplo n.º 14
0
        public void Then_Specified_Properties_Are_Rendered()
        {
            var addressSelectionSet = SelectionSetBuilder.For <Address>()
                                      .AddScalarField("line1", address => address.Street1)
                                      .AddScalarField("line2", address => address.Street2)
                                      .AddScalarField(address => address.City)
                                      .AddScalarField(address => address.State)
                                      .AddScalarField(address => address.ZipCode)
                                      .Build();

            var phoneNumberSelectionSet = SelectionSetBuilder.For <PhoneNumber>()
                                          .AddScalarField(phone => phone.Number)
                                          .AddScalarField("ext", phone => phone.Extension)
                                          .Build();

            var contactSelectionSet = SelectionSetBuilder.For <Contact>()
                                      .AddScalarField(contact => contact.FirstName)
                                      .AddScalarField("surname", contact => contact.LastName)
                                      .AddScalarCollectionField("names", contact => contact.Nicknames)
                                      .AddObjectField(contact => contact.Address, addressSelectionSet)
                                      .AddObjectCollectionField(contact => contact.PhoneNumbers, phoneNumberSelectionSet)
                                      .AddObjectCollectionField("foobar", contact => contact.PhoneNumbers, phoneNumberSelectionSet)
                                      .Build();

            var selectionSet = SelectionSetBuilder.For <Customer>()
                               .AddScalarField(customer => customer.Id)
                               .AddScalarField("acctNum", customer => customer.AccountNumber)
                               .AddObjectField("contactInfo", customer => customer.CustomerContact, contactSelectionSet)
                               .AddScalarCollectionField(customer => customer.FavoriteNumbers)
                               .Build();

            IQueryRenderer renderer = new QueryRenderer();

            var result = renderer.Render(selectionSet);

            Snapshot.Match(result);
        }
Ejemplo n.º 15
0
        public void RenderEntity_HasFilter(Type paperType)
        {
            // Given
            var template    = "/{id}";
            var path        = "/17";
            var queryString = "?offset=1&limit=2&sort[]=Title:desc&text=Olá, mundo!";

            var renderer = new QueryRenderer(injector.Object, registry.Object);

            renderer.PathTemplate = template;
            renderer.PaperType    = paperType;

            // When
            httpRequest.Setup(x => x.Path).Returns(path);
            httpRequest.Setup(x => x.QueryString).Returns(new QueryString(queryString));
            var entity = renderer.RenderEntity(httpContext.Object, path);
            var filter = entity?.Data?.Actions.FirstOrDefault(x => x.Name.EqualsIgnoreCase("Filter"));

            // Then
            var expected = new object[] {
                "http://localhost:90/Tests/17?sort[]=title:desc",
                "Text",
                "Some Text",
                "text",
                "Olá, mundo!"
            };
            var obtained = new[] {
                filter?.Href,
                filter?.Fields.Select(x => x.Name).FirstOrDefault(),
                filter?.Fields.Select(x => x.Title).FirstOrDefault(),
                filter?.Fields.Select(x => x.DataType).FirstOrDefault(),
                filter?.Fields.Select(x => x.Value).FirstOrDefault()
            };

            Assert.Equal(expected, obtained);
        }
Ejemplo n.º 16
0
        public void RenderEntity_HasData(Type paperType)
        {
            // Given
            var template = "/{id}";
            var path     = "/17";

            var renderer = new QueryRenderer(injector.Object, registry.Object);

            renderer.PathTemplate = template;
            renderer.PaperType    = paperType;

            // When
            httpRequest.Setup(x => x.Path).Returns(path);
            var entity = renderer.RenderEntity(httpContext.Object, path);

            // Then
            var expected = new object[] { 17, "Query17" };
            var obtained = new object[] {
                entity.Data?.Properties["Id"]?.Value,
                entity.Data?.Properties["ItemTitle"]?.Value
            };

            Assert.Equal(expected, obtained);
        }