private void ExecuteResponsesSearchTextTest(string[,] responsesFieldsValues, string searchedText, int expectedResultsCount) { var fieldsPerResponse = responsesFieldsValues.GetLength(1); var controls = new MvcWidgetProxy[fieldsPerResponse]; for (int i = 0; i < controls.Length; i++) { var control = new MvcWidgetProxy(); control.ControllerName = typeof(TextFieldController).FullName; var controller = new TextFieldController(); control.Settings = new ControllerSettings(controller); controls[i] = control; } var formId = ServerOperationsFeather.Forms().CreateFormWithWidgets(controls); var manager = FormsManager.GetManager(); var form = manager.GetForm(formId); var masterDetailView = new FormsMasterDetailView(); masterDetailView.FormDescription = form; var masterDetailDefinition = new MasterGridViewDefinition(); typeof(FormsMasterDetailView).GetMethod("ConfigureSearchFields", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(masterDetailView, new object[] { masterDetailDefinition }); var fields = masterDetailDefinition.SearchFields.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); Assert.AreEqual(fieldsPerResponse, fields.Length, string.Format(CultureInfo.InvariantCulture, "The produced search fields count ({0}) is not equal to the actual fields count on the form ({1})", fields.Length, fieldsPerResponse)); var service = new FormsService(); try { using (var fluent = App.WorkWith()) { for (int responseIndex = 0; responseIndex < responsesFieldsValues.GetLength(0); responseIndex++) { var formEntry = fluent.Forms().Form(form.Name).Entry().CreateNew(Guid.NewGuid()); for (int fieldValueIndex = 0; fieldValueIndex < responsesFieldsValues.GetLength(1); fieldValueIndex++) { formEntry.SetFieldValue(fields[fieldValueIndex], responsesFieldsValues[responseIndex, fieldValueIndex]); } formEntry.SaveChanges(); } } var filterClauses = fields.Select(f => string.Format(CultureInfo.InvariantCulture, "{0}.ToUpper().Contains(\"{1}\".ToUpper())", f, searchedText)); var filter = "(" + string.Join(" OR ", filterClauses) + ")"; var entries = service.GetFormEntries(form.Name, null, "Title ASC", 0, 50, filter, manager.Provider.FormsNamespace + "." + form.Name, null, Guid.Empty); Assert.AreEqual(expectedResultsCount, entries.TotalCount, string.Format(CultureInfo.InvariantCulture, "The returned search results ({0}) do not match the expected ones ({1})", entries.TotalCount, expectedResultsCount)); } finally { FormsModuleCodeSnippets.DeleteForm(formId); } }