public void ReturnsUpdatedGameToAndFromJson() { var nameChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Name", SourceDataRule = new ConstantRule <string> { Value = "some fancy name" } }; var rankingChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Ranking", SourceDataRule = new ConstantRule <int> { Value = "1000" } }; var descriptionChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Description", SourceDataRule = new ConstantRule <string> { Value = "some cool description" } }; var selfReturnRule = new SelfReturnRule <Game>(); var blockRule = new FuncBlockRule <Game, Game>(); blockRule.Rules.Add(nameChangeRule); blockRule.Rules.Add(rankingChangeRule); blockRule.Rules.Add(descriptionChangeRule); blockRule.Rules.Add(selfReturnRule); var jsonConverterForRule = new JsonConverterForRule(); var json = JsonConvert.SerializeObject(blockRule, Formatting.Indented, jsonConverterForRule); _testOutputHelper.WriteLine(json); var blockRule2 = JsonConvert.DeserializeObject <FuncBlockRule <Game, Game> >(json, jsonConverterForRule); var compileResult = blockRule2.Compile(); compileResult.Should().BeTrue(); var game = blockRule2.Execute(new Game()); game.Name.Should().Be("some fancy name"); game.Ranking.Should().Be(1000); game.Description.Should().Be("some cool description"); _testOutputHelper.WriteLine($"{game}"); }
public void UpdateMultiplePropertiesOfaGameObjectToAndFromJson() { var nameChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Name", SourceDataRule = new ConstantRule <string> { Value = "some fancy name" } }; var rankingChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Ranking", SourceDataRule = new ConstantRule <int> { Value = "1000" } }; var descriptionChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Description", SourceDataRule = new ConstantRule <string> { Value = "some cool description" } }; var blockRule = new ActionBlockRule <Game>(); blockRule.Rules.Add(nameChangeRule); blockRule.Rules.Add(rankingChangeRule); blockRule.Rules.Add(descriptionChangeRule); // convert to json var ruleJson = JsonConvert.SerializeObject(blockRule, Formatting.Indented, new JsonConverterForRule()); _testOutputHelper.WriteLine($"{nameof(ruleJson)}:{Environment.NewLine}{ruleJson}"); // re-hydrate from json var ruleFromJson = (ActionBlockRule <Game>)JsonConvert.DeserializeObject <Rule>(ruleJson, new JsonConverterForRule()); var compileResult = ruleFromJson.Compile(); compileResult.Should().BeTrue(); var game = new Game(); ruleFromJson.Execute(game); _testOutputHelper.WriteLine($"game object updated:{Environment.NewLine}{game}"); game.Name.Should().Be("some fancy name"); game.Ranking.Should().Be(1000); game.Description.Should().Be("some cool description"); }
public void ReturnsUpdatedGame() { var nameChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Name", SourceDataRule = new ConstantRule <string> { Value = "some fancy name" } }; var rankingChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Ranking", SourceDataRule = new ConstantRule <int> { Value = "1000" } }; var descriptionChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Description", SourceDataRule = new ConstantRule <string> { Value = "some cool description" } }; var selfReturnRule = new SelfReturnRule <Game>(); var blockRule = new FuncBlockRule <Game, Game>(); blockRule.Rules.Add(nameChangeRule); blockRule.Rules.Add(rankingChangeRule); blockRule.Rules.Add(descriptionChangeRule); blockRule.Rules.Add(selfReturnRule); var compileResult = blockRule.Compile(); compileResult.Should().BeTrue(); _testOutputHelper.WriteLine($"{nameof(blockRule)}:{Environment.NewLine}" + $"{blockRule.ExpressionDebugView()}"); var game = blockRule.Execute(new Game()); game.Name.Should().Be("some fancy name"); game.Ranking.Should().Be(1000); game.Description.Should().Be("some cool description"); _testOutputHelper.WriteLine($"{game}"); }
public void UpdateMultiplePropertiesOfaGameObject() { var nameChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Name", SourceDataRule = new ConstantRule <string> { Value = "some fancy name" } }; var rankingChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Ranking", SourceDataRule = new ConstantRule <int> { Value = "1000" } }; var descriptionChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Description", SourceDataRule = new ConstantRule <string> { Value = "some cool description" } }; var blockRule = new ActionBlockRule <Game>(); blockRule.Rules.Add(nameChangeRule); blockRule.Rules.Add(rankingChangeRule); blockRule.Rules.Add(descriptionChangeRule); var compileResult = blockRule.Compile(); compileResult.Should().BeTrue(); _testOutputHelper.WriteLine(blockRule.ExpressionDebugView()); var game = new Game(); blockRule.Execute(game); _testOutputHelper.WriteLine($"game object updated:{Environment.NewLine}{game}"); game.Name.Should().Be("some fancy name"); game.Ranking.Should().Be(1000); game.Description.Should().Be("some cool description"); }
public void UpdatePropertyStingWithDifferentValue() { var game = new Game { Name = "game name" }; var nameChangeRule = new UpdateValueRule <Game, string> { ObjectToUpdate = "Name" }; var compileResult = nameChangeRule.Compile(); compileResult.Should().BeTrue(); _testOutputHelper.WriteLine($"{nameof(nameChangeRule)}:{Environment.NewLine}" + $"{nameChangeRule.ExpressionDebugView()}"); _testOutputHelper.WriteLine($"before game.Name: {game.Name}"); nameChangeRule.UpdateFieldOrPropertyValue(game, "new name"); game.Name.Should().Be("new name"); _testOutputHelper.WriteLine($"after game.Name: {game.Name}"); }
public void UpdatePropertyFromAnotherRuleToAndFromJson() { var game = new Game { Name = "game name" }; var rule = new UpdateValueRule <Game> { ObjectToUpdate = "Name", SourceDataRule = new ConstantRule <string> { Value = "name from constant rule" } }; var compileResult = rule.Compile(); compileResult.Should().BeTrue(); _testOutputHelper.WriteLine($"{nameof(rule)}:{Environment.NewLine}" + $"{rule.ExpressionDebugView()}"); _testOutputHelper.WriteLine($"before game.Name: {game.Name}"); rule.UpdateFieldOrPropertyValue(game); game.Name.Should().Be("name from constant rule"); _testOutputHelper.WriteLine($"after game.Name: {game.Name}"); // convert to json var ruleJson = JsonConvert.SerializeObject(rule, new JsonConverterForRule()); _testOutputHelper.WriteLine($"{nameof(ruleJson)}:{Environment.NewLine}{ruleJson}"); // re-hydrate from json var ruleFromJson = JsonConvert.DeserializeObject <Rule>(ruleJson, new JsonConverterForRule()); compileResult = ruleFromJson.Compile(); compileResult.Should().BeTrue(); _testOutputHelper.WriteLine($"{nameof(ruleFromJson)}:{Environment.NewLine}" + $"{ruleFromJson.ExpressionDebugView()}"); game.Name = "game name"; ((UpdateValueRule <Game>)ruleFromJson).UpdateFieldOrPropertyValue(game); game.Name.Should().Be("name from constant rule"); }
public void UpdatePropertyFromAnotherRule() { var game = new Game { Name = "game name" }; var nameChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Name", SourceDataRule = new ConstantRule <string> { Value = "name from constant rule" } }; var compileResult = nameChangeRule.Compile(); compileResult.Should().BeTrue(); _testOutputHelper.WriteLine($"{nameof(nameChangeRule)}:{Environment.NewLine}" + $"{nameChangeRule.ExpressionDebugView()}"); _testOutputHelper.WriteLine($"before game.Name: {game.Name}"); nameChangeRule.UpdateFieldOrPropertyValue(game); game.Name.Should().Be("name from constant rule"); _testOutputHelper.WriteLine($"after game.Name: {game.Name}"); }
public void ConditionalRuleWithBlock() { var nameChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Name", SourceDataRule = new ConstantRule <string> { Value = "some fancy name" } }; var rankingChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Ranking", SourceDataRule = new ConstantRule <int> { Value = "1000" } }; var descriptionChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Description", SourceDataRule = new ConstantRule <string> { Value = "some cool description" } }; var blockRule = new ActionBlockRule <Game>(); blockRule.Rules.Add(nameChangeRule); blockRule.Rules.Add(rankingChangeRule); blockRule.Rules.Add(descriptionChangeRule); var conditionalUpdateValue = new ConditionalIfThActionRule <Game> { ConditionRule = new MethodCallRule <Game, bool> { ObjectToCallMethodOn = "Name", MethodToCall = "Equals", MethodParameters = { new ConstantRule <string> { Value = "some name" }, new ConstantRule <StringComparison> { Value = "CurrentCultureIgnoreCase" } } }, TrueRule = blockRule }; var compileResult = conditionalUpdateValue.Compile(); compileResult.Should().BeTrue(); _testOutputHelper.WriteLine($"{nameof(conditionalUpdateValue)}:{Environment.NewLine}" + $"{conditionalUpdateValue.ExpressionDebugView()}"); var game = new Game { Name = "some name" }; _testOutputHelper.WriteLine($"before game.Name: {game.Name}"); conditionalUpdateValue.Execute(game); _testOutputHelper.WriteLine($"after game.Name: {game.Name}"); game.Name.Should().Be("some fancy name"); game.Ranking.Should().Be(1000); game.Description.Should().Be("some cool description"); _testOutputHelper.WriteLine($"{game}"); }
public void ReturnsNewOrUpdatedGame() { var nullGame = new ConstantRule <Game> { Value = "null" }; var nullGameCheckRule = new ValidationRule <Game> { ValueToValidateAgainst = nullGame, OperatorToUse = "Equal" }; var newGameRule = new StaticMethodCallRule <Game> { MethodClassName = "ModelForUnitTests.Game", MethodToCall = "CreateGame" }; var selfReturnRule = new SelfReturnRule <Game>(); var gameObjectRule = new ConditionalFuncRule <Game, Game> { ConditionRule = nullGameCheckRule, TrueRule = newGameRule, FalseRule = selfReturnRule }; var assignRule = new UpdateValueRule <Game> { SourceDataRule = gameObjectRule }; var nameChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Name", SourceDataRule = new ConstantRule <string> { Value = "some fancy name" } }; var rankingChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Ranking", SourceDataRule = new ConstantRule <int> { Value = "1000" } }; var descriptionChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Description", SourceDataRule = new ConstantRule <string> { Value = "some cool description" } }; var blockRule = new FuncBlockRule <Game, Game>(); blockRule.Rules.Add(assignRule); blockRule.Rules.Add(nameChangeRule); blockRule.Rules.Add(rankingChangeRule); blockRule.Rules.Add(descriptionChangeRule); blockRule.Rules.Add(selfReturnRule); var compileResult = blockRule.Compile(); compileResult.Should().BeTrue(); _testOutputHelper.WriteLine($"{nameof(blockRule)}:{Environment.NewLine}" + $"{blockRule.ExpressionDebugView()}"); var game = blockRule.Execute(null); game.Name.Should().Be("some fancy name"); game.Ranking.Should().Be(1000); game.Description.Should().Be("some cool description"); game.Rating.Should().BeNullOrEmpty(); _testOutputHelper.WriteLine($"{game}"); var newGame = new Game { Rating = "high" }; // newGame is not same as game object ReferenceEquals(game, newGame).Should().BeFalse(); game = blockRule.Execute(newGame); // this call shall return the same newGame object with updated values ReferenceEquals(game, newGame).Should().BeTrue(); game.Rating.Should().Be("high"); _testOutputHelper.WriteLine($"newGame: {game}"); }
public void ConditionalRuleWithBlockToAndFromJson() { var nameChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Name", SourceDataRule = new ConstantRule <string> { Value = "some fancy name" } }; var rankingChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Ranking", SourceDataRule = new ConstantRule <int> { Value = "1000" } }; var descriptionChangeRule = new UpdateValueRule <Game> { ObjectToUpdate = "Description", SourceDataRule = new ConstantRule <string> { Value = "some cool description" } }; var blockRule = new ActionBlockRule <Game>(); blockRule.Rules.Add(nameChangeRule); blockRule.Rules.Add(rankingChangeRule); blockRule.Rules.Add(descriptionChangeRule); var conditionalUpdateValue = new ConditionalIfThActionRule <Game> { ConditionRule = new MethodCallRule <Game, bool> { ObjectToCallMethodOn = "Name", MethodToCall = "Equals", MethodParameters = { new ConstantRule <string> { Value = "some name" }, new ConstantRule <StringComparison> { Value = "CurrentCultureIgnoreCase" } } }, TrueRule = blockRule }; var converter = new JsonConverterForRule(); // convert to json var ruleJson = JsonConvert.SerializeObject(conditionalUpdateValue, Formatting.Indented, converter); _testOutputHelper.WriteLine($"{nameof(ruleJson)}:{Environment.NewLine}{ruleJson}"); // re-hydrate from json var ruleFromJson = JsonConvert.DeserializeObject <ConditionalIfThActionRule <Game> >(ruleJson, converter); var compileResult = ruleFromJson.Compile(); compileResult.Should().BeTrue(); var game = new Game { Name = "some name" }; _testOutputHelper.WriteLine($"before game.Name: {game.Name}"); ruleFromJson.Execute(game); _testOutputHelper.WriteLine($"after game.Name: {game.Name}"); game.Name.Should().Be("some fancy name"); game.Ranking.Should().Be(1000); game.Description.Should().Be("some cool description"); _testOutputHelper.WriteLine($"{game}"); }