public void Can_Generate_Api_Xml_With_Omission_Of_Attributes()
        {
            //Arrange
            var expected =
                new XElement("SearchRequest",
                             new XAttribute("base", "/foo/bar"),
                             new XAttribute("returnNoAttributes", "true"),
                             new XElement("Filter",
                                          new XElement("FilterString", "FIND BELOW #10 WHERE (#10 = \"foo\")")));

            var aql =
                new AqlSearchRequest(
                    "/foo/bar",
                    new ISearchRequestFilter[] { Filter.ReturnNoAttributes() },
                    AqlQueryTypes.Below,
                    new IdNameReference(10),
                    "#10 = \"foo\"",
                    null
                    );

            //Act
            var actual  = aql.ToAdsml();
            var request = new BatchRequest(aql).ToAdsml();

            Console.WriteLine(actual.ToString());

            //Assert
            Assert.That(actual, Is.Not.Null);
            Assert.That(actual.ToString(), Is.EqualTo(expected.ToString()));
            Assert.DoesNotThrow(() => request.ValidateAdsmlDocument("adsml.xsd"));
        }
        public void Can_Generate_Api_Xml_With_DefinitionId()
        {
            //Arrange
            var expected =
                new XElement("SearchRequest",
                             new XAttribute("base", "/Structures/Classification/JULA Produkter"),
                             new XElement("Filter",
                                          new XElement("FilterString", "FIND BELOW #10 WHERE (#10 = \"foo\")")));

            var aql =
                new AqlSearchRequest(
                    "/Structures/Classification/JULA Produkter",
                    AqlQueryTypes.Below,
                    new IdNameReference(10),
                    "#10 = \"foo\"",
                    null
                    );

            //Act
            var actual  = aql.ToAdsml();
            var request = new BatchRequest(aql).ToAdsml();

            Console.WriteLine(actual.ToString());

            //Assert
            Assert.That(actual, Is.Not.Null);
            Assert.That(actual.ToString(), Is.EqualTo(expected.ToString()));
            Assert.DoesNotThrow(() => request.ValidateAdsmlDocument("adsml.xsd"));
        }
        public void Can_Generate_Api_Xml_With_SearchControl_ReferenceControls()
        {
            //Arrange
            var expected =
                new XElement("SearchRequest",
                             new XAttribute("base", "/foo/bar"),
                             new XAttribute("returnNoAttributes", "true"),
                             new XElement("Filter",
                                          new XElement("FilterString", "FIND BELOW #10 WHERE (#10 = \"foo\")")),
                             new XElement("SearchControls",
                                          new XElement("ReferenceControls",
                                                       new XAttribute("channelId", "3"),
                                                       new XAttribute("resolveAttributes", "true"),
                                                       new XAttribute("resolveSpecialCharacters", "true"),
                                                       new XAttribute("valueOnly", "true"))));

            var builder = new SearchControlBuilder();

            builder.ConfigureReferenceHandling(
                ReferenceOptions.UseChannel(3),
                ReferenceOptions.ResolveAttributes(),
                ReferenceOptions.ResolveSpecialCharacters(),
                ReferenceOptions.ReturnValuesOnly()
                );

            var searchControls = builder.Build();

            var aql =
                new AqlSearchRequest(
                    "/foo/bar",
                    new ISearchRequestFilter[] { Filter.ReturnNoAttributes() },
                    AqlQueryTypes.Below,
                    new IdNameReference(10),
                    "#10 = \"foo\"",
                    searchControls
                    );

            //Act
            var actual  = aql.ToAdsml();
            var request = new BatchRequest(aql).ToAdsml();

            Console.WriteLine(actual.ToString());

            //Assert
            Assert.That(actual, Is.Not.Null);
            Assert.That(actual.ToString(), Is.EqualTo(expected.ToString()));
            Assert.DoesNotThrow(() => request.ValidateAdsmlDocument("adsml.xsd"));
        }
        public void Can_Generate_Api_Xml_With_SearchControl_Filters_And_AttributesToReturn()
        {
            //Arrange
            var expected =
                new XElement("SearchRequest",
                             new XAttribute("base", "/foo/bar"),
                             new XAttribute("returnNoAttributes", "true"),
                             new XElement("Filter",
                                          new XElement("FilterString", "FIND BELOW #10 WHERE (#10 = \"foo\")")),
                             new XElement("SearchControls",
                                          new XAttribute("excludeBin", "true"),
                                          new XAttribute("excludeDocument", "true"),
                                          new XElement("AttributesToReturn",
                                                       new XElement("Attribute",
                                                                    new XAttribute("name", "Foo")))));

            var builder = new SearchControlBuilder();

            builder
            .AddRequestFilters(
                Filter.ExcludeBin(),
                Filter.ExcludeDocument()
                )
            .ReturnAttributes(AttributeToReturn.WithName("Foo"));

            var searchControls = builder.Build();

            var aql =
                new AqlSearchRequest(
                    "/foo/bar",
                    new ISearchRequestFilter[] { Filter.ReturnNoAttributes() },
                    AqlQueryTypes.Below,
                    new IdNameReference(10),
                    "#10 = \"foo\"",
                    searchControls
                    );

            //Act
            var actual  = aql.ToAdsml();
            var request = new BatchRequest(aql).ToAdsml();

            Console.WriteLine(actual.ToString());

            //Assert
            Assert.That(actual, Is.Not.Null);
            Assert.That(actual.ToString(), Is.EqualTo(expected.ToString()));
            Assert.DoesNotThrow(() => request.ValidateAdsmlDocument("adsml.xsd"));
        }