public void ReturnsUpdatedGameUsingFactory() { var sourceNameRule = ConstantRulesFactory.CreateConstantRule <string>("some fancy name"); var nameChangeRule = UpdateValueRulesFactory.CreateUpdateValueRule <Game>(g => g.Name, sourceNameRule); var sourceRankRule = ConstantRulesFactory.CreateConstantRule <int>("1000"); var rankingChangeRule = UpdateValueRulesFactory.CreateUpdateValueRule <Game>(g => g.Ranking, sourceRankRule); var sourceDescRule = ConstantRulesFactory.CreateConstantRule <string>("some cool description"); var descriptionChangeRule = UpdateValueRulesFactory.CreateUpdateValueRule <Game>(g => g.Description, sourceDescRule); var selfReturnRule = new SelfReturnRule <Game>(); var subRules = new List <Rule> { nameChangeRule, rankingChangeRule, descriptionChangeRule, selfReturnRule }; var blockRule = BlockRulesFactory.CreateFuncBlockRule <Game, Game>(subRules); var compileResult = blockRule.Compile(); compileResult.Should().BeTrue(); 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 GameSelfReturnToAndFromJson() { var ruleBefore = new SelfReturnRule <Game>(); var customJsonConverter = new JsonConverterForRule(); // serialize to json var ruleJson = JsonConvert.SerializeObject(ruleBefore, customJsonConverter); _testOutputHelper.WriteLine($"{nameof(ruleJson)}:{Environment.NewLine}{ruleJson}"); // de-hydrate from json var ruleAfter = JsonConvert.DeserializeObject <SelfReturnRule <Game> >(ruleJson, customJsonConverter); var compileResult = ruleAfter.Compile(); compileResult.Should().BeTrue(); _testOutputHelper.WriteLine($"selfReturnRule for Game:{Environment.NewLine}" + $"{ruleAfter.ExpressionDebugView()}"); var someGame = new Game(); var value = ruleAfter.Get(someGame); value.Should().Be(someGame); // both objects should be pointing to same objects var referenceEquals = ReferenceEquals(someGame, value); referenceEquals.Should().BeTrue(); }
public void IntSelfReturn(int someValue) { var rule = new SelfReturnRule <int>(); var compileResult = rule.Compile(); compileResult.Should().BeTrue(); _testOutputHelper.WriteLine($"selfReturnRule for Int:{Environment.NewLine}" + $"{rule.ExpressionDebugView()}"); var value = rule.Get(someValue); value.Should().Be(someValue); }
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 StringSelfReturn(string someValue) { var rule = new SelfReturnRule <string>(); var compileResult = rule.Compile(); compileResult.Should().BeTrue(); _testOutputHelper.WriteLine($"selfReturnRule for String:{Environment.NewLine}" + $"{rule.ExpressionDebugView()}"); var value = rule.Get(someValue); value.Should().Be(someValue); var referenceEquals = ReferenceEquals(someValue, value); referenceEquals.Should().BeTrue(); }
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 IntSelfReturnToAndFromJson(int someValue) { var ruleBefore = new SelfReturnRule <int>(); var customJsonConverter = new JsonConverterForRule(); // serialize to json var ruleJson = JsonConvert.SerializeObject(ruleBefore, customJsonConverter); _testOutputHelper.WriteLine($"{nameof(ruleJson)}:{Environment.NewLine}{ruleJson}"); // de-hydrate from json var ruleAfter = JsonConvert.DeserializeObject <SelfReturnRule <int> >(ruleJson, customJsonConverter); var compileResult = ruleAfter.Compile(); compileResult.Should().BeTrue(); _testOutputHelper.WriteLine($"selfReturnRule2 for Int:{Environment.NewLine}" + $"{ruleAfter.ExpressionDebugView()}"); var value = ruleAfter.Get(someValue); value.Should().Be(someValue); }
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}"); }