diff --git a/src/Digdir.Tool.Dialogporten.GenerateFakeData/DialogGenerator.cs b/src/Digdir.Tool.Dialogporten.GenerateFakeData/DialogGenerator.cs index 62f226ee0..a9bb58561 100644 --- a/src/Digdir.Tool.Dialogporten.GenerateFakeData/DialogGenerator.cs +++ b/src/Digdir.Tool.Dialogporten.GenerateFakeData/DialogGenerator.cs @@ -36,7 +36,8 @@ public static CreateDialogCommand GenerateFakeDialog( List? attachments = null, List? guiActions = null, List? apiActions = null, - List? activities = null) + List? activities = null, + List? transmissions = null) { return GenerateFakeDialogs( seed, @@ -60,12 +61,12 @@ public static CreateDialogCommand GenerateFakeDialog( attachments, guiActions, apiActions, - activities + activities, + transmissions )[0]; } - public static List GenerateFakeDialogs( - int? seed = null, + public static List GenerateFakeDialogs(int? seed = null, int count = 1, Guid? id = null, string? serviceResource = null, @@ -86,7 +87,8 @@ public static List GenerateFakeDialogs( List? attachments = null, List? guiActions = null, List? apiActions = null, - List? activities = null) + List? activities = null, + List? transmissions = null) { Randomizer.Seed = seed.HasValue ? new Random(seed.Value) : new Random(); return new Faker() @@ -108,6 +110,7 @@ public static List GenerateFakeDialogs( .RuleFor(o => o.ApiActions, _ => apiActions ?? GenerateFakeDialogApiActions()) .RuleFor(o => o.Activities, _ => activities ?? GenerateFakeDialogActivities()) .RuleFor(o => o.Process, f => process ?? GenerateFakeProcessUri()) + .RuleFor(o => o.Transmissions, f => transmissions ?? GenerateFakeDialogTransmissions()) .Generate(count); } @@ -121,7 +124,8 @@ public static CreateDialogCommand GenerateSimpleFakeDialog(Guid? id = null) attachments: [], guiActions: [], apiActions: [], - searchTags: []); + searchTags: [], + transmissions: []); } public static string GenerateFakeResource(Func? generator = null) diff --git a/src/Digdir.Tool.Dialogporten.GenerateFakeData/Program.cs b/src/Digdir.Tool.Dialogporten.GenerateFakeData/Program.cs index 93896625a..70fc67ee4 100644 --- a/src/Digdir.Tool.Dialogporten.GenerateFakeData/Program.cs +++ b/src/Digdir.Tool.Dialogporten.GenerateFakeData/Program.cs @@ -35,9 +35,7 @@ private static async Task RunAsync(Options options) Randomizer.Seed = new Random(options.Seed); var dialogs = DialogGenerator.GenerateFakeDialogs( seed: new Randomizer().Number(int.MaxValue), - serviceResourceGenerator: () => MaybeGetRandomResource(options), - partyGenerator: () => MaybeGetRandomParty(options), - count: options.Count); + count: options.Count, serviceResourceGenerator: () => MaybeGetRandomResource(options), partyGenerator: () => MaybeGetRandomParty(options)); var serialized = JsonSerializer.Serialize(dialogs, JsonSerializerOptions); Console.WriteLine(serialized); return; @@ -118,9 +116,7 @@ private static void ProduceDialogs(Options options, BlockingCollection<(int, Cre var dialogsToGenerate = Math.Min(DialogsPerBatch, totalDialogs - dialogCounter); var dialogs = DialogGenerator.GenerateFakeDialogs( seed: new Randomizer().Number(int.MaxValue), - serviceResourceGenerator: () => MaybeGetRandomResource(options), - partyGenerator: () => MaybeGetRandomParty(options), - count: dialogsToGenerate).Take(dialogsToGenerate); + count: dialogsToGenerate, serviceResourceGenerator: () => MaybeGetRandomResource(options), partyGenerator: () => MaybeGetRandomParty(options)).Take(dialogsToGenerate); foreach (var dialog in dialogs) { dialogQueue.Add((dialogCounter + 1, dialog), cancellationToken); diff --git a/tests/Digdir.Domain.Dialogporten.Application.Integration.Tests/Features/V1/ServiceOwner/Dialogs/Commands/CreateDialogTests.cs b/tests/Digdir.Domain.Dialogporten.Application.Integration.Tests/Features/V1/ServiceOwner/Dialogs/Commands/CreateDialogTests.cs index db17226ed..58accba55 100644 --- a/tests/Digdir.Domain.Dialogporten.Application.Integration.Tests/Features/V1/ServiceOwner/Dialogs/Commands/CreateDialogTests.cs +++ b/tests/Digdir.Domain.Dialogporten.Application.Integration.Tests/Features/V1/ServiceOwner/Dialogs/Commands/CreateDialogTests.cs @@ -1,5 +1,8 @@ -using Digdir.Domain.Dialogporten.Application.Features.V1.ServiceOwner.Dialogs.Queries.Get; +using Castle.Core.Logging; +using Digdir.Domain.Dialogporten.Application.Features.V1.Common.Localizations; +using Digdir.Domain.Dialogporten.Application.Features.V1.ServiceOwner.Dialogs.Queries.Get; using Digdir.Domain.Dialogporten.Application.Integration.Tests.Common; +using Digdir.Domain.Dialogporten.Domain.Dialogs.Entities.Transmissions; using Digdir.Tool.Dialogporten.GenerateFakeData; using FluentAssertions; using static Digdir.Domain.Dialogporten.Application.Integration.Tests.UuiDv7Utils; @@ -203,4 +206,70 @@ public async Task Can_Create_Dialog_With_UpdatedAt_And_CreatedAt_Being_Equal() response.TryPickT0(out var success, out _).Should().BeTrue(); success.Should().NotBeNull(); } + + [Fact] + public async Task Cannot_Create_Transmission_Without_Content() + { + // Arrange + var transmission = DialogGenerator.GenerateFakeDialogTransmissions(1)[0]; + transmission.Content = null!; + + var createDialogCommand = DialogGenerator.GenerateSimpleFakeDialog(); + createDialogCommand.Transmissions = [transmission]; + + // Act + var response = await Application.Send(createDialogCommand); + + // Assert + response.TryPickT2(out var validationError, out _).Should().BeTrue(); + validationError.Should().NotBeNull(); + validationError.Errors.Should().HaveCount(1); + validationError.Errors.First().ErrorMessage.Should().Contain("'Content' must not be empty"); + } + + [Fact] + public async Task Cannot_Create_Transmission_Without_Content_Value() + { + // Arrange + var transmission = DialogGenerator.GenerateFakeDialogTransmissions(1)[0]; + transmission.Content.Summary.Value = []; + transmission.Content.Title.Value = []; + + var createDialogCommand = DialogGenerator.GenerateSimpleFakeDialog(); + createDialogCommand.Transmissions = [transmission]; + + // Act + var response = await Application.Send(createDialogCommand); + + // Assert + response.TryPickT2(out var validationError, out _).Should().BeTrue(); + validationError.Should().NotBeNull(); + validationError.Errors + .Count(e => e.PropertyName.Contains(nameof(createDialogCommand.Content))) + .Should() + .Be(2); + } + + [Fact] + public async Task Cannot_Create_Transmission_With_Empty_Content_Localization_Values() + { + // Arrange + var transmission = DialogGenerator.GenerateFakeDialogTransmissions(1)[0]; + transmission.Content.Summary.Value = [new LocalizationDto { LanguageCode = "nb", Value = "" }]; + transmission.Content.Title.Value = [new LocalizationDto { LanguageCode = "nb", Value = "" }]; + + var createDialogCommand = DialogGenerator.GenerateSimpleFakeDialog(); + createDialogCommand.Transmissions = [transmission]; + + // Act + var response = await Application.Send(createDialogCommand); + + // Assert + response.TryPickT2(out var validationError, out _).Should().BeTrue(); + validationError.Should().NotBeNull(); + validationError.Errors + .Count(e => e.PropertyName.Contains(nameof(createDialogCommand.Content))) + .Should() + .Be(2); + } }