diff --git a/.github/workflows/buildwindowsimage.yml b/.github/workflows/buildwindowsimage.yml index 22a1460..b175ada 100644 --- a/.github/workflows/buildwindowsimage.yml +++ b/.github/workflows/buildwindowsimage.yml @@ -14,6 +14,11 @@ jobs: steps: - uses: actions/checkout@v2.3.4 + + - name: Install NET 9 + uses: actions/setup-dotnet@v4.0.1 + with: + dotnet-version: '9.0.x' - name: Get the version id: get_version diff --git a/.github/workflows/createrelease.yml b/.github/workflows/createrelease.yml index ce9e6e0..470023a 100644 --- a/.github/workflows/createrelease.yml +++ b/.github/workflows/createrelease.yml @@ -15,6 +15,11 @@ jobs: steps: - uses: actions/checkout@v2.3.4 + - name: Install NET 9 + uses: actions/setup-dotnet@v4.0.1 + with: + dotnet-version: '9.0.x' + - name: Get the version id: get_version run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//} diff --git a/.github/workflows/nightlybuild.yml b/.github/workflows/nightlybuild.yml index 4d09b01..fc6aef7 100644 --- a/.github/workflows/nightlybuild.yml +++ b/.github/workflows/nightlybuild.yml @@ -15,6 +15,11 @@ jobs: steps: - uses: actions/checkout@v2.3.4 + + - name: Install NET 9 + uses: actions/setup-dotnet@v4.0.1 + with: + dotnet-version: '9.0.x' - name: Set Up Variables run: echo "action_url=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" >> $GITHUB_ENV diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml index 383fb0b..2bb6f02 100644 --- a/.github/workflows/pullrequest.yml +++ b/.github/workflows/pullrequest.yml @@ -16,6 +16,11 @@ jobs: steps: - uses: actions/checkout@v2.3.4 + - name: Install NET 9 + uses: actions/setup-dotnet@v4.0.1 + with: + dotnet-version: '9.0.x' + - name: Echo vars run: | echo "CI is > ${CI}" diff --git a/.github/workflows/pushtomain.yml b/.github/workflows/pushtomain.yml index b05d5fa..1887d52 100644 --- a/.github/workflows/pushtomain.yml +++ b/.github/workflows/pushtomain.yml @@ -18,6 +18,11 @@ jobs: - uses: actions/checkout@v2.3.4 with: fetch-depth: 0 + + - name: Install NET 9 + uses: actions/setup-dotnet@v4.0.1 + with: + dotnet-version: '9.0.x' - name: Restore Nuget Packages run: dotnet restore FileProcessor.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} diff --git a/FIleProcessor.Models/FIleProcessor.Models.csproj b/FIleProcessor.Models/FIleProcessor.Models.csproj index 3a7bd9d..eb06d46 100644 --- a/FIleProcessor.Models/FIleProcessor.Models.csproj +++ b/FIleProcessor.Models/FIleProcessor.Models.csproj @@ -1,7 +1,7 @@ - net8.0 + net9.0 None diff --git a/FileProcessor.BusinessLogic.Tests/FileProcessingManagerTests.cs b/FileProcessor.BusinessLogic.Tests/FileProcessingManagerTests.cs index 22eff27..e5a6747 100644 --- a/FileProcessor.BusinessLogic.Tests/FileProcessingManagerTests.cs +++ b/FileProcessor.BusinessLogic.Tests/FileProcessingManagerTests.cs @@ -81,8 +81,9 @@ public async Task FileProcessingManager_GetFileImportLogs_NoMerchantId_ImportLog new Mock>(); FileProcessorManager manager = new FileProcessorManager(fileProfiles, contextFactory.Object, modelFactory, fileAggregateRepository.Object); - List importLogs = await manager.GetFileImportLogs(TestData.EstateId, TestData.ImportLogStartDate, TestData.ImportLogEndDate, null, CancellationToken.None); - + Result> getFileImportLogsResult = await manager.GetFileImportLogs(TestData.EstateId, TestData.ImportLogStartDate, TestData.ImportLogEndDate, null, CancellationToken.None); + getFileImportLogsResult.IsSuccess.ShouldBeTrue(); + List importLogs = getFileImportLogsResult.Data; this.VerifyImportLogs(TestData.FileImportLogs,importLogs); } @@ -164,7 +165,10 @@ public async Task FileProcessingManager_GetFileImportLog_WithMerchantId_ImportLo [Fact] public async Task FileProcessingManager_GetFile_FileReturned() { - List fileProfiles = new List(); + List fileProfiles = new List + { + TestData.FileProfile + }; var context = await this.GetContext(Guid.NewGuid().ToString("N")); var contextFactory = this.CreateMockContextFactory(); contextFactory.Setup(c => c.GetContext(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(context); @@ -181,7 +185,6 @@ public async Task FileProcessingManager_GetFile_FileReturned() this.VerifyFile(TestData.GetFileAggregateWithLines(), fileDetails); fileDetails.Data.MerchantName.ShouldBeNull(); fileDetails.Data.UserEmailAddress.ShouldBeNull(); - fileDetails.Data.FileProfileName.ShouldBeNull(); } [Fact] @@ -206,7 +209,10 @@ public async Task FileProcessingManager_GetFile_FileAggregateFailed_ErrorReturne [Fact] public async Task FileProcessingManager_GetFile_FileReturnedWithMerchantName() { - List fileProfiles = new List(); + List fileProfiles = new List + { + TestData.FileProfile + }; var context = await this.GetContext(Guid.NewGuid().ToString("N")); context.Merchants.Add(new Merchant { @@ -235,7 +241,10 @@ public async Task FileProcessingManager_GetFile_FileReturnedWithMerchantName() [Fact] public async Task FileProcessingManager_GetFile_FileReturnedWithUserEmailAddress() { - List fileProfiles = new List(); + List fileProfiles = new List + { + TestData.FileProfile + }; var context = await this.GetContext(Guid.NewGuid().ToString("N")); context.EstateSecurityUsers.Add(new EstateSecurityUser() { @@ -380,19 +389,19 @@ private void VerifyImportLog(TransactionProcessor.Database.Entities.FileImportLo } } - private Mock> CreateMockContextFactory() + private Mock> CreateMockContextFactory() { - return new Mock>(); + return new Mock>(); } - private async Task GetContext(String databaseName) + private async Task GetContext(String databaseName) { - EstateManagementGenericContext context = null; + EstateManagementContext context = null; - DbContextOptionsBuilder builder = new DbContextOptionsBuilder() + DbContextOptionsBuilder builder = new DbContextOptionsBuilder() .UseInMemoryDatabase(databaseName) .ConfigureWarnings(w => w.Ignore(InMemoryEventId.TransactionIgnoredWarning)); - context = new EstateManagementSqlServerContext(builder.Options); + context = new EstateManagementContext(builder.Options); return context; } diff --git a/FileProcessor.BusinessLogic.Tests/FileProcessor.BusinessLogic.Tests.csproj b/FileProcessor.BusinessLogic.Tests/FileProcessor.BusinessLogic.Tests.csproj index 309dfa5..8e1e610 100644 --- a/FileProcessor.BusinessLogic.Tests/FileProcessor.BusinessLogic.Tests.csproj +++ b/FileProcessor.BusinessLogic.Tests/FileProcessor.BusinessLogic.Tests.csproj @@ -1,20 +1,20 @@  - net8.0 + net9.0 None false - - - + + + - + - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/FileProcessor.BusinessLogic/Common/ConfigurationReaderConnectionStringRepository.cs b/FileProcessor.BusinessLogic/Common/ConfigurationReaderConnectionStringRepository.cs index 10ce2df..7215725 100644 --- a/FileProcessor.BusinessLogic/Common/ConfigurationReaderConnectionStringRepository.cs +++ b/FileProcessor.BusinessLogic/Common/ConfigurationReaderConnectionStringRepository.cs @@ -3,7 +3,6 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -using MySqlConnector; namespace FileProcessor.BusinessLogic.Common { @@ -41,29 +40,17 @@ public async Task GetConnectionString(String externalIdentifier, String connectionString = string.Empty; String databaseName = string.Empty; - String databaseEngine = ConfigurationReader.GetValue("AppSettings", "DatabaseEngine"); - databaseName = $"{connectionStringIdentifier}{externalIdentifier}"; connectionString = ConfigurationReader.GetConnectionString(connectionStringIdentifier); DbConnectionStringBuilder builder = null; - if (databaseEngine == "MySql") - { - builder = new MySqlConnectionStringBuilder(connectionString) - { - Database = databaseName - }; - } - else + // Default to SQL Server + builder = new SqlConnectionStringBuilder(connectionString) { - // Default to SQL Server - builder = new SqlConnectionStringBuilder(connectionString) - { - InitialCatalog = databaseName - }; - } - + InitialCatalog = databaseName + }; + return builder.ToString(); } diff --git a/FileProcessor.BusinessLogic/FileProcessor.BusinessLogic.csproj b/FileProcessor.BusinessLogic/FileProcessor.BusinessLogic.csproj index 6f1dec0..66debf8 100644 --- a/FileProcessor.BusinessLogic/FileProcessor.BusinessLogic.csproj +++ b/FileProcessor.BusinessLogic/FileProcessor.BusinessLogic.csproj @@ -1,22 +1,22 @@  - net8.0 + net9.0 - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/FileProcessor.BusinessLogic/Managers/FileProcessorManager.cs b/FileProcessor.BusinessLogic/Managers/FileProcessorManager.cs index 08bf8a9..02c8189 100644 --- a/FileProcessor.BusinessLogic/Managers/FileProcessorManager.cs +++ b/FileProcessor.BusinessLogic/Managers/FileProcessorManager.cs @@ -34,7 +34,7 @@ public class FileProcessorManager : IFileProcessorManager /// private readonly List FileProfiles; - private readonly Shared.EntityFramework.IDbContextFactory DbContextFactory; + private readonly Shared.EntityFramework.IDbContextFactory DbContextFactory; private readonly IModelFactory ModelFactory; @@ -53,7 +53,7 @@ public class FileProcessorManager : IFileProcessorManager /// The database context factory. /// The model factory. public FileProcessorManager(List fileProfiles, - Shared.EntityFramework.IDbContextFactory dbContextFactory, + Shared.EntityFramework.IDbContextFactory dbContextFactory, IModelFactory modelFactory, IAggregateRepository fileAggregateRepository) { @@ -89,7 +89,7 @@ public async Task>> GetFileImportLogs(Guid estateId, Guid? merchantId, CancellationToken cancellationToken) { - EstateManagementGenericContext context = await this.DbContextFactory.GetContext(estateId, ConnectionStringIdentifier, cancellationToken); + EstateManagementContext context = await this.DbContextFactory.GetContext(estateId, ConnectionStringIdentifier, cancellationToken); List importLogQuery = await context.FileImportLogs.Where(f => f.ImportLogDateTime >= startDateTime).ToListAsync(cancellationToken); @@ -130,7 +130,7 @@ public async Task> GetFileImportLog(Guid fileImportLogId, Guid? merchantId, CancellationToken cancellationToken) { - EstateManagementGenericContext context = await this.DbContextFactory.GetContext(estateId, ConnectionStringIdentifier, cancellationToken); + EstateManagementContext context = await this.DbContextFactory.GetContext(estateId, ConnectionStringIdentifier, cancellationToken); // Fetch the import log entry TransactionProcessor.Database.Entities.FileImportLog importLogQuery = await context.FileImportLogs @@ -179,7 +179,7 @@ public async Task> GetFile(Guid fileId, FileDetails fileDetails = fileAggregate.GetFile(); - EstateManagementGenericContext context = await this.DbContextFactory.GetContext(estateId, ConnectionStringIdentifier, cancellationToken); + EstateManagementContext context = await this.DbContextFactory.GetContext(estateId, ConnectionStringIdentifier, cancellationToken); Merchant merchant = await context.Merchants .SingleOrDefaultAsync(m => m.MerchantId == fileDetails.MerchantId, cancellationToken); @@ -196,7 +196,12 @@ public async Task> GetFile(Guid fileId, fileDetails.UserEmailAddress = userDetails.EmailAddress; } - FileProfile fileProfile = await this.GetFileProfile(fileDetails.FileProfileId, cancellationToken); + Result getFileProfile = await this.GetFileProfile(fileDetails.FileProfileId, cancellationToken); + if (getFileProfile.IsFailed) + { + return ResultHelpers.CreateFailure(getFileProfile); + } + FileProfile fileProfile = getFileProfile.Data; if (fileProfile != null) { fileDetails.FileProfileName = fileProfile.Name; diff --git a/FileProcessor.BusinessLogic/Services/FileProcessorDomainService.cs b/FileProcessor.BusinessLogic/Services/FileProcessorDomainService.cs index 4e4a628..4fe98ff 100644 --- a/FileProcessor.BusinessLogic/Services/FileProcessorDomainService.cs +++ b/FileProcessor.BusinessLogic/Services/FileProcessorDomainService.cs @@ -149,8 +149,12 @@ public async Task> UploadFile(FileCommands.UploadFileCommand comman } // Move the file - FileProfile fileProfile = await this.FileProcessorManager.GetFileProfile(command.FileProfileId, cancellationToken); - + Result getFileProfileResult = await this.FileProcessorManager.GetFileProfile(command.FileProfileId, cancellationToken); + if (getFileProfileResult.IsFailed) + { + return ResultHelpers.CreateFailure(getFileProfileResult); + } + FileProfile fileProfile = getFileProfileResult.Data; if (fileProfile == null) { return Result.NotFound($"No file profile found with Id {command.FileProfileId}"); @@ -246,8 +250,12 @@ private async Task> GetOperatorIdForFileProfile(Guid estateId, Guid } var fileProfile = fileProfileResult.Data; - this.TokenResponse = await this.GetToken(cancellationToken); - Result> getOperatorsResult = await this.TransactionProcessorClient.GetOperators(this.TokenResponse.AccessToken, estateId, cancellationToken); + var getTokenResult = await this.GetToken(cancellationToken); + if (getTokenResult.IsFailed) { + return ResultHelpers.CreateFailure(getTokenResult); + } + this.TokenResponse = getTokenResult.Data; + Result > getOperatorsResult = await this.TransactionProcessorClient.GetOperators(this.TokenResponse.AccessToken, estateId, cancellationToken); if (getOperatorsResult.IsFailed) { return ResultHelpers.CreateFailure(getOperatorsResult); } @@ -321,7 +329,12 @@ public async Task ProcessTransactionForFileLine(FileCommands.ProcessTran transactionMetadata = transactionMetadata.Where(x => x.Key != "OperatorName").ToDictionary(x => x.Key, x => x.Value); } - this.TokenResponse = await this.GetToken(cancellationToken); + var getTokenResult = await this.GetToken(cancellationToken); + if (getTokenResult.IsFailed) + { + return ResultHelpers.CreateFailure(getTokenResult); + } + this.TokenResponse = getTokenResult.Data; Interlocked.Increment(ref FileProcessorDomainService.TransactionNumber); @@ -559,7 +572,7 @@ private Dictionary ParseFileLine(String domainEventFileLine, private TokenResponse TokenResponse; [ExcludeFromCodeCoverage] - private async Task GetToken(CancellationToken cancellationToken) + private async Task> GetToken(CancellationToken cancellationToken) { // Get a token to talk to the estate service String clientId = ConfigurationReader.GetValue("AppSettings", "ClientId"); @@ -567,17 +580,27 @@ private async Task GetToken(CancellationToken cancellationToken) if (this.TokenResponse == null) { - TokenResponse token = await this.SecurityServiceClient.GetToken(clientId, clientSecret, cancellationToken); - Logger.LogDebug($"Token is {token.AccessToken}"); - return token; + Result getTokenResult = await this.SecurityServiceClient.GetToken(clientId, clientSecret, cancellationToken); + if (getTokenResult.IsFailed) + { + Logger.LogWarning($"Failed to get token: {getTokenResult.Message}"); + return ResultHelpers.CreateFailure(getTokenResult); + } + + return getTokenResult.Data; } if (this.TokenResponse.Expires.UtcDateTime.Subtract(DateTime.UtcNow) < TimeSpan.FromMinutes(2)) { Logger.LogDebug($"Token is about to expire at {this.TokenResponse.Expires.DateTime:O}"); - TokenResponse token = await this.SecurityServiceClient.GetToken(clientId, clientSecret, cancellationToken); - Logger.LogDebug($"Token is {token.AccessToken}"); - return token; + Result getTokenResult = await this.SecurityServiceClient.GetToken(clientId, clientSecret, cancellationToken); + if (getTokenResult.IsFailed) + { + Logger.LogWarning($"Failed to get token: {getTokenResult.Message}"); + return ResultHelpers.CreateFailure(getTokenResult); + } + + return getTokenResult.Data; } return this.TokenResponse; diff --git a/FileProcessor.Client/FileProcessor.Client.csproj b/FileProcessor.Client/FileProcessor.Client.csproj index bf52219..bf21bed 100644 --- a/FileProcessor.Client/FileProcessor.Client.csproj +++ b/FileProcessor.Client/FileProcessor.Client.csproj @@ -1,13 +1,13 @@  - net8.0 + net9.0 $(TargetsForTfmSpecificBuildOutput);IncludeP2PAssets - - + + diff --git a/FileProcessor.DataTransferObjects/FileProcessor.DataTransferObjects.csproj b/FileProcessor.DataTransferObjects/FileProcessor.DataTransferObjects.csproj index b6a7910..3498a78 100644 --- a/FileProcessor.DataTransferObjects/FileProcessor.DataTransferObjects.csproj +++ b/FileProcessor.DataTransferObjects/FileProcessor.DataTransferObjects.csproj @@ -1,7 +1,7 @@ - net8.0;netstandard2.1 + net9.0 None diff --git a/FileProcessor.File.DomainEvents/FileProcessor.File.DomainEvents.csproj b/FileProcessor.File.DomainEvents/FileProcessor.File.DomainEvents.csproj index b692b80..86baa24 100644 --- a/FileProcessor.File.DomainEvents/FileProcessor.File.DomainEvents.csproj +++ b/FileProcessor.File.DomainEvents/FileProcessor.File.DomainEvents.csproj @@ -1,12 +1,12 @@  - net8.0 + net9.0 None - + diff --git a/FileProcessor.FileAggregate.Tests/FileProcessor.FileAggregate.Tests.csproj b/FileProcessor.FileAggregate.Tests/FileProcessor.FileAggregate.Tests.csproj index bee6ac8..6a057b7 100644 --- a/FileProcessor.FileAggregate.Tests/FileProcessor.FileAggregate.Tests.csproj +++ b/FileProcessor.FileAggregate.Tests/FileProcessor.FileAggregate.Tests.csproj @@ -1,16 +1,16 @@  - net8.0 + net9.0 None false - + - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/FileProcessor.FileAggregate/FileProcessor.FileAggregate.csproj b/FileProcessor.FileAggregate/FileProcessor.FileAggregate.csproj index 519f1b6..2b0b332 100644 --- a/FileProcessor.FileAggregate/FileProcessor.FileAggregate.csproj +++ b/FileProcessor.FileAggregate/FileProcessor.FileAggregate.csproj @@ -1,14 +1,14 @@  - net8.0 + net9.0 - - - - + + + + diff --git a/FileProcessor.FileImportLog.DomainEvents/FileProcessor.FileImportLog.DomainEvents.csproj b/FileProcessor.FileImportLog.DomainEvents/FileProcessor.FileImportLog.DomainEvents.csproj index a619820..ba8f328 100644 --- a/FileProcessor.FileImportLog.DomainEvents/FileProcessor.FileImportLog.DomainEvents.csproj +++ b/FileProcessor.FileImportLog.DomainEvents/FileProcessor.FileImportLog.DomainEvents.csproj @@ -1,12 +1,12 @@  - net8.0 + net9.0 None - + diff --git a/FileProcessor.FileImportLogAggregate.Tests/FileProcessor.FileImportLogAggregate.Tests.csproj b/FileProcessor.FileImportLogAggregate.Tests/FileProcessor.FileImportLogAggregate.Tests.csproj index 56bf77f..dc70841 100644 --- a/FileProcessor.FileImportLogAggregate.Tests/FileProcessor.FileImportLogAggregate.Tests.csproj +++ b/FileProcessor.FileImportLogAggregate.Tests/FileProcessor.FileImportLogAggregate.Tests.csproj @@ -1,16 +1,16 @@  - net8.0 + net9.0 None false - + - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/FileProcessor.FileImportLogAggregate/FileProcessor.FileImportLogAggregate.csproj b/FileProcessor.FileImportLogAggregate/FileProcessor.FileImportLogAggregate.csproj index 33ff03d..c3e0a8c 100644 --- a/FileProcessor.FileImportLogAggregate/FileProcessor.FileImportLogAggregate.csproj +++ b/FileProcessor.FileImportLogAggregate/FileProcessor.FileImportLogAggregate.csproj @@ -1,13 +1,13 @@  - net8.0 + net9.0 - - - + + + diff --git a/FileProcessor.IntegrationTesting.Helpers/FileProcessor.IntegrationTesting.Helpers.csproj b/FileProcessor.IntegrationTesting.Helpers/FileProcessor.IntegrationTesting.Helpers.csproj index 30a718c..48c39c1 100644 --- a/FileProcessor.IntegrationTesting.Helpers/FileProcessor.IntegrationTesting.Helpers.csproj +++ b/FileProcessor.IntegrationTesting.Helpers/FileProcessor.IntegrationTesting.Helpers.csproj @@ -1,14 +1,14 @@  - net8.0 + net9.0 enable enable - - + + diff --git a/FileProcessor.IntegrationTesting.Helpers/FileProcessorSteps.cs b/FileProcessor.IntegrationTesting.Helpers/FileProcessorSteps.cs index 513364a..6617cfd 100644 --- a/FileProcessor.IntegrationTesting.Helpers/FileProcessorSteps.cs +++ b/FileProcessor.IntegrationTesting.Helpers/FileProcessorSteps.cs @@ -1,4 +1,6 @@ -namespace FileProcessor.IntegrationTesting.Helpers.FileProcessor.IntegrationTests.Steps; +using SimpleResults; + +namespace FileProcessor.IntegrationTesting.Helpers.FileProcessor.IntegrationTests.Steps; using Client; using DataTransferObjects; @@ -30,19 +32,21 @@ public String WriteDileToDisk(String fileName, String fileData) public async Task GivenIUploadThisFileForProcessing(String accessToken, String filePath, Byte[] fileData, EstateDetails1 estateDetails, UploadFileRequest uploadFileRequest) { - Guid fileId = await this.FileProcessorClient.UploadFile(accessToken, + Result uploadFileResult = await this.FileProcessorClient.UploadFile(accessToken, Path.GetFileName(filePath), fileData, uploadFileRequest, CancellationToken.None); - + uploadFileResult.IsSuccess.ShouldBeTrue(); + var fileId = uploadFileResult.Data; fileId.ShouldNotBe(Guid.Empty); await Retry.For(async () => { - FileDetails fileDetails = + Result? getFileResult = await this.FileProcessorClient.GetFile(accessToken, estateDetails.EstateDetails.EstateId, fileId, CancellationToken.None); - + getFileResult.IsSuccess.ShouldBeTrue(); + FileDetails? fileDetails = getFileResult.Data; fileDetails.ShouldNotBeNull(); fileDetails.ProcessingCompleted.ShouldBeTrue(); }, TimeSpan.FromMinutes(5), @@ -67,12 +71,14 @@ public async Task WhenIGetTheImportLogsBetweenAndTheFollowingDataIsReturned(Stri estate.ShouldNotBeNull(); await Retry.For(async () => { - FileImportLogList importLogList = await this.FileProcessorClient.GetFileImportLogs(accessToken, + var getFileImportLogsResult = await this.FileProcessorClient.GetFileImportLogs(accessToken, estate.EstateDetails.EstateId, queryStartDate, queryEndDate, null, CancellationToken.None); + getFileImportLogsResult.IsSuccess.ShouldBeTrue(); + FileImportLogList importLogList = getFileImportLogsResult.Data; importLogList.ShouldNotBeNull(); importLogList.FileImportLogs.ShouldNotBeNull(); importLogList.FileImportLogs.ShouldNotBeEmpty(); @@ -92,21 +98,25 @@ public async Task WhenIGetTheImportLogForTheFollowingFileInformationIsReturned(S estate.ShouldNotBeNull(); DateTime queryStartDate = ReqnrollTableHelper.GetDateForDateString(startDate, DateTime.Now); - FileImportLogList importLogList = await this.FileProcessorClient.GetFileImportLogs(accessToken, + var importLogListResult = await this.FileProcessorClient.GetFileImportLogs(accessToken, estate.EstateDetails.EstateId, queryStartDate, queryStartDate, null, CancellationToken.None); + importLogListResult.IsSuccess.ShouldBeTrue(); + var importLogList = importLogListResult.Data; importLogList.ShouldNotBeNull(); importLogList.FileImportLogs.ShouldHaveSingleItem(); Guid fileImportLogId = importLogList.FileImportLogs.Single().FileImportLogId; - FileImportLog fileImportLog = await this.FileProcessorClient.GetFileImportLog(accessToken, + var getImportLogResult = await this.FileProcessorClient.GetFileImportLog(accessToken, fileImportLogId, estate.EstateDetails.EstateId, null, CancellationToken.None); + getImportLogResult.IsSuccess.ShouldBeTrue(); + FileImportLog fileImportLog = getImportLogResult.Data; fileImportLog.ShouldNotBeNull(); fileImportLog.Files.ShouldNotBeNull(); fileImportLog.Files.ShouldNotBeEmpty(); @@ -128,13 +138,16 @@ public async Task WhenIGetTheImportLogForEstateTheDateOnTheImportLogIs(String ac DateTime expectedDate = ReqnrollTableHelper.GetDateForDateString(expectedDateString, DateTime.Now); - FileImportLogList? importLogs = await this.FileProcessorClient.GetFileImportLogs(accessToken, + var getFileImportLogsResult = await this.FileProcessorClient.GetFileImportLogs(accessToken, estate.EstateDetails.EstateId, expectedDate.AddDays(-1), DateTime.Now, null, CancellationToken.None); + getFileImportLogsResult.IsSuccess.ShouldBeTrue(); + FileImportLogList? importLogs = getFileImportLogsResult.Data; + FileImportLog i = importLogs.FileImportLogs.SingleOrDefault(x => x.ImportLogDate == expectedDate.Date); i.ShouldNotBeNull(); } @@ -147,7 +160,9 @@ public async Task WhenIGetTheFileForEstateTheFollowingFileInformationIsReturned( await Retry.For(async () => { - FileDetails fileDetails = await this.FileProcessorClient.GetFile(accessToken, estate.EstateDetails.EstateId, fileId, CancellationToken.None); + var getFileResult = await this.FileProcessorClient.GetFile(accessToken, estate.EstateDetails.EstateId, fileId, CancellationToken.None); + getFileResult.IsSuccess.ShouldBeTrue(); + var fileDetails = getFileResult.Data; fileDetails.ShouldNotBeNull(); fileDetails.ProcessingCompleted.ShouldBe(fileSummary.ProcessingCompleted); @@ -167,7 +182,9 @@ public async Task WhenIGetTheFileForEstateTheFollowingFileLinesAreReturned(Strin Guid fileId = estate.GetFileId(fileName); await Retry.For(async () => { - FileDetails fileDetails = await this.FileProcessorClient.GetFile(accessToken, estate.EstateDetails.EstateId, fileId, CancellationToken.None); + var getFileResult = await this.FileProcessorClient.GetFile(accessToken, estate.EstateDetails.EstateId, fileId, CancellationToken.None); + getFileResult.IsSuccess.ShouldBeTrue(); + var fileDetails = getFileResult.Data; fileDetails.ShouldNotBeNull(); foreach (ReqnrollExtensions.FileLineDetails fileLineDetail in fileLineDetails){ diff --git a/FileProcessor.IntegrationTests/Features/GetFileImportDetails.feature.cs b/FileProcessor.IntegrationTests/Features/GetFileImportDetails.feature.cs index ea48544..9a37575 100644 --- a/FileProcessor.IntegrationTests/Features/GetFileImportDetails.feature.cs +++ b/FileProcessor.IntegrationTests/Features/GetFileImportDetails.feature.cs @@ -10,15 +10,13 @@ // ------------------------------------------------------------------------------ #region Designer generated code #pragma warning disable +using Reqnroll; namespace FileProcessor.IntegrationTests.Features { - using Reqnroll; - using System; - using System.Linq; - [System.CodeDom.Compiler.GeneratedCodeAttribute("Reqnroll", "2.0.0.0")] - [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Reqnroll", "2.0.0.0")] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [NUnit.Framework.TestFixtureAttribute()] [NUnit.Framework.DescriptionAttribute("GetFileImportDetails")] [NUnit.Framework.FixtureLifeCycleAttribute(NUnit.Framework.LifeCycle.InstancePerTestCase)] @@ -35,41 +33,63 @@ public partial class GetFileImportDetailsFeature "shared", "getfileimportdetails"}; - private static global::Reqnroll.FeatureInfo featureInfo = new global::Reqnroll.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "Features", "GetFileImportDetails", null, global::Reqnroll.ProgrammingLanguage.CSharp, featureTags); + private static global::Reqnroll.FeatureInfo featureInfo = new global::Reqnroll.FeatureInfo(new global::System.Globalization.CultureInfo("en-US"), "Features", "GetFileImportDetails", null, global::Reqnroll.ProgrammingLanguage.CSharp, featureTags); #line 1 "GetFileImportDetails.feature" #line hidden [NUnit.Framework.OneTimeSetUpAttribute()] - public static async System.Threading.Tasks.Task FeatureSetupAsync() + public static async global::System.Threading.Tasks.Task FeatureSetupAsync() { } [NUnit.Framework.OneTimeTearDownAttribute()] - public static async System.Threading.Tasks.Task FeatureTearDownAsync() + public static async global::System.Threading.Tasks.Task FeatureTearDownAsync() { } [NUnit.Framework.SetUpAttribute()] - public async System.Threading.Tasks.Task TestInitializeAsync() + public async global::System.Threading.Tasks.Task TestInitializeAsync() { testRunner = global::Reqnroll.TestRunnerManager.GetTestRunnerForAssembly(featureHint: featureInfo); - if (((testRunner.FeatureContext != null) - && (testRunner.FeatureContext.FeatureInfo.Equals(featureInfo) == false))) + try { - await testRunner.OnFeatureEndAsync(); + if (((testRunner.FeatureContext != null) + && (testRunner.FeatureContext.FeatureInfo.Equals(featureInfo) == false))) + { + await testRunner.OnFeatureEndAsync(); + } } - if ((testRunner.FeatureContext == null)) + finally { - await testRunner.OnFeatureStartAsync(featureInfo); + if (((testRunner.FeatureContext != null) + && testRunner.FeatureContext.BeforeFeatureHookFailed)) + { + throw new global::Reqnroll.ReqnrollException("Scenario skipped because of previous before feature hook error"); + } + if ((testRunner.FeatureContext == null)) + { + await testRunner.OnFeatureStartAsync(featureInfo); + } } } [NUnit.Framework.TearDownAttribute()] - public async System.Threading.Tasks.Task TestTearDownAsync() + public async global::System.Threading.Tasks.Task TestTearDownAsync() { - await testRunner.OnScenarioEndAsync(); - global::Reqnroll.TestRunnerManager.ReleaseTestRunner(testRunner); + if ((testRunner == null)) + { + return; + } + try + { + await testRunner.OnScenarioEndAsync(); + } + finally + { + global::Reqnroll.TestRunnerManager.ReleaseTestRunner(testRunner); + testRunner = null; + } } public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo) @@ -78,17 +98,17 @@ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo) testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(NUnit.Framework.TestContext.CurrentContext); } - public async System.Threading.Tasks.Task ScenarioStartAsync() + public async global::System.Threading.Tasks.Task ScenarioStartAsync() { await testRunner.OnScenarioStartAsync(); } - public async System.Threading.Tasks.Task ScenarioCleanupAsync() + public async global::System.Threading.Tasks.Task ScenarioCleanupAsync() { await testRunner.CollectScenarioErrorsAsync(); } - public virtual async System.Threading.Tasks.Task FeatureBackgroundAsync() + public virtual async global::System.Threading.Tasks.Task FeatureBackgroundAsync() { #line 4 #line hidden @@ -396,11 +416,11 @@ await testRunner.GivenAsync("I have a token to access the estate management and [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("Get File Import Log Details")] [NUnit.Framework.CategoryAttribute("PRTest")] - public async System.Threading.Tasks.Task GetFileImportLogDetails() + public async global::System.Threading.Tasks.Task GetFileImportLogDetails() { string[] tagsOfScenario = new string[] { "PRTest"}; - System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); + global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Get File Import Log Details", null, tagsOfScenario, argumentsOfScenario, featureTags); #line 85 this.ScenarioInitialize(scenarioInfo); diff --git a/FileProcessor.IntegrationTests/Features/ProcessTopupCSV.feature.cs b/FileProcessor.IntegrationTests/Features/ProcessTopupCSV.feature.cs index 59b87c0..0082c72 100644 --- a/FileProcessor.IntegrationTests/Features/ProcessTopupCSV.feature.cs +++ b/FileProcessor.IntegrationTests/Features/ProcessTopupCSV.feature.cs @@ -10,15 +10,13 @@ // ------------------------------------------------------------------------------ #region Designer generated code #pragma warning disable +using Reqnroll; namespace FileProcessor.IntegrationTests.Features { - using Reqnroll; - using System; - using System.Linq; - [System.CodeDom.Compiler.GeneratedCodeAttribute("Reqnroll", "2.0.0.0")] - [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Reqnroll", "2.0.0.0")] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [NUnit.Framework.TestFixtureAttribute()] [NUnit.Framework.DescriptionAttribute("Process Topup CSV Files")] [NUnit.Framework.FixtureLifeCycleAttribute(NUnit.Framework.LifeCycle.InstancePerTestCase)] @@ -33,41 +31,63 @@ public partial class ProcessTopupCSVFilesFeature "base", "shared"}; - private static global::Reqnroll.FeatureInfo featureInfo = new global::Reqnroll.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "Features", "Process Topup CSV Files", null, global::Reqnroll.ProgrammingLanguage.CSharp, featureTags); + private static global::Reqnroll.FeatureInfo featureInfo = new global::Reqnroll.FeatureInfo(new global::System.Globalization.CultureInfo("en-US"), "Features", "Process Topup CSV Files", null, global::Reqnroll.ProgrammingLanguage.CSharp, featureTags); #line 1 "ProcessTopupCSV.feature" #line hidden [NUnit.Framework.OneTimeSetUpAttribute()] - public static async System.Threading.Tasks.Task FeatureSetupAsync() + public static async global::System.Threading.Tasks.Task FeatureSetupAsync() { } [NUnit.Framework.OneTimeTearDownAttribute()] - public static async System.Threading.Tasks.Task FeatureTearDownAsync() + public static async global::System.Threading.Tasks.Task FeatureTearDownAsync() { } [NUnit.Framework.SetUpAttribute()] - public async System.Threading.Tasks.Task TestInitializeAsync() + public async global::System.Threading.Tasks.Task TestInitializeAsync() { testRunner = global::Reqnroll.TestRunnerManager.GetTestRunnerForAssembly(featureHint: featureInfo); - if (((testRunner.FeatureContext != null) - && (testRunner.FeatureContext.FeatureInfo.Equals(featureInfo) == false))) + try { - await testRunner.OnFeatureEndAsync(); + if (((testRunner.FeatureContext != null) + && (testRunner.FeatureContext.FeatureInfo.Equals(featureInfo) == false))) + { + await testRunner.OnFeatureEndAsync(); + } } - if ((testRunner.FeatureContext == null)) + finally { - await testRunner.OnFeatureStartAsync(featureInfo); + if (((testRunner.FeatureContext != null) + && testRunner.FeatureContext.BeforeFeatureHookFailed)) + { + throw new global::Reqnroll.ReqnrollException("Scenario skipped because of previous before feature hook error"); + } + if ((testRunner.FeatureContext == null)) + { + await testRunner.OnFeatureStartAsync(featureInfo); + } } } [NUnit.Framework.TearDownAttribute()] - public async System.Threading.Tasks.Task TestTearDownAsync() + public async global::System.Threading.Tasks.Task TestTearDownAsync() { - await testRunner.OnScenarioEndAsync(); - global::Reqnroll.TestRunnerManager.ReleaseTestRunner(testRunner); + if ((testRunner == null)) + { + return; + } + try + { + await testRunner.OnScenarioEndAsync(); + } + finally + { + global::Reqnroll.TestRunnerManager.ReleaseTestRunner(testRunner); + testRunner = null; + } } public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo) @@ -76,17 +96,17 @@ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo) testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(NUnit.Framework.TestContext.CurrentContext); } - public async System.Threading.Tasks.Task ScenarioStartAsync() + public async global::System.Threading.Tasks.Task ScenarioStartAsync() { await testRunner.OnScenarioStartAsync(); } - public async System.Threading.Tasks.Task ScenarioCleanupAsync() + public async global::System.Threading.Tasks.Task ScenarioCleanupAsync() { await testRunner.CollectScenarioErrorsAsync(); } - public virtual async System.Threading.Tasks.Task FeatureBackgroundAsync() + public virtual async global::System.Threading.Tasks.Task FeatureBackgroundAsync() { #line 4 #line hidden @@ -354,10 +374,10 @@ await testRunner.GivenAsync("I have a token to access the estate management and [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("Process Safaricom Topup File with 1 detail row")] - public async System.Threading.Tasks.Task ProcessSafaricomTopupFileWith1DetailRow() + public async global::System.Threading.Tasks.Task ProcessSafaricomTopupFileWith1DetailRow() { string[] tagsOfScenario = ((string[])(null)); - System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); + global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Process Safaricom Topup File with 1 detail row", null, tagsOfScenario, argumentsOfScenario, featureTags); #line 77 this.ScenarioInitialize(scenarioInfo); @@ -410,10 +430,10 @@ public async System.Threading.Tasks.Task ProcessSafaricomTopupFileWith1DetailRow [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("Process Safaricom Topup File with 2 detail rows")] - public async System.Threading.Tasks.Task ProcessSafaricomTopupFileWith2DetailRows() + public async global::System.Threading.Tasks.Task ProcessSafaricomTopupFileWith2DetailRows() { string[] tagsOfScenario = ((string[])(null)); - System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); + global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Process Safaricom Topup File with 2 detail rows", null, tagsOfScenario, argumentsOfScenario, featureTags); #line 89 this.ScenarioInitialize(scenarioInfo); @@ -470,10 +490,10 @@ public async System.Threading.Tasks.Task ProcessSafaricomTopupFileWith2DetailRow [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("Process 2 Safaricom Topup Files")] - public async System.Threading.Tasks.Task Process2SafaricomTopupFiles() + public async global::System.Threading.Tasks.Task Process2SafaricomTopupFiles() { string[] tagsOfScenario = ((string[])(null)); - System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); + global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Process 2 Safaricom Topup Files", null, tagsOfScenario, argumentsOfScenario, featureTags); #line 102 this.ScenarioInitialize(scenarioInfo); @@ -563,11 +583,11 @@ public async System.Threading.Tasks.Task Process2SafaricomTopupFiles() [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("Process Duplicate Safaricom Topup File with 1 detail row")] [NUnit.Framework.CategoryAttribute("PRTest")] - public async System.Threading.Tasks.Task ProcessDuplicateSafaricomTopupFileWith1DetailRow() + public async global::System.Threading.Tasks.Task ProcessDuplicateSafaricomTopupFileWith1DetailRow() { string[] tagsOfScenario = new string[] { "PRTest"}; - System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); + global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Process Duplicate Safaricom Topup File with 1 detail row", null, tagsOfScenario, argumentsOfScenario, featureTags); #line 125 this.ScenarioInitialize(scenarioInfo); @@ -661,10 +681,10 @@ public async System.Threading.Tasks.Task ProcessDuplicateSafaricomTopupFileWith1 [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("Process Safaricom Topup File with Upload Date Time")] - public async System.Threading.Tasks.Task ProcessSafaricomTopupFileWithUploadDateTime() + public async global::System.Threading.Tasks.Task ProcessSafaricomTopupFileWithUploadDateTime() { string[] tagsOfScenario = ((string[])(null)); - System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); + global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Process Safaricom Topup File with Upload Date Time", null, tagsOfScenario, argumentsOfScenario, featureTags); #line 150 this.ScenarioInitialize(scenarioInfo); diff --git a/FileProcessor.IntegrationTests/Features/ProcessVoucherCSV.feature.cs b/FileProcessor.IntegrationTests/Features/ProcessVoucherCSV.feature.cs index b0a4166..dbfb1d3 100644 --- a/FileProcessor.IntegrationTests/Features/ProcessVoucherCSV.feature.cs +++ b/FileProcessor.IntegrationTests/Features/ProcessVoucherCSV.feature.cs @@ -10,15 +10,13 @@ // ------------------------------------------------------------------------------ #region Designer generated code #pragma warning disable +using Reqnroll; namespace FileProcessor.IntegrationTests.Features { - using Reqnroll; - using System; - using System.Linq; - [System.CodeDom.Compiler.GeneratedCodeAttribute("Reqnroll", "2.0.0.0")] - [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Reqnroll", "2.0.0.0")] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [NUnit.Framework.TestFixtureAttribute()] [NUnit.Framework.DescriptionAttribute("Process Voucher CSV Files")] [NUnit.Framework.FixtureLifeCycleAttribute(NUnit.Framework.LifeCycle.InstancePerTestCase)] @@ -35,41 +33,63 @@ public partial class ProcessVoucherCSVFilesFeature "shared", "processvouchercsv"}; - private static global::Reqnroll.FeatureInfo featureInfo = new global::Reqnroll.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "Features", "Process Voucher CSV Files", null, global::Reqnroll.ProgrammingLanguage.CSharp, featureTags); + private static global::Reqnroll.FeatureInfo featureInfo = new global::Reqnroll.FeatureInfo(new global::System.Globalization.CultureInfo("en-US"), "Features", "Process Voucher CSV Files", null, global::Reqnroll.ProgrammingLanguage.CSharp, featureTags); #line 1 "ProcessVoucherCSV.feature" #line hidden [NUnit.Framework.OneTimeSetUpAttribute()] - public static async System.Threading.Tasks.Task FeatureSetupAsync() + public static async global::System.Threading.Tasks.Task FeatureSetupAsync() { } [NUnit.Framework.OneTimeTearDownAttribute()] - public static async System.Threading.Tasks.Task FeatureTearDownAsync() + public static async global::System.Threading.Tasks.Task FeatureTearDownAsync() { } [NUnit.Framework.SetUpAttribute()] - public async System.Threading.Tasks.Task TestInitializeAsync() + public async global::System.Threading.Tasks.Task TestInitializeAsync() { testRunner = global::Reqnroll.TestRunnerManager.GetTestRunnerForAssembly(featureHint: featureInfo); - if (((testRunner.FeatureContext != null) - && (testRunner.FeatureContext.FeatureInfo.Equals(featureInfo) == false))) + try { - await testRunner.OnFeatureEndAsync(); + if (((testRunner.FeatureContext != null) + && (testRunner.FeatureContext.FeatureInfo.Equals(featureInfo) == false))) + { + await testRunner.OnFeatureEndAsync(); + } } - if ((testRunner.FeatureContext == null)) + finally { - await testRunner.OnFeatureStartAsync(featureInfo); + if (((testRunner.FeatureContext != null) + && testRunner.FeatureContext.BeforeFeatureHookFailed)) + { + throw new global::Reqnroll.ReqnrollException("Scenario skipped because of previous before feature hook error"); + } + if ((testRunner.FeatureContext == null)) + { + await testRunner.OnFeatureStartAsync(featureInfo); + } } } [NUnit.Framework.TearDownAttribute()] - public async System.Threading.Tasks.Task TestTearDownAsync() + public async global::System.Threading.Tasks.Task TestTearDownAsync() { - await testRunner.OnScenarioEndAsync(); - global::Reqnroll.TestRunnerManager.ReleaseTestRunner(testRunner); + if ((testRunner == null)) + { + return; + } + try + { + await testRunner.OnScenarioEndAsync(); + } + finally + { + global::Reqnroll.TestRunnerManager.ReleaseTestRunner(testRunner); + testRunner = null; + } } public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo) @@ -78,17 +98,17 @@ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo) testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(NUnit.Framework.TestContext.CurrentContext); } - public async System.Threading.Tasks.Task ScenarioStartAsync() + public async global::System.Threading.Tasks.Task ScenarioStartAsync() { await testRunner.OnScenarioStartAsync(); } - public async System.Threading.Tasks.Task ScenarioCleanupAsync() + public async global::System.Threading.Tasks.Task ScenarioCleanupAsync() { await testRunner.CollectScenarioErrorsAsync(); } - public virtual async System.Threading.Tasks.Task FeatureBackgroundAsync() + public virtual async global::System.Threading.Tasks.Task FeatureBackgroundAsync() { #line 4 #line hidden @@ -364,10 +384,10 @@ await testRunner.GivenAsync("I have a token to access the estate management and [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("Process Voucher File with 1 detail row for recipient email")] - public async System.Threading.Tasks.Task ProcessVoucherFileWith1DetailRowForRecipientEmail() + public async global::System.Threading.Tasks.Task ProcessVoucherFileWith1DetailRowForRecipientEmail() { string[] tagsOfScenario = ((string[])(null)); - System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); + global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Process Voucher File with 1 detail row for recipient email", null, tagsOfScenario, argumentsOfScenario, featureTags); #line 78 this.ScenarioInitialize(scenarioInfo); @@ -424,10 +444,10 @@ public async System.Threading.Tasks.Task ProcessVoucherFileWith1DetailRowForReci [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("Process Voucher File with 1 detail row for recipient mobile")] - public async System.Threading.Tasks.Task ProcessVoucherFileWith1DetailRowForRecipientMobile() + public async global::System.Threading.Tasks.Task ProcessVoucherFileWith1DetailRowForRecipientMobile() { string[] tagsOfScenario = ((string[])(null)); - System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); + global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Process Voucher File with 1 detail row for recipient mobile", null, tagsOfScenario, argumentsOfScenario, featureTags); #line 90 this.ScenarioInitialize(scenarioInfo); @@ -484,10 +504,10 @@ public async System.Threading.Tasks.Task ProcessVoucherFileWith1DetailRowForReci [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("Process Voucher File with 2 detail rows")] - public async System.Threading.Tasks.Task ProcessVoucherFileWith2DetailRows() + public async global::System.Threading.Tasks.Task ProcessVoucherFileWith2DetailRows() { string[] tagsOfScenario = ((string[])(null)); - System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); + global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Process Voucher File with 2 detail rows", null, tagsOfScenario, argumentsOfScenario, featureTags); #line 102 this.ScenarioInitialize(scenarioInfo); @@ -549,10 +569,10 @@ public async System.Threading.Tasks.Task ProcessVoucherFileWith2DetailRows() [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("Process 2 Voucher Files")] - public async System.Threading.Tasks.Task Process2VoucherFiles() + public async global::System.Threading.Tasks.Task Process2VoucherFiles() { string[] tagsOfScenario = ((string[])(null)); - System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); + global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Process 2 Voucher Files", null, tagsOfScenario, argumentsOfScenario, featureTags); #line 115 this.ScenarioInitialize(scenarioInfo); @@ -656,11 +676,11 @@ public async System.Threading.Tasks.Task Process2VoucherFiles() [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("Process Duplicate Voucher Topup File with 1 detail row")] [NUnit.Framework.CategoryAttribute("PRTest")] - public async System.Threading.Tasks.Task ProcessDuplicateVoucherTopupFileWith1DetailRow() + public async global::System.Threading.Tasks.Task ProcessDuplicateVoucherTopupFileWith1DetailRow() { string[] tagsOfScenario = new string[] { "PRTest"}; - System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); + global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary(); global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Process Duplicate Voucher Topup File with 1 detail row", null, tagsOfScenario, argumentsOfScenario, featureTags); #line 139 this.ScenarioInitialize(scenarioInfo); diff --git a/FileProcessor.IntegrationTests/FileProcessor.IntegrationTests.csproj b/FileProcessor.IntegrationTests/FileProcessor.IntegrationTests.csproj index c121a59..46577b8 100644 --- a/FileProcessor.IntegrationTests/FileProcessor.IntegrationTests.csproj +++ b/FileProcessor.IntegrationTests/FileProcessor.IntegrationTests.csproj @@ -1,7 +1,7 @@  - net8.0 + net9.0 false @@ -12,23 +12,23 @@ - - + + - - - + + + - - - - - - + + + + + + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/FileProcessor.Testing/FileProcessor.Testing.csproj b/FileProcessor.Testing/FileProcessor.Testing.csproj index ee0d72f..1097054 100644 --- a/FileProcessor.Testing/FileProcessor.Testing.csproj +++ b/FileProcessor.Testing/FileProcessor.Testing.csproj @@ -1,7 +1,7 @@  - net8.0 + net9.0 None diff --git a/FileProcessor.Testing/TestData.cs b/FileProcessor.Testing/TestData.cs index da2b076..7612e05 100644 --- a/FileProcessor.Testing/TestData.cs +++ b/FileProcessor.Testing/TestData.cs @@ -135,6 +135,7 @@ public static FileProfile GetFileProfile(String operatorName) } }; + public static FileProfile FileProfile => FileProfileSafaricom with { FileProfileId = FileProfileId }; public static FileProfile FileProfileSafaricom => new FileProfile(TestData.SafaricomFileProfileId, TestData.SafaricomProfileName, diff --git a/FileProcessor.Tests/FileProcessor.Tests.csproj b/FileProcessor.Tests/FileProcessor.Tests.csproj index e3905be..2be0c55 100644 --- a/FileProcessor.Tests/FileProcessor.Tests.csproj +++ b/FileProcessor.Tests/FileProcessor.Tests.csproj @@ -1,19 +1,19 @@  - net8.0 + net9.0 None false - - + + - + - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/FileProcessor/Bootstrapper/RepositoryRegistry.cs b/FileProcessor/Bootstrapper/RepositoryRegistry.cs index d4478fc..59e1bcb 100644 --- a/FileProcessor/Bootstrapper/RepositoryRegistry.cs +++ b/FileProcessor/Bootstrapper/RepositoryRegistry.cs @@ -57,19 +57,10 @@ public RepositoryRegistry() this.AddSingleton, AggregateRepository>(); - this.AddSingleton, DbContextFactory>(); - this.AddSingleton>(cont => connectionString => + this.AddSingleton, DbContextFactory>(); + this.AddSingleton>(cont => connectionString => { - String databaseEngine = - ConfigurationReader.GetValue("AppSettings", "DatabaseEngine"); - - return databaseEngine switch - { - "MySql" => new EstateManagementMySqlContext(connectionString), - "SqlServer" => new EstateManagementSqlServerContext(connectionString), - _ => throw new - NotSupportedException($"Unsupported Database Engine {databaseEngine}") - }; + return new EstateManagementContext(connectionString); }); this.AddSingleton(); diff --git a/FileProcessor/Controllers/FileController.cs b/FileProcessor/Controllers/FileController.cs index 9bb2916..3cef463 100644 --- a/FileProcessor/Controllers/FileController.cs +++ b/FileProcessor/Controllers/FileController.cs @@ -1,6 +1,7 @@ using FileProcessor.BusinessLogic.Requests; using Shared.EventStore.Aggregate; using Shared.Results; +using Shared.Results.Web; using SimpleResults; namespace FileProcessor.Controllers diff --git a/FileProcessor/Controllers/FileImportLogController.cs b/FileProcessor/Controllers/FileImportLogController.cs index 34f54d7..892e46c 100644 --- a/FileProcessor/Controllers/FileImportLogController.cs +++ b/FileProcessor/Controllers/FileImportLogController.cs @@ -3,6 +3,7 @@ using MediatR; using Shared.EventStore.Aggregate; using Shared.Results; +using Shared.Results.Web; using SimpleResults; namespace FileProcessor.Controllers diff --git a/FileProcessor/Dockerfile b/FileProcessor/Dockerfile index f00e127..dad7ba2 100644 --- a/FileProcessor/Dockerfile +++ b/FileProcessor/Dockerfile @@ -3,7 +3,7 @@ FROM stuartferguson/txnprocbase:latest AS base WORKDIR /app -FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build WORKDIR /src COPY ["FileProcessor/NuGet.Config", "."] COPY ["FileProcessor/FileProcessor.csproj", "FileProcessor/"] diff --git a/FileProcessor/Dockerfilewindows b/FileProcessor/Dockerfilewindows index 923201a..f694106 100644 --- a/FileProcessor/Dockerfilewindows +++ b/FileProcessor/Dockerfilewindows @@ -2,7 +2,7 @@ FROM stuartferguson/txnprocbasewindows AS base USER ContainerAdministrator WORKDIR /app -FROM mcr.microsoft.com/dotnet/sdk:8.0-windowsservercore-ltsc2022 AS build +FROM mcr.microsoft.com/dotnet/sdk:9.0-windowsservercore-ltsc2022 AS build WORKDIR /src COPY ["FileProcessor/NuGet.Config", "."] COPY ["FileProcessor/FileProcessor.csproj", "FileProcessor/"] diff --git a/FileProcessor/FileProcessor.csproj b/FileProcessor/FileProcessor.csproj index 94e3d8b..54e6b83 100644 --- a/FileProcessor/FileProcessor.csproj +++ b/FileProcessor/FileProcessor.csproj @@ -1,35 +1,36 @@  - net8.0 + net9.0 Linux - - - - - - - - - + + + + + + + + + - + - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/FileProcessor/Startup.cs b/FileProcessor/Startup.cs index 6be16cb..c75ecd2 100644 --- a/FileProcessor/Startup.cs +++ b/FileProcessor/Startup.cs @@ -7,6 +7,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using ImTools; namespace FileProcessor {