public void GetFormData_NullRequest()
        {
            var handler = new FormControllerRequestHandler(new DictionaryCache <long, EntityData>());

            Assert.That(() => handler.GetFormData(null),
                        Throws.TypeOf <ArgumentNullException>().And.Property("ParamName").EqualTo("request"));
        }
        public void GetFormCalculationDependencies_NullForm()
        {
            var handler = new FormControllerRequestHandler(new DictionaryCache <long, EntityData>());

            Assert.That(() => handler.GetFormCalculationDependencies(null),
                        Throws.TypeOf <ArgumentNullException>().And.Property("ParamName").EqualTo("formRef"));
        }
        public void GetFormCalculationDependencies_NoCalculations()
        {
            var testState = CreateTestEntities(null, null, "name", "description");

            var handler = new FormControllerRequestHandler(new DictionaryCache <long, EntityData>());

            var response = handler.GetFormCalculationDependencies(new EntityRef(testState.EditForm.Id));

            Assert.IsNull(response.VisibilityCalcDependencies);
        }
        public void GetFormAsEntityData()
        {
            // Create a form with the name and description controls depending on each other
            var testState = CreateTestEntities(null, null, "name", "description");

            var handler = new FormControllerRequestHandler(new DictionaryCache <long, EntityData>());

            var entityData = handler.GetFormAsEntityData(testState.EditForm.Id, false);

            Assert.AreEqual(testState.EditForm.Id, entityData.Id.Id);
        }
        public void GetFormData_InvalidEntityRequest()
        {
            var handler = new FormControllerRequestHandler(new DictionaryCache <long, EntityData>());

            var request = new FormDataRequest
            {
                EntityId = "-100",
                Query    = "name, description"
            };

            var response = handler.GetFormData(request);

            Assert.IsNull(response);
        }
        public void GetFormCalculationDependencies_NonBoolCalculation()
        {
            // Create a form with one of the calcs being a non bool expression
            var testState = CreateTestEntities("[Description] = 'test'", "[Name]", "name", "description");

            var handler = new FormControllerRequestHandler(new DictionaryCache <long, EntityData>());

            var response = handler.GetFormCalculationDependencies(new EntityRef(testState.EditForm.Id));

            Assert.AreEqual(1, response.VisibilityCalcDependencies.Count);
            VisibilityCalcDependencies nameDeps;

            Assert.IsTrue(response.VisibilityCalcDependencies.TryGetValue(testState.NameControl.Id, out nameDeps));
            Assert.AreEqual(1, nameDeps.Fields.Count);

            Assert.IsTrue(nameDeps.Fields.Contains(EntityType.Description_Field.Id));
        }
        public void GetFormData_NoVisCalculation()
        {
            // Create a form with the name and description controls depending on each other
            var testState = CreateTestEntities(null, null, "name", "description");

            var handler = new FormControllerRequestHandler(new DictionaryCache <long, EntityData>());

            var request = new FormDataRequest
            {
                FormId   = testState.EditForm.Id.ToString(),
                EntityId = testState.Instance.Id.ToString(),
                Query    = "name, description"
            };

            var response = handler.GetFormData(request);

            Assert.IsNull(response.InitiallyHiddenControls);
            Assert.IsTrue(response.FormDataEntity.Entities.ContainsKey(testState.Instance.Id));
        }
        public void GetFormData_NonBoolVisCalculation()
        {
            var testState = CreateTestEntities("[Description]", null, "name", "description");

            var handler = new FormControllerRequestHandler(new DictionaryCache <long, EntityData>());

            var request = new FormDataRequest
            {
                FormId   = testState.EditForm.Id.ToString(),
                EntityId = testState.Instance.Id.ToString(),
                Query    = "name, description"
            };

            var response = handler.GetFormData(request);

            Assert.AreEqual(1, response.InitiallyHiddenControls.Count);
            Assert.IsTrue(response.InitiallyHiddenControls.Contains(testState.NameControl.Id));
            Assert.IsTrue(response.FormDataEntity.Entities.ContainsKey(testState.Instance.Id));
        }
        public void GetFormCalculationDependencies_RelationshipCalculations()
        {
            // Create a form with the name and description controls depending on each other
            var testState = CreateTestEntities("[Created by].Name = 'test'", null, "name", "description");

            var handler = new FormControllerRequestHandler(new DictionaryCache <long, EntityData>());

            var response = handler.GetFormCalculationDependencies(new EntityRef(testState.EditForm.Id));

            Assert.AreEqual(1, response.VisibilityCalcDependencies.Count);
            VisibilityCalcDependencies nameDeps;

            Assert.IsTrue(response.VisibilityCalcDependencies.TryGetValue(testState.NameControl.Id, out nameDeps));
            Assert.AreEqual(1, nameDeps.Fields.Count);
            Assert.AreEqual(1, nameDeps.Relationships.Count);

            Assert.IsTrue(nameDeps.Fields.Contains(EntityType.Name_Field.Id));
            Assert.IsTrue(nameDeps.Relationships.Contains(EntityType.CreatedBy_Field.Id));
        }
        public void ValidateRequest_InvalidRequest(string entityId, string formId, string query, bool expectedResult,
                                                   string errorMessageContains)
        {
            var handler = new FormControllerRequestHandler(new DictionaryCache <long, EntityData>());

            var request = new FormDataRequest {
                EntityId = entityId, FormId = formId, Query = query
            };
            string message;
            var    result = handler.ValidateRequest(request, out message);

            Assert.AreEqual(expectedResult, result, "The validation result is invalid");
            if (!expectedResult)
            {
                Assert.IsTrue(message.Contains(errorMessageContains), "The error message is incorrect.");
            }
            else
            {
                Assert.IsTrue(string.IsNullOrWhiteSpace(message));
            }
        }