From d143fae501eed799cfd09f5534e99eee65e7e210 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Romeiro?= Date: Sun, 5 Mar 2023 01:54:41 +0000 Subject: [PATCH 01/11] Fixed dates in rulesframework and typo in priorityCriteria --- src/Rules.Framework/IRulesEngineOptions.cs | 2 +- src/Rules.Framework/RulesEngine.cs | 11 +++-------- src/Rules.Framework/RulesEngineOptions.cs | 4 ++-- .../Tests/Scenario2/CarInsuranceAdvisorTests.cs | 10 +++++----- tests/Rules.Framework.Tests/RulesEngineTests.cs | 4 ++-- 5 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/Rules.Framework/IRulesEngineOptions.cs b/src/Rules.Framework/IRulesEngineOptions.cs index 2e187af6..e19b04b9 100644 --- a/src/Rules.Framework/IRulesEngineOptions.cs +++ b/src/Rules.Framework/IRulesEngineOptions.cs @@ -22,6 +22,6 @@ public interface IRulesEngineOptions /// /// Gets the priority criteria to untie when multiples rules are matched. /// - public PriorityCriterias PriotityCriteria { get; } + public PriorityCriterias PriorityCriteria { get; } } } \ No newline at end of file diff --git a/src/Rules.Framework/RulesEngine.cs b/src/Rules.Framework/RulesEngine.cs index 4f4ae58a..1107711f 100644 --- a/src/Rules.Framework/RulesEngine.cs +++ b/src/Rules.Framework/RulesEngine.cs @@ -74,7 +74,7 @@ public Task AddRuleAsync(Rule /// Rules engine priority criterias public PriorityCriterias GetPriorityCriteria() { - return this.rulesEngineOptions.PriotityCriteria; + return this.rulesEngineOptions.PriorityCriteria; } /// @@ -129,7 +129,7 @@ public Task>> MatchManyAsync(TCon }; var dateBegin = matchDateTime.Date; - var dateEnd = matchDateTime.Date.AddDays(1); + var dateEnd = matchDateTime.Date; return this.MatchAsync(contentType, dateBegin, dateEnd, conditions, evaluationOptions); } @@ -203,11 +203,6 @@ public async Task>> SearchAsync(S MatchMode = MatchModes.Search, }; - if (dateBegin == dateEnd) - { - dateEnd = dateBegin.AddDays(1); - } - return await this.MatchAsync(searchArgs.ContentType, dateBegin, dateEnd, searchArgs.Conditions, evaluationOptions).ConfigureAwait(false); } @@ -372,7 +367,7 @@ private async Task>> MatchAsync( private Rule SelectRuleByPriorityCriteria(IEnumerable> rules) { - return this.rulesEngineOptions.PriotityCriteria == PriorityCriterias.BottommostRuleWins + return this.rulesEngineOptions.PriorityCriteria == PriorityCriterias.BottommostRuleWins ? rules.OrderByDescending(r => r.Priority).First() : rules.OrderBy(r => r.Priority).First(); } diff --git a/src/Rules.Framework/RulesEngineOptions.cs b/src/Rules.Framework/RulesEngineOptions.cs index 9080f40f..75e83897 100644 --- a/src/Rules.Framework/RulesEngineOptions.cs +++ b/src/Rules.Framework/RulesEngineOptions.cs @@ -31,7 +31,7 @@ public static RulesEngineOptions NewWithDefaults() RulesEngineOptions rulesEngineOptions = new RulesEngineOptions { MissingConditionBehavior = MissingConditionBehaviors.UseDataTypeDefault, - PriotityCriteria = PriorityCriterias.TopmostRuleWins + PriorityCriteria = PriorityCriterias.TopmostRuleWins }; rulesEngineOptions.DataTypeDefaults[DataTypes.Boolean] = default(bool); @@ -61,6 +61,6 @@ public static RulesEngineOptions NewWithDefaults() /// /// Gets or sets the priority criteria to untie when multiples rules are matched. /// - public PriorityCriterias PriotityCriteria { get; set; } + public PriorityCriterias PriorityCriteria { get; set; } } } \ No newline at end of file diff --git a/tests/Rules.Framework.IntegrationTests/Tests/Scenario2/CarInsuranceAdvisorTests.cs b/tests/Rules.Framework.IntegrationTests/Tests/Scenario2/CarInsuranceAdvisorTests.cs index e6d9f794..fec3b9f6 100644 --- a/tests/Rules.Framework.IntegrationTests/Tests/Scenario2/CarInsuranceAdvisorTests.cs +++ b/tests/Rules.Framework.IntegrationTests/Tests/Scenario2/CarInsuranceAdvisorTests.cs @@ -49,7 +49,7 @@ public async Task GetCarInsuranceAdvice_ClaimDescriptionContionsAlcoholOrDrugs_R .SetDataSource(rulesDataSource) .Configure(reo => { - reo.PriotityCriteria = PriorityCriterias.BottommostRuleWins; + reo.PriorityCriteria = PriorityCriterias.BottommostRuleWins; }) .Build(); @@ -122,7 +122,7 @@ public async Task GetCarInsuranceAdvice_RepairCostsNotWorthIt_ReturnsRefusePayme .SetDataSource(rulesDataSource) .Configure(reo => { - reo.PriotityCriteria = PriorityCriterias.BottommostRuleWins; + reo.PriorityCriteria = PriorityCriterias.BottommostRuleWins; }) .Build(); @@ -168,7 +168,7 @@ public async Task GetCarInsuranceAdvice_SearchForRulesExcludingRulesWithoutSearc .SetDataSource(rulesDataSource) .Configure(reo => { - reo.PriotityCriteria = PriorityCriterias.BottommostRuleWins; + reo.PriorityCriteria = PriorityCriterias.BottommostRuleWins; }) .Build(); @@ -208,7 +208,7 @@ public async Task GetCarInsuranceAdvice_SearchForRulesWithRepairCostsGreaterThan .SetDataSource(rulesDataSource) .Configure(reo => { - reo.PriotityCriteria = PriorityCriterias.BottommostRuleWins; + reo.PriorityCriteria = PriorityCriterias.BottommostRuleWins; }) .Build(); @@ -251,7 +251,7 @@ public async Task GetCarInsuranceAdvice_UpdatesRuleAndAddsNewOneAndEvaluates_Ret .SetDataSource(rulesDataSource) .Configure(reo => { - reo.PriotityCriteria = PriorityCriterias.BottommostRuleWins; + reo.PriorityCriteria = PriorityCriterias.BottommostRuleWins; }) .Build(); diff --git a/tests/Rules.Framework.Tests/RulesEngineTests.cs b/tests/Rules.Framework.Tests/RulesEngineTests.cs index d8e693ac..421d5759 100644 --- a/tests/Rules.Framework.Tests/RulesEngineTests.cs +++ b/tests/Rules.Framework.Tests/RulesEngineTests.cs @@ -56,7 +56,7 @@ public async Task AddRuleAsync_GivenEmptyRuleDataSource_AddsRuleSuccesfully() IValidatorProvider validatorProvider = Mock.Of(); RulesEngineOptions rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); - rulesEngineOptions.PriotityCriteria = PriorityCriterias.BottommostRuleWins; + rulesEngineOptions.PriorityCriteria = PriorityCriterias.BottommostRuleWins; RulesEngine sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); @@ -284,7 +284,7 @@ public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesFo IValidatorProvider validatorProvider = Mock.Of(); RulesEngineOptions rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); - rulesEngineOptions.PriotityCriteria = PriorityCriterias.BottommostRuleWins; + rulesEngineOptions.PriorityCriteria = PriorityCriterias.BottommostRuleWins; RulesEngine sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); From 130274fc537044dea08e17de8b8f3b8b71a6154a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Romeiro?= Date: Mon, 6 Mar 2023 10:27:46 +0000 Subject: [PATCH 02/11] Set dates parameters in matchasync as full datettimes --- src/Rules.Framework/RulesEngine.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Rules.Framework/RulesEngine.cs b/src/Rules.Framework/RulesEngine.cs index 1107711f..3733d561 100644 --- a/src/Rules.Framework/RulesEngine.cs +++ b/src/Rules.Framework/RulesEngine.cs @@ -128,8 +128,8 @@ public Task>> MatchManyAsync(TCon MatchMode = MatchModes.Exact, }; - var dateBegin = matchDateTime.Date; - var dateEnd = matchDateTime.Date; + var dateBegin = matchDateTime; + var dateEnd = matchDateTime; return this.MatchAsync(contentType, dateBegin, dateEnd, conditions, evaluationOptions); } From d76a04a79d68ea652374c598fb65c8e5f7983532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Romeiro?= Date: Mon, 6 Mar 2023 12:12:27 +0000 Subject: [PATCH 03/11] Re-added PriotityCriteria as obsolete --- src/Rules.Framework/RulesEngineOptions.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Rules.Framework/RulesEngineOptions.cs b/src/Rules.Framework/RulesEngineOptions.cs index 75e83897..4de10ea0 100644 --- a/src/Rules.Framework/RulesEngineOptions.cs +++ b/src/Rules.Framework/RulesEngineOptions.cs @@ -1,5 +1,6 @@ namespace Rules.Framework { + using System; using System.Collections.Generic; using System.Linq; using Rules.Framework.Core; @@ -58,6 +59,12 @@ public static RulesEngineOptions NewWithDefaults() /// public MissingConditionBehaviors MissingConditionBehavior { get; set; } + /// + /// Gets or sets the priority criteria to untie when multiples rules are matched. + /// + [Obsolete("This property has a typo and has been replaced by PriorityCriteria.")] + public PriorityCriterias PriotityCriteria { get; set; } + /// /// Gets or sets the priority criteria to untie when multiples rules are matched. /// From 965e320dad2b2a756f124f573a0c3d96d1188b2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Romeiro?= Date: Mon, 6 Mar 2023 12:36:29 +0000 Subject: [PATCH 04/11] replaced explicit types by implicit types in tests --- .../Tests/Scenario1/BodyMassIndexTests.cs | 68 ++++---- .../Scenario2/CarInsuranceAdvisorTests.cs | 148 +++++++++--------- .../BuildingSecuritySystemControlTests.cs | 47 +++--- .../Tests/Scenario4/DiscountCampaignTests.cs | 107 +++++++------ .../Rules.Framework.Tests/RulesEngineTests.cs | 128 +++++++-------- 5 files changed, 250 insertions(+), 248 deletions(-) diff --git a/tests/Rules.Framework.IntegrationTests/Tests/Scenario1/BodyMassIndexTests.cs b/tests/Rules.Framework.IntegrationTests/Tests/Scenario1/BodyMassIndexTests.cs index 95235b09..30db0ba1 100644 --- a/tests/Rules.Framework.IntegrationTests/Tests/Scenario1/BodyMassIndexTests.cs +++ b/tests/Rules.Framework.IntegrationTests/Tests/Scenario1/BodyMassIndexTests.cs @@ -22,13 +22,13 @@ public async Task AddRule_AddingNewRuleFromScratchWithAgeConditionAtPriority1And new InMemoryRulesDataSource(Enumerable.Empty>()); // Arrange - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) .Build(); - RuleBuilderResult newRuleResult1 = RuleBuilder.NewRule() + var newRuleResult1 = RuleBuilder.NewRule() .WithName("Body Mass Index up to 18 years formula") .WithDateBegin(DateTime.Parse("2018-01-01")) .WithContentContainer(new ContentContainer(ContentTypes.BodyMassIndexFormula, (t) => new Formula @@ -44,10 +44,10 @@ public async Task AddRule_AddingNewRuleFromScratchWithAgeConditionAtPriority1And .Build()) .Build(); - Rule newRule1 = newRuleResult1.Rule; - RuleAddPriorityOption ruleAddPriorityOption1 = RuleAddPriorityOption.ByPriorityNumber(1); + var newRule1 = newRuleResult1.Rule; + var ruleAddPriorityOption1 = RuleAddPriorityOption.ByPriorityNumber(1); - RuleBuilderResult ruleBuilderResult2 = RuleBuilder.NewRule() + var ruleBuilderResult2 = RuleBuilder.NewRule() .WithName("Sample rule") .WithDateBegin(DateTime.Parse("2021-01-01")) .WithContentContainer(new ContentContainer(ContentTypes.BodyMassIndexFormula, (t) => new Formula @@ -57,12 +57,12 @@ public async Task AddRule_AddingNewRuleFromScratchWithAgeConditionAtPriority1And })) .Build(); - Rule newRule2 = ruleBuilderResult2.Rule; - RuleAddPriorityOption ruleAddPriorityOption2 = RuleAddPriorityOption.ByPriorityNumber(4); + var newRule2 = ruleBuilderResult2.Rule; + var ruleAddPriorityOption2 = RuleAddPriorityOption.ByPriorityNumber(4); // Act - RuleOperationResult ruleOperationResult1 = await rulesEngine.AddRuleAsync(newRule1, ruleAddPriorityOption1).ConfigureAwait(false); - RuleOperationResult ruleOperationResult2 = await rulesEngine.AddRuleAsync(newRule2, ruleAddPriorityOption2).ConfigureAwait(false); + var ruleOperationResult1 = await rulesEngine.AddRuleAsync(newRule1, ruleAddPriorityOption1).ConfigureAwait(false); + var ruleOperationResult2 = await rulesEngine.AddRuleAsync(newRule2, ruleAddPriorityOption2).ConfigureAwait(false); // Assert ruleOperationResult1.Should().NotBeNull(); @@ -71,7 +71,7 @@ public async Task AddRule_AddingNewRuleFromScratchWithAgeConditionAtPriority1And ruleOperationResult2.Should().NotBeNull(); ruleOperationResult2.IsSuccess.Should().BeTrue(); - IEnumerable> rules = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs()).ConfigureAwait(false); + var rules = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs()).ConfigureAwait(false); rules.Should().NotBeNull().And.HaveCount(2); rules.Should().ContainEquivalentOf(newRule1); newRule1.Priority.Should().Be(1, "rule should to priority 1 if inserted at priority 1"); @@ -82,16 +82,16 @@ public async Task AddRule_AddingNewRuleFromScratchWithAgeConditionAtPriority1And public async Task AddRule_AddingNewRuleWithAgeConditionAtPriority1AndNewRuleAtPriority3_NewRuleIsInsertedAndExistentRulePriorityUpdatedAndNewRuleInsertedAfter() { // Arrange - IRulesDataSource rulesDataSource = await RulesFromJsonFile.Load + var rulesDataSource = await RulesFromJsonFile.Load .FromJsonFileAsync(DataSourceFilePath); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) .Build(); - RuleBuilderResult newRuleResult1 = RuleBuilder.NewRule() + var newRuleResult1 = RuleBuilder.NewRule() .WithName("Body Mass Index up to 18 years formula") .WithDateBegin(DateTime.Parse("2018-01-01")) .WithContentContainer(new ContentContainer(ContentTypes.BodyMassIndexFormula, (t) => new Formula @@ -107,10 +107,10 @@ public async Task AddRule_AddingNewRuleWithAgeConditionAtPriority1AndNewRuleAtPr .Build()) .Build(); - Rule newRule1 = newRuleResult1.Rule; - RuleAddPriorityOption ruleAddPriorityOption1 = RuleAddPriorityOption.ByPriorityNumber(1); + var newRule1 = newRuleResult1.Rule; + var ruleAddPriorityOption1 = RuleAddPriorityOption.ByPriorityNumber(1); - RuleBuilderResult ruleBuilderResult2 = RuleBuilder.NewRule() + var ruleBuilderResult2 = RuleBuilder.NewRule() .WithName("Sample rule") .WithDateBegin(DateTime.Parse("2021-01-01")) .WithContentContainer(new ContentContainer(ContentTypes.BodyMassIndexFormula, (t) => new Formula @@ -120,12 +120,12 @@ public async Task AddRule_AddingNewRuleWithAgeConditionAtPriority1AndNewRuleAtPr })) .Build(); - Rule newRule2 = ruleBuilderResult2.Rule; - RuleAddPriorityOption ruleAddPriorityOption2 = RuleAddPriorityOption.ByPriorityNumber(4); + var newRule2 = ruleBuilderResult2.Rule; + var ruleAddPriorityOption2 = RuleAddPriorityOption.ByPriorityNumber(4); // Act - RuleOperationResult ruleOperationResult1 = await rulesEngine.AddRuleAsync(newRule1, ruleAddPriorityOption1).ConfigureAwait(false); - RuleOperationResult ruleOperationResult2 = await rulesEngine.AddRuleAsync(newRule2, ruleAddPriorityOption2).ConfigureAwait(false); + var ruleOperationResult1 = await rulesEngine.AddRuleAsync(newRule1, ruleAddPriorityOption1).ConfigureAwait(false); + var ruleOperationResult2 = await rulesEngine.AddRuleAsync(newRule2, ruleAddPriorityOption2).ConfigureAwait(false); // Assert ruleOperationResult1.Should().NotBeNull(); @@ -134,7 +134,7 @@ public async Task AddRule_AddingNewRuleWithAgeConditionAtPriority1AndNewRuleAtPr ruleOperationResult2.Should().NotBeNull(); ruleOperationResult2.IsSuccess.Should().BeTrue(); - IEnumerable> rules = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs()).ConfigureAwait(false); + var rules = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs()).ConfigureAwait(false); rules.Should().NotBeNull().And.HaveCount(3); rules.Should().ContainEquivalentOf(newRule1); newRule1.Priority.Should().Be(1, "rule should to priority 1 if inserted at priority 1"); @@ -145,16 +145,16 @@ public async Task AddRule_AddingNewRuleWithAgeConditionAtPriority1AndNewRuleAtPr public async Task AddRule_AddingNewRuleWithAgeConditionOnTop_NewRuleIsInsertedAndExistentRulePriorityUpdated() { // Arrange - IRulesDataSource rulesDataSource = await RulesFromJsonFile.Load + var rulesDataSource = await RulesFromJsonFile.Load .FromJsonFileAsync(DataSourceFilePath); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) .Build(); - RuleBuilderResult newRuleResult = RuleBuilder.NewRule() + var newRuleResult = RuleBuilder.NewRule() .WithName("Body Mass Index up to 18 years formula") .WithDateBegin(DateTime.Parse("2018-01-01")) .WithContentContainer(new ContentContainer(ContentTypes.BodyMassIndexFormula, (t) => new Formula @@ -170,20 +170,20 @@ public async Task AddRule_AddingNewRuleWithAgeConditionOnTop_NewRuleIsInsertedAn .Build()) .Build(); - Rule newRule = newRuleResult.Rule; - RuleAddPriorityOption ruleAddPriorityOption = new RuleAddPriorityOption + var newRule = newRuleResult.Rule; + var ruleAddPriorityOption = new RuleAddPriorityOption { PriorityOption = PriorityOptions.AtTop }; // Act - RuleOperationResult ruleOperationResult = await rulesEngine.AddRuleAsync(newRule, ruleAddPriorityOption).ConfigureAwait(false); + var ruleOperationResult = await rulesEngine.AddRuleAsync(newRule, ruleAddPriorityOption).ConfigureAwait(false); // Assert ruleOperationResult.Should().NotBeNull(); ruleOperationResult.IsSuccess.Should().BeTrue(); - IEnumerable> rules = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs()).ConfigureAwait(false); + var rules = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs()).ConfigureAwait(false); rules.Should().NotBeNull().And.HaveCount(2); rules.Should().ContainEquivalentOf(newRule); newRule.Priority.Should().Be(1, "rule should to priority 1 if inserted at top."); @@ -196,24 +196,24 @@ public async Task BodyMassIndex_NoConditions_ReturnsDefaultFormula() string expectedFormulaDescription = "Body Mass Index default formula"; string expectedFormulaValue = "weight / (height ^ 2)"; const ContentTypes expectedContent = ContentTypes.BodyMassIndexFormula; - DateTime expectedMatchDate = new DateTime(2018, 06, 01); - Condition[] expectedConditions = new Condition[0]; + var expectedMatchDate = new DateTime(2018, 06, 01); + var expectedConditions = new Condition[0]; - IRulesDataSource rulesDataSource = await RulesFromJsonFile.Load + var rulesDataSource = await RulesFromJsonFile.Load .FromJsonFileAsync(DataSourceFilePath); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) .Build(); // Act - Rule actual = await rulesEngine.MatchOneAsync(expectedContent, expectedMatchDate, expectedConditions); + var actual = await rulesEngine.MatchOneAsync(expectedContent, expectedMatchDate, expectedConditions); // Assert actual.Should().NotBeNull(); - Formula actualFormula = actual.ContentContainer.GetContentAs(); + var actualFormula = actual.ContentContainer.GetContentAs(); actualFormula.Description.Should().Be(expectedFormulaDescription); actualFormula.Value.Should().Be(expectedFormulaValue); } diff --git a/tests/Rules.Framework.IntegrationTests/Tests/Scenario2/CarInsuranceAdvisorTests.cs b/tests/Rules.Framework.IntegrationTests/Tests/Scenario2/CarInsuranceAdvisorTests.cs index fec3b9f6..4b6d339c 100644 --- a/tests/Rules.Framework.IntegrationTests/Tests/Scenario2/CarInsuranceAdvisorTests.cs +++ b/tests/Rules.Framework.IntegrationTests/Tests/Scenario2/CarInsuranceAdvisorTests.cs @@ -1,11 +1,9 @@ namespace Rules.Framework.IntegrationTests.Tests.Scenario2 { using System; - using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using FluentAssertions; - using Rules.Framework.Builder; using Rules.Framework.Core; using Rules.Framework.IntegrationTests.Common.Scenarios.Scenario2; using Xunit; @@ -18,10 +16,10 @@ public class CarInsuranceAdvisorTests public async Task GetCarInsuranceAdvice_ClaimDescriptionContionsAlcoholOrDrugs_ReturnsPerformInvestigation() { // Arrange - CarInsuranceAdvices expected = CarInsuranceAdvices.PerformInvestigation; + var expected = CarInsuranceAdvices.PerformInvestigation; const ContentTypes expectedContent = ContentTypes.CarInsuranceAdvice; - DateTime expectedMatchDate = new DateTime(2020, 06, 01); - Condition[] expectedConditions = new Condition[] + var expectedMatchDate = new DateTime(2020, 06, 01); + var expectedConditions = new Condition[] { new Condition { @@ -40,20 +38,20 @@ public async Task GetCarInsuranceAdvice_ClaimDescriptionContionsAlcoholOrDrugs_R } }; - IRulesDataSource rulesDataSource = await RulesFromJsonFile.Load + var rulesDataSource = await RulesFromJsonFile.Load .FromJsonFileAsync(DataSourceFilePath, serializedContent: false); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) - .Configure(reo => + .Configure(opt => { - reo.PriorityCriteria = PriorityCriterias.BottommostRuleWins; + opt.PriorityCriteria = PriorityCriterias.BottommostRuleWins; }) .Build(); - RuleBuilderResult ruleBuilderResult = RuleBuilder.NewRule() + var ruleBuilderResult = RuleBuilder.NewRule() .WithName("Car Insurance Advise on on accident under the effect of drugs or alcohol") .WithDateBegin(DateTime.Parse("2020-01-01")) .WithCondition(b => @@ -84,11 +82,11 @@ public async Task GetCarInsuranceAdvice_ClaimDescriptionContionsAlcoholOrDrugs_R // Act await rulesEngine.AddRuleAsync(ruleBuilderResult.Rule, RuleAddPriorityOption.AtBottom).ConfigureAwait(false); - Rule actual = await rulesEngine.MatchOneAsync(expectedContent, expectedMatchDate, expectedConditions); + var actual = await rulesEngine.MatchOneAsync(expectedContent, expectedMatchDate, expectedConditions); // Assert actual.Should().NotBeNull(); - CarInsuranceAdvices actualContent = actual.ContentContainer.GetContentAs(); + var actualContent = actual.ContentContainer.GetContentAs(); actualContent.Should().Be(expected); } @@ -96,10 +94,10 @@ public async Task GetCarInsuranceAdvice_ClaimDescriptionContionsAlcoholOrDrugs_R public async Task GetCarInsuranceAdvice_RepairCostsNotWorthIt_ReturnsRefusePaymentPerFranchise() { // Arrange - CarInsuranceAdvices expected = CarInsuranceAdvices.RefusePaymentPerFranchise; + var expected = CarInsuranceAdvices.RefusePaymentPerFranchise; const ContentTypes expectedContent = ContentTypes.CarInsuranceAdvice; - DateTime expectedMatchDate = new DateTime(2018, 06, 01); - Condition[] expectedConditions = new Condition[] + var expectedMatchDate = new DateTime(2018, 06, 01); + var expectedConditions = new Condition[] { new Condition { @@ -113,25 +111,25 @@ public async Task GetCarInsuranceAdvice_RepairCostsNotWorthIt_ReturnsRefusePayme } }; - IRulesDataSource rulesDataSource = await RulesFromJsonFile.Load + var rulesDataSource = await RulesFromJsonFile.Load .FromJsonFileAsync(DataSourceFilePath, serializedContent: false); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) - .Configure(reo => + .Configure(opt => { - reo.PriorityCriteria = PriorityCriterias.BottommostRuleWins; + opt.PriorityCriteria = PriorityCriterias.BottommostRuleWins; }) .Build(); // Act - Rule actual = await rulesEngine.MatchOneAsync(expectedContent, expectedMatchDate, expectedConditions); + var actual = await rulesEngine.MatchOneAsync(expectedContent, expectedMatchDate, expectedConditions); // Assert actual.Should().NotBeNull(); - CarInsuranceAdvices actualContent = actual.ContentContainer.GetContentAs(); + var actualContent = actual.ContentContainer.GetContentAs(); actualContent.Should().Be(expected); } @@ -140,8 +138,8 @@ public async Task GetCarInsuranceAdvice_SearchForRulesExcludingRulesWithoutSearc { // Arrange const ContentTypes expectedContent = ContentTypes.CarInsuranceAdvice; - DateTime expectedMatchDate = new DateTime(2018, 06, 01); - SearchArgs searchArgs = new SearchArgs(expectedContent, expectedMatchDate, expectedMatchDate) + var expectedMatchDate = new DateTime(2018, 06, 01); + var searchArgs = new SearchArgs(expectedContent, expectedMatchDate, expectedMatchDate) { Conditions = new Condition[] { @@ -159,21 +157,21 @@ public async Task GetCarInsuranceAdvice_SearchForRulesExcludingRulesWithoutSearc ExcludeRulesWithoutSearchConditions = true }; - IRulesDataSource rulesDataSource = await RulesFromJsonFile.Load + var rulesDataSource = await RulesFromJsonFile.Load .FromJsonFileAsync(DataSourceFilePath, serializedContent: false); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) - .Configure(reo => + .Configure(opt => { - reo.PriorityCriteria = PriorityCriterias.BottommostRuleWins; + opt.PriorityCriteria = PriorityCriterias.BottommostRuleWins; }) .Build(); // Act - IEnumerable> actual = await rulesEngine.SearchAsync(searchArgs); + var actual = await rulesEngine.SearchAsync(searchArgs); // Assert actual.Should().NotBeNull(); @@ -185,8 +183,8 @@ public async Task GetCarInsuranceAdvice_SearchForRulesWithRepairCostsGreaterThan { // Arrange const ContentTypes expectedContent = ContentTypes.CarInsuranceAdvice; - DateTime expectedMatchDate = new DateTime(2018, 06, 01); - SearchArgs searchArgs = new SearchArgs(expectedContent, expectedMatchDate, expectedMatchDate) + var expectedMatchDate = new DateTime(2018, 06, 01); + var searchArgs = new SearchArgs(expectedContent, expectedMatchDate, expectedMatchDate) { Conditions = new Condition[] { @@ -199,21 +197,21 @@ public async Task GetCarInsuranceAdvice_SearchForRulesWithRepairCostsGreaterThan ExcludeRulesWithoutSearchConditions = false }; - IRulesDataSource rulesDataSource = await RulesFromJsonFile.Load + var rulesDataSource = await RulesFromJsonFile.Load .FromJsonFileAsync(DataSourceFilePath, serializedContent: false); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) - .Configure(reo => + .Configure(opt => { - reo.PriorityCriteria = PriorityCriterias.BottommostRuleWins; + opt.PriorityCriteria = PriorityCriterias.BottommostRuleWins; }) .Build(); // Act - IEnumerable> actual = await rulesEngine.SearchAsync(searchArgs); + var actual = await rulesEngine.SearchAsync(searchArgs); // Assert actual.Should().NotBeNull(); @@ -227,8 +225,8 @@ public async Task GetCarInsuranceAdvice_UpdatesRuleAndAddsNewOneAndEvaluates_Ret { // Arrange const ContentTypes expectedContent = ContentTypes.CarInsuranceAdvice; - DateTime expectedMatchDate = new DateTime(2018, 06, 01); - Condition[] expectedConditions = new Condition[] + var expectedMatchDate = new DateTime(2018, 06, 01); + var expectedConditions = new Condition[] { new Condition { @@ -242,122 +240,132 @@ public async Task GetCarInsuranceAdvice_UpdatesRuleAndAddsNewOneAndEvaluates_Ret } }; - IRulesDataSource rulesDataSource = await RulesFromJsonFile.Load + var rulesDataSource = await RulesFromJsonFile.Load .FromJsonFileAsync(DataSourceFilePath, serializedContent: false); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) - .Configure(reo => + .Configure(opt => { - reo.PriorityCriteria = PriorityCriterias.BottommostRuleWins; + opt.PriorityCriteria = PriorityCriterias.BottommostRuleWins; }) .Build(); - RuleBuilderResult ruleBuilderResult = RuleBuilder.NewRule() + var ruleBuilderResult = RuleBuilder.NewRule() .WithName("Car Insurance Advise on self damage coverage") .WithDateBegin(DateTime.Parse("2018-01-01")) .WithContentContainer(new ContentContainer(ContentTypes.CarInsuranceAdvice, (t) => CarInsuranceAdvices.Pay)) .Build(); - IEnumerable> existentRules1 = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs + + var existentRules1 = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs { Name = "Car Insurance Advise on repair costs lower than franchise boundary" }); - Rule ruleToAdd = ruleBuilderResult.Rule; - Rule ruleToUpdate1 = existentRules1.FirstOrDefault(); + var ruleToAdd = ruleBuilderResult.Rule; + var ruleToUpdate1 = existentRules1.FirstOrDefault(); ruleToUpdate1.Priority = 2; // Act 1 - RuleOperationResult updateOperationResult1 = await rulesEngine.UpdateRuleAsync(ruleToUpdate1); + var updateOperationResult1 = await rulesEngine.UpdateRuleAsync(ruleToUpdate1); - Rule eval1 = await rulesEngine.MatchOneAsync(expectedContent, expectedMatchDate, expectedConditions); + var eval1 = await rulesEngine.MatchOneAsync(expectedContent, expectedMatchDate, expectedConditions); - IEnumerable> rules1 = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs()); + var rules1 = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs()); // Assert 1 updateOperationResult1.Should().NotBeNull(); updateOperationResult1.IsSuccess.Should().BeTrue(); eval1.Priority.Should().Be(2); - CarInsuranceAdvices content1 = eval1.ContentContainer.GetContentAs(); + var content1 = eval1.ContentContainer.GetContentAs(); content1.Should().Be(CarInsuranceAdvices.RefusePaymentPerFranchise); - Rule rule11 = rules1.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs lesser than 80% of commercial value"); + var rule11 = rules1.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs lesser than 80% of commercial value"); rule11.Should().NotBeNull(); rule11.Priority.Should().Be(1); - Rule rule12 = rules1.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs lower than franchise boundary"); + + var rule12 = rules1.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs lower than franchise boundary"); rule12.Should().NotBeNull(); rule12.Priority.Should().Be(2); - Rule rule13 = rules1.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs greater than 80% of commercial value"); + + var rule13 = rules1.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs greater than 80% of commercial value"); rule13.Should().NotBeNull(); rule13.Priority.Should().Be(3); // Act 2 - RuleOperationResult addOperationResult = await rulesEngine.AddRuleAsync(ruleToAdd, new RuleAddPriorityOption + var addOperationResult = await rulesEngine.AddRuleAsync(ruleToAdd, new RuleAddPriorityOption { PriorityOption = PriorityOptions.AtRuleName, AtRuleNameOptionValue = "Car Insurance Advise on repair costs lower than franchise boundary" }); - Rule eval2 = await rulesEngine.MatchOneAsync(expectedContent, expectedMatchDate, expectedConditions); + var eval2 = await rulesEngine.MatchOneAsync(expectedContent, expectedMatchDate, expectedConditions); - IEnumerable> rules2 = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs()); + var rules2 = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs()); // Assert 2 addOperationResult.Should().NotBeNull(); addOperationResult.IsSuccess.Should().BeTrue(); eval2.Priority.Should().Be(3); - CarInsuranceAdvices content2 = eval2.ContentContainer.GetContentAs(); + var content2 = eval2.ContentContainer.GetContentAs(); content2.Should().Be(CarInsuranceAdvices.RefusePaymentPerFranchise); - Rule rule21 = rules2.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs lesser than 80% of commercial value"); + var rule21 = rules2.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs lesser than 80% of commercial value"); rule21.Should().NotBeNull(); rule21.Priority.Should().Be(1); - Rule rule22 = rules2.FirstOrDefault(r => r.Name == "Car Insurance Advise on self damage coverage"); + + var rule22 = rules2.FirstOrDefault(r => r.Name == "Car Insurance Advise on self damage coverage"); rule22.Should().NotBeNull(); rule22.Priority.Should().Be(2); - Rule rule23 = rules2.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs lower than franchise boundary"); + + var rule23 = rules2.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs lower than franchise boundary"); rule23.Should().NotBeNull(); rule23.Priority.Should().Be(3); - Rule rule24 = rules2.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs greater than 80% of commercial value"); + + var rule24 = rules2.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs greater than 80% of commercial value"); rule24.Should().NotBeNull(); rule24.Priority.Should().Be(4); // Act 3 - IEnumerable> existentRules2 = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs + var existentRules2 = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs { Name = "Car Insurance Advise on repair costs lower than franchise boundary" }); - Rule ruleToUpdate2 = existentRules2.FirstOrDefault(); + + var ruleToUpdate2 = existentRules2.FirstOrDefault(); ruleToUpdate2.Priority = 4; - RuleOperationResult updateOperationResult2 = await rulesEngine.UpdateRuleAsync(ruleToUpdate2); + var updateOperationResult2 = await rulesEngine.UpdateRuleAsync(ruleToUpdate2); - Rule eval3 = await rulesEngine.MatchOneAsync(expectedContent, expectedMatchDate, expectedConditions); + var eval3 = await rulesEngine.MatchOneAsync(expectedContent, expectedMatchDate, expectedConditions); - IEnumerable> rules3 = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs()); + var rules3 = await rulesDataSource.GetRulesByAsync(new RulesFilterArgs()); // Assert 3 updateOperationResult2.Should().NotBeNull(); updateOperationResult2.IsSuccess.Should().BeTrue(); eval3.Priority.Should().Be(4); - CarInsuranceAdvices content3 = eval3.ContentContainer.GetContentAs(); + var content3 = eval3.ContentContainer.GetContentAs(); content3.Should().Be(CarInsuranceAdvices.RefusePaymentPerFranchise); - Rule rule31 = rules3.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs lesser than 80% of commercial value"); + var rule31 = rules3.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs lesser than 80% of commercial value"); rule31.Should().NotBeNull(); rule31.Priority.Should().Be(1); - Rule rule32 = rules3.FirstOrDefault(r => r.Name == "Car Insurance Advise on self damage coverage"); + + var rule32 = rules3.FirstOrDefault(r => r.Name == "Car Insurance Advise on self damage coverage"); rule32.Should().NotBeNull(); rule32.Priority.Should().Be(2); - Rule rule33 = rules3.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs greater than 80% of commercial value"); + + var rule33 = rules3.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs greater than 80% of commercial value"); rule33.Should().NotBeNull(); rule33.Priority.Should().Be(3); - Rule rule34 = rules3.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs lower than franchise boundary"); + + var rule34 = rules3.FirstOrDefault(r => r.Name == "Car Insurance Advise on repair costs lower than franchise boundary"); rule34.Should().NotBeNull(); rule34.Priority.Should().Be(4); } diff --git a/tests/Rules.Framework.IntegrationTests/Tests/Scenario3/BuildingSecuritySystemControlTests.cs b/tests/Rules.Framework.IntegrationTests/Tests/Scenario3/BuildingSecuritySystemControlTests.cs index fad028d4..9bc19bf6 100644 --- a/tests/Rules.Framework.IntegrationTests/Tests/Scenario3/BuildingSecuritySystemControlTests.cs +++ b/tests/Rules.Framework.IntegrationTests/Tests/Scenario3/BuildingSecuritySystemControlTests.cs @@ -1,11 +1,9 @@ namespace Rules.Framework.IntegrationTests.Tests.Scenario3 { using System; - using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using FluentAssertions; - using Rules.Framework.Core; using Rules.Framework.IntegrationTests.Common.Scenarios.Scenario3; using Xunit; @@ -19,8 +17,8 @@ public async Task BuildingSecuritySystem_FireScenario_ReturnsActionsToTrigger() // Assert const SecuritySystemActionables securitySystemActionable = SecuritySystemActionables.FireSystem; - DateTime expectedMatchDate = new DateTime(2018, 06, 01); - Condition[] expectedConditions = new Condition[] + var expectedMatchDate = new DateTime(2018, 06, 01); + var expectedConditions = new Condition[] { new Condition { @@ -39,24 +37,23 @@ public async Task BuildingSecuritySystem_FireScenario_ReturnsActionsToTrigger() } }; - IRulesDataSource rulesDataSource = await RulesFromJsonFile.Load + var rulesDataSource = await RulesFromJsonFile.Load .FromJsonFileAsync(DataSourceFilePath); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) .Build(); // Act - IEnumerable> actual = await rulesEngine.MatchManyAsync(securitySystemActionable, expectedMatchDate, expectedConditions); + var actual = await rulesEngine.MatchManyAsync(securitySystemActionable, expectedMatchDate, expectedConditions); // Assert actual.Should().NotBeNull(); - IEnumerable securitySystemActions = actual.Select(r => r.ContentContainer.GetContentAs()).ToList(); - - securitySystemActions.Should().Contain(ssa => ssa.ActionName == "CallFireBrigade") + actual.Select(r => r.ContentContainer.GetContentAs()).ToList() + .Should().Contain(ssa => ssa.ActionName == "CallFireBrigade") .And.Contain(ssa => ssa.ActionName == "CallPolice") .And.Contain(ssa => ssa.ActionName == "ActivateSprinklers") .And.HaveCount(3); @@ -68,8 +65,8 @@ public async Task BuildingSecuritySystem_PowerFailureScenario_ReturnsActionsToTr // Assert const SecuritySystemActionables securitySystemActionable = SecuritySystemActionables.PowerSystem; - DateTime expectedMatchDate = new DateTime(2018, 06, 01); - Condition[] expectedConditions = new Condition[] + var expectedMatchDate = new DateTime(2018, 06, 01); + var expectedConditions = new Condition[] { new Condition { @@ -88,24 +85,23 @@ public async Task BuildingSecuritySystem_PowerFailureScenario_ReturnsActionsToTr } }; - IRulesDataSource rulesDataSource = await RulesFromJsonFile.Load + var rulesDataSource = await RulesFromJsonFile.Load .FromJsonFileAsync(DataSourceFilePath); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) .Build(); // Act - IEnumerable> actual = await rulesEngine.MatchManyAsync(securitySystemActionable, expectedMatchDate, expectedConditions); + var actual = await rulesEngine.MatchManyAsync(securitySystemActionable, expectedMatchDate, expectedConditions); // Assert actual.Should().NotBeNull(); - IEnumerable securitySystemActions = actual.Select(r => r.ContentContainer.GetContentAs()).ToList(); - - securitySystemActions.Should().Contain(ssa => ssa.ActionName == "EnableEmergencyLights") + actual.Select(r => r.ContentContainer.GetContentAs()).ToList() + .Should().Contain(ssa => ssa.ActionName == "EnableEmergencyLights") .And.Contain(ssa => ssa.ActionName == "EnableEmergencyPower") .And.Contain(ssa => ssa.ActionName == "CallPowerGridPicket"); } @@ -116,8 +112,8 @@ public async Task BuildingSecuritySystem_PowerShutdownScenario_ReturnsActionsToT // Assert const SecuritySystemActionables securitySystemActionable = SecuritySystemActionables.PowerSystem; - DateTime expectedMatchDate = new DateTime(2018, 06, 01); - Condition[] expectedConditions = new Condition[] + var expectedMatchDate = new DateTime(2018, 06, 01); + var expectedConditions = new Condition[] { new Condition { @@ -136,24 +132,23 @@ public async Task BuildingSecuritySystem_PowerShutdownScenario_ReturnsActionsToT } }; - IRulesDataSource rulesDataSource = await RulesFromJsonFile.Load + var rulesDataSource = await RulesFromJsonFile.Load .FromJsonFileAsync(DataSourceFilePath); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) .Build(); // Act - IEnumerable> actual = await rulesEngine.MatchManyAsync(securitySystemActionable, expectedMatchDate, expectedConditions); + var actual = await rulesEngine.MatchManyAsync(securitySystemActionable, expectedMatchDate, expectedConditions); // Assert actual.Should().NotBeNull(); - IEnumerable securitySystemActions = actual.Select(r => r.ContentContainer.GetContentAs()).ToList(); - - securitySystemActions.Should().Contain(ssa => ssa.ActionName == "EnableEmergencyLights") + actual.Select(r => r.ContentContainer.GetContentAs()).ToList() + .Should().Contain(ssa => ssa.ActionName == "EnableEmergencyLights") .And.HaveCount(1); } } diff --git a/tests/Rules.Framework.IntegrationTests/Tests/Scenario4/DiscountCampaignTests.cs b/tests/Rules.Framework.IntegrationTests/Tests/Scenario4/DiscountCampaignTests.cs index ac8fa7dd..ababfdcd 100644 --- a/tests/Rules.Framework.IntegrationTests/Tests/Scenario4/DiscountCampaignTests.cs +++ b/tests/Rules.Framework.IntegrationTests/Tests/Scenario4/DiscountCampaignTests.cs @@ -5,7 +5,6 @@ namespace Rules.Framework.IntegrationTests.Tests.Scenario4 using System.Linq; using System.Threading.Tasks; using FluentAssertions; - using Rules.Framework.Builder; using Rules.Framework.Core; using Rules.Framework.IntegrationTests.Common.Scenarios.Scenario4; using Xunit; @@ -23,17 +22,17 @@ public enum ProductColor public async Task DiscountsWeekend_Adding15PercentRulePerBrandAndEvaluatingOneOfTheBrands_Returns15PercentDiscountRate() { // Arrange - IRulesDataSource rulesDataSource + var rulesDataSource = new InMemoryRulesDataSource(Enumerable.Empty>()); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) .Build(); // Act 1 - Create rule with "in" operator - RuleBuilderResult ruleBuilderResult = RuleBuilder.NewRule() + var ruleBuilderResult = RuleBuilder.NewRule() .WithName("Discounts Weekend MAY2021") .WithDatesInterval(DateTime.Parse("2021-05-29Z"), DateTime.Parse("2021-05-31Z")) .WithContentContainer(new ContentContainer(DiscountConfigurations.DiscountCampaigns, t => 15m)) @@ -57,22 +56,22 @@ IRulesDataSource rulesDataSource // Assert 1 ruleBuilderResult.Should().NotBeNull(); - string errors = ruleBuilderResult.Errors.Any() ? ruleBuilderResult.Errors.Aggregate((s1, s2) => $"{s1}\n- {s2}") : string.Empty; + var errors = ruleBuilderResult.Errors.Any() ? ruleBuilderResult.Errors.Aggregate((s1, s2) => $"{s1}\n- {s2}") : string.Empty; ruleBuilderResult.IsSuccess.Should().BeTrue( $"errors have occurred while creating rule: \n[\n- {errors}\n]"); // Act 2 - Add new rule with "in" operator - Rule rule = ruleBuilderResult.Rule; + var rule = ruleBuilderResult.Rule; - RuleOperationResult addRuleResult = await rulesEngine.AddRuleAsync(rule, RuleAddPriorityOption.AtTop).ConfigureAwait(false); + var addRuleResult = await rulesEngine.AddRuleAsync(rule, RuleAddPriorityOption.AtTop).ConfigureAwait(false); // Assert 2 - Verify if rule was added addRuleResult.Should().NotBeNull(); addRuleResult.IsSuccess.Should().BeTrue(); // Act 3 - Evaluate new rule with "in" operator - DateTime matchDateTime = DateTime.Parse("2021-05-29T12:34:52Z"); - Condition[] conditions = new[] + var matchDateTime = DateTime.Parse("2021-05-29T12:34:52Z"); + var conditions = new[] { new Condition { @@ -86,7 +85,7 @@ IRulesDataSource rulesDataSource } }; - Rule actual = await rulesEngine.MatchOneAsync(DiscountConfigurations.DiscountCampaigns, matchDateTime, conditions).ConfigureAwait(false); + var actual = await rulesEngine.MatchOneAsync(DiscountConfigurations.DiscountCampaigns, matchDateTime, conditions).ConfigureAwait(false); // Assert 3 actual.Should().NotBeNull(); @@ -97,17 +96,17 @@ IRulesDataSource rulesDataSource public async Task DiscountsWeekend_Adding20PercentRulePerProductTierAndEvaluatingOneOfTheTiers_Returns20PercentDiscountRate() { // Arrange - IRulesDataSource rulesDataSource + var rulesDataSource = new InMemoryRulesDataSource(Enumerable.Empty>()); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) .Build(); // Act 1 - Create rule with "in" operator - RuleBuilderResult ruleBuilderResult = RuleBuilder.NewRule() + var ruleBuilderResult = RuleBuilder.NewRule() .WithName("Discounts Weekend MAY2021 - Tiered discount") .WithDatesInterval(DateTime.Parse("2021-05-29Z"), DateTime.Parse("2021-05-31Z")) .WithContentContainer(new ContentContainer(DiscountConfigurations.DiscountCampaigns, t => 15m)) @@ -131,22 +130,22 @@ IRulesDataSource rulesDataSource // Assert 1 ruleBuilderResult.Should().NotBeNull(); - string errors = ruleBuilderResult.Errors.Any() ? ruleBuilderResult.Errors.Aggregate((s1, s2) => $"{s1}\n- {s2}") : string.Empty; + var errors = ruleBuilderResult.Errors.Any() ? ruleBuilderResult.Errors.Aggregate((s1, s2) => $"{s1}\n- {s2}") : string.Empty; ruleBuilderResult.IsSuccess.Should().BeTrue( $"errors have occurred while creating rule: \n[\n- {errors}\n]"); // Act 2 - Add new rule with "in" operator - Rule rule = ruleBuilderResult.Rule; + var rule = ruleBuilderResult.Rule; - RuleOperationResult addRuleResult = await rulesEngine.AddRuleAsync(rule, RuleAddPriorityOption.AtTop).ConfigureAwait(false); + var addRuleResult = await rulesEngine.AddRuleAsync(rule, RuleAddPriorityOption.AtTop).ConfigureAwait(false); // Assert 2 - Verify if rule was added addRuleResult.Should().NotBeNull(); addRuleResult.IsSuccess.Should().BeTrue(); // Act 3 - Evaluate new rule with "in" operator - DateTime matchDateTime = DateTime.Parse("2021-05-29T12:34:52Z"); - Condition[] conditions = new[] + var matchDateTime = DateTime.Parse("2021-05-29T12:34:52Z"); + var conditions = new[] { new Condition { @@ -165,7 +164,7 @@ IRulesDataSource rulesDataSource } }; - Rule actual = await rulesEngine.MatchOneAsync(DiscountConfigurations.DiscountCampaigns, matchDateTime, conditions).ConfigureAwait(false); + var actual = await rulesEngine.MatchOneAsync(DiscountConfigurations.DiscountCampaigns, matchDateTime, conditions).ConfigureAwait(false); // Assert 3 actual.Should().NotBeNull(); @@ -176,17 +175,17 @@ IRulesDataSource rulesDataSource public async Task DiscountsWeekend_Adding5PercentRuleWithNotContainsTestConditionAndInputWithMatchingConditions_Return5PercentDiscountRate() { // Arrange - IRulesDataSource rulesDataSource + var rulesDataSource = new InMemoryRulesDataSource(Enumerable.Empty>()); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) .Build(); // Act 1 - Create rule with "not contains" operator - RuleBuilderResult ruleBuilderResult = + var ruleBuilderResult = RuleBuilder .NewRule() .WithName("Not a staff discount") @@ -202,22 +201,22 @@ IRulesDataSource rulesDataSource // Assert 1 ruleBuilderResult.Should().NotBeNull(); - string errors = ruleBuilderResult.Errors.Any() ? ruleBuilderResult.Errors.Aggregate((s1, s2) => $"{s1}\n- {s2}") : string.Empty; + var errors = ruleBuilderResult.Errors.Any() ? ruleBuilderResult.Errors.Aggregate((s1, s2) => $"{s1}\n- {s2}") : string.Empty; ruleBuilderResult.IsSuccess.Should().BeTrue( $"errors have occurred while creating rule: \n[\n- {errors}\n]"); // Act 2 - Add new rule with "not contains" operator - Rule rule = ruleBuilderResult.Rule; + var rule = ruleBuilderResult.Rule; - RuleOperationResult addRuleResult = await rulesEngine.AddRuleAsync(rule, RuleAddPriorityOption.AtTop).ConfigureAwait(false); + var addRuleResult = await rulesEngine.AddRuleAsync(rule, RuleAddPriorityOption.AtTop).ConfigureAwait(false); // Assert 2 - Verify if rule was added addRuleResult.Should().NotBeNull(); addRuleResult.IsSuccess.Should().BeTrue(); // Act 3 - Evaluate new rule with "not contains" operator - DateTime matchDateTime = DateTime.Parse("2021-05-29T12:34:52Z"); - Condition[] conditions = new[] + var matchDateTime = DateTime.Parse("2021-05-29T12:34:52Z"); + var conditions = new[] { new Condition { @@ -226,7 +225,7 @@ IRulesDataSource rulesDataSource } }; - Rule actual = await rulesEngine.MatchOneAsync(DiscountConfigurations.DiscountCampaigns, matchDateTime, conditions).ConfigureAwait(false); + var actual = await rulesEngine.MatchOneAsync(DiscountConfigurations.DiscountCampaigns, matchDateTime, conditions).ConfigureAwait(false); // Assert 3 actual.Should().NotBeNull(); @@ -237,17 +236,17 @@ IRulesDataSource rulesDataSource public async Task DiscountsWeekend_AddingRuleWithNullTestConditionAndInputWithMatchingConditions_ReturnNotNull() { // Arrange - IRulesDataSource rulesDataSource + var rulesDataSource = new InMemoryRulesDataSource(Enumerable.Empty>()); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) .Build(); // Act 1 - Create rule with "equal" operator - RuleBuilderResult ruleBuilderResult = + var ruleBuilderResult = RuleBuilder .NewRule() .WithName("Blue Product") @@ -263,22 +262,22 @@ IRulesDataSource rulesDataSource // Assert 1 ruleBuilderResult.Should().NotBeNull(); - string errors = ruleBuilderResult.Errors.Any() ? ruleBuilderResult.Errors.Aggregate((s1, s2) => $"{s1}\n- {s2}") : string.Empty; + var errors = ruleBuilderResult.Errors.Any() ? ruleBuilderResult.Errors.Aggregate((s1, s2) => $"{s1}\n- {s2}") : string.Empty; ruleBuilderResult.IsSuccess.Should().BeTrue( $"errors have occurred while creating rule: \n[\n- {errors}\n]"); // Act 2 - Add new rule with "in" operator - Rule rule = ruleBuilderResult.Rule; + var rule = ruleBuilderResult.Rule; - RuleOperationResult addRuleResult = await rulesEngine.AddRuleAsync(rule, RuleAddPriorityOption.AtTop).ConfigureAwait(false); + var addRuleResult = await rulesEngine.AddRuleAsync(rule, RuleAddPriorityOption.AtTop).ConfigureAwait(false); // Assert 2 - Verify if rule was added addRuleResult.Should().NotBeNull(); addRuleResult.IsSuccess.Should().BeTrue(); // Act 3 - Evaluate new rule with "in" operator - DateTime matchDateTime = DateTime.Parse("2021-05-29T12:34:52Z"); - Condition[] conditions = new[] + var matchDateTime = DateTime.Parse("2021-05-29T12:34:52Z"); + var conditions = new[] { new Condition { @@ -287,7 +286,7 @@ IRulesDataSource rulesDataSource } }; - Rule actual = await rulesEngine.MatchOneAsync(DiscountConfigurations.DiscountCampaigns, matchDateTime, conditions).ConfigureAwait(false); + var actual = await rulesEngine.MatchOneAsync(DiscountConfigurations.DiscountCampaigns, matchDateTime, conditions).ConfigureAwait(false); // Assert 3 actual.Should().NotBeNull(); @@ -298,17 +297,17 @@ IRulesDataSource rulesDataSource public async Task DiscountsWeekend_AddingRuleWithNullTestConditionAndInputWithoutConditions_ReturnNull() { // Arrange - IRulesDataSource rulesDataSource + var rulesDataSource = new InMemoryRulesDataSource(Enumerable.Empty>()); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) .Build(); // Act 1 - Create rule with "equal" operator - RuleBuilderResult ruleBuilderResult = + var ruleBuilderResult = RuleBuilder .NewRule() .WithName("Blue Product") @@ -324,24 +323,24 @@ IRulesDataSource rulesDataSource // Assert 1 ruleBuilderResult.Should().NotBeNull(); - string errors = ruleBuilderResult.Errors.Any() ? ruleBuilderResult.Errors.Aggregate((s1, s2) => $"{s1}\n- {s2}") : string.Empty; + var errors = ruleBuilderResult.Errors.Any() ? ruleBuilderResult.Errors.Aggregate((s1, s2) => $"{s1}\n- {s2}") : string.Empty; ruleBuilderResult.IsSuccess.Should().BeTrue( $"errors have occurred while creating rule: \n[\n- {errors}\n]"); // Act 2 - Add new rule with "in" operator - Rule rule = ruleBuilderResult.Rule; + var rule = ruleBuilderResult.Rule; - RuleOperationResult addRuleResult = await rulesEngine.AddRuleAsync(rule, RuleAddPriorityOption.AtTop).ConfigureAwait(false); + var addRuleResult = await rulesEngine.AddRuleAsync(rule, RuleAddPriorityOption.AtTop).ConfigureAwait(false); // Assert 2 - Verify if rule was added addRuleResult.Should().NotBeNull(); addRuleResult.IsSuccess.Should().BeTrue(); // Act 3 - Evaluate new rule with "in" operator - DateTime matchDateTime = DateTime.Parse("2021-05-29T12:34:52Z"); + var matchDateTime = DateTime.Parse("2021-05-29T12:34:52Z"); var conditions = new List>(); - Rule actual = await rulesEngine.MatchOneAsync(DiscountConfigurations.DiscountCampaigns, matchDateTime, conditions).ConfigureAwait(false); + var actual = await rulesEngine.MatchOneAsync(DiscountConfigurations.DiscountCampaigns, matchDateTime, conditions).ConfigureAwait(false); // Assert 3 actual.Should().BeNull(); @@ -351,17 +350,17 @@ IRulesDataSource rulesDataSource public async Task DiscountsWeekend_AddingRuleWithNullTestConditionAndInputWithoutMatchingConditions_ReturnNull() { // Arrange - IRulesDataSource rulesDataSource + var rulesDataSource = new InMemoryRulesDataSource(Enumerable.Empty>()); - RulesEngine rulesEngine = RulesEngineBuilder.CreateRulesEngine() + var rulesEngine = RulesEngineBuilder.CreateRulesEngine() .WithContentType() .WithConditionType() .SetDataSource(rulesDataSource) .Build(); // Act 1 - Create rule with "equal" operator - RuleBuilderResult ruleBuilderResult = + var ruleBuilderResult = RuleBuilder .NewRule() .WithName("Blue Product") @@ -377,22 +376,22 @@ IRulesDataSource rulesDataSource // Assert 1 ruleBuilderResult.Should().NotBeNull(); - string errors = ruleBuilderResult.Errors.Any() ? ruleBuilderResult.Errors.Aggregate((s1, s2) => $"{s1}\n- {s2}") : string.Empty; + var errors = ruleBuilderResult.Errors.Any() ? ruleBuilderResult.Errors.Aggregate((s1, s2) => $"{s1}\n- {s2}") : string.Empty; ruleBuilderResult.IsSuccess.Should().BeTrue( $"errors have occurred while creating rule: \n[\n- {errors}\n]"); // Act 2 - Add new rule with "in" operator - Rule rule = ruleBuilderResult.Rule; + var rule = ruleBuilderResult.Rule; - RuleOperationResult addRuleResult = await rulesEngine.AddRuleAsync(rule, RuleAddPriorityOption.AtTop).ConfigureAwait(false); + var addRuleResult = await rulesEngine.AddRuleAsync(rule, RuleAddPriorityOption.AtTop).ConfigureAwait(false); // Assert 2 - Verify if rule was added addRuleResult.Should().NotBeNull(); addRuleResult.IsSuccess.Should().BeTrue(); // Act 3 - Evaluate new rule with "in" operator - DateTime matchDateTime = DateTime.Parse("2021-05-29T12:34:52Z"); - Condition[] conditions = new[] + var matchDateTime = DateTime.Parse("2021-05-29T12:34:52Z"); + var conditions = new[] { new Condition { @@ -401,7 +400,7 @@ IRulesDataSource rulesDataSource } }; - Rule actual = await rulesEngine.MatchOneAsync(DiscountConfigurations.DiscountCampaigns, matchDateTime, conditions).ConfigureAwait(false); + var actual = await rulesEngine.MatchOneAsync(DiscountConfigurations.DiscountCampaigns, matchDateTime, conditions).ConfigureAwait(false); // Assert 3 actual.Should().BeNull(); diff --git a/tests/Rules.Framework.Tests/RulesEngineTests.cs b/tests/Rules.Framework.Tests/RulesEngineTests.cs index 421d5759..fded5690 100644 --- a/tests/Rules.Framework.Tests/RulesEngineTests.cs +++ b/tests/Rules.Framework.Tests/RulesEngineTests.cs @@ -34,9 +34,9 @@ public RulesEngineTests() public async Task AddRuleAsync_GivenEmptyRuleDataSource_AddsRuleSuccesfully() { // Arrange - ContentType contentType = ContentType.Type1; + var contentType = ContentType.Type1; - Rule testRule = new Rule + var testRule = new Rule { ContentContainer = new ContentContainer(contentType, (t) => new object()), DateBegin = new DateTime(2018, 01, 01), @@ -46,19 +46,19 @@ public async Task AddRuleAsync_GivenEmptyRuleDataSource_AddsRuleSuccesfully() RootCondition = new ValueConditionNode(DataTypes.String, ConditionType.IsoCountryCode, Operators.Equal, "USA") }; - EvaluationOptions evaluationOptions = new EvaluationOptions + EvaluationOptions evaluationOptions = new() { MatchMode = MatchModes.Exact }; this.SetupMockForConditionsEvalEngine(true, evaluationOptions); - IValidatorProvider validatorProvider = Mock.Of(); - RulesEngineOptions rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); + var validatorProvider = Mock.Of(); + var rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); rulesEngineOptions.PriorityCriteria = PriorityCriterias.BottommostRuleWins; - RulesEngine sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); + var sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); // Act var actual = await sut.AddRuleAsync(testRule, RuleAddPriorityOption.AtBottom); @@ -98,10 +98,10 @@ public async Task GetUniqueConditionTypesAsync_GivenThereAreRulesInDataSource_Re { // Arrange - DateTime dateBegin = new DateTime(2018, 01, 01); - DateTime dateEnd = new DateTime(2019, 01, 01); + var dateBegin = new DateTime(2018, 01, 01); + var dateEnd = new DateTime(2019, 01, 01); - EvaluationOptions evaluationOptions = new EvaluationOptions + var evaluationOptions = new EvaluationOptions { MatchMode = MatchModes.Exact }; @@ -123,11 +123,11 @@ public async Task GetUniqueConditionTypesAsync_GivenThereAreRulesInDataSource_Re } }, evaluationOptions); - IValidatorProvider validatorProvider = Mock.Of(); + var validatorProvider = Mock.Of(); - RulesEngineOptions rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); + var rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); - RulesEngine sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); + var sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); // Act var actual = await sut.GetUniqueConditionTypesAsync(ContentType.Type1, dateBegin, dateEnd); @@ -142,9 +142,9 @@ public async Task GetUniqueConditionTypesAsync_GivenThereAreRulesInDataSource_Re public async Task MatchManyAsync_GivenContentTypeDateAndConditions_FetchesRulesForDayEvalsAndReturnsAllMatches() { // Arrange - DateTime matchDateTime = new DateTime(2018, 07, 01, 18, 19, 30); - ContentType contentType = ContentType.Type1; - IEnumerable> conditions = new[] + var matchDateTime = new DateTime(2018, 07, 01, 18, 19, 30); + var contentType = ContentType.Type1; + var conditions = new[] { new Condition { @@ -188,7 +188,7 @@ public async Task MatchManyAsync_GivenContentTypeDateAndConditions_FetchesRulesF RootCondition = new ValueConditionNode(DataTypes.String, ConditionType.IsoCountryCode, Operators.Equal, "CHE") }; - IEnumerable> rules = new[] + var rules = new[] { expected1, expected2, @@ -230,9 +230,9 @@ public async Task MatchManyAsync_GivenContentTypeDateAndConditions_FetchesRulesF public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesForDayEvalsAndReturnsTheBottommostPriorityOne() { // Arrange - DateTime matchDateTime = new DateTime(2018, 07, 01, 18, 19, 30); - ContentType contentType = ContentType.Type1; - IEnumerable> conditions = new[] + var matchDateTime = new DateTime(2018, 07, 01, 18, 19, 30); + var contentType = ContentType.Type1; + var conditions = new[] { new Condition { @@ -246,7 +246,7 @@ public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesFo } }; - Rule other = new Rule + var other = new Rule { ContentContainer = new ContentContainer(contentType, (t) => new object()), DateBegin = new DateTime(2018, 01, 01), @@ -256,7 +256,7 @@ public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesFo RootCondition = new ValueConditionNode(DataTypes.String, ConditionType.IsoCountryCode, Operators.Equal, "USA") }; - Rule expected = new Rule + var expected = new Rule { ContentContainer = new ContentContainer(contentType, (t) => new object()), DateBegin = new DateTime(2010, 01, 01), @@ -266,13 +266,13 @@ public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesFo RootCondition = new ValueConditionNode(DataTypes.String, ConditionType.IsoCountryCode, Operators.Equal, "USA") }; - IEnumerable> rules = new[] + var rules = new[] { other, expected }; - EvaluationOptions evaluationOptions = new EvaluationOptions + var evaluationOptions = new EvaluationOptions { MatchMode = MatchModes.Exact }; @@ -281,15 +281,15 @@ public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesFo this.SetupMockForConditionsEvalEngine(true, evaluationOptions); - IValidatorProvider validatorProvider = Mock.Of(); - RulesEngineOptions rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); + var validatorProvider = Mock.Of(); + var rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); rulesEngineOptions.PriorityCriteria = PriorityCriterias.BottommostRuleWins; - RulesEngine sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); + var sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); // Act - Rule actual = await sut.MatchOneAsync(contentType, matchDateTime, conditions); + var actual = await sut.MatchOneAsync(contentType, matchDateTime, conditions); // Assert actual.Should().BeSameAs(expected); @@ -304,9 +304,9 @@ public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesFo public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesForDayEvalsAndReturnsTheTopmostPriorityOne() { // Arrange - DateTime matchDateTime = new DateTime(2018, 07, 01, 18, 19, 30); - ContentType contentType = ContentType.Type1; - IEnumerable> conditions = new[] + var matchDateTime = new DateTime(2018, 07, 01, 18, 19, 30); + var contentType = ContentType.Type1; + var conditions = new[] { new Condition { @@ -320,7 +320,7 @@ public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesFo } }; - Rule expected = new Rule + var expected = new Rule { ContentContainer = new ContentContainer(contentType, (t) => new object()), DateBegin = new DateTime(2018, 01, 01), @@ -330,7 +330,7 @@ public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesFo RootCondition = new ValueConditionNode(DataTypes.String, ConditionType.IsoCountryCode, Operators.Equal, "USA") }; - Rule other = new Rule + var other = new Rule { ContentContainer = new ContentContainer(contentType, (t) => new object()), DateBegin = new DateTime(2010, 01, 01), @@ -340,13 +340,13 @@ public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesFo RootCondition = new ValueConditionNode(DataTypes.String, ConditionType.IsoCountryCode, Operators.Equal, "USA") }; - IEnumerable> rules = new[] + var rules = new[] { expected, other }; - EvaluationOptions evaluationOptions = new EvaluationOptions + var evaluationOptions = new EvaluationOptions { MatchMode = MatchModes.Exact }; @@ -355,13 +355,13 @@ public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesFo this.SetupMockForConditionsEvalEngine(true, evaluationOptions); - IValidatorProvider validatorProvider = Mock.Of(); - RulesEngineOptions rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); + var validatorProvider = Mock.Of(); + var rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); - RulesEngine sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); + var sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); // Act - Rule actual = await sut.MatchOneAsync(contentType, matchDateTime, conditions); + var actual = await sut.MatchOneAsync(contentType, matchDateTime, conditions); // Assert actual.Should().BeSameAs(expected); @@ -376,9 +376,9 @@ public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesFo public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesForDayFailsEvalsAndReturnsNull() { // Arrange - DateTime matchDateTime = new DateTime(2018, 07, 01, 18, 19, 30); - ContentType contentType = ContentType.Type1; - IEnumerable> conditions = new[] + var matchDateTime = new DateTime(2018, 07, 01, 18, 19, 30); + var contentType = ContentType.Type1; + var conditions = new[] { new Condition { @@ -392,7 +392,7 @@ public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesFo } }; - IEnumerable> rules = new[] + var rules = new[] { new Rule { @@ -414,7 +414,7 @@ public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesFo } }; - EvaluationOptions evaluationOptions = new EvaluationOptions + var evaluationOptions = new EvaluationOptions { MatchMode = MatchModes.Exact }; @@ -423,13 +423,13 @@ public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesFo this.SetupMockForConditionsEvalEngine(false, evaluationOptions); - IValidatorProvider validatorProvider = Mock.Of(); - RulesEngineOptions rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); + var validatorProvider = Mock.Of(); + var rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); - RulesEngine sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); + var sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); // Act - Rule actual = await sut.MatchOneAsync(contentType, matchDateTime, conditions); + var actual = await sut.MatchOneAsync(contentType, matchDateTime, conditions); // Assert actual.Should().BeNull(); @@ -444,11 +444,11 @@ public async Task MatchOneAsync_GivenContentTypeDateAndConditions_FetchesRulesFo public async Task SearchAsync_GivenInvalidSearchArgs_ThrowsArgumentException() { // Arrange - ContentType contentType = ContentType.Type1; - DateTime matchDateTime = new DateTime(2018, 07, 01, 18, 19, 30); - SearchArgs searchArgs = new SearchArgs(contentType, matchDateTime, matchDateTime); + var contentType = ContentType.Type1; + var matchDateTime = new DateTime(2018, 07, 01, 18, 19, 30); + var searchArgs = new SearchArgs(contentType, matchDateTime, matchDateTime); - IEnumerable> rules = new[] + var rules = new[] { new Rule { @@ -470,7 +470,7 @@ public async Task SearchAsync_GivenInvalidSearchArgs_ThrowsArgumentException() } }; - EvaluationOptions evaluationOptions = new EvaluationOptions + var evaluationOptions = new EvaluationOptions { MatchMode = MatchModes.Exact }; @@ -479,21 +479,21 @@ public async Task SearchAsync_GivenInvalidSearchArgs_ThrowsArgumentException() this.SetupMockForConditionsEvalEngine(false, evaluationOptions); - IValidator> validator = Mock.Of>>(); + var validator = Mock.Of>>(); Mock.Get(validator) .Setup(x => x.ValidateAsync(It.IsAny>(), It.IsAny())) .ReturnsAsync(new ValidationResult(new[] { new ValidationFailure("Prop1", "Sample error message") })); - IValidatorProvider validatorProvider = Mock.Of(); + var validatorProvider = Mock.Of(); Mock.Get(validatorProvider) .Setup(x => x.GetValidatorFor>()) .Returns(validator); - RulesEngineOptions rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); + var rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); - RulesEngine sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); + var sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); // Act - ArgumentException argumentException = await Assert.ThrowsAsync(() => sut.SearchAsync(searchArgs)).ConfigureAwait(false); + var argumentException = await Assert.ThrowsAsync(() => sut.SearchAsync(searchArgs)).ConfigureAwait(false); // Assert argumentException.Should().NotBeNull(); @@ -506,9 +506,9 @@ public async Task SearchAsync_GivenNullSearchArgs_ThrowsArgumentNullException() { // Arrange SearchArgs searchArgs = null; - ContentType contentType = ContentType.Type1; + var contentType = ContentType.Type1; - IEnumerable> rules = new[] + var rules = new[] { new Rule { @@ -530,7 +530,7 @@ public async Task SearchAsync_GivenNullSearchArgs_ThrowsArgumentNullException() } }; - EvaluationOptions evaluationOptions = new EvaluationOptions + var evaluationOptions = new EvaluationOptions { MatchMode = MatchModes.Exact }; @@ -538,13 +538,13 @@ public async Task SearchAsync_GivenNullSearchArgs_ThrowsArgumentNullException() this.SetupMockForRulesDataSource(rules); this.SetupMockForConditionsEvalEngine(false, evaluationOptions); - IValidatorProvider validatorProvider = Mock.Of(); - RulesEngineOptions rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); + var validatorProvider = Mock.Of(); + var rulesEngineOptions = RulesEngineOptions.NewWithDefaults(); - RulesEngine sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); + var sut = new RulesEngine(mockConditionsEvalEngine.Object, mockRulesSource.Object, validatorProvider, rulesEngineOptions, mockCondtionTypeExtractor.Object); // Act - ArgumentNullException argumentNullException = await Assert.ThrowsAsync(() => sut.SearchAsync(searchArgs)).ConfigureAwait(false); + var argumentNullException = await Assert.ThrowsAsync(() => sut.SearchAsync(searchArgs)).ConfigureAwait(false); // Assert argumentNullException.Should().NotBeNull(); From 15185b8e0064f89f8d75bced60ce91adce33d423 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Romeiro?= Date: Mon, 6 Mar 2023 14:10:45 +0000 Subject: [PATCH 05/11] added obsolete method to irulesengineoptions --- src/Rules.Framework/IRulesEngineOptions.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Rules.Framework/IRulesEngineOptions.cs b/src/Rules.Framework/IRulesEngineOptions.cs index e19b04b9..4386deaa 100644 --- a/src/Rules.Framework/IRulesEngineOptions.cs +++ b/src/Rules.Framework/IRulesEngineOptions.cs @@ -1,5 +1,6 @@ namespace Rules.Framework { + using System; using System.Collections.Generic; using Rules.Framework.Core; @@ -19,6 +20,12 @@ public interface IRulesEngineOptions /// public MissingConditionBehaviors MissingConditionBehavior { get; } + /// + /// Gets the priority criteria to untie when multiples rules are matched. + /// + [Obsolete("This property has a typo and has been replaced by PriorityCriteria.")] + public PriorityCriterias PriotityCriteria { get; } + /// /// Gets the priority criteria to untie when multiples rules are matched. /// From 2f852e5e787667829c20544202f1f3b66207fe3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Romeiro?= Date: Mon, 6 Mar 2023 14:59:01 +0000 Subject: [PATCH 06/11] more replacement of explicit variables by var --- .../RulesFromJsonFile.cs | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/tests/Rules.Framework.IntegrationTests/RulesFromJsonFile.cs b/tests/Rules.Framework.IntegrationTests/RulesFromJsonFile.cs index 9ffe6cf1..0084930b 100644 --- a/tests/Rules.Framework.IntegrationTests/RulesFromJsonFile.cs +++ b/tests/Rules.Framework.IntegrationTests/RulesFromJsonFile.cs @@ -22,18 +22,18 @@ public async Task> FromJsonFileAs { JsonContentSerializationProvider serializationProvider = new JsonContentSerializationProvider(); - using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) - using (StreamReader streamReader = new StreamReader(fileStream)) + using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) + using (var streamReader = new StreamReader(fileStream)) { string contents = await streamReader.ReadToEndAsync(); - IEnumerable ruleDataModels = await Task.Run(() => JsonConvert.DeserializeObject>(contents)); + var ruleDataModels = await Task.Run(() => JsonConvert.DeserializeObject>(contents)); - List> rules = new List>(ruleDataModels.Count()); - foreach (RuleDataModel ruleDataModel in ruleDataModels) + var rules = new List>(ruleDataModels.Count()); + foreach (var ruleDataModel in ruleDataModels) { - TContentType contentType = GetContentType(ruleDataModel.ContentTypeCode); + var contentType = GetContentType(ruleDataModel.ContentTypeCode); - IRuleBuilder ruleBuilder = RuleBuilder.NewRule() + var ruleBuilder = RuleBuilder.NewRule() .WithName(ruleDataModel.Name) .WithDatesInterval(ruleDataModel.DateBegin, ruleDataModel.DateEnd); @@ -51,7 +51,7 @@ public async Task> FromJsonFileAs ruleBuilder.WithContentContainer(new ContentContainer(contentType, (t) => RulesFromJsonFile.Parse(ruleDataModel.Content, t))); } - RuleBuilderResult ruleBuilderResult = ruleBuilder.Build(); + var ruleBuilderResult = ruleBuilder.Build(); if (ruleBuilderResult.IsSuccess) { @@ -80,14 +80,15 @@ private static object Parse(string value, Type type) private IConditionNode ConvertConditionNode(IConditionNodeBuilder conditionNodeBuilder, ConditionNodeDataModel conditionNodeDataModel) { - LogicalOperators logicalOperator = RulesFromJsonFile.Parse(conditionNodeDataModel.LogicalOperator); + var logicalOperator = RulesFromJsonFile.Parse(conditionNodeDataModel.LogicalOperator); + if (logicalOperator == LogicalOperators.Eval) { return this.CreateValueConditionNode(conditionNodeBuilder, conditionNodeDataModel); } else { - IComposedConditionNodeBuilder composedConditionNodeBuilder = conditionNodeBuilder.AsComposed() + var composedConditionNodeBuilder = conditionNodeBuilder.AsComposed() .WithLogicalOperator(logicalOperator); foreach (ConditionNodeDataModel child in conditionNodeDataModel.ChildConditionNodes) @@ -101,9 +102,10 @@ private IConditionNode ConvertConditionNode(ICon private IConditionNode CreateValueConditionNode(IConditionNodeBuilder conditionNodeBuilder, ConditionNodeDataModel conditionNodeDataModel) { - DataTypes dataType = RulesFromJsonFile.Parse(conditionNodeDataModel.DataType); - TConditionType integrationTestsConditionType = RulesFromJsonFile.Parse(conditionNodeDataModel.ConditionType); - Operators @operator = RulesFromJsonFile.Parse(conditionNodeDataModel.Operator); + var dataType = RulesFromJsonFile.Parse(conditionNodeDataModel.DataType); + var integrationTestsConditionType = RulesFromJsonFile.Parse(conditionNodeDataModel.ConditionType); + var @operator = RulesFromJsonFile.Parse(conditionNodeDataModel.Operator); + switch (dataType) { case DataTypes.Integer: From c5e5cc46815cbc744180089cbf005e644fe1e1c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Romeiro?= Date: Mon, 6 Mar 2023 15:54:17 +0000 Subject: [PATCH 07/11] Made references to projects within solution to be made all by project reference --- .../Rules.Framework.Providers.InMemory.csproj | 5 ++++- .../Rules.Framework.Providers.MongoDb.csproj | 5 ++++- src/Rules.Framework.WebUI/Rules.Framework.WebUI.csproj | 2 +- .../Rules.Framework.WebUI.Tests.csproj | 1 - 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Rules.Framework.Providers.InMemory/Rules.Framework.Providers.InMemory.csproj b/src/Rules.Framework.Providers.InMemory/Rules.Framework.Providers.InMemory.csproj index af19ebdc..fa79af58 100644 --- a/src/Rules.Framework.Providers.InMemory/Rules.Framework.Providers.InMemory.csproj +++ b/src/Rules.Framework.Providers.InMemory/Rules.Framework.Providers.InMemory.csproj @@ -36,6 +36,9 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + + + + \ No newline at end of file diff --git a/src/Rules.Framework.Providers.MongoDb/Rules.Framework.Providers.MongoDb.csproj b/src/Rules.Framework.Providers.MongoDb/Rules.Framework.Providers.MongoDb.csproj index f49e6932..2f736313 100644 --- a/src/Rules.Framework.Providers.MongoDb/Rules.Framework.Providers.MongoDb.csproj +++ b/src/Rules.Framework.Providers.MongoDb/Rules.Framework.Providers.MongoDb.csproj @@ -37,6 +37,9 @@ - + + + + \ No newline at end of file diff --git a/src/Rules.Framework.WebUI/Rules.Framework.WebUI.csproj b/src/Rules.Framework.WebUI/Rules.Framework.WebUI.csproj index 455024bc..151ced4e 100644 --- a/src/Rules.Framework.WebUI/Rules.Framework.WebUI.csproj +++ b/src/Rules.Framework.WebUI/Rules.Framework.WebUI.csproj @@ -47,7 +47,7 @@ - + diff --git a/tests/Rules.Framework.WebUI.Tests/Rules.Framework.WebUI.Tests.csproj b/tests/Rules.Framework.WebUI.Tests/Rules.Framework.WebUI.Tests.csproj index b2b3b9dc..a2b51717 100644 --- a/tests/Rules.Framework.WebUI.Tests/Rules.Framework.WebUI.Tests.csproj +++ b/tests/Rules.Framework.WebUI.Tests/Rules.Framework.WebUI.Tests.csproj @@ -12,7 +12,6 @@ - all From 9eb09f0ef48d3f6404ad279899c2a2c58e15b0ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Romeiro?= Date: Mon, 6 Mar 2023 16:22:57 +0000 Subject: [PATCH 08/11] removed dotnet-build step to replace packages by projects --- .github/workflows/dotnet-build.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/dotnet-build.yml b/.github/workflows/dotnet-build.yml index ce04491f..b2079a5d 100644 --- a/.github/workflows/dotnet-build.yml +++ b/.github/workflows/dotnet-build.yml @@ -145,15 +145,6 @@ jobs: - name: Clean run: dotnet clean -c Release - - name: Replace Rules.Framework package references w/ project references - run: | - dotnet remove src/Rules.Framework.Providers.InMemory/Rules.Framework.Providers.InMemory.csproj package Rules.Framework - dotnet remove src/Rules.Framework.Providers.MongoDb/Rules.Framework.Providers.MongoDb.csproj package Rules.Framework - dotnet remove src/Rules.Framework.WebUI/Rules.Framework.WebUI.csproj package Rules.Framework - dotnet add src/Rules.Framework.Providers.InMemory/Rules.Framework.Providers.InMemory.csproj reference src/Rules.Framework/Rules.Framework.csproj - dotnet add src/Rules.Framework.Providers.MongoDb/Rules.Framework.Providers.MongoDb.csproj reference src/Rules.Framework/Rules.Framework.csproj - dotnet add src/Rules.Framework.WebUI/Rules.Framework.WebUI.csproj reference src/Rules.Framework/Rules.Framework.csproj - - name: Clear Nuget locals run: dotnet nuget locals all --clear From 5747d438bb820b028091c3f53e0359f8d23a52c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Romeiro?= Date: Mon, 6 Mar 2023 16:26:27 +0000 Subject: [PATCH 09/11] Completed last commit --- .github/workflows/dotnet-build.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/dotnet-build.yml b/.github/workflows/dotnet-build.yml index b2079a5d..59d3fb5f 100644 --- a/.github/workflows/dotnet-build.yml +++ b/.github/workflows/dotnet-build.yml @@ -148,15 +148,6 @@ jobs: - name: Clear Nuget locals run: dotnet nuget locals all --clear - - name: Restore dependencies w/ Rules.Framework project reference - run: dotnet restore - - - name: Build w/ Rules.Framework project reference - run: dotnet build --no-restore -c Release - - - name: Test w/ Rules.Framework project reference (no coverage) - run: dotnet test --no-build --verbosity normal -m:1 -c Release - - name: Delete build tag if exists uses: dev-drprasad/delete-tag-and-release@v0.2.0 continue-on-error: true From 20d9f3bb5d589f20a8624a626cce32fdbd9557c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Romeiro?= Date: Thu, 9 Mar 2023 14:46:15 +0000 Subject: [PATCH 10/11] Moved Providers.InMemory namespace to Rules.Framework assembly --- .github/workflows/dotnet-publish.yml | 3 -- rules-framework.sln | 7 --- .../Rules.Framework.InMemory.Sample.csproj | 2 +- .../Rules.Framework.WebUI.Sample.csproj | 1 - .../AssemblyMetadata.cs | 5 --- .../Rules.Framework.Providers.InMemory.csproj | 44 ------------------- src/Rules.Framework/AssemblyMetadata.cs | 2 + .../ComposedConditionNodeDataModel.cs | 0 .../DataModel/ConditionNodeDataModel.cs | 0 .../DataModel/RuleDataModel.cs | 0 .../DataModel/ValueConditionNodeDataModel.cs | 0 .../Providers.InMemory}/GlobalSuppressions.cs | 0 .../IInMemoryRulesStorage.cs | 0 .../Providers.InMemory}/IRuleFactory.cs | 0 .../InMemoryProviderRulesDataSource.cs | 0 ...oviderRulesDataSourceSelectorExtensions.cs | 0 .../InMemoryRulesStorage.cs | 0 .../Providers.InMemory}/RuleFactory.cs | 0 .../ServiceCollectionExtensions.cs | 0 src/Rules.Framework/Rules.Framework.csproj | 4 +- ...Providers.InMemory.IntegrationTests.csproj | 2 +- ....Framework.Providers.InMemory.Tests.csproj | 2 +- 22 files changed, 8 insertions(+), 64 deletions(-) delete mode 100644 src/Rules.Framework.Providers.InMemory/AssemblyMetadata.cs delete mode 100644 src/Rules.Framework.Providers.InMemory/Rules.Framework.Providers.InMemory.csproj rename src/{Rules.Framework.Providers.InMemory => Rules.Framework/Providers.InMemory}/DataModel/ComposedConditionNodeDataModel.cs (100%) rename src/{Rules.Framework.Providers.InMemory => Rules.Framework/Providers.InMemory}/DataModel/ConditionNodeDataModel.cs (100%) rename src/{Rules.Framework.Providers.InMemory => Rules.Framework/Providers.InMemory}/DataModel/RuleDataModel.cs (100%) rename src/{Rules.Framework.Providers.InMemory => Rules.Framework/Providers.InMemory}/DataModel/ValueConditionNodeDataModel.cs (100%) rename src/{Rules.Framework.Providers.InMemory => Rules.Framework/Providers.InMemory}/GlobalSuppressions.cs (100%) rename src/{Rules.Framework.Providers.InMemory => Rules.Framework/Providers.InMemory}/IInMemoryRulesStorage.cs (100%) rename src/{Rules.Framework.Providers.InMemory => Rules.Framework/Providers.InMemory}/IRuleFactory.cs (100%) rename src/{Rules.Framework.Providers.InMemory => Rules.Framework/Providers.InMemory}/InMemoryProviderRulesDataSource.cs (100%) rename src/{Rules.Framework.Providers.InMemory => Rules.Framework/Providers.InMemory}/InMemoryProviderRulesDataSourceSelectorExtensions.cs (100%) rename src/{Rules.Framework.Providers.InMemory => Rules.Framework/Providers.InMemory}/InMemoryRulesStorage.cs (100%) rename src/{Rules.Framework.Providers.InMemory => Rules.Framework/Providers.InMemory}/RuleFactory.cs (100%) rename src/{Rules.Framework.Providers.InMemory => Rules.Framework/Providers.InMemory}/ServiceCollectionExtensions.cs (100%) diff --git a/.github/workflows/dotnet-publish.yml b/.github/workflows/dotnet-publish.yml index 8a550089..fe9e6c04 100644 --- a/.github/workflows/dotnet-publish.yml +++ b/.github/workflows/dotnet-publish.yml @@ -42,9 +42,6 @@ jobs: - name: Pack Rules.Framework.Providers.MongoDb run: dotnet pack src/Rules.Framework.Providers.MongoDb/Rules.Framework.Providers.MongoDb.csproj --include-symbols -c Release /p:Version=$BUILD_VERSION - - name: Pack Rules.Framework.Providers.InMemory - run: dotnet pack src/Rules.Framework.Providers.InMemory/Rules.Framework.Providers.InMemory.csproj --include-symbols -c Release /p:Version=$BUILD_VERSION - - name: Pack Rules.Framework.WebUI run: dotnet pack src/Rules.Framework.WebUI/Rules.Framework.WebUI.csproj --include-symbols -c Release /p:Version=$BUILD_VERSION diff --git a/rules-framework.sln b/rules-framework.sln index 448f4305..5aeb121e 100644 --- a/rules-framework.sln +++ b/rules-framework.sln @@ -24,8 +24,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Rules.Framework.Providers.M EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Rules.Framework.Providers.MongoDb.Tests", "tests\Rules.Framework.Providers.MongoDb.Tests\Rules.Framework.Providers.MongoDb.Tests.csproj", "{C2957B7C-D601-4850-BCCE-D9AEF07225AB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Rules.Framework.Providers.InMemory", "src\Rules.Framework.Providers.InMemory\Rules.Framework.Providers.InMemory.csproj", "{D3A17A64-CC74-4EA0-95EA-9E141913BF70}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Rules.Framework.IntegrationTests.Common", "tests\Rules.Framework.IntegrationTests.Common\Rules.Framework.IntegrationTests.Common.csproj", "{7C04ECEF-6504-453D-ABD8-FD3D5A2CF7F6}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Rules.Framework.Providers.InMemory.IntegrationTests", "tests\Rules.Framework.Providers.InMemory.IntegrationTests\Rules.Framework.Providers.InMemory.IntegrationTests.csproj", "{69BBA04D-116C-48EA-A8FD-ECC8CA0D57BE}" @@ -72,10 +70,6 @@ Global {C2957B7C-D601-4850-BCCE-D9AEF07225AB}.Debug|Any CPU.Build.0 = Debug|Any CPU {C2957B7C-D601-4850-BCCE-D9AEF07225AB}.Release|Any CPU.ActiveCfg = Release|Any CPU {C2957B7C-D601-4850-BCCE-D9AEF07225AB}.Release|Any CPU.Build.0 = Release|Any CPU - {D3A17A64-CC74-4EA0-95EA-9E141913BF70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D3A17A64-CC74-4EA0-95EA-9E141913BF70}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D3A17A64-CC74-4EA0-95EA-9E141913BF70}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D3A17A64-CC74-4EA0-95EA-9E141913BF70}.Release|Any CPU.Build.0 = Release|Any CPU {7C04ECEF-6504-453D-ABD8-FD3D5A2CF7F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7C04ECEF-6504-453D-ABD8-FD3D5A2CF7F6}.Debug|Any CPU.Build.0 = Debug|Any CPU {7C04ECEF-6504-453D-ABD8-FD3D5A2CF7F6}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -115,7 +109,6 @@ Global {460130DF-2360-494C-BB6F-BD87B033DF9D} = {AEE746EC-CEAA-4892-8C29-0CAAB97A23A8} {8E14BC18-583F-43EF-99CF-08932D6303A0} = {74E24C97-8EE4-4B69-AECD-4765FD2C751F} {C2957B7C-D601-4850-BCCE-D9AEF07225AB} = {74E24C97-8EE4-4B69-AECD-4765FD2C751F} - {D3A17A64-CC74-4EA0-95EA-9E141913BF70} = {AEE746EC-CEAA-4892-8C29-0CAAB97A23A8} {7C04ECEF-6504-453D-ABD8-FD3D5A2CF7F6} = {74E24C97-8EE4-4B69-AECD-4765FD2C751F} {69BBA04D-116C-48EA-A8FD-ECC8CA0D57BE} = {74E24C97-8EE4-4B69-AECD-4765FD2C751F} {BB319C5B-9BF5-4DDB-B522-CFC64D7272C4} = {74E24C97-8EE4-4B69-AECD-4765FD2C751F} diff --git a/samples/Rules.Framework.InMemory.Sample/Rules.Framework.InMemory.Sample.csproj b/samples/Rules.Framework.InMemory.Sample/Rules.Framework.InMemory.Sample.csproj index 06a2272c..48f467ee 100644 --- a/samples/Rules.Framework.InMemory.Sample/Rules.Framework.InMemory.Sample.csproj +++ b/samples/Rules.Framework.InMemory.Sample/Rules.Framework.InMemory.Sample.csproj @@ -6,7 +6,7 @@ - + diff --git a/samples/Rules.Framework.WebUI.Sample/Rules.Framework.WebUI.Sample.csproj b/samples/Rules.Framework.WebUI.Sample/Rules.Framework.WebUI.Sample.csproj index 2648646a..805f8ed4 100644 --- a/samples/Rules.Framework.WebUI.Sample/Rules.Framework.WebUI.Sample.csproj +++ b/samples/Rules.Framework.WebUI.Sample/Rules.Framework.WebUI.Sample.csproj @@ -15,7 +15,6 @@ - diff --git a/src/Rules.Framework.Providers.InMemory/AssemblyMetadata.cs b/src/Rules.Framework.Providers.InMemory/AssemblyMetadata.cs deleted file mode 100644 index 836f599e..00000000 --- a/src/Rules.Framework.Providers.InMemory/AssemblyMetadata.cs +++ /dev/null @@ -1,5 +0,0 @@ -using System.Runtime.CompilerServices; - -[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] -[assembly: InternalsVisibleTo("Rules.Framework.Providers.InMemory.Tests")] -[assembly: InternalsVisibleTo("Rules.Framework.Providers.InMemory.IntegrationTests")] \ No newline at end of file diff --git a/src/Rules.Framework.Providers.InMemory/Rules.Framework.Providers.InMemory.csproj b/src/Rules.Framework.Providers.InMemory/Rules.Framework.Providers.InMemory.csproj deleted file mode 100644 index fa79af58..00000000 --- a/src/Rules.Framework.Providers.InMemory/Rules.Framework.Providers.InMemory.csproj +++ /dev/null @@ -1,44 +0,0 @@ - - - - netstandard2.0 - 9.0 - true - - - - - - - LICENSE.md - - - Git - rules rulesframework memory inmemory - A data source provider implementation using InMemory for rules framework. - - - - - - - True - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - \ No newline at end of file diff --git a/src/Rules.Framework/AssemblyMetadata.cs b/src/Rules.Framework/AssemblyMetadata.cs index fc62b7b0..a88ba7ef 100644 --- a/src/Rules.Framework/AssemblyMetadata.cs +++ b/src/Rules.Framework/AssemblyMetadata.cs @@ -2,4 +2,6 @@ [assembly: InternalsVisibleTo("Rules.Framework.Tests")] [assembly: InternalsVisibleTo("Rules.Framework.IntegrationTests")] +[assembly: InternalsVisibleTo("Rules.Framework.Providers.InMemory.Tests")] +[assembly: InternalsVisibleTo("Rules.Framework.Providers.InMemory.IntegrationTests")] [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] \ No newline at end of file diff --git a/src/Rules.Framework.Providers.InMemory/DataModel/ComposedConditionNodeDataModel.cs b/src/Rules.Framework/Providers.InMemory/DataModel/ComposedConditionNodeDataModel.cs similarity index 100% rename from src/Rules.Framework.Providers.InMemory/DataModel/ComposedConditionNodeDataModel.cs rename to src/Rules.Framework/Providers.InMemory/DataModel/ComposedConditionNodeDataModel.cs diff --git a/src/Rules.Framework.Providers.InMemory/DataModel/ConditionNodeDataModel.cs b/src/Rules.Framework/Providers.InMemory/DataModel/ConditionNodeDataModel.cs similarity index 100% rename from src/Rules.Framework.Providers.InMemory/DataModel/ConditionNodeDataModel.cs rename to src/Rules.Framework/Providers.InMemory/DataModel/ConditionNodeDataModel.cs diff --git a/src/Rules.Framework.Providers.InMemory/DataModel/RuleDataModel.cs b/src/Rules.Framework/Providers.InMemory/DataModel/RuleDataModel.cs similarity index 100% rename from src/Rules.Framework.Providers.InMemory/DataModel/RuleDataModel.cs rename to src/Rules.Framework/Providers.InMemory/DataModel/RuleDataModel.cs diff --git a/src/Rules.Framework.Providers.InMemory/DataModel/ValueConditionNodeDataModel.cs b/src/Rules.Framework/Providers.InMemory/DataModel/ValueConditionNodeDataModel.cs similarity index 100% rename from src/Rules.Framework.Providers.InMemory/DataModel/ValueConditionNodeDataModel.cs rename to src/Rules.Framework/Providers.InMemory/DataModel/ValueConditionNodeDataModel.cs diff --git a/src/Rules.Framework.Providers.InMemory/GlobalSuppressions.cs b/src/Rules.Framework/Providers.InMemory/GlobalSuppressions.cs similarity index 100% rename from src/Rules.Framework.Providers.InMemory/GlobalSuppressions.cs rename to src/Rules.Framework/Providers.InMemory/GlobalSuppressions.cs diff --git a/src/Rules.Framework.Providers.InMemory/IInMemoryRulesStorage.cs b/src/Rules.Framework/Providers.InMemory/IInMemoryRulesStorage.cs similarity index 100% rename from src/Rules.Framework.Providers.InMemory/IInMemoryRulesStorage.cs rename to src/Rules.Framework/Providers.InMemory/IInMemoryRulesStorage.cs diff --git a/src/Rules.Framework.Providers.InMemory/IRuleFactory.cs b/src/Rules.Framework/Providers.InMemory/IRuleFactory.cs similarity index 100% rename from src/Rules.Framework.Providers.InMemory/IRuleFactory.cs rename to src/Rules.Framework/Providers.InMemory/IRuleFactory.cs diff --git a/src/Rules.Framework.Providers.InMemory/InMemoryProviderRulesDataSource.cs b/src/Rules.Framework/Providers.InMemory/InMemoryProviderRulesDataSource.cs similarity index 100% rename from src/Rules.Framework.Providers.InMemory/InMemoryProviderRulesDataSource.cs rename to src/Rules.Framework/Providers.InMemory/InMemoryProviderRulesDataSource.cs diff --git a/src/Rules.Framework.Providers.InMemory/InMemoryProviderRulesDataSourceSelectorExtensions.cs b/src/Rules.Framework/Providers.InMemory/InMemoryProviderRulesDataSourceSelectorExtensions.cs similarity index 100% rename from src/Rules.Framework.Providers.InMemory/InMemoryProviderRulesDataSourceSelectorExtensions.cs rename to src/Rules.Framework/Providers.InMemory/InMemoryProviderRulesDataSourceSelectorExtensions.cs diff --git a/src/Rules.Framework.Providers.InMemory/InMemoryRulesStorage.cs b/src/Rules.Framework/Providers.InMemory/InMemoryRulesStorage.cs similarity index 100% rename from src/Rules.Framework.Providers.InMemory/InMemoryRulesStorage.cs rename to src/Rules.Framework/Providers.InMemory/InMemoryRulesStorage.cs diff --git a/src/Rules.Framework.Providers.InMemory/RuleFactory.cs b/src/Rules.Framework/Providers.InMemory/RuleFactory.cs similarity index 100% rename from src/Rules.Framework.Providers.InMemory/RuleFactory.cs rename to src/Rules.Framework/Providers.InMemory/RuleFactory.cs diff --git a/src/Rules.Framework.Providers.InMemory/ServiceCollectionExtensions.cs b/src/Rules.Framework/Providers.InMemory/ServiceCollectionExtensions.cs similarity index 100% rename from src/Rules.Framework.Providers.InMemory/ServiceCollectionExtensions.cs rename to src/Rules.Framework/Providers.InMemory/ServiceCollectionExtensions.cs diff --git a/src/Rules.Framework/Rules.Framework.csproj b/src/Rules.Framework/Rules.Framework.csproj index f78bc4f7..40d8608d 100644 --- a/src/Rules.Framework/Rules.Framework.csproj +++ b/src/Rules.Framework/Rules.Framework.csproj @@ -25,11 +25,12 @@ - + True + @@ -41,5 +42,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + \ No newline at end of file diff --git a/tests/Rules.Framework.Providers.InMemory.IntegrationTests/Rules.Framework.Providers.InMemory.IntegrationTests.csproj b/tests/Rules.Framework.Providers.InMemory.IntegrationTests/Rules.Framework.Providers.InMemory.IntegrationTests.csproj index 01003fe4..891d4db9 100644 --- a/tests/Rules.Framework.Providers.InMemory.IntegrationTests/Rules.Framework.Providers.InMemory.IntegrationTests.csproj +++ b/tests/Rules.Framework.Providers.InMemory.IntegrationTests/Rules.Framework.Providers.InMemory.IntegrationTests.csproj @@ -22,7 +22,7 @@ - + diff --git a/tests/Rules.Framework.Providers.InMemory.Tests/Rules.Framework.Providers.InMemory.Tests.csproj b/tests/Rules.Framework.Providers.InMemory.Tests/Rules.Framework.Providers.InMemory.Tests.csproj index 9d03d986..8824d451 100644 --- a/tests/Rules.Framework.Providers.InMemory.Tests/Rules.Framework.Providers.InMemory.Tests.csproj +++ b/tests/Rules.Framework.Providers.InMemory.Tests/Rules.Framework.Providers.InMemory.Tests.csproj @@ -26,6 +26,6 @@ - + \ No newline at end of file From 40d91a80070125fdcfca80c48c52d4884b8749b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Romeiro?= Date: Thu, 9 Mar 2023 15:09:30 +0000 Subject: [PATCH 11/11] removed License.MD link --- src/Rules.Framework/Rules.Framework.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Rules.Framework/Rules.Framework.csproj b/src/Rules.Framework/Rules.Framework.csproj index 40d8608d..fe2cc12a 100644 --- a/src/Rules.Framework/Rules.Framework.csproj +++ b/src/Rules.Framework/Rules.Framework.csproj @@ -1,4 +1,4 @@ - + netstandard2.0 @@ -25,7 +25,7 @@ - + True