From ea6409929436c0468e288480fa833708e15f868e Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Fri, 4 Nov 2022 20:20:23 +0000 Subject: [PATCH] Fix for file job trying to send files when contract should be skipped --- ...cessing.SchedulerService.Jobs.Tests.csproj | 29 ++++++ .../UnitTest1.cs | 39 ++++++++ .../Usings.cs | 1 + .../GenerateFileUploadsJob.cs | 94 +++++++++---------- ...TransactionProcessing.SchedulerService.sln | 10 +- 5 files changed, 125 insertions(+), 48 deletions(-) create mode 100644 TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs.Tests/TransactionProcessing.SchedulerService.Jobs.Tests.csproj create mode 100644 TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs.Tests/UnitTest1.cs create mode 100644 TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs.Tests/Usings.cs diff --git a/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs.Tests/TransactionProcessing.SchedulerService.Jobs.Tests.csproj b/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs.Tests/TransactionProcessing.SchedulerService.Jobs.Tests.csproj new file mode 100644 index 0000000..1d60a1e --- /dev/null +++ b/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs.Tests/TransactionProcessing.SchedulerService.Jobs.Tests.csproj @@ -0,0 +1,29 @@ + + + + net6.0 + enable + enable + + false + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + diff --git a/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs.Tests/UnitTest1.cs b/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs.Tests/UnitTest1.cs new file mode 100644 index 0000000..bc9d930 --- /dev/null +++ b/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs.Tests/UnitTest1.cs @@ -0,0 +1,39 @@ +using EstateManagement.Client; +using Microsoft.Extensions.DependencyInjection; +using Quartz; +using SecurityService.Client; + +namespace TransactionProcessing.SchedulerService.Jobs.Tests +{ + using Moq; + + public class UnitTest1 + { + [Fact] + public void Test1() { + GenerateFileUploadsJob j = new GenerateFileUploadsJob(); + } + } + + public class TestGenerateFileUploadsBootstrapper : BaseBoostrapper + { + private Mock securityServiceClient; + + private Mock estateClient; + + public TestGenerateFileUploadsBootstrapper() { + this.securityServiceClient = new Mock(); + this.estateClient = new Mock(); + + } + public override void ConfigureServiceAdditional(IJobExecutionContext jobExecutionContext) + { + //this.Services.AddSingleton(); + //this.Services.AddSingleton(); + + this.Services.AddSingleton>(container => serviceName => { return jobExecutionContext.MergedJobDataMap.GetString(serviceName); }); + this.Services.AddSingleton(this.securityServiceClient.Object); + this.Services.AddSingleton(this.estateClient.Object); + } + } +} \ No newline at end of file diff --git a/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs.Tests/Usings.cs b/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs.Tests/Usings.cs new file mode 100644 index 0000000..8c927eb --- /dev/null +++ b/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs.Tests/Usings.cs @@ -0,0 +1 @@ +global using Xunit; \ No newline at end of file diff --git a/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs/GenerateFileUploads/GenerateFileUploadsJob.cs b/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs/GenerateFileUploads/GenerateFileUploadsJob.cs index 1402566..420cc87 100644 --- a/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs/GenerateFileUploads/GenerateFileUploadsJob.cs +++ b/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs/GenerateFileUploads/GenerateFileUploadsJob.cs @@ -12,6 +12,7 @@ using EstateManagement.DataTransferObjects.Requests; using EstateManagement.DataTransferObjects.Responses; using Quartz; + using Quartz.Impl; using SecurityService.Client; using SecurityService.DataTransferObjects.Responses; @@ -130,58 +131,57 @@ private async Task GenerateFileUploads(Guid estateId, // get the contract var contract = contracts.SingleOrDefault(c => c.OperatorId == merchantOperator.OperatorId); - if (merchantOperator.Name == "Voucher") - { - // Generate a voucher file - var voucherFile = this.GenerateVoucherFile(fileDate, contract.Description.Replace("Contract", ""), numberOfSales); - fileData = voucherFile.fileLines; - // Need to make a deposit for this amount - last sale - Decimal depositAmount = voucherFile.totalValue - voucherFile.lastSale; - await this.MakeMerchantDeposit(accessToken, merchant, depositAmount, fileDate.AddSeconds(1), cancellationToken); - } - else - { - // generate a topup file - var topupFile = this.GenerateTopupFile(fileDate, numberOfSales); - fileData = topupFile.fileLines; - // Need to make a deposit for this amount - last sale - Decimal depositAmount = topupFile.totalValue - topupFile.lastSale; - await this.MakeMerchantDeposit(accessToken, merchant, depositAmount, fileDate.AddSeconds(2), cancellationToken); - } + // Only process if we find the contract + if (contract != null) { - // Write this file to disk - Directory.CreateDirectory($"/home/txnproc/txngenerator/{merchantOperator.Name}"); - using(StreamWriter sw = - new - StreamWriter($"/home/txnproc/txngenerator/{merchantOperator.Name}/{contract.Description.Replace("Contract", "")}-{fileDate:yyyy-MM-dd-HH-mm-ss}")) - { - foreach (String fileLine in fileData) - { - sw.WriteLine(fileLine); + if (merchantOperator.Name == "Voucher") { + // Generate a voucher file + var voucherFile = this.GenerateVoucherFile(fileDate, contract.Description.Replace("Contract", ""), numberOfSales); + fileData = voucherFile.fileLines; + // Need to make a deposit for this amount - last sale + Decimal depositAmount = voucherFile.totalValue - voucherFile.lastSale; + await this.MakeMerchantDeposit(accessToken, merchant, depositAmount, fileDate.AddSeconds(1), cancellationToken); + } + else { + // generate a topup file + var topupFile = this.GenerateTopupFile(fileDate, numberOfSales); + fileData = topupFile.fileLines; + // Need to make a deposit for this amount - last sale + Decimal depositAmount = topupFile.totalValue - topupFile.lastSale; + await this.MakeMerchantDeposit(accessToken, merchant, depositAmount, fileDate.AddSeconds(2), cancellationToken); + } + + // Write this file to disk + Directory.CreateDirectory($"/home/txnproc/txngenerator/{merchantOperator.Name}"); + using(StreamWriter sw = + new + StreamWriter($"/home/txnproc/txngenerator/{merchantOperator.Name}/{contract.Description.Replace("Contract", "")}-{fileDate:yyyy-MM-dd-HH-mm-ss}")) { + foreach (String fileLine in fileData) { + sw.WriteLine(fileLine); + } } - } - // Upload the generated files for this merchant/operator - // Get the files - var files = Directory.GetFiles($"/home/txnproc/txngenerator/{merchantOperator.Name}"); + // Upload the generated files for this merchant/operator + // Get the files + var files = Directory.GetFiles($"/home/txnproc/txngenerator/{merchantOperator.Name}"); - var fileDateTime = fileDate.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute).AddSeconds(DateTime.Now.Second); + var fileDateTime = fileDate.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute).AddSeconds(DateTime.Now.Second); - foreach (String file in files) - { - var fileProfileId = this.GetFileProfileIdFromOperator(merchantOperator.Name, cancellationToken); - - await this.UploadFile(accessToken, - file, - merchant.EstateId, - merchant.MerchantId, - fileProfileId, - estateUser.SecurityUserId, - fileDateTime, - cancellationToken); - - // Remove file once uploaded - File.Delete(file); + foreach (String file in files) { + var fileProfileId = this.GetFileProfileIdFromOperator(merchantOperator.Name, cancellationToken); + + await this.UploadFile(accessToken, + file, + merchant.EstateId, + merchant.MerchantId, + fileProfileId, + estateUser.SecurityUserId, + fileDateTime, + cancellationToken); + + // Remove file once uploaded + File.Delete(file); + } } } } diff --git a/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.sln b/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.sln index dacd669..b80a899 100644 --- a/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.sln +++ b/TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.sln @@ -5,7 +5,11 @@ VisualStudioVersion = 17.0.32014.148 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TransactionProcessing.SchedulerService", "TransactionProcessing.SchedulerService\TransactionProcessing.SchedulerService.csproj", "{FCFCFE63-02D6-4CA3-947C-3E51DFE4389C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TransactionProcessing.SchedulerService.Jobs", "TransactionProcessing.SchedulerService.Jobs\TransactionProcessing.SchedulerService.Jobs.csproj", "{0A8E0EA7-3A93-4605-A690-C663F6239099}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TransactionProcessing.SchedulerService.Jobs", "TransactionProcessing.SchedulerService.Jobs\TransactionProcessing.SchedulerService.Jobs.csproj", "{0A8E0EA7-3A93-4605-A690-C663F6239099}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{0131F226-313F-4F7C-9576-7AA726FA9584}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{8EBAA9CC-7C39-497D-A925-866E68CFE20A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -25,6 +29,10 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {FCFCFE63-02D6-4CA3-947C-3E51DFE4389C} = {0131F226-313F-4F7C-9576-7AA726FA9584} + {0A8E0EA7-3A93-4605-A690-C663F6239099} = {0131F226-313F-4F7C-9576-7AA726FA9584} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {FCE31FDA-32E8-49AB-8D30-0D36D461CBC1} EndGlobalSection