public async Task SetsDocumentsInMetadata() { // Given List <IList <string> > content = new List <IList <string> >(); CountModule count = new CountModule("A") { AdditionalOutputs = 7, EnsureInputDocument = true }; GroupDocuments groupByMany = new GroupDocuments(Config.FromDocument(d => new[] { d.GetInt("A") % 3, 3 })); OrderDocuments orderBy = new OrderDocuments(Config.FromDocument <int>(Keys.GroupKey)); ForEachDocument gatherData = new ExecuteConfig( Config.FromDocument(async d => { List <string> groupContent = await d.GetChildren() .ToAsyncEnumerable() .SelectAwait(async x => await x.GetContentStringAsync()) .ToListAsync(); content.Add(groupContent.ToList()); return((object)null); })).ForEachDocument(); // When IReadOnlyList <IDocument> results = await ExecuteAsync(count, groupByMany, orderBy, gatherData); // Then Assert.AreEqual(4, content.Count); CollectionAssert.AreEquivalent(new[] { "3", "6" }, content[0]); CollectionAssert.AreEquivalent(new[] { "1", "4", "7" }, content[1]); CollectionAssert.AreEquivalent(new[] { "2", "5", "8" }, content[2]); CollectionAssert.AreEquivalent(new[] { "1", "2", "3", "4", "5", "6", "7", "8" }, content[3]); }
public async Task GroupByMetadataKeyWithMissingMetadata() { // Given List <int> groupKey = new List <int>(); CountModule count = new CountModule("A") { AdditionalOutputs = 7, EnsureInputDocument = true }; ForEachDocument meta = new ExecuteConfig( Config.FromDocument(d => { int groupMetadata = d.GetInt("A") % 3; return(groupMetadata == 0 ? d : d.Clone(new MetadataItems { { "GroupMetadata", new object[] { groupMetadata, 3 } } })); })).ForEachDocument(); GroupDocuments groupByMany = new GroupDocuments("GroupMetadata"); ForEachDocument gatherData = new ExecuteConfig( Config.FromDocument(d => { groupKey.Add(d.GetInt(Keys.GroupKey)); return((object)null); })).ForEachDocument(); // When IReadOnlyList <IDocument> results = await ExecuteAsync(count, meta, groupByMany, gatherData); // Then CollectionAssert.AreEquivalent(new[] { 1, 2, 3 }, groupKey); }
public async Task CaseInsensitiveStringComparer() { // Given List <object> groupKey = new List <object>(); ExecuteConfig meta = new ExecuteConfig(Config.FromContext( c => new IDocument[] { c.CreateDocument(new MetadataItems { { "Tag", new object[] { "A", "b" } } }), c.CreateDocument(new MetadataItems { { "Tag", new object[] { "B" } } }), c.CreateDocument(new MetadataItems { { "Tag", new object[] { "C" } } }), c.CreateDocument(new MetadataItems { { "Tag", new object[] { "c" } } }), c.CreateDocument(new MetadataItems { { "Tag", new object[] { 1 } } }), c.CreateDocument(new MetadataItems { { "Tag", new object[] { "1" } } }) })); GroupDocuments groupByMany = new GroupDocuments("Tag").WithComparer(StringComparer.OrdinalIgnoreCase); ForEachDocument gatherData = new ExecuteConfig( Config.FromDocument(d => { groupKey.Add(d.Get(Keys.GroupKey)); return((object)null); })).ForEachDocument(); // When IReadOnlyList <IDocument> results = await ExecuteAsync(meta, groupByMany, gatherData); // Then CollectionAssert.AreEquivalent(new object[] { "A", "b", "C", 1 }, groupKey); }
public async Task SetsCorrectMetadata() { // Given List <int> groupKey = new List <int>(); CountModule count = new CountModule("A") { AdditionalOutputs = 7, EnsureInputDocument = true }; GroupDocuments groupByMany = new GroupDocuments(Config.FromDocument(d => new[] { d.GetInt("A") % 3, 3 })); ForEachDocument gatherData = new ExecuteConfig( Config.FromDocument(d => { groupKey.Add(d.GetInt(Keys.GroupKey)); return(d); })).ForEachDocument(); // When IReadOnlyList <IDocument> results = await ExecuteAsync(count, groupByMany, gatherData); // Then CollectionAssert.AreEquivalent(new[] { 0, 1, 2, 3 }, groupKey); }