Skip to content

Commit 9a4aac8

Browse files
committed
ECER-5513: InvitationTypes removed from API project Endpoints and automated tests handled accordingly
1 parent d5947ea commit 9a4aac8

File tree

9 files changed

+19
-43
lines changed

9 files changed

+19
-43
lines changed

src/ECER.Clients.Api/InviteLinks/InviteLinksEndpoints.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public void Register(IEndpointRouteBuilder endpointRouteBuilder)
1515
IMediator messageBus,
1616
CancellationToken ct) =>
1717
{
18-
var referenceLinkResponse = await messageBus.Send(new GenerateInviteLinkCommand(request.portalInvitation, request.inviteType, request.validDays), ct);
18+
var referenceLinkResponse = await messageBus.Send(new GenerateInviteLinkCommand(request.portalInvitation, request.validDays), ct);
1919

2020
return TypedResults.Ok(new GenerateInviteLinkResponse(referenceLinkResponse.PortalInvitation, referenceLinkResponse.VerificationLink));
2121
})
@@ -26,5 +26,5 @@ public void Register(IEndpointRouteBuilder endpointRouteBuilder)
2626
}
2727
}
2828

29-
public record GenerateInviteLinkRequest(Guid portalInvitation, InviteType inviteType, int validDays);
29+
public record GenerateInviteLinkRequest(Guid portalInvitation, int validDays);
3030
public record GenerateInviteLinkResponse(Guid portalInvitation, string inviteLink);

src/ECER.Engines.Transformation/Contract.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ namespace ECER.Engines.Transformation;
55
public abstract record TransformRequest();
66
public abstract record TransformResponse();
77

8-
public record EncryptInviteTokenRequest(Guid PortalInvitation, InviteType InviteType, int ValidDays) : TransformRequest;
8+
public record EncryptInviteTokenRequest(Guid PortalInvitation, int ValidDays) : TransformRequest;
99
public record EncryptInviteTokenResponse(Guid PortalInvitation, string VerificationToken) : TransformResponse;
1010

1111
public record DecryptInviteTokenRequest(string VerificationToken) : TransformRequest;
12-
public record DecryptInviteTokenResponse(Guid PortalInvitation, InviteType InviteType) : TransformResponse;
12+
public record DecryptInviteTokenResponse(Guid PortalInvitation) : TransformResponse;

src/ECER.Engines.Transformation/PortalInvitations/PortalInvitationTransformationEngine.cs

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@ private async Task<EncryptInviteTokenResponse> EncryptInviteToken(EncryptInviteT
2020
{
2121
await Task.CompletedTask;
2222

23-
var expiryDate = DateTime.UtcNow.AddDays(request.ValidDays); // Example expiry date
23+
var expiryDate = DateTime.UtcNow.AddDays(request.ValidDays);
2424
var protector = dataProtectionProvider.CreateProtector(nameof(PortalInvitationTransformationEngine)).ToTimeLimitedDataProtector();
2525

26-
// Combine referenceType and portalInvitation into a single string
27-
var combinedData = $"{request.InviteType}:{request.PortalInvitation}";
28-
var encryptedData = protector.Protect(combinedData, expiryDate);
26+
var encryptedData = protector.Protect(request.PortalInvitation.ToString(), expiryDate);
2927

3028
var referenceLink = WebUtility.UrlEncode(encryptedData);
3129
return new EncryptInviteTokenResponse(request.PortalInvitation, referenceLink);
@@ -40,22 +38,8 @@ private async Task<DecryptInviteTokenResponse> DecryptInviteToken(DecryptInviteT
4038
var protector = dataProtectionProvider.CreateProtector(nameof(PortalInvitationTransformationEngine)).ToTimeLimitedDataProtector();
4139
var decryptedData = protector.Unprotect(encryptedData);
4240

43-
// Split the decrypted data back into ReferenceType and PortalInvitation
44-
var splitIndex = decryptedData.IndexOf(':');
45-
if (splitIndex == -1)
46-
{
47-
throw new InvalidOperationException($"Invalid reference link format. decryptedData should be ReferenceType:PortalInvitation => '{decryptedData}'");
48-
}
49-
50-
var referenceTypeString = decryptedData.Substring(0, splitIndex);
51-
var inviteIdString = decryptedData.Substring(splitIndex + 1);
52-
var portalInvitation = Guid.Parse(inviteIdString);
53-
54-
if (!Enum.TryParse<InviteType>(referenceTypeString, out var referenceType))
55-
{
56-
throw new InvalidOperationException($"Invalid reference type.");
57-
}
41+
var portalInvitation = Guid.Parse(decryptedData);
5842

59-
return new DecryptInviteTokenResponse(portalInvitation, referenceType);
43+
return new DecryptInviteTokenResponse(portalInvitation);
6044
}
6145
}

src/ECER.Managers.Admin.Contract/PortalInvitations/Contract.cs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,5 @@
22

33
namespace ECER.Managers.Admin.Contract.PortalInvitations;
44

5-
public record GenerateInviteLinkCommand(Guid PortalInvitation, InviteType InviteType, int ValidDays) : IRequest<GenerateInviteLinkCommandResponse>;
5+
public record GenerateInviteLinkCommand(Guid PortalInvitation, int ValidDays) : IRequest<GenerateInviteLinkCommandResponse>;
66
public record GenerateInviteLinkCommandResponse(Guid PortalInvitation, string VerificationLink);
7-
8-
public enum InviteType
9-
{
10-
CharacterReference,
11-
WorkExperienceReference
12-
}

src/ECER.Managers.Admin/InviteLinkHandlers.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public async Task<GenerateInviteLinkCommandResponse> Handle(GenerateInviteLinkCo
1313
{
1414
ArgumentNullException.ThrowIfNull(request);
1515

16-
var response = await transformationEngine.Transform(new EncryptInviteTokenRequest(request.PortalInvitation, request.InviteType, request.ValidDays))! as EncryptInviteTokenResponse ?? throw new InvalidCastException("Invalid response type");
16+
var response = await transformationEngine.Transform(new EncryptInviteTokenRequest(request.PortalInvitation, request.ValidDays))! as EncryptInviteTokenResponse ?? throw new InvalidCastException("Invalid response type");
1717
string verificationLink = $"{portalAppSettings.Value.BaseUrl}/{portalAppSettings.Value.ReferenceVerificationRoute}/{response.VerificationToken}";
1818
return new GenerateInviteLinkCommandResponse(response.PortalInvitation, verificationLink);
1919
}

src/ECER.Managers.Registry/ApplicationHandlers.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ public async Task<ReferenceSubmissionResult> Handle(SubmitReferenceCommand reque
204204

205205
var transformationResponse = await transformationEngine.Transform(new DecryptInviteTokenRequest(request.Token))! as DecryptInviteTokenResponse ?? throw new InvalidCastException("Invalid response type");
206206
if (transformationResponse.PortalInvitation == Guid.Empty) return ReferenceSubmissionResult.Failure("Invalid Token");
207-
207+
208208
var portalInvitation = await portalInvitationRepository.Query(new PortalInvitationQuery(transformationResponse.PortalInvitation), cancellationToken);
209209
if (portalInvitation.StatusCode != PortalInvitationStatusCode.Sent) return ReferenceSubmissionResult.Failure("Portal Invitation is not valid or expired");
210210

src/ECER.Tests/Integration/Managers/Admin/InviteLinkHandlerTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public InviteLinkHandlerTests(ITestOutputHelper output, ApiWebAppFixture fixture
1616
public async Task CanTransformPortalInvitationToLink()
1717
{
1818
var bus = Fixture.Services.GetRequiredService<IMediator>();
19-
var response = await bus.Send(new GenerateInviteLinkCommand(Guid.NewGuid(), InviteType.CharacterReference, 7), CancellationToken.None);
19+
var response = await bus.Send(new GenerateInviteLinkCommand(Guid.NewGuid(), 7), CancellationToken.None);
2020
response.ShouldNotBeNull();
2121
}
2222
}

src/ECER.Tests/Integration/RegistryApi/PortalInvitationTests.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using Microsoft.Extensions.DependencyInjection;
77
using Shouldly;
88
using Xunit.Abstractions;
9-
using InviteType = ECER.Managers.Admin.Contract.PortalInvitations.InviteType;
109

1110
namespace ECER.Tests.Integration.RegistryApi;
1211

@@ -21,7 +20,7 @@ public async Task CanGetPortalInvitationData()
2120
{
2221
var bus = Fixture.Services.GetRequiredService<IMediator>();
2322
var portalInvitation = Fixture.portalInvitationWorkExperienceReferenceIdSubmit;
24-
var packingResponse = await bus.Send(new GenerateInviteLinkCommand(portalInvitation, InviteType.WorkExperienceReference, 7), CancellationToken.None);
23+
var packingResponse = await bus.Send(new GenerateInviteLinkCommand(portalInvitation, 7), CancellationToken.None);
2524
packingResponse.ShouldNotBeNull();
2625

2726
var token = packingResponse.VerificationLink.Split('/')[2];
@@ -44,7 +43,7 @@ public async Task DoNotReturnCompletedPortalInvitationData()
4443
{
4544
var bus = Fixture.Services.GetRequiredService<IMediator>();
4645
var portalInvitation = Fixture.portalInvitationWorkExperienceReferenceIdCompleted;
47-
var packingResponse = await bus.Send(new GenerateInviteLinkCommand(portalInvitation, InviteType.WorkExperienceReference, 7), CancellationToken.None);
46+
var packingResponse = await bus.Send(new GenerateInviteLinkCommand(portalInvitation, 7), CancellationToken.None);
4847
packingResponse.ShouldNotBeNull();
4948

5049
var token = packingResponse.VerificationLink.Split('/')[2];

src/ECER.Tests/Integration/RegistryApi/ReferenceTests.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
using Microsoft.Extensions.DependencyInjection;
88
using Shouldly;
99
using Xunit.Abstractions;
10-
using InviteType = ECER.Managers.Admin.Contract.PortalInvitations.InviteType;
1110

1211
namespace ECER.Tests.Integration.RegistryApi;
1312

@@ -182,7 +181,7 @@ public async Task SubmitCharacterReference_ShouldReturnOk()
182181
{
183182
var bus = Fixture.Services.GetRequiredService<IMediator>();
184183
var portalInvitation = Fixture.portalInvitationCharacterReferenceIdSubmit;
185-
var packingResponse = await bus.Send(new GenerateInviteLinkCommand(portalInvitation, InviteType.CharacterReference, 7), CancellationToken.None);
184+
var packingResponse = await bus.Send(new GenerateInviteLinkCommand(portalInvitation, 7), CancellationToken.None);
186185
packingResponse.ShouldNotBeNull();
187186

188187
var token = packingResponse.VerificationLink.Split('/')[2];
@@ -199,7 +198,7 @@ public async Task Submit500HoursTypeWorkExperienceReference_ShouldReturnOk()
199198
{
200199
var bus = Fixture.Services.GetRequiredService<IMediator>();
201200
var portalInvitation = Fixture.portalInvitationWorkExperienceReferenceIdSubmit;
202-
var packingResponse = await bus.Send(new GenerateInviteLinkCommand(portalInvitation, InviteType.WorkExperienceReference, 7), CancellationToken.None);
201+
var packingResponse = await bus.Send(new GenerateInviteLinkCommand(portalInvitation, 7), CancellationToken.None);
203202
packingResponse.ShouldNotBeNull();
204203

205204
var token = packingResponse.VerificationLink.Split('/')[2];
@@ -216,7 +215,7 @@ public async Task Submit400HoursTypeWorkExperienceReference_ShouldReturnOk()
216215
{
217216
var bus = Fixture.Services.GetRequiredService<IMediator>();
218217
var portalInvitation = Fixture.portalInvitation400HoursTypeWorkExperienceReferenceIdSubmit;
219-
var packingResponse = await bus.Send(new GenerateInviteLinkCommand(portalInvitation, InviteType.WorkExperienceReference, 7), CancellationToken.None);
218+
var packingResponse = await bus.Send(new GenerateInviteLinkCommand(portalInvitation, 7), CancellationToken.None);
220219
packingResponse.ShouldNotBeNull();
221220

222221
var token = packingResponse.VerificationLink.Split('/')[2];
@@ -233,7 +232,7 @@ public async Task OptOutCharacterReference_ShouldReturnOk()
233232
{
234233
var bus = Fixture.Services.GetRequiredService<IMediator>();
235234
var portalInvitation = Fixture.portalInvitationCharacterReferenceIdOptout;
236-
var packingResponse = await bus.Send(new GenerateInviteLinkCommand(portalInvitation, InviteType.CharacterReference, 7), CancellationToken.None);
235+
var packingResponse = await bus.Send(new GenerateInviteLinkCommand(portalInvitation, 7), CancellationToken.None);
237236
packingResponse.ShouldNotBeNull();
238237

239238
var token = packingResponse.VerificationLink.Split('/')[2];
@@ -250,7 +249,7 @@ public async Task OptOutWorkExperienceReference_ShouldReturnOk()
250249
{
251250
var bus = Fixture.Services.GetRequiredService<IMediator>();
252251
var portalInvitation = Fixture.portalInvitationWorkExperienceReferenceIdOptout;
253-
var packingResponse = await bus.Send(new GenerateInviteLinkCommand(portalInvitation, InviteType.WorkExperienceReference, 7), CancellationToken.None);
252+
var packingResponse = await bus.Send(new GenerateInviteLinkCommand(portalInvitation, 7), CancellationToken.None);
254253
packingResponse.ShouldNotBeNull();
255254

256255
var token = packingResponse.VerificationLink.Split('/')[2];

0 commit comments

Comments
 (0)