Example #1
0
        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);
                    }
                })
            },
Example #2
0
        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();
        }
Example #3
0
        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");
        }
Example #4
0
        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);
        }