public async Task ContentAndMetadataReturnsCorrectDocuments()
            {
                // Given
                List <string>   content   = new List <string>();
                List <object>   values    = new List <object>();
                CreateDocuments documents = new CreateDocuments(
                    Tuple.Create("A", new Dictionary <string, object> {
                    { "Foo", "a" }
                }.AsEnumerable()),
                    Tuple.Create("B", new Dictionary <string, object> {
                    { "Foo", "b" }
                }.AsEnumerable()),
                    Tuple.Create("C", new Dictionary <string, object> {
                    { "Foo", "c" }
                }.AsEnumerable()));
                ForEachDocument gatherData = new ExecuteConfig(
                    Config.FromDocument(async d =>
                {
                    content.Add(await d.GetStringAsync());
                    values.Add(d["Foo"]);
                    return((object)null);
                })).ForEachDocument();

                // When
                IReadOnlyList <IDocument> results = await ExecuteAsync(documents, gatherData);

                // Then
                Assert.AreEqual(3, content.Count);
                Assert.AreEqual(3, values.Count);
                CollectionAssert.AreEqual(new[] { "A", "B", "C" }, content);
                CollectionAssert.AreEqual(new[] { "a", "b", "c" }, values);
            }
            public async Task MetadataReturnsCorrectDocuments()
            {
                // Given
                List <object>   values    = new List <object>();
                CreateDocuments documents = new CreateDocuments(
                    new Dictionary <string, object> {
                    { "Foo", "a" }
                },
                    new Dictionary <string, object> {
                    { "Foo", "b" }
                },
                    new Dictionary <string, object> {
                    { "Foo", "c" }
                });
                ForEachDocument gatherData = new ExecuteConfig(
                    Config.FromDocument(d =>
                {
                    values.Add(d["Foo"]);
                    return((object)null);
                })).ForEachDocument();

                // When
                IReadOnlyList <IDocument> results = await ExecuteAsync(documents, gatherData);

                // Then
                Assert.AreEqual(3, values.Count);
                CollectionAssert.AreEqual(new[] { "a", "b", "c" }, values);
            }
            public async Task ContentReturnsCorrectDocuments()
            {
                // Given
                CreateDocuments create = new CreateDocuments("A", "B", "C", "D");

                // When
                IReadOnlyList <TestDocument> results = await ExecuteAsync(create);

                // Then
                results.Select(x => x.Content).ShouldBe(new[] { "A", "B", "C", "D" });
            }
            public async Task CountReturnsCorrectDocuments()
            {
                // Given
                CreateDocuments documents = new CreateDocuments(5);

                // When
                IReadOnlyList <IDocument> results = await ExecuteAsync(documents);

                // Then
                Assert.AreEqual(5, results.Count);
            }
            public async Task CountReturnsCorrectDocuments()
            {
                // Given
                CreateDocuments create = new CreateDocuments(5);

                // When
                IReadOnlyList <IDocument> results = await ExecuteAsync(create);

                // Then
                results.Count.ShouldBe(5);
            }
            public async Task ContextConfigContentReturnsCorrectDocument()
            {
                // Given
                TestExecutionContext context = new TestExecutionContext();

                context.Settings.Add("Foo", "Bar");
                CreateDocuments create =
                    new CreateDocuments(Config.FromContext(x => $"{x.Settings.GetString("Foo")}1"));

                // When
                IReadOnlyList <TestDocument> results = await ExecuteAsync(context, create);

                // Then
                results.Select(x => x.Content).ShouldBe(new[] { "Bar1" });
            }
            public async Task ContentReturnsCorrectDocuments()
            {
                // Given
                List <string>   content    = new List <string>();
                CreateDocuments documents  = new CreateDocuments("A", "B", "C", "D");
                ForEachDocument gatherData = new ExecuteConfig(
                    Config.FromDocument(async d =>
                {
                    content.Add(await d.GetStringAsync());
                    return((object)null);
                })).ForEachDocument();

                // When
                IReadOnlyList <IDocument> results = await ExecuteAsync(documents, gatherData);

                // Then
                Assert.AreEqual(4, content.Count);
                CollectionAssert.AreEqual(new[] { "A", "B", "C", "D" }, content);
            }
            public async Task ContextConfigContentReturnsCorrectDocumentWhenInputs()
            {
                // Given
                TestExecutionContext context = new TestExecutionContext();

                context.Settings.Add("Foo", "Bar");
                CreateDocuments create =
                    new CreateDocuments(Config.FromContext(x => $"{x.Settings.GetString("Foo")}1"));
                TestDocument input = new TestDocument("Baz");

                input.TestMetadata.Add("ABC", 123);

                // When
                IReadOnlyList <TestDocument> results = await ExecuteAsync(input, context, create);

                // Then
                results.Select(x => x.Content).ShouldBe(new[] { "Bar1" });
                results.Select(x => x.ContainsKey("ABC")).ShouldBe(new bool[] { false });
            }
            public async Task MetadataReturnsCorrectDocuments()
            {
                // Given
                CreateDocuments create = new CreateDocuments(
                    new Dictionary <string, object> {
                    { "Foo", "a" }
                },
                    new Dictionary <string, object> {
                    { "Foo", "b" }
                },
                    new Dictionary <string, object> {
                    { "Foo", "c" }
                });

                // When
                IReadOnlyList <TestDocument> results = await ExecuteAsync(create);

                // Then
                results.Select(x => x["Foo"]).ShouldBe(new[] { "a", "b", "c" });
            }
            public async Task ContentAndMetadataReturnsCorrectDocuments()
            {
                // Given
                List <string>   content = new List <string>();
                List <object>   values  = new List <object>();
                CreateDocuments create  = new CreateDocuments(
                    Tuple.Create("A", new Dictionary <string, object> {
                    { "Foo", "a" }
                }.AsEnumerable()),
                    Tuple.Create("B", new Dictionary <string, object> {
                    { "Foo", "b" }
                }.AsEnumerable()),
                    Tuple.Create("C", new Dictionary <string, object> {
                    { "Foo", "c" }
                }.AsEnumerable()));

                // When
                IReadOnlyList <TestDocument> results = await ExecuteAsync(create);

                // Then
                results.Select(x => x.Content).ShouldBe(new[] { "A", "B", "C" });
                results.Select(x => x["Foo"]).ShouldBe(new[] { "a", "b", "c" });
            }