/// <summary> /// Initializes a new instance of the <see cref="T:Filter"/> class. /// </summary> /// <param name="context">The context.</param> /// <param name="variablesManager">The variables manager.</param> /// <param name="valueCheckers">The value checkers.</param> /// <exception cref="ArgumentNullException">If <paramref name="variablesManager"/> is <code>null</code>.</exception> public Filter(IExecutionContext context, PacketPropertyVariablesManager variablesManager, List<IValueChecker<object>> valueCheckers) : base(context) { if (null == variablesManager) { throw new ArgumentNullException("variablesManager", "Variables manager is required to function properly."); } this.variablesManager = variablesManager; // Clone list of value checkers this.valueCheckers = valueCheckers.ToArray(); }
public virtual async Task TestStringFormattersInCustomActions() { IValueChecker valueChecker = A.Fake <IValueChecker>(); IStringCorrector stringCorrector1 = A.Fake <IStringCorrector>(); IStringCorrector stringCorrector2 = A.Fake <IStringCorrector>(); A.CallTo(() => stringCorrector1.CorrectString(A <string> .Ignored)) .ReturnsLazily(correctString => { string arg = correctString.GetArgument <string>("input"); return("ONE" + arg); }); A.CallTo(() => stringCorrector2.CorrectString(A <string> .Ignored)) .ReturnsLazily(correctString => { string arg = correctString.GetArgument <string>("input"); return("TWO" + arg); }); using (BitOwinTestEnvironment testEnvironment = new BitOwinTestEnvironment(new TestEnvironmentArgs { AdditionalDependencies = (manager, services) => { manager.RegisterInstance(valueChecker); manager.RegisterInstance(stringCorrector2, overwriteExisting: false); manager.RegisterInstance(stringCorrector1, overwriteExisting: false); } })) { TokenResponse token = await testEnvironment.Server.Login("ValidUserName", "ValidPassword", clientId : "TestResOwner"); IODataClient client = testEnvironment.Server.BuildODataClient(token: token); await client.TestModels() .StringFormattersTests(simpleString: "simpleString", stringsArray: new[] { "stringsArray1", "stringsArray2" }, stringsArray2: new[] { "stringsArray1", "stringsArray2" }, entitiesArray: new[] { new TestModel { StringProperty = "StringProperty1", Id = 2, Version = 2 }, new TestModel { StringProperty = "StringProperty2", Id = 3, Version = 3 } }, simpleDto: new TestModel { StringProperty = "StringProperty", Id = 1, Version = 1 }) .ExecuteAsync(); A.CallTo(() => valueChecker.CheckValue("ONETWOsimpleString")) .MustHaveHappenedOnceExactly(); A.CallTo(() => valueChecker.CheckValue(A <List <string> > .That.Matches(strs => strs.SequenceEqual(new List <string> { "ONETWOstringsArray1", "ONETWOstringsArray2" })))) .MustHaveHappenedOnceExactly(); A.CallTo(() => valueChecker.CheckValue(A <TestModel> .That.Matches(tm => tm.StringProperty == "ONETWOStringProperty"))) .MustHaveHappenedOnceExactly(); A.CallTo(() => valueChecker.CheckValue(A <List <TestModel> > .That.Matches(tms => tms.First().StringProperty == "ONETWOStringProperty1" && tms.Last().StringProperty == "ONETWOStringProperty2"))) .MustHaveHappenedOnceExactly(); A.CallTo(() => stringCorrector1.CorrectString(A <string> .Ignored)) .MustHaveHappenedANumberOfTimesMatching(times => times == 8); A.CallTo(() => stringCorrector2.CorrectString(A <string> .Ignored)) .MustHaveHappenedANumberOfTimesMatching(times => times == 8); } }
public virtual async Task TestStringFormattersInCustomActions() { IValueChecker valueChecker = A.Fake <IValueChecker>(); IStringCorrector stringCorrector1 = A.Fake <IStringCorrector>(); IStringCorrector stringCorrector2 = A.Fake <IStringCorrector>(); A.CallTo(() => stringCorrector1.CorrectString(A <string> .Ignored)) .ReturnsLazily(correctString => { string arg = correctString.GetArgument <string>("source"); return("ONE" + arg); }); A.CallTo(() => stringCorrector2.CorrectString(A <string> .Ignored)) .ReturnsLazily(correctString => { string arg = correctString.GetArgument <string>("source"); return("TWO" + arg); }); using (TestEnvironment testEnvironment = new TestEnvironment(new TestEnvironmentArgs { AdditionalDependencies = manager => { manager.RegisterInstance(valueChecker); manager.RegisterInstance(stringCorrector2, overwriteExciting: false); manager.RegisterInstance(stringCorrector1, overwriteExciting: false); } })) { OAuthToken token = testEnvironment.Server.Login("ValidUserName", "ValidPassword"); ODataClient client = testEnvironment.Server.BuildODataClient(token: token); await client.Controller <TestModelsController, TestModel>() .Action(nameof(TestModelsController.StringFormattersTests)) .Set(new { simpleString = "simpleString", stringsArray = new[] { "stringsArray1", "stringsArray2" }, stringsArray2 = new[] { "stringsArray1", "stringsArray2" }, simpleEntity = new TestModel { StringProperty = "StringProperty", Id = 1, Version = 1 }, entitiesArray = new[] { new TestModel { StringProperty = "StringProperty1", Id = 2, Version = 2 }, new TestModel { StringProperty = "StringProperty2", Id = 3, Version = 3 } } }).ExecuteAsync(); A.CallTo(() => valueChecker.CheckValue("ONETWOsimpleString")) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => valueChecker.CheckValue(A <List <string> > .That.Matches(strs => strs.SequenceEqual(new List <string> { "ONETWOstringsArray1", "ONETWOstringsArray2" })))) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => valueChecker.CheckValue(A <TestModel> .That.Matches(tm => tm.StringProperty == "ONETWOStringProperty"))) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => valueChecker.CheckValue(A <List <TestModel> > .That.Matches(tms => tms.First().StringProperty == "ONETWOStringProperty1" && tms.Last().StringProperty == "ONETWOStringProperty2"))) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => stringCorrector1.CorrectString(A <string> .Ignored)) .MustHaveHappened(Repeated.Exactly.Times(6)); A.CallTo(() => stringCorrector2.CorrectString(A <string> .Ignored)) .MustHaveHappened(Repeated.Exactly.Times(6)); } }