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