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);
        }
Exemplo n.º 4
0
 public MailMerge(IPersonRepository repository, IDocumentPrinter documentPrinter)
 {
     _repository = repository;
     _documentPrinter = documentPrinter;
 }