protected override async Task <IEnumerable <IDocument> > ExecuteContextAsync(IExecutionContext context) { // For all documents, load the identity var resolver = new DocumentReferenceResolver <IDocument>(); foreach (var input in context.Inputs) { var identity = await m_Identity.GetValueAsync(input, context); if (identity is null) { context.LogWarning($"Failed to determine document identity for document {input.Id}. Ignoring input document"); } else if (resolver.ContainsIdentity(identity)) { throw new DuplicateDocumentIdentityException($"Multiple documents have the same identity '{identity}'"); } else { resolver.Add(identity, input); } } // Process all links in the input documents return(await context.ExecuteModulesAsync(new ModuleList() { new ProcessHtml("a[href]", (document, ctx, element) => { if (element is IHtmlAnchorElement anchorElement) { TryResolveLink(ctx, document, resolver, anchorElement); } }) },
public void TryResolveDocument_returns_null_if_document_cannot_be_resolved(string reference) { // ARRANGE var sut = new DocumentReferenceResolver <string>(); sut.Add(DocumentIdentity.Parse("[email protected]"), "document1"); sut.Add(DocumentIdentity.Parse("[email protected]"), "document2"); // ACT var result = sut.TryResolveDocument(DocumentReference.Parse(reference), "document1"); // ASSERT result.Should().BeNull(); }
public void TryResolveDocument_can_resolved_fully_qualified_references_in_documents_without_identity(string reference) { // ARRANGE var sut = new DocumentReferenceResolver <string>(); sut.Add(DocumentIdentity.Parse("[email protected]"), "document"); // ACT var result = sut.TryResolveDocument(DocumentReference.Parse(reference), "some-other-document"); // ASSERT result .Should().NotBeNull() .And.Be("document"); }
public void TryResolveDocument_returns_expected_document(string id1, string id2, string reference, string expectedResult) { // ARRANGE var sut = new DocumentReferenceResolver <string>(); sut.Add(DocumentIdentity.Parse(id1), "document1"); sut.Add(DocumentIdentity.Parse(id2), "document2"); // ACT var actualResult = sut.TryResolveDocument(DocumentReference.Parse(reference), "document1"); // ASSERT actualResult .Should().NotBeNull() .And.Be(expectedResult); }