From 831937d44cfdbf6a8cd9ecec1c0e38470b6cbca8 Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Mon, 19 Jun 2023 09:44:29 +0100 Subject: [PATCH] Small change to the time generation code --- .../JobTestDriver/Program.cs | 60 +++++++++++++---- .../DataGenerator/Program.cs | 64 +++++++++++++------ .../TransactionDataGenerator.cs | 55 ++++++++-------- ...actionProcessor.DataGenerator.Tests.csproj | 30 +++++++++ .../UnitTest1.cs | 36 +++++++++++ .../Usings.cs | 1 + .../TransactionProcessor.DataGenerator.sln | 8 ++- 7 files changed, 191 insertions(+), 63 deletions(-) create mode 100644 TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.Tests/TransactionProcessor.DataGenerator.Tests.csproj create mode 100644 TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.Tests/UnitTest1.cs create mode 100644 TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.Tests/Usings.cs diff --git a/TransactionProcessing.SchedulerService/JobTestDriver/Program.cs b/TransactionProcessing.SchedulerService/JobTestDriver/Program.cs index 79435e3..3032e8d 100644 --- a/TransactionProcessing.SchedulerService/JobTestDriver/Program.cs +++ b/TransactionProcessing.SchedulerService/JobTestDriver/Program.cs @@ -1,7 +1,11 @@ namespace JobTestDriver { + using EstateManagement.Client; using MessagingService.Client; + using SecurityService.Client; + using TransactionProcessing.DataGeneration; using TransactionProcessing.SchedulerService.Jobs; + using TransactionProcessor.Client; internal class Program{ static async Task Main(string[] args){ @@ -14,18 +18,50 @@ static async Task Main(string[] args){ //foreach ((Guid, String, DateTime, String) incompleteFile in incompleteFiles){ // Console.WriteLine($"FileId: {incompleteFile.Item1} Location: {incompleteFile.Item2} Rcvd: {incompleteFile.Item3} Merchant: {incompleteFile.Item4}"); //} - HttpClient client = new HttpClient(); - IMessagingServiceClient messagingServiceClient = new MessagingServiceClient(delegate(String s){ return "http://127.0.0.1:5006";}, client); - String accessToken = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjQzOUMxRDk5MDUwQTYyMDhEM0U5M0JFMjlBQUJBNzI5IiwidHlwIjoiYXQrand0In0.eyJpc3MiOiJodHRwczovLzEyNy4wLjAuMTo1MDAxIiwibmJmIjoxNjgzMTA2NDE2LCJpYXQiOjE2ODMxMDY0MTYsImV4cCI6MTY4MzExMDAxNiwiYXVkIjpbImVzdGF0ZU1hbmFnZW1lbnQiLCJlc3RhdGVSZXBvcnRpbmciLCJmaWxlUHJvY2Vzc29yIiwibWVzc2FnaW5nU2VydmljZSIsInRyYW5zYWN0aW9uUHJvY2Vzc29yIiwidHJhbnNhY3Rpb25Qcm9jZXNzb3JBQ0wiLCJ2b3VjaGVyTWFuYWdlbWVudCIsImh0dHBzOi8vMTI3LjAuMC4xOjUwMDEvcmVzb3VyY2VzIl0sInNjb3BlIjpbImVzdGF0ZU1hbmFnZW1lbnQiLCJlc3RhdGVSZXBvcnRpbmciLCJmaWxlUHJvY2Vzc29yIiwibWVzc2FnaW5nU2VydmljZSIsInRyYW5zYWN0aW9uUHJvY2Vzc29yIiwidHJhbnNhY3Rpb25Qcm9jZXNzb3JBQ0wiLCJ2b3VjaGVyTWFuYWdlbWVudCJdLCJjbGllbnRfaWQiOiJzZXJ2aWNlQ2xpZW50IiwianRpIjoiMDZBMUI4NzYyRjFGNDJGNkIwMzM5RTYwRTk2MkVDQkUifQ.G5pFWRJF430ZZxnGO_yIxEC6Zj81LRr3HNq6d8V9EV4Pswp5YO7hZ867Ln4mjnrYag4lGI4cpT5S6646r9KNdZMiLOsdQs2LEJPuUjEdVADIwm8rcdqT8OX-sC6uGA6VL0bMmYWQXw1E8d4kax444I6jeNquLjpoWVD1BDp9L1zzC6e_k9W7Fc9MQOogOqO82TXrBl9nkpBbmJQ0HDiub2yVUTUKLwkCeRfBDlyeU8tyNE7kH6IGdHIL_WYUtiiRYjBJ2PNLzTtrXQk4rqw6GB-25K2qcgP5FO0MI675tAkuPKI0DaySXHnAjYssW8wZYy0tkaJL0OIlmOUe-9jM6g"; - await Jobs.SendSupportEmail(DateTime.Now, - accessToken, - "esdb://admin:changeit@192.168.0.133:2113?tls=false&tlsVerifyCert=false", - "server=192.168.0.133;user id=sa;password=Sc0tland;database=EstateReportingReadModel;Encrypt=True;TrustServerCertificate=True", - new List{ - "435613ac-a468-47a3-ac4f-649d89764c22" - }, - messagingServiceClient, - CancellationToken.None); + //HttpClient client = new HttpClient(); + //IMessagingServiceClient messagingServiceClient = new MessagingServiceClient(delegate(String s){ return "http://127.0.0.1:5006";}, client); + //String accessToken = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjQzOUMxRDk5MDUwQTYyMDhEM0U5M0JFMjlBQUJBNzI5IiwidHlwIjoiYXQrand0In0.eyJpc3MiOiJodHRwczovLzEyNy4wLjAuMTo1MDAxIiwibmJmIjoxNjgzMTA2NDE2LCJpYXQiOjE2ODMxMDY0MTYsImV4cCI6MTY4MzExMDAxNiwiYXVkIjpbImVzdGF0ZU1hbmFnZW1lbnQiLCJlc3RhdGVSZXBvcnRpbmciLCJmaWxlUHJvY2Vzc29yIiwibWVzc2FnaW5nU2VydmljZSIsInRyYW5zYWN0aW9uUHJvY2Vzc29yIiwidHJhbnNhY3Rpb25Qcm9jZXNzb3JBQ0wiLCJ2b3VjaGVyTWFuYWdlbWVudCIsImh0dHBzOi8vMTI3LjAuMC4xOjUwMDEvcmVzb3VyY2VzIl0sInNjb3BlIjpbImVzdGF0ZU1hbmFnZW1lbnQiLCJlc3RhdGVSZXBvcnRpbmciLCJmaWxlUHJvY2Vzc29yIiwibWVzc2FnaW5nU2VydmljZSIsInRyYW5zYWN0aW9uUHJvY2Vzc29yIiwidHJhbnNhY3Rpb25Qcm9jZXNzb3JBQ0wiLCJ2b3VjaGVyTWFuYWdlbWVudCJdLCJjbGllbnRfaWQiOiJzZXJ2aWNlQ2xpZW50IiwianRpIjoiMDZBMUI4NzYyRjFGNDJGNkIwMzM5RTYwRTk2MkVDQkUifQ.G5pFWRJF430ZZxnGO_yIxEC6Zj81LRr3HNq6d8V9EV4Pswp5YO7hZ867Ln4mjnrYag4lGI4cpT5S6646r9KNdZMiLOsdQs2LEJPuUjEdVADIwm8rcdqT8OX-sC6uGA6VL0bMmYWQXw1E8d4kax444I6jeNquLjpoWVD1BDp9L1zzC6e_k9W7Fc9MQOogOqO82TXrBl9nkpBbmJQ0HDiub2yVUTUKLwkCeRfBDlyeU8tyNE7kH6IGdHIL_WYUtiiRYjBJ2PNLzTtrXQk4rqw6GB-25K2qcgP5FO0MI675tAkuPKI0DaySXHnAjYssW8wZYy0tkaJL0OIlmOUe-9jM6g"; + //await Jobs.SendSupportEmail(DateTime.Now, + // accessToken, + // "esdb://admin:changeit@192.168.0.133:2113?tls=false&tlsVerifyCert=false", + // "server=192.168.0.133;user id=sa;password=Sc0tland;database=EstateReportingReadModel;Encrypt=True;TrustServerCertificate=True", + // new List{ + // "435613ac-a468-47a3-ac4f-649d89764c22" + // }, + // messagingServiceClient, + // CancellationToken.None); + + HttpClientHandler handler = new HttpClientHandler + { + ServerCertificateCustomValidationCallback = (message, + cert, + chain, + errors) => { + return true; + } + }; + HttpClient client = new HttpClient(handler); + ISecurityServiceClient securityServiceClient = new SecurityServiceClient(delegate(String s){ return "https://192.168.0.133:5001"; },client); + IEstateClient estateClient = new EstateClient(delegate (String s) { return "http://192.168.0.133:5000"; }, client); + ITransactionProcessorClient transactionProcessorClient = new TransactionProcessorClient(delegate (String s) { return "http://192.168.0.133:5002"; }, client); + String estateManagementApi = "http://192.168.0.133:5000"; + String fileProcessorApi = "http://192.168.0.133:5009"; + String testHostApi = "http://192.168.0.133:9000"; + String clientId = "serviceClient"; + String clientSecret = "d192cbc46d834d0da90e8a9d50ded543"; + + ITransactionDataGenerator t = new TransactionDataGenerator(securityServiceClient, + estateClient, + transactionProcessorClient, + estateManagementApi, + fileProcessorApi, + testHostApi, + clientId, + clientSecret, + RunningMode.Live); + Guid estateId = Guid.Parse("435613ac-a468-47a3-ac4f-649d89764c22"); + Guid merchantId = Guid.Parse("ab1c99fb-1c6c-4694-9a32-b71be5d1da33"); + await Jobs.GenerateTransactions(t, estateId, merchantId, false, CancellationToken.None); } } diff --git a/TransactionProcessor.DataGenerator/DataGenerator/Program.cs b/TransactionProcessor.DataGenerator/DataGenerator/Program.cs index 7912f7e..1e49537 100644 --- a/TransactionProcessor.DataGenerator/DataGenerator/Program.cs +++ b/TransactionProcessor.DataGenerator/DataGenerator/Program.cs @@ -101,42 +101,66 @@ private static async Task GenerateStatements(ITransactionDataGenerator g, Guid e private static async Task GenerateTransactions(ITransactionDataGenerator g, Guid estateId, CancellationToken cancellationToken){ // Set the date range - DateTime startDate = new DateTime(2023, 6, 8); //27/7 - DateTime endDate = new DateTime(2023, 6, 8); // This is the date of the last generated transaction + DateTime startDate = new DateTime(2023, 6, 16); //27/7 + DateTime endDate = new DateTime(2023, 6, 16); // This is the date of the last generated transaction List dateRange = g.GenerateDateRange(startDate, endDate); List merchants = await g.GetMerchants(estateId, cancellationToken); + Boolean sendLogons = false; + Boolean sendSales = true; + Boolean sendFiles = false; + Boolean sendSettlement = false; + foreach (DateTime dateTime in dateRange){ - foreach (MerchantResponse merchant in merchants) - { - // Send a logon transaction - await g.PerformMerchantLogon(dateTime, merchant, cancellationToken); + var d = DateTime.Now; + if (sendLogons){ + foreach (MerchantResponse merchant in merchants){ - // Get the merchants contracts - List contracts = await g.GetMerchantContracts(merchant, cancellationToken); + // Send a logon transaction + await g.PerformMerchantLogon(dateTime, merchant, cancellationToken); + } + } - foreach (ContractResponse contract in contracts) - { - // Generate and send some sales - await g.SendSales(dateTime, merchant, contract, 0, cancellationToken); + if (sendSales){ + foreach (MerchantResponse merchant in merchants){ + // Get the merchants contracts + List contracts = await g.GetMerchantContracts(merchant, cancellationToken); - await Task.Delay(TimeSpan.FromSeconds(10), cancellationToken); + foreach (ContractResponse contract in contracts){ + // Generate and send some sales + await g.SendSales(d, merchant, contract, 0, cancellationToken); - // Generate a file and upload - await g.SendUploadFile(dateTime, contract, merchant, cancellationToken); + //await Task.Delay(TimeSpan.FromSeconds(10), cancellationToken); + } - await Task.Delay(TimeSpan.FromSeconds(10)); + //await Task.Delay(TimeSpan.FromSeconds(30), cancellationToken); } + } - await Task.Delay(TimeSpan.FromSeconds(30), cancellationToken); + if (sendFiles){ + foreach (MerchantResponse merchant in merchants){ + // Get the merchants contracts + List contracts = await g.GetMerchantContracts(merchant, cancellationToken); + + foreach (ContractResponse contract in contracts){ + // Generate a file and upload + await g.SendUploadFile(dateTime, contract, merchant, cancellationToken); + + await Task.Delay(TimeSpan.FromSeconds(10), cancellationToken); + } + + await Task.Delay(TimeSpan.FromSeconds(30), cancellationToken); + } } // Settlement - await g.PerformSettlement(dateTime, estateId, cancellationToken); - - await Task.Delay(TimeSpan.FromSeconds(30), cancellationToken); + if (sendSettlement){ + await g.PerformSettlement(dateTime, estateId, cancellationToken); + + await Task.Delay(TimeSpan.FromSeconds(30), cancellationToken); + } } } } diff --git a/TransactionProcessor.DataGenerator/TransactionProcessing.DataGeneration/TransactionDataGenerator.cs b/TransactionProcessor.DataGenerator/TransactionProcessing.DataGeneration/TransactionDataGenerator.cs index 04a6bb6..f37affe 100644 --- a/TransactionProcessor.DataGenerator/TransactionProcessing.DataGeneration/TransactionDataGenerator.cs +++ b/TransactionProcessor.DataGenerator/TransactionProcessing.DataGeneration/TransactionDataGenerator.cs @@ -27,8 +27,6 @@ public class TransactionDataGenerator : ITransactionDataGenerator{ private readonly String FileProcessorApi; - private readonly Random r = new Random(); - private readonly RunningMode RunningMode; private readonly ISecurityServiceClient SecurityServiceClient; @@ -43,6 +41,7 @@ public class TransactionDataGenerator : ITransactionDataGenerator{ private readonly String EstateManagementApi; + private Random r = new Random(); #endregion #region Constructors @@ -247,7 +246,6 @@ public async Task PerformSettlement(DateTime dateTime, Guid estateId, C public async Task SendSales(DateTime dateTime, MerchantResponse merchant, ContractResponse contract, Int32 numberOfSales, CancellationToken cancellationToken){ List salesToSend = new List(); - Decimal depositAmount = 0; (Int32 accountNumber, String accountName, Decimal balance) billDetails = default; foreach (ContractProduct contractProduct in contract.Products){ @@ -256,14 +254,14 @@ public async Task SendSales(DateTime dateTime, MerchantResponse merchan List<(SaleTransactionRequest request, Decimal amount)> saleRequests = null; // Get a number of sales to be sent if (numberOfSales == 0){ - numberOfSales = this.r.Next(5, 15); + numberOfSales = r.Next(5, 15); } for (Int32 i = 1; i <= numberOfSales; i++){ ProductType productType = this.GetProductType(contract.OperatorName); if (productType == ProductType.BillPayment){ // Create a bill for this sale - Decimal amount = this.GetAmount(contractProduct); + Decimal amount = GetAmount(r, contractProduct); billDetails = await this.CreateBillPaymentBill(contract.OperatorName, contractProduct, cancellationToken); } @@ -318,7 +316,7 @@ public async Task SendSales(DateTime dateTime, MerchantResponse merchan } public async Task SendUploadFile(DateTime dateTime, ContractResponse contract, MerchantResponse merchant, CancellationToken cancellationToken){ - Int32 numberOfSales = this.r.Next(5, 15); + Int32 numberOfSales = r.Next(5, 15); (Decimal, UploadFile) uploadFile = await this.BuildUploadFile(dateTime, merchant, contract, numberOfSales, cancellationToken); if (uploadFile.Item2 == null){ @@ -419,7 +417,7 @@ public async Task GenerateMerchantStatement(Guid estateId, Guid merchan { "PataPawaPostPaidMessageType", "VerifyAccount" } }; - var transactionDateTime = this.GetTransactionDateTime(dateTime); + DateTime transactionDateTime = GetTransactionDateTime(r,dateTime); SaleTransactionRequest getAccountRequest = new SaleTransactionRequest{ AdditionalTransactionMetadata = getAccountRequestMetaData, @@ -464,7 +462,7 @@ public async Task GenerateMerchantStatement(Guid estateId, Guid merchan } private List<(SaleTransactionRequest request, Decimal amount)> BuildMobileTopupSaleRequests(DateTime dateTime, MerchantResponse merchant, ContractResponse contract, ContractProduct contractProduct){ - Decimal amount = this.GetAmount(contractProduct); + Decimal amount = GetAmount(r, contractProduct); Dictionary requestMetaData = new Dictionary{ { "Amount", amount.ToString() }, @@ -483,7 +481,7 @@ public async Task GenerateMerchantStatement(Guid estateId, Guid merchan MerchantId = merchant.MerchantId, EstateId = merchant.EstateId, TransactionType = "Sale", - TransactionDateTime = this.GetTransactionDateTime(dateTime), + TransactionDateTime = GetTransactionDateTime(r, dateTime), OperatorIdentifier = contract.OperatorName, ProductId = contractProduct.ProductId }; @@ -504,7 +502,7 @@ public async Task GenerateMerchantStatement(Guid estateId, Guid merchan mobileTopupUploadFile.AddHeader(dateTime); for (Int32 i = 1; i <= numberOfLines; i++){ - Decimal amount = this.GetAmount(); + Decimal amount = GetAmount(r); String mobileNumber = String.Format($"077777777{i.ToString().PadLeft(2, '0')}"); mobileTopupUploadFile.AddLine(amount, mobileNumber); @@ -530,7 +528,7 @@ public async Task GenerateMerchantStatement(Guid estateId, Guid merchan voucherTopupUploadFile.AddHeader(dateTime); for (Int32 i = 1; i <= numberOfLines; i++){ - Decimal amount = this.GetAmount(); + Decimal amount = GetAmount(r); String mobileNumber = String.Format($"077777777{i.ToString().PadLeft(2, '0')}"); String emailAddress = String.Format($"testrecipient{i.ToString().PadLeft(2, '0')}@testing.com"); String recipient = mobileNumber; @@ -564,7 +562,7 @@ public async Task GenerateMerchantStatement(Guid estateId, Guid merchan } private List<(SaleTransactionRequest request, Decimal amount)> BuildVoucherSaleRequests(DateTime dateTime, MerchantResponse merchant, ContractResponse contract, ContractProduct contractProduct){ - Decimal amount = this.GetAmount(contractProduct); + Decimal amount = GetAmount(r, contractProduct); Dictionary requestMetaData = new Dictionary{ { "Amount", amount.ToString() }, @@ -583,7 +581,7 @@ public async Task GenerateMerchantStatement(Guid estateId, Guid merchan MerchantId = merchant.MerchantId, EstateId = merchant.EstateId, TransactionType = "Sale", - TransactionDateTime = this.GetTransactionDateTime(dateTime), + TransactionDateTime = GetTransactionDateTime(r, dateTime), OperatorIdentifier = contract.OperatorName, ProductId = contractProduct.ProductId }; @@ -594,8 +592,8 @@ public async Task GenerateMerchantStatement(Guid estateId, Guid merchan private async Task<(Int32 accountNumber, String accountName, Decimal balance)> CreateBillPaymentBill(String contractOperatorName, ContractProduct contractProduct, CancellationToken cancellationToken){ if (contractOperatorName == "PataPawa PostPay"){ - Int32 accountNumber = this.r.Next(1, 100000); - Decimal amount = this.GetAmount(contractProduct); + Int32 accountNumber = r.Next(1, 100000); + Decimal amount = GetAmount(r, contractProduct); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, $"{this.TestHostApi}/api/developer/patapawapostpay/createbill"); var body = new{ @@ -632,14 +630,11 @@ private MakeMerchantDepositRequest CreateMerchantDepositRequest(Decimal depositA return request; } - private Decimal GetAmount(ContractProduct product = null){ - if (product == null){ - return this.r.Next(9, 250); - } - - return product.Value.HasValue switch{ - true => product.Value.Value, - _ => this.r.Next(9, 250) + public static Decimal GetAmount(Random r, ContractProduct product = null){ + return product switch{ + null => r.Next(9, 250), + _ when product.Value.HasValue == false => r.Next(9, 250), + _ => product.Value.Value }; } @@ -694,18 +689,18 @@ private ProductType GetProductType(String operatorName){ return productType; } - private DateTime GetTransactionDateTime(DateTime dateTime){ + public static DateTime GetTransactionDateTime(Random r, DateTime dateTime){ - if (dateTime.Hour != 0 && dateTime.Minute != 0 && dateTime.Second != 0){ + if (dateTime.Hour != 0 && dateTime.Minute != 0){ // Already have a time only change the seconds - Int32 seconds = this.r.Next(0, 59); - return dateTime.AddSeconds(seconds); + Int32 seconds = r.Next(0, 59); + return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, seconds); } else{ // Generate the time - Int32 hours = this.r.Next(0, 23); - Int32 minutes = this.r.Next(0, 59); - Int32 seconds = this.r.Next(0, 59); + Int32 hours = r.Next(0, 23); + Int32 minutes = r.Next(0, 59); + Int32 seconds = r.Next(0, 59); return dateTime.AddHours(hours).AddMinutes(minutes).AddSeconds(seconds); } diff --git a/TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.Tests/TransactionProcessor.DataGenerator.Tests.csproj b/TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.Tests/TransactionProcessor.DataGenerator.Tests.csproj new file mode 100644 index 0000000..1fa2b58 --- /dev/null +++ b/TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.Tests/TransactionProcessor.DataGenerator.Tests.csproj @@ -0,0 +1,30 @@ + + + + net7.0 + enable + enable + + false + true + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + diff --git a/TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.Tests/UnitTest1.cs b/TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.Tests/UnitTest1.cs new file mode 100644 index 0000000..a5cc3d0 --- /dev/null +++ b/TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.Tests/UnitTest1.cs @@ -0,0 +1,36 @@ +using TransactionProcessing.DataGeneration; + +namespace TransactionProcessor.DataGenerator.Tests +{ + using Shouldly; + + public class UnitTest1 + { + [Fact] + public void TransactionDataGenerator_GetTransactionDateTime_DateOnly_TimeIsGenerated(){ + DateTime dateTime = new DateTime(2023, 05, 16); + Random r = new Random(); + DateTime result = TransactionDataGenerator.GetTransactionDateTime(r, dateTime); + result.Year.ShouldBe(dateTime.Year); + result.Month.ShouldBe(dateTime.Month); + result.Day.ShouldBe(dateTime.Day); + result.Hour.ShouldNotBe(dateTime.Hour); + result.Minute.ShouldNotBe(dateTime.Minute); + result.Second.ShouldNotBe(dateTime.Second); + } + + [Fact] + public void TransactionDataGenerator_GetTransactionDateTime_DateWithHoursAndMinutes_OnlySecondsAreGenerated() + { + DateTime dateTime = new DateTime(2023, 05, 16, 9,30,0); + Random r = new Random(); + DateTime result = TransactionDataGenerator.GetTransactionDateTime(r, dateTime); + result.Year.ShouldBe(dateTime.Year); + result.Month.ShouldBe(dateTime.Month); + result.Day.ShouldBe(dateTime.Day); + result.Hour.ShouldBe(dateTime.Hour); + result.Minute.ShouldBe(dateTime.Minute); + result.Second.ShouldNotBe(dateTime.Second); + } + } +} \ No newline at end of file diff --git a/TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.Tests/Usings.cs b/TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.Tests/Usings.cs new file mode 100644 index 0000000..8c927eb --- /dev/null +++ b/TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.Tests/Usings.cs @@ -0,0 +1 @@ +global using Xunit; \ No newline at end of file diff --git a/TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.sln b/TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.sln index 006332d..e80c4ae 100644 --- a/TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.sln +++ b/TransactionProcessor.DataGenerator/TransactionProcessor.DataGenerator.sln @@ -5,7 +5,9 @@ VisualStudioVersion = 17.6.33606.364 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TransactionDataGenerator", "DataGenerator\TransactionDataGenerator.csproj", "{BC85594F-6F0B-425D-868F-560B9A3AC104}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TransactionProcessing.DataGeneration", "TransactionProcessing.DataGeneration\TransactionProcessing.DataGeneration.csproj", "{7476752B-9954-4039-879A-4154F9426D64}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TransactionProcessing.DataGeneration", "TransactionProcessing.DataGeneration\TransactionProcessing.DataGeneration.csproj", "{7476752B-9954-4039-879A-4154F9426D64}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TransactionProcessor.DataGenerator.Tests", "TransactionProcessor.DataGenerator.Tests\TransactionProcessor.DataGenerator.Tests.csproj", "{97659B5C-F851-4F8B-99E8-D6C5D54D042A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -21,6 +23,10 @@ Global {7476752B-9954-4039-879A-4154F9426D64}.Debug|Any CPU.Build.0 = Debug|Any CPU {7476752B-9954-4039-879A-4154F9426D64}.Release|Any CPU.ActiveCfg = Release|Any CPU {7476752B-9954-4039-879A-4154F9426D64}.Release|Any CPU.Build.0 = Release|Any CPU + {97659B5C-F851-4F8B-99E8-D6C5D54D042A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97659B5C-F851-4F8B-99E8-D6C5D54D042A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97659B5C-F851-4F8B-99E8-D6C5D54D042A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {97659B5C-F851-4F8B-99E8-D6C5D54D042A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE