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 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 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));
        }