public async Task CreateFileData_Always_CreatesFileData()
        {
            // Arrange
            CustomerFile customerFile = new CustomerFile("WEE", (ulong)12345);
            var          customerFileGeneratorResult         = new IbisFileGeneratorResult <CustomerFile>(customerFile, A.Dummy <List <Exception> >());
            IIbisCustomerFileGenerator customerFileGenerator = A.Fake <IIbisCustomerFileGenerator>();

            A.CallTo(() => customerFileGenerator.CreateAsync(A <ulong> ._, A <InvoiceRun> ._))
            .Returns(customerFileGeneratorResult);

            TransactionFile transactionFile         = new TransactionFile("WEE", (ulong)12345);
            var             ibisFileGeneratorResult = new IbisFileGeneratorResult <TransactionFile>(transactionFile, A.Dummy <List <Exception> >());
            IIbisTransactionFileGenerator transactionFileGenerator = A.Fake <IIbisTransactionFileGenerator>();

            A.CallTo(() => transactionFileGenerator.CreateAsync(A <ulong> ._, A <InvoiceRun> ._))
            .Returns(ibisFileGeneratorResult);

            IIbisFileDataErrorTranslator errorTranslator = A.Dummy <IIbisFileDataErrorTranslator>();

            IbisFileDataGenerator generator = new IbisFileDataGenerator(
                customerFileGenerator,
                transactionFileGenerator,
                errorTranslator);

            // Act
            var result = await generator.CreateFileDataAsync(A.Dummy <ulong>(), A.Dummy <InvoiceRun>());

            var ibistFileData = result.IbisFileData;

            // Assert
            Assert.NotNull(ibistFileData);
            Assert.False(string.IsNullOrEmpty(ibistFileData.CustomerFileData));
            Assert.False(string.IsNullOrEmpty(ibistFileData.TransactionFileData));
        }
        public async Task CreateFileData_WithErrorGeneratingIbisFile_TranslatesError_AndReturnNoIbisFileData()
        {
            // Arrange
            ulong fileID = 123;

            var customerFile = new CustomerFile("WEE", fileID);
            var customerFileGeneratorResult = new IbisFileGeneratorResult <CustomerFile>(customerFile, A.Dummy <List <Exception> >());

            var customerFileGenerator = A.Fake <IIbisCustomerFileGenerator>();

            A.CallTo(() => customerFileGenerator.CreateAsync(A <ulong> ._, A <InvoiceRun> ._))
            .Returns(customerFileGeneratorResult);

            var transactionFile = new TransactionFile("WEE", (ulong)12345);
            var error           = new Exception();
            var transactionFileGeneratorResult = new IbisFileGeneratorResult <TransactionFile>(transactionFile, new List <Exception> {
                error
            });

            var transactionFileGenerator = A.Fake <IIbisTransactionFileGenerator>();

            A.CallTo(() => transactionFileGenerator.CreateAsync(A <ulong> ._, A <InvoiceRun> ._))
            .Returns(transactionFileGeneratorResult);

            var errorTranslator = A.Fake <IIbisFileDataErrorTranslator>();

            A.CallTo(() => errorTranslator.MakeFriendlyErrorMessages(A <List <Exception> > ._))
            .Returns(new List <string> {
                "error"
            });

            IbisFileDataGenerator generator = new IbisFileDataGenerator(
                customerFileGenerator,
                transactionFileGenerator,
                errorTranslator);

            // Act
            var result = await generator.CreateFileDataAsync(fileID, A.Dummy <InvoiceRun>());

            // Assert
            Assert.NotEmpty(result.Errors);
            Assert.Null(result.IbisFileData);
        }
        public async Task CreateFileData_WithFileID_CreatesFilesWithCorrectFileNames()
        {
            // Arrange
            ulong fileID = 123;

            CustomerFile customerFile = new CustomerFile("WEE", (ulong)12345);
            var          customerFileGeneratorResult         = new IbisFileGeneratorResult <CustomerFile>(customerFile, A.Dummy <List <Exception> >());
            IIbisCustomerFileGenerator customerFileGenerator = A.Fake <IIbisCustomerFileGenerator>();

            A.CallTo(() => customerFileGenerator.CreateAsync(A <ulong> ._, A <InvoiceRun> ._))
            .Returns(customerFileGeneratorResult);

            TransactionFile transactionFile         = new TransactionFile("WEE", (ulong)12345);
            var             ibisFileGeneratorResult = new IbisFileGeneratorResult <TransactionFile>(transactionFile, A.Dummy <List <Exception> >());
            IIbisTransactionFileGenerator transactionFileGenerator = A.Fake <IIbisTransactionFileGenerator>();

            A.CallTo(() => transactionFileGenerator.CreateAsync(A <ulong> ._, A <InvoiceRun> ._))
            .Returns(ibisFileGeneratorResult);

            IIbisFileDataErrorTranslator errorTranslator = A.Dummy <IIbisFileDataErrorTranslator>();

            IbisFileDataGenerator generator = new IbisFileDataGenerator(
                customerFileGenerator,
                transactionFileGenerator,
                errorTranslator);

            // Act
            var result = await generator.CreateFileDataAsync(fileID, A.Dummy <InvoiceRun>());

            var ibistFileData = result.IbisFileData;

            // Assert
            Assert.NotNull(ibistFileData);
            Assert.Equal("WEEHC00123.dat", ibistFileData.CustomerFileName);
            Assert.Equal("WEEHI00123.dat", ibistFileData.TransactionFileName);
        }