public When_merge_a_document() { repository = Substitute.For<IPersonRepository>(); printer = Substitute.For<IDocumentPrinter>(); tool = new MailMerge(repository, printer); Document document = new Document {TokenizedDocument = Resources.TestDocument}; tool.MergeAndPrint(document); }
/// <summary> /// Handles the notification. /// </summary> /// <param name="notification">The notification.</param> /// <returns>The task</returns> public async Task HandleNotification(Notification notification) { try { IDocumentContract document = null; using (var client = this.documentRoutingODataClientFactory.Create()) { var uri = await client.GetDownloadDocumentUri(notification.JobId); using (var stream = new MemoryStream()) { var blob = new CloudBlockBlob(uri); await blob.DownloadToStreamAsync(stream).ConfigureAwait(false); stream.Seek(0, SeekOrigin.Begin); document = this.DeserializeDocument(stream, notification.DocumentContractType); } } var printerPath = this.GetPrinterPath(document, notification.DocumentContractType); this.AddPrintingStatus(printerPath, document, notification); if (!await this.IsPrinterInstalled(printerPath)) { this.documentStatusManager.UpdatePrintingStatus(notification.JobId, DocumentStatus.Failure.ToString()); using (var client = this.documentRoutingODataClientFactory.Create()) { await client.UnregisterPrinters(new List <DocumentRoutingPrinter> { new DocumentRoutingPrinter { Path = printerPath } }); } return; } this.documentStatusManager.UpdatePrintingStatus(notification.JobId, DocumentStatus.Printing.ToString()); IDocumentPrinter documentPrinter = this.GetDocumentPrinter(notification.DocumentContractType); var printResult = documentPrinter.Print(document); this.documentStatusManager.UpdatePrintingStatus(notification.JobId, printResult ? DocumentStatus.Success.ToString() : DocumentStatus.Failure.ToString()); } catch { this.documentStatusManager.UpdatePrintingStatus(notification.JobId, DocumentStatus.Failure.ToString()); // TODO Error Log } }
public When_merge_a_document() { // Arrangement persons = new Fixture().CreateMany<Person>(5).ToArray(); repository = Substitute.For<IPersonRepository>(); repository.Persons(Resources.TestCustomer).Returns(persons); printer = Substitute.For<IDocumentPrinter>(); printer.When(p => p.Print(Arg.Any<MergedDocument>())).Do(call => { receivedPersons.Add(call.Arg<MergedDocument>().Person); receivedDocuments.Add(call.Arg<MergedDocument>().Document); }); tool = new MailMerge(repository, printer); document = new Document {TokenizedDocument = Resources.TestDocument}; // Act tool.MergeAndPrint(Resources.TestCustomer, document); }
public MailMerge(IPersonRepository repository, IDocumentPrinter documentPrinter) { _repository = repository; _documentPrinter = documentPrinter; }