diff --git a/src/administration/Administration.Service/BusinessLogic/RegistrationBusinessLogic.cs b/src/administration/Administration.Service/BusinessLogic/RegistrationBusinessLogic.cs index 11e6393ef0..b81e47986d 100644 --- a/src/administration/Administration.Service/BusinessLogic/RegistrationBusinessLogic.cs +++ b/src/administration/Administration.Service/BusinessLogic/RegistrationBusinessLogic.cs @@ -411,7 +411,7 @@ public Task TriggerChecklistAsync(Guid applicationId, ApplicationChecklistEntryT throw new ControllerArgumentException($"The processStep {processStepTypeId} is not retriggerable"); } - var nextStepData = processStepTypeId.GetNextProcessStepDataForManualTriggerProcessStepId(); + var nextStepData = processStepTypeId.GetNextProcessStepDataForManualTriggerProcessStepId(_settings.ClearinghouseConnectDisabled); if (nextStepData == default) { throw new UnexpectedConditionException($"While the processStep {processStepTypeId} is configured to be retriggerable there is no next step configured"); diff --git a/src/administration/Administration.Service/BusinessLogic/RegistrationSettings.cs b/src/administration/Administration.Service/BusinessLogic/RegistrationSettings.cs index ffa234b85e..2ab34cac97 100644 --- a/src/administration/Administration.Service/BusinessLogic/RegistrationSettings.cs +++ b/src/administration/Administration.Service/BusinessLogic/RegistrationSettings.cs @@ -40,6 +40,11 @@ public class RegistrationSettings public string HelpAddress { get; set; } = null!; public bool UseDimWallet { get; set; } + + /// + /// If true all sd factory calls are disabled and won't be called. The respective process steps will be skipped. + /// + public bool ClearinghouseConnectDisabled { get; set; } } public static class RegistrationSettingsExtension diff --git a/src/administration/Administration.Service/appsettings.json b/src/administration/Administration.Service/appsettings.json index 1c42386727..5bf8c9ec49 100644 --- a/src/administration/Administration.Service/appsettings.json +++ b/src/administration/Administration.Service/appsettings.json @@ -257,7 +257,8 @@ "Registration": { "ApplicationsMaxPageSize": 20, "DocumentTypeIds": [], - "UseDimWallet": false + "UseDimWallet": false, + "ClearinghouseConnectDisabled": false }, "UserManagement": { "ApplicationsMaxPageSize": 20, diff --git a/src/processes/ApplicationChecklist.Library/ApplicationChecklistEntryTypeIdExtensions.cs b/src/processes/ApplicationChecklist.Library/ApplicationChecklistEntryTypeIdExtensions.cs index f5e142a3f5..9d7d196399 100644 --- a/src/processes/ApplicationChecklist.Library/ApplicationChecklistEntryTypeIdExtensions.cs +++ b/src/processes/ApplicationChecklist.Library/ApplicationChecklistEntryTypeIdExtensions.cs @@ -1,5 +1,4 @@ /******************************************************************************** - * Copyright (c) 2022 BMW Group AG * Copyright (c) 2022 Contributors to the Eclipse Foundation * * See the NOTICE file(s) distributed with this work for additional @@ -25,29 +24,30 @@ namespace Org.Eclipse.TractusX.Portal.Backend.Processes.ApplicationChecklist.Lib public static class ApplicationChecklistEntryTypeIdExtensions { - private static readonly ImmutableDictionary> _manualProcessStepIds = new (ApplicationChecklistEntryTypeId EntryTypeId, IEnumerable StepTypeId)[] { - (ApplicationChecklistEntryTypeId.CLEARING_HOUSE, new [] { ProcessStepTypeId.RETRIGGER_CLEARING_HOUSE, ProcessStepTypeId.TRIGGER_OVERRIDE_CLEARING_HOUSE }), - (ApplicationChecklistEntryTypeId.IDENTITY_WALLET, new [] { ProcessStepTypeId.RETRIGGER_IDENTITY_WALLET, ProcessStepTypeId.RETRIGGER_CREATE_DIM_WALLET, ProcessStepTypeId.RETRIGGER_VALIDATE_DID_DOCUMENT }), - (ApplicationChecklistEntryTypeId.SELF_DESCRIPTION_LP, new [] { ProcessStepTypeId.RETRIGGER_SELF_DESCRIPTION_LP }), - (ApplicationChecklistEntryTypeId.BUSINESS_PARTNER_NUMBER, new [] { ProcessStepTypeId.RETRIGGER_BUSINESS_PARTNER_NUMBER_PUSH, ProcessStepTypeId.RETRIGGER_BUSINESS_PARTNER_NUMBER_PULL }), + private static readonly ImmutableDictionary> ManualProcessStepIds = new (ApplicationChecklistEntryTypeId EntryTypeId, IEnumerable StepTypeId)[] { + (ApplicationChecklistEntryTypeId.CLEARING_HOUSE, new[] { ProcessStepTypeId.RETRIGGER_CLEARING_HOUSE, ProcessStepTypeId.TRIGGER_OVERRIDE_CLEARING_HOUSE }), + (ApplicationChecklistEntryTypeId.IDENTITY_WALLET, new[] { ProcessStepTypeId.RETRIGGER_IDENTITY_WALLET, ProcessStepTypeId.RETRIGGER_CREATE_DIM_WALLET, ProcessStepTypeId.RETRIGGER_VALIDATE_DID_DOCUMENT }), + (ApplicationChecklistEntryTypeId.SELF_DESCRIPTION_LP, new[] { ProcessStepTypeId.RETRIGGER_SELF_DESCRIPTION_LP }), + (ApplicationChecklistEntryTypeId.BUSINESS_PARTNER_NUMBER, new[] { ProcessStepTypeId.RETRIGGER_BUSINESS_PARTNER_NUMBER_PUSH, ProcessStepTypeId.RETRIGGER_BUSINESS_PARTNER_NUMBER_PULL }), }.ToImmutableDictionary(x => x.EntryTypeId, x => x.StepTypeId); public static IEnumerable GetManualTriggerProcessStepIds(this ApplicationChecklistEntryTypeId entryTypeId) => - _manualProcessStepIds.TryGetValue(entryTypeId, out var stepTypeId) + ManualProcessStepIds.TryGetValue(entryTypeId, out var stepTypeId) ? stepTypeId : Enumerable.Empty(); public static IEnumerable GetManualTriggerProcessStepIds(this IEnumerable entryTypeIds) => - _manualProcessStepIds.IntersectBy(entryTypeIds, x => x.Key).SelectMany(x => x.Value).Distinct(); + ManualProcessStepIds.IntersectBy(entryTypeIds, x => x.Key).SelectMany(x => x.Value).Distinct(); - public static (ProcessStepTypeId ProcessStepTypeId, ApplicationChecklistEntryStatusId ChecklistEntryStatusId) GetNextProcessStepDataForManualTriggerProcessStepId(this ProcessStepTypeId processStepTypeId) => + public static (ProcessStepTypeId ProcessStepTypeId, ApplicationChecklistEntryStatusId ChecklistEntryStatusId) GetNextProcessStepDataForManualTriggerProcessStepId(this ProcessStepTypeId processStepTypeId, bool clearinghouseConnectDisabled) => processStepTypeId switch { ProcessStepTypeId.RETRIGGER_CLEARING_HOUSE => (ProcessStepTypeId.START_CLEARING_HOUSE, ApplicationChecklistEntryStatusId.TO_DO), ProcessStepTypeId.RETRIGGER_IDENTITY_WALLET => (ProcessStepTypeId.CREATE_IDENTITY_WALLET, ApplicationChecklistEntryStatusId.TO_DO), ProcessStepTypeId.RETRIGGER_CREATE_DIM_WALLET => (ProcessStepTypeId.CREATE_DIM_WALLET, ApplicationChecklistEntryStatusId.TO_DO), ProcessStepTypeId.RETRIGGER_VALIDATE_DID_DOCUMENT => (ProcessStepTypeId.VALIDATE_DID_DOCUMENT, ApplicationChecklistEntryStatusId.TO_DO), - ProcessStepTypeId.RETRIGGER_SELF_DESCRIPTION_LP => (ProcessStepTypeId.START_SELF_DESCRIPTION_LP, ApplicationChecklistEntryStatusId.TO_DO), + ProcessStepTypeId.RETRIGGER_SELF_DESCRIPTION_LP when clearinghouseConnectDisabled => (ProcessStepTypeId.ACTIVATE_APPLICATION, ApplicationChecklistEntryStatusId.SKIPPED), + ProcessStepTypeId.RETRIGGER_SELF_DESCRIPTION_LP when !clearinghouseConnectDisabled => (ProcessStepTypeId.START_SELF_DESCRIPTION_LP, ApplicationChecklistEntryStatusId.TO_DO), ProcessStepTypeId.RETRIGGER_BUSINESS_PARTNER_NUMBER_PUSH => (ProcessStepTypeId.CREATE_BUSINESS_PARTNER_NUMBER_PUSH, ApplicationChecklistEntryStatusId.TO_DO), ProcessStepTypeId.RETRIGGER_BUSINESS_PARTNER_NUMBER_PULL => (ProcessStepTypeId.CREATE_BUSINESS_PARTNER_NUMBER_PULL, ApplicationChecklistEntryStatusId.IN_PROGRESS), ProcessStepTypeId.TRIGGER_OVERRIDE_CLEARING_HOUSE => (ProcessStepTypeId.START_OVERRIDE_CLEARING_HOUSE, ApplicationChecklistEntryStatusId.TO_DO), diff --git a/tests/administration/Administration.Service.Tests/BusinessLogic/RegistrationBusinessLogicTest.cs b/tests/administration/Administration.Service.Tests/BusinessLogic/RegistrationBusinessLogicTest.cs index 3b5db39d95..2e8bb70556 100644 --- a/tests/administration/Administration.Service.Tests/BusinessLogic/RegistrationBusinessLogicTest.cs +++ b/tests/administration/Administration.Service.Tests/BusinessLogic/RegistrationBusinessLogicTest.cs @@ -83,6 +83,8 @@ public class RegistrationBusinessLogicTest private readonly IDimBusinessLogic _dimBusinessLogic; private readonly IOptions _options; private readonly IIdentityData _identityData; + private readonly IIdentityService _identityService; + private readonly ILogger _logger; public RegistrationBusinessLogicTest() { @@ -102,7 +104,7 @@ public RegistrationBusinessLogicTest() var settings = A.Fake(); settings.ApplicationsMaxPageSize = 15; A.CallTo(() => _options.Value).Returns(settings); - var identityService = A.Fake(); + _identityService = A.Fake(); _identityData = A.Fake(); _clearinghouseBusinessLogic = A.Fake(); @@ -122,11 +124,11 @@ public RegistrationBusinessLogicTest() A.CallTo(() => _identityData.IdentityId).Returns(Guid.NewGuid()); A.CallTo(() => _identityData.IdentityTypeId).Returns(IdentityTypeId.COMPANY_USER); A.CallTo(() => _identityData.CompanyId).Returns(CompanyId); - A.CallTo(() => identityService.IdentityData).Returns(_identityData); + A.CallTo(() => _identityService.IdentityData).Returns(_identityData); - var logger = A.Fake>(); + _logger = A.Fake>(); - _logic = new RegistrationBusinessLogic(_portalRepositories, _options, _checklistService, _clearinghouseBusinessLogic, _sdFactoryBusinessLogic, _dimBusinessLogic, _issuerComponentBusinessLogic, _provisioningManager, _mailingProcessCreation, identityService, logger); + _logic = new RegistrationBusinessLogic(_portalRepositories, _options, _checklistService, _clearinghouseBusinessLogic, _sdFactoryBusinessLogic, _dimBusinessLogic, _issuerComponentBusinessLogic, _provisioningManager, _mailingProcessCreation, _identityService, _logger); } #region GetCompanyApplicationDetailsAsync @@ -747,14 +749,15 @@ public async Task TriggerChecklistAsync_WithFailingChecklistServiceCall_ReturnsE } [Theory] - [InlineData(ApplicationChecklistEntryTypeId.CLEARING_HOUSE, ProcessStepTypeId.RETRIGGER_CLEARING_HOUSE, ProcessStepTypeId.START_CLEARING_HOUSE, ApplicationChecklistEntryStatusId.TO_DO)] - [InlineData(ApplicationChecklistEntryTypeId.IDENTITY_WALLET, ProcessStepTypeId.RETRIGGER_IDENTITY_WALLET, ProcessStepTypeId.CREATE_IDENTITY_WALLET, ApplicationChecklistEntryStatusId.TO_DO)] - [InlineData(ApplicationChecklistEntryTypeId.IDENTITY_WALLET, ProcessStepTypeId.RETRIGGER_CREATE_DIM_WALLET, ProcessStepTypeId.CREATE_DIM_WALLET, ApplicationChecklistEntryStatusId.TO_DO)] - [InlineData(ApplicationChecklistEntryTypeId.IDENTITY_WALLET, ProcessStepTypeId.RETRIGGER_VALIDATE_DID_DOCUMENT, ProcessStepTypeId.VALIDATE_DID_DOCUMENT, ApplicationChecklistEntryStatusId.TO_DO)] - [InlineData(ApplicationChecklistEntryTypeId.SELF_DESCRIPTION_LP, ProcessStepTypeId.RETRIGGER_SELF_DESCRIPTION_LP, ProcessStepTypeId.START_SELF_DESCRIPTION_LP, ApplicationChecklistEntryStatusId.TO_DO)] - [InlineData(ApplicationChecklistEntryTypeId.BUSINESS_PARTNER_NUMBER, ProcessStepTypeId.RETRIGGER_BUSINESS_PARTNER_NUMBER_PUSH, ProcessStepTypeId.CREATE_BUSINESS_PARTNER_NUMBER_PUSH, ApplicationChecklistEntryStatusId.TO_DO)] - [InlineData(ApplicationChecklistEntryTypeId.BUSINESS_PARTNER_NUMBER, ProcessStepTypeId.RETRIGGER_BUSINESS_PARTNER_NUMBER_PULL, ProcessStepTypeId.CREATE_BUSINESS_PARTNER_NUMBER_PULL, ApplicationChecklistEntryStatusId.IN_PROGRESS)] - public async Task TriggerChecklistAsync_WithValidData_ReturnsExpected(ApplicationChecklistEntryTypeId typeId, ProcessStepTypeId stepId, ProcessStepTypeId nextStepId, ApplicationChecklistEntryStatusId statusId) + [InlineData(ApplicationChecklistEntryTypeId.CLEARING_HOUSE, ProcessStepTypeId.RETRIGGER_CLEARING_HOUSE, ProcessStepTypeId.START_CLEARING_HOUSE, ApplicationChecklistEntryStatusId.TO_DO, false)] + [InlineData(ApplicationChecklistEntryTypeId.IDENTITY_WALLET, ProcessStepTypeId.RETRIGGER_IDENTITY_WALLET, ProcessStepTypeId.CREATE_IDENTITY_WALLET, ApplicationChecklistEntryStatusId.TO_DO, false)] + [InlineData(ApplicationChecklistEntryTypeId.IDENTITY_WALLET, ProcessStepTypeId.RETRIGGER_CREATE_DIM_WALLET, ProcessStepTypeId.CREATE_DIM_WALLET, ApplicationChecklistEntryStatusId.TO_DO, false)] + [InlineData(ApplicationChecklistEntryTypeId.IDENTITY_WALLET, ProcessStepTypeId.RETRIGGER_VALIDATE_DID_DOCUMENT, ProcessStepTypeId.VALIDATE_DID_DOCUMENT, ApplicationChecklistEntryStatusId.TO_DO, false)] + [InlineData(ApplicationChecklistEntryTypeId.SELF_DESCRIPTION_LP, ProcessStepTypeId.RETRIGGER_SELF_DESCRIPTION_LP, ProcessStepTypeId.START_SELF_DESCRIPTION_LP, ApplicationChecklistEntryStatusId.TO_DO, false)] + [InlineData(ApplicationChecklistEntryTypeId.SELF_DESCRIPTION_LP, ProcessStepTypeId.RETRIGGER_SELF_DESCRIPTION_LP, ProcessStepTypeId.ACTIVATE_APPLICATION, ApplicationChecklistEntryStatusId.SKIPPED, true)] + [InlineData(ApplicationChecklistEntryTypeId.BUSINESS_PARTNER_NUMBER, ProcessStepTypeId.RETRIGGER_BUSINESS_PARTNER_NUMBER_PUSH, ProcessStepTypeId.CREATE_BUSINESS_PARTNER_NUMBER_PUSH, ApplicationChecklistEntryStatusId.TO_DO, false)] + [InlineData(ApplicationChecklistEntryTypeId.BUSINESS_PARTNER_NUMBER, ProcessStepTypeId.RETRIGGER_BUSINESS_PARTNER_NUMBER_PULL, ProcessStepTypeId.CREATE_BUSINESS_PARTNER_NUMBER_PULL, ApplicationChecklistEntryStatusId.IN_PROGRESS, false)] + public async Task TriggerChecklistAsync_WithValidData_ReturnsExpected(ApplicationChecklistEntryTypeId typeId, ProcessStepTypeId stepId, ProcessStepTypeId nextStepId, ApplicationChecklistEntryStatusId statusId, bool clearinghouseConnectDisabled) { // Arrange var checklistEntry = new ApplicationChecklistEntry(Guid.NewGuid(), typeId, @@ -782,12 +785,17 @@ public async Task TriggerChecklistAsync_WithValidData_ReturnsExpected(Applicatio A>._)) .Invokes((IApplicationChecklistService.ManualChecklistProcessStepData _, Action initial, Action modify, IEnumerable _) => { - initial?.Invoke(checklistEntry); - modify.Invoke(checklistEntry); + initial(checklistEntry); + modify(checklistEntry); }); //Act - await _logic.TriggerChecklistAsync(applicationId, typeId, stepId); + + var settings = A.Fake(); + settings.ClearinghouseConnectDisabled = clearinghouseConnectDisabled; + A.CallTo(() => _options.Value).Returns(settings); + var logic = new RegistrationBusinessLogic(_portalRepositories, _options, _checklistService, _clearinghouseBusinessLogic, _sdFactoryBusinessLogic, _dimBusinessLogic, _issuerComponentBusinessLogic, _provisioningManager, _mailingProcessCreation, _identityService, _logger); + await logic.TriggerChecklistAsync(applicationId, typeId, stepId); // Assert A.CallTo(() => _checklistService.FinalizeChecklistEntryAndProcessSteps(context,