private async Task AssertPlainTextRedactionOccurredFor(RemoteWorkFile result, string expectedLineEndings) { using (var memoryStream = new MemoryStream()) { await result.CopyToAsync(memoryStream); memoryStream.Position = 0; using (var reader = new StreamReader(memoryStream)) { string text = reader.ReadToEnd(); // Quick sanity check to verify redaction actually occurred Assert.IsTrue(text.Contains("Peter Parker"), "Hmm, text content we expected to be in the output document was not present. Did something go wrong?"); Assert.IsFalse(text.Contains("*****@*****.**"), "Content that was expected to be redacted was not actually redacted!"); Assert.IsTrue(text.Contains("<Text Redacted>"), "Expected to find an occurrence of the string \"<Text Redacted>\", but didn't!"); if (expectedLineEndings == "\r\n") { Assert.IsTrue(text.Contains("\r\n")); } else if (expectedLineEndings == "\n") { Assert.IsFalse(text.Contains("\r\n")); } else { throw new ArgumentException("expectedLineEndings must be either \"\\r\\n\" or \"\\n\".", "expectedLineEndings"); } } } }
public async Task GetInstanceWithAffinity_works() { // Arrange AffinitySession session1 = Util.RestClient.CreateAffinitySession(); AffinitySession session2 = Util.RestClient.CreateAffinitySession(); RemoteWorkFile file1 = await session1.UploadAsync("documents/confidential-contacts.pdf"); RemoteWorkFile file2 = await session2.UploadAsync("documents/confidential-contacts.pdf.markup.json"); Assert.AreNotEqual(file1.AffinityToken, file2.AffinityToken); // Act RemoteWorkFile file2Reuploaded = await file2.GetInstanceWithAffinity(session2, file1.AffinityToken); // Assert Assert.AreEqual(file2.FileExtension, file2Reuploaded.FileExtension, "The FileExtension was not set correctly after reupload!"); Assert.AreEqual(file1.AffinityToken, file2Reuploaded.AffinityToken, "The AffinityToken was not correct after reupload!"); using (var originalContent = new MemoryStream()) using (var reuploadedContent = new MemoryStream()) { await file2.CopyToAsync(originalContent); await file2Reuploaded.CopyToAsync(reuploadedContent); CollectionAssert.AreEqual(originalContent.ToArray(), reuploadedContent.ToArray()); } }
public async Task UploadAsync_with_local_file_path_followed_by_CopyToAsync_roundtrip_works() { PrizmDocServerClient prizmDocServer = Util.CreatePrizmDocServerClient(); const string INPUT_FILENAME = "documents/example.docx"; RemoteWorkFile remoteWorkFile = await prizmDocServer.UploadAsync(INPUT_FILENAME); using (var memoryStream = new MemoryStream()) { await remoteWorkFile.CopyToAsync(memoryStream); CollectionAssert.AreEqual(File.ReadAllBytes(INPUT_FILENAME), memoryStream.ToArray()); } }
public async Task Can_create_redactions() { // Arrange PrizmDocServerClient prizmDocServer = Util.CreatePrizmDocServerClient(); var ssn = new RegexRedactionMatchRule(@"\d\d\d-\d\d-\d\d\d\d") { RedactWith = new RedactionCreationOptions() { Reason = "(b)(6)", Data = new Dictionary <string, string> { { "rule", "SSN" }, }, }, }; var email = new RegexRedactionMatchRule(@"\S+@\S+\.\S+") { RedactWith = new RedactionCreationOptions() { Reason = "(b)(6)", Data = new Dictionary <string, string> { { "rule", "email" }, }, }, }; var bruceWayne = new RegexRedactionMatchRule(@"Bruce Wayne") { RedactWith = new RedactionCreationOptions() { Reason = "Not Batman", }, }; var rules = new[] { ssn, email, bruceWayne, }; // Act RemoteWorkFile result = await prizmDocServer.CreateRedactionsAsync("documents/confidential-contacts.pdf", rules); // Assert: Verify the expected redactions were created for the test document JObject markup; using (var memoryStream = new MemoryStream()) { await result.CopyToAsync(memoryStream); string markupJson = Encoding.ASCII.GetString(memoryStream.ToArray()); markup = JObject.Parse(markupJson); } List <JToken> marks = markup["marks"].Children().ToList(); List <JToken> redactions = marks.Where(x => (string)x["type"] == "RectangleRedaction").ToList(); List <JToken> firstPageRedactions = redactions.Where(x => (int)x["pageNumber"] == 1).ToList(); List <JToken> secondPageRedactions = redactions.Where(x => (int)x["pageNumber"] == 2).ToList(); List <JToken> firstPageSsnRedactions = firstPageRedactions.Where(x => x["data"] != null && (string)x["data"]["rule"] == "SSN").ToList(); List <JToken> secondPageSsnRedactions = secondPageRedactions.Where(x => x["data"] != null && (string)x["data"]["rule"] == "SSN").ToList(); List <JToken> firstPageEmailRedactions = firstPageRedactions.Where(x => x["data"] != null && (string)x["data"]["rule"] == "email").ToList(); List <JToken> secondPageEmailRedactions = secondPageRedactions.Where(x => x["data"] != null && (string)x["data"]["rule"] == "email").ToList(); List <JToken> bruceWayneRedactions = redactions.Where(x => (string)x["reason"] == "Not Batman").ToList(); Assert.AreEqual(18, marks.Count); Assert.AreEqual(18, redactions.Count); Assert.AreEqual(13, firstPageRedactions.Count); Assert.AreEqual(5, secondPageRedactions.Count); Assert.AreEqual(6, firstPageSsnRedactions.Count); Assert.AreEqual(3, secondPageSsnRedactions.Count); Assert.AreEqual(6, firstPageEmailRedactions.Count); Assert.AreEqual(2, secondPageEmailRedactions.Count); Assert.AreEqual(1, bruceWayneRedactions.Count); }