protected async Task AssertChildrenPositions(IBoardPostCollection collection, PostStoreEntityId collectionId, int windowCount, string collectionName) { Assert.AreEqual(collection.Posts.Count, await _store.GetCollectionSize(collectionId), $"{collectionName}.Size"); var originalLinks = new List <string>(); var expectedLinks = new List <string>(); foreach (var item in collection.Posts.OrderBy(p => p.Link, BoardLinkComparer.Instance)) { originalLinks.Add(item.Link.GetLinkHash()); } int maxIterations = 1000; do { var ids = await _store.GetChildren(collectionId, expectedLinks.Count, windowCount); var links = await _store.GetEntityLinks(ids.ToArray()); foreach (var l in links) { expectedLinks.Add(l.Link.GetLinkHash()); } maxIterations--; } while (expectedLinks.Count < originalLinks.Count && maxIterations > 0); Assert.AreEqual(originalLinks.Count, expectedLinks.Count, $"{collectionName}->Количество полученных ссылок"); for (var i = 0; i < originalLinks.Count; i++) { Assert.AreEqual(originalLinks[i], expectedLinks[i], $"{collectionName}:{i}->Ссылка"); } }
protected async Task AssertMediaPositions(IBoardPostCollection collection, PostStoreEntityId collectionId, int windowCount, string collectionName) { var originalLinks = new List <string>(); var expectedLinks = new List <string>(); foreach (var item in collection.Posts.OrderBy(p => p.Link, BoardLinkComparer.Instance)) { foreach (var m in item.MediaFiles) { originalLinks.Add(m.MediaLink.GetLinkHash()); } } Assert.AreEqual(originalLinks.Count, await _store.GetMediaCount(collectionId), $"{collectionName}.Size"); int maxIterations = 5000; do { var media = await _store.GetPostMedia(collectionId, expectedLinks.Count, windowCount); foreach (var m in media) { expectedLinks.Add(m.MediaLink.GetLinkHash()); } maxIterations--; } while (expectedLinks.Count < originalLinks.Count && maxIterations > 0); Assert.AreEqual(originalLinks.Count, expectedLinks.Count, $"{collectionName}->Количество полученных медиа"); for (var i = 0; i < originalLinks.Count; i++) { Assert.AreEqual(originalLinks[i], expectedLinks[i], $"{collectionName}:{i}->Медиа"); } }
/// <summary> /// Получить квоты. /// </summary> /// <param name="collection">Коллекция.</param> /// <returns>Квоты.</returns> public static ILookup <ILink, ILink> GetQuotesLookup(this IBoardPostCollection collection) { if (collection?.Posts == null) { return(Enumerable.Empty <KeyValuePair <ILink, ILink> >().ToLookup(l => l.Key, l => l.Value, BoardLinkEqualityComparer.Instance)); } return(collection.Posts .SelectMany(p => (p.Comment?.GetQuotes() ?? Enumerable.Empty <ILink>()).Distinct(BoardLinkEqualityComparer.Instance).Select(q => new KeyValuePair <ILink, ILink>(q, p.Link))) .ToLookup(l => l.Key, l => l.Value, BoardLinkEqualityComparer.Instance)); }