// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.Rules; using Squidex.Domain.Apps.Core.Rules.Triggers; using Squidex.Domain.Apps.Core.TestHelpers; using Squidex.Domain.Apps.Entities.TestHelpers; using Squidex.Flows.CronJobs; using Squidex.Infrastructure.Validation; namespace Squidex.Domain.Apps.Entities.Rules.DomainObject.Guards.Triggers; public class CronJobTriggerValidationTests : GivenContext, IClassFixture { private readonly ICronJobManager cronJobs = A.Fake>(); private readonly RuleValidator validator; public CronJobTriggerValidationTests() { A.CallTo(() => cronJobs.IsValidCronExpression(A._)) .Returns(true); A.CallTo(() => cronJobs.IsValidTimezone(A._)) .Returns(true); validator = new RuleValidator(null!, cronJobs, AppProvider); } [Fact] public async Task Should_add_error_if_expression_is_not_valid() { var trigger = new CronJobTrigger { CronExpression = "invalid", }; A.CallTo(() => cronJobs.IsValidCronExpression("invalid")) .Returns(false); var errors = await ValidateAsync(trigger); errors.Should().BeEquivalentTo( [ new ValidationError("Cron Expression is invalid.", "CronExpression"), ]); } [Fact] public async Task Should_add_error_if_timezone_is_not_valid() { var trigger = new CronJobTrigger { CronTimezone = "invalid", }; A.CallTo(() => cronJobs.IsValidTimezone("invalid")) .Returns(false); var errors = await ValidateAsync(trigger); errors.Should().BeEquivalentTo( [ new ValidationError("Timezone is not a valid IANA identifier.", "CronTimezone"), ]); } [Fact] public async Task Should_not_add_error_if_valid() { var trigger = new CronJobTrigger(); var errors = await ValidateAsync(trigger); Assert.Empty(errors); } private async Task> ValidateAsync(RuleTrigger trigger) { var errors = new List(); await validator.ValidateTriggerAsync(trigger, AppId.Id, (m, p) => errors.Add(new ValidationError(m, p)), CancellationToken); return errors; } }