public void CorrectlyMergedUIProperties()
        {
            string[] props = { "EXECUTE", "transparent", "autoexpand" };
            #region setup

            BasicAction basic = new BasicAction();
            PolicyResponseAction pra = new PolicyResponseAction();
            pra.Action = basic;

            PolicyResponseActionMerger merger = new PolicyResponseActionMerger(pra);

            bool propValue = true;
            for (int i = 0; i < 3; i++)
            {
                //set the property sets up such that the properties have different values
                ActionPropertySet newSet = new ActionPropertySet();
                foreach (string s in props)
                {
                    newSet[s] = new ActionProperty(s, typeof(bool), PropertyDisplayType.Checkbox, propValue, propValue, propValue, false);
                }
                merger.AddActionPropertySet(newSet);
                propValue = !propValue;
            }

            #endregion

            PolicyResponseAction resultPra = merger.MergePra() as PolicyResponseAction;

            // if at least one user override is false then the override is false
            // if at least one visible is true the it should be what ?
            foreach (string s in props)
            {
                Assert.IsFalse((bool)resultPra.InternalProperties[s].Override, "Override should be disallowed for {0}", s);
                Assert.IsTrue((bool)resultPra.InternalProperties[s].Visible, "props should be visible for {0}", s);
            }
            Assert.IsTrue((bool)(resultPra.InternalProperties["EXECUTE"].Value), "EXECUTE property should be true if at least one set specifies true");
            Assert.IsFalse((bool)(resultPra.InternalProperties["transparent"].Value), "transparent property should be false if at least one set specifies false");
            Assert.IsTrue((bool)resultPra.InternalProperties["autoexpand"].Value, "autoexpand property value should be true");
        }
        public void TestMergePra()
        {
            BasicAction basic = new BasicAction();
            ActionPropertySet set = new ActionPropertySet();
            set.Add("Test", new ActionProperty("Test","test"));
            basic.PropertySet = set;
            PolicyResponseAction pra = new PolicyResponseAction();
            pra.Action = basic;
            pra.InternalProperties = set;
            
            PolicyResponseActionMerger merger = new PolicyResponseActionMerger(pra);
            set["Test"].Value = "test2";
            merger.AddActionPropertySet(set);

            PolicyResponseAction praNew = (PolicyResponseAction) merger.MergePra();
            Assert.AreEqual(praNew.InternalProperties["ThisWasMerged"].Value.ToString(), "sisterhood", "Property value should be - sisterhood");
            Assert.AreEqual(2, basic.CountMerged, "Expected 2 property sets to be sent to the action");
            Assert.AreNotEqual(praNew, pra, "Expected a new {0} back", praNew.GetType().ToString());
        }
        public void EnsureSystemPropertiesArePreserved()
        {
            #region setup
            string[] systemProperties = { "CurrentUser", "Date", "RecipientList", "RunAt", "FileType" };

            BasicAction basic = new BasicAction();
            ActionPropertySet set = new ActionPropertySet();
            set["Add"] = new ActionProperty("TEST", "test");
            basic.PropertySet = set;
            PolicyResponseAction pra = new PolicyResponseAction();
            pra.Action = basic;
            pra.InternalProperties = set;

            set["Add"].Value = "test2";
            foreach (string s in systemProperties)
            {
                set.SystemProperties[s] = new ActionProperty(s, s);
            }

            PolicyResponseActionMerger merger = new PolicyResponseActionMerger(pra);

            merger.AddActionPropertySet(set);
            #endregion

            //execute
            pra = merger.MergePra() as PolicyResponseAction;

            //verify
            foreach (string s in systemProperties)
            {
                SortedList<string, IActionProperty> aps = pra.InternalProperties.SystemProperties;
                Assert.IsTrue(aps.ContainsKey(s) && aps[s].Value.ToString() == s, "System property {0} has been modified after merge", s);
            }
        }