예제 #1
0
        private void CreateStateCombination(StatefulAccessControlList acl, StatePropertyDefinition stateProperty, StateDefinition stateDefinition)
        {
            StateCombination stateCombination = acl.CreateStateCombination();

            stateProperty.AddState(stateDefinition);
            stateCombination.AttachState(stateDefinition);
        }
예제 #2
0
        public void AddDuplicateStateCombination(StateCombination duplicateStateCombination)
        {
            ArgumentUtility.CheckNotNull("duplicateStateCombination", duplicateStateCombination);

            _isValid = false;
            _duplicateStateCombinations.Add(duplicateStateCombination);
        }
예제 #3
0
        public void AddInvalidStateCombination(StateCombination invalidStateCombination)
        {
            ArgumentUtility.CheckNotNull("invalidStateCombination", invalidStateCombination);

            _isValid = false;
            _invalidStateCombinations.Add(invalidStateCombination);
        }
예제 #4
0
        public void GetClass()
        {
            StateCombination combination = _testHelper.GetStateCombinationForDeliveredAndUnpaidOrder();

            Assert.That(combination.AccessControlList.Class, Is.Not.Null);
            Assert.That(combination.Class, Is.SameAs(combination.AccessControlList.Class));
        }
예제 #5
0
        public void MatchesStates_StatefulAndWithoutDemandedStates()
        {
            StateCombination       combination = _testHelper.GetStateCombinationForDeliveredAndUnpaidOrder();
            List <StateDefinition> states      = CreateEmptyStateList();

            Assert.That(combination.MatchesStates(states), Is.False);
        }
예제 #6
0
        public void SetAndGet_Index()
        {
            StateCombination stateCombination = StateCombination.NewObject();

            stateCombination.Index = 1;
            Assert.That(stateCombination.Index, Is.EqualTo(1));
        }
예제 #7
0
        public void Commit_DeletedStateCombination()
        {
            SecurableClassDefinition orderClass = _testHelper.CreateOrderClassDefinition();

            using (_testHelper.Transaction.CreateSubTransaction().EnterDiscardingScope())
            {
                orderClass.EnsureDataAvailable();
                Assert.That(orderClass.State, Is.EqualTo(StateType.Unchanged));

                using (ClientTransaction.Current.CreateSubTransaction().EnterDiscardingScope())
                {
                    StateCombination combination = _testHelper.CreateStateCombination(orderClass, ClientTransaction.Current);
                    combination.AccessControlList.AccessControlEntries.Add(AccessControlEntry.NewObject());

                    using (ClientTransaction.Current.CreateSubTransaction().EnterDiscardingScope())
                    {
                        orderClass.EnsureDataAvailable();
                        Assert.That(orderClass.State, Is.EqualTo(StateType.Unchanged));

                        combination.AccessControlList.Delete();
                        Assert.That(combination.Class, Is.Null);

                        Assert.That(orderClass.State, Is.EqualTo(StateType.Changed));
                        ClientTransaction.Current.Commit();
                    }

                    ClientTransaction.Current.Commit();
                }

                Assert.That(orderClass.State, Is.EqualTo(StateType.Changed));
            }
        }
예제 #8
0
        public void MatchesStates_DeliveredAndUnpaid()
        {
            StateCombination combination = _testHelper.GetStateCombinationForDeliveredAndUnpaidOrder();

            StateDefinition[] states = combination.GetStates();

            Assert.That(combination.MatchesStates(states), Is.True);
        }
예제 #9
0
        public void MatchesStates_StatefulWithWildcard()
        {
            StateCombination combination = _testHelper.GetStateCombinationForDeliveredAndUnpaidOrder();

            StateDefinition[] states = combination.GetStates();

            Assert.Fail("TODO: Implement");
            Assert.That(combination.MatchesStates(states), Is.True);
        }
예제 #10
0
        public void AttachState_WithoutClassDefinition()
        {
            StateCombination        combination = StateCombination.NewObject();
            StatePropertyDefinition property    = _testHelper.CreateTestProperty();

            combination.AttachState(property["Test1"]);

            Assert.That(combination.GetStates().Length, Is.EqualTo(1));
        }
예제 #11
0
        public void GetStates_Empty()
        {
            SecurableClassDefinition classDefinition = _testHelper.CreateOrderClassDefinition();
            StateCombination         combination     = _testHelper.CreateStateCombination(classDefinition);

            StateDefinition[] states = combination.GetStates();

            Assert.That(states.Length, Is.EqualTo(0));
        }
예제 #12
0
        public void GetHashCode_TwoStatelessCombinations()
        {
            SecurableClassDefinition orderClass   = _testHelper.CreateOrderClassDefinition();
            StateCombination         combination1 = _testHelper.CreateStateCombination(orderClass);
            StateCombination         combination2 = _testHelper.CreateStateCombination(orderClass);

            StateCombinationComparer comparer = new StateCombinationComparer();

            Assert.That(comparer.GetHashCode(combination2), Is.EqualTo(comparer.GetHashCode(combination1)));
        }
예제 #13
0
        public void Equals_TwoStatelessCombinations()
        {
            SecurableClassDefinition orderClass   = _testHelper.CreateOrderClassDefinition();
            StateCombination         combination1 = _testHelper.CreateStateCombination(orderClass);
            StateCombination         combination2 = _testHelper.CreateStateCombination(orderClass);

            StateCombinationComparer comparer = new StateCombinationComparer();

            Assert.That(comparer.Equals(combination1, combination2), Is.True);
        }
예제 #14
0
        public void GetHashCode_OneStatelessAndOneWithAState()
        {
            SecurableClassDefinition orderClass      = _testHelper.CreateOrderClassDefinition();
            StatePropertyDefinition  paymentProperty = _testHelper.CreatePaymentStateProperty(orderClass);
            StateCombination         combination1    = _testHelper.CreateStateCombination(orderClass);
            StateCombination         combination2    = _testHelper.CreateStateCombination(orderClass, paymentProperty[EnumWrapper.Get(PaymentState.Paid).Name]);

            StateCombinationComparer comparer = new StateCombinationComparer();

            Assert.That(comparer.GetHashCode(combination2), Is.Not.EqualTo(comparer.GetHashCode(combination1)));
        }
예제 #15
0
        public void Equals_TwoDifferent()
        {
            SecurableClassDefinition orderClass      = _testHelper.CreateOrderClassDefinition();
            StatePropertyDefinition  paymentProperty = _testHelper.CreatePaymentStateProperty(orderClass);
            StateCombination         combination1    = _testHelper.CreateStateCombination(orderClass, paymentProperty[EnumWrapper.Get(PaymentState.None).Name]);
            StateCombination         combination2    = _testHelper.CreateStateCombination(orderClass, paymentProperty[EnumWrapper.Get(PaymentState.Paid).Name]);

            StateCombinationComparer comparer = new StateCombinationComparer();

            Assert.That(comparer.Equals(combination1, combination2), Is.False);
        }
예제 #16
0
        public void GetStates_OneState()
        {
            SecurableClassDefinition classDefinition = _testHelper.CreateOrderClassDefinition();
            StatePropertyDefinition  property        = _testHelper.CreatePaymentStateProperty(classDefinition);
            StateDefinition          state           = property.DefinedStates[1];
            StateCombination         combination     = _testHelper.CreateStateCombination(classDefinition, state);

            StateDefinition[] states = combination.GetStates();

            Assert.That(states.Length, Is.EqualTo(1));
            Assert.That(states[0], Is.SameAs(state));
        }
예제 #17
0
        public void GetStateCombinations_TwoCombinations()
        {
            AccessControlTestHelper testHelper = new AccessControlTestHelper();

            using (testHelper.Transaction.EnterNonDiscardingScope())
            {
                SecurableClassDefinition orderClass        = testHelper.CreateOrderClassDefinition();
                StateCombination         stateCombination  = testHelper.CreateStateCombination(orderClass);
                List <StateCombination>  stateCombinations = testHelper.CreateOrderStateAndPaymentStateCombinations(orderClass);

                Assert.That(orderClass.StateCombinations, Is.EqualTo(ArrayUtility.Combine(stateCombination, stateCombinations.ToArray())));
            }
        }
예제 #18
0
        public void ClearStates()
        {
            SecurableClassDefinition classDefinition = _testHelper.CreateOrderClassDefinition();
            StateCombination         combination     = _testHelper.CreateStateCombination(classDefinition);
            StatePropertyDefinition  property        = _testHelper.CreateTestProperty();

            combination.AttachState(property["Test1"]);
            Assert.That(combination.GetStates(), Is.Not.Empty);

            combination.ClearStates();

            Assert.That(combination.GetStates(), Is.Empty);
        }
예제 #19
0
        public void GetStates_MultipleStates()
        {
            SecurableClassDefinition classDefinition    = _testHelper.CreateOrderClassDefinition();
            StatePropertyDefinition  paymentProperty    = _testHelper.CreatePaymentStateProperty(classDefinition);
            StateDefinition          paidState          = paymentProperty.DefinedStates[1];
            StatePropertyDefinition  orderStateProperty = _testHelper.CreateOrderStateProperty(classDefinition);
            StateDefinition          deliveredState     = orderStateProperty.DefinedStates[1];
            StateCombination         combination        = _testHelper.CreateStateCombination(classDefinition, paidState, deliveredState);

            StateDefinition[] states = combination.GetStates();

            Assert.That(states.Length, Is.EqualTo(2));
            Assert.That(states, Has.Member(paidState));
            Assert.That(states, Has.Member(deliveredState));
        }
예제 #20
0
        public void AttachState_NewState()
        {
            SecurableClassDefinition classDefinition = _testHelper.CreateOrderClassDefinition();
            StateCombination         combination     = _testHelper.CreateStateCombination(classDefinition);
            StatePropertyDefinition  property        = _testHelper.CreateTestProperty();

            using (_testHelper.Transaction.CreateSubTransaction().EnterDiscardingScope())
            {
                combination.AttachState(property["Test1"]);

                var states = combination.GetStates();
                Assert.That(states.Length, Is.EqualTo(1));
                Assert.That(states[0], Is.SameAs(property["Test1"]));
            }
        }
예제 #21
0
        public void IsValid_DuplicateStateCombination()
        {
            AccessControlTestHelper testHelper = new AccessControlTestHelper();

            using (testHelper.Transaction.EnterNonDiscardingScope())
            {
                SecurableClassDefinition orderClass       = testHelper.CreateOrderClassDefinition();
                StateCombination         stateCombination = testHelper.CreateStateCombination(orderClass);

                SecurableClassValidationResult result = new SecurableClassValidationResult();

                result.AddDuplicateStateCombination(stateCombination);

                Assert.That(result.IsValid, Is.False);
            }
        }
예제 #22
0
        private StatefulAccessControlList CreateStatefulAcl(SecurableClassDefinition classDefinition, ClientTransaction transaction, params StateDefinition[] states)
        {
            using (transaction.EnterNonDiscardingScope())
            {
                var acl = StatefulAccessControlList.NewObject();
                classDefinition.StatefulAccessControlLists.Add(acl);
                StateCombination stateCombination = acl.CreateStateCombination();

                foreach (StateDefinition state in states)
                {
                    stateCombination.AttachState(state);
                }

                return(acl);
            }
        }
예제 #23
0
        public void ValidateStateCombinationsAgainstStateProperties_EmptyStateCombinationInClassWithStateProperties()
        {
            AccessControlTestHelper testHelper = new AccessControlTestHelper();

            using (testHelper.Transaction.EnterNonDiscardingScope())
            {
                SecurableClassDefinition orderClass = testHelper.CreateOrderClassDefinition();
                testHelper.CreateOrderStateAndPaymentStateCombinations(orderClass);
                StateCombination statelessCombination = testHelper.CreateStateCombination(orderClass);

                SecurableClassValidationResult result = new SecurableClassValidationResult();
                orderClass.ValidateStateCombinationsAgainstStateProperties(result);

                Assert.That(result.IsValid, Is.False);
                Assert.That(result.InvalidStateCombinations, Is.EquivalentTo(new[] { statelessCombination }));
            }
        }
예제 #24
0
        public void DuplicateStateCombinations_OneInvalidStateCombination()
        {
            AccessControlTestHelper testHelper = new AccessControlTestHelper();

            using (testHelper.Transaction.EnterNonDiscardingScope())
            {
                SecurableClassDefinition orderClass       = testHelper.CreateOrderClassDefinition();
                StateCombination         stateCombination = testHelper.CreateStateCombination(orderClass);

                SecurableClassValidationResult result = new SecurableClassValidationResult();

                result.AddDuplicateStateCombination(stateCombination);

                Assert.That(result.DuplicateStateCombinations.Count, Is.EqualTo(1));
                Assert.That(result.DuplicateStateCombinations, Has.Member(stateCombination));
            }
        }
예제 #25
0
        public void CreateStateCombination()
        {
            SecurableClassDefinition  classDefinition = _testHelper.CreateClassDefinition("SecurableClass");
            StatefulAccessControlList acl             = _testHelper.CreateStatefulAcl(classDefinition);

            using (_testHelper.Transaction.CreateSubTransaction().EnterDiscardingScope())
            {
                acl.EnsureDataAvailable();
                Assert.That(acl.State, Is.EqualTo(StateType.Unchanged));

                StateCombination stateCombination = acl.CreateStateCombination();

                Assert.That(stateCombination.AccessControlList, Is.SameAs(acl));
                Assert.That(stateCombination.Class, Is.EqualTo(acl.Class));
                Assert.That(stateCombination.GetStates(), Is.Empty);
                Assert.That(acl.State, Is.EqualTo(StateType.Changed));
            }
        }
예제 #26
0
        public void ValidateUniqueStateCombinations_TwoEmptyStateCombinations()
        {
            AccessControlTestHelper testHelper = new AccessControlTestHelper();

            using (testHelper.Transaction.EnterNonDiscardingScope())
            {
                SecurableClassDefinition orderClass            = testHelper.CreateOrderClassDefinition();
                StateCombination         statelessCombination1 = testHelper.CreateStateCombination(orderClass);
                StateCombination         statelessCombination2 = testHelper.CreateStateCombination(orderClass);

                SecurableClassValidationResult result = new SecurableClassValidationResult();
                orderClass.ValidateUniqueStateCombinations(result);

                Assert.That(result.IsValid, Is.False);
                Assert.That(result.DuplicateStateCombinations, Has.Member(statelessCombination1));
                Assert.That(result.DuplicateStateCombinations, Has.Member(statelessCombination2));
            }
        }
예제 #27
0
        private void CreateEditStateCombinationControls(IList <StateCombination> stateCombinations)
        {
            StateCombinationControls.Controls.Clear();
            _editStateCombinationControls.Clear();

            for (int i = 0; i < stateCombinations.Count; i++)
            {
                StateCombination stateCombination = stateCombinations[i];

                EditStateCombinationControl editStateCombinationControl = (EditStateCombinationControl)LoadControl("EditStateCombinationControl.ascx");
                editStateCombinationControl.ID             = "SC_" + i;
                editStateCombinationControl.BusinessObject = stateCombination;
                editStateCombinationControl.Delete        += EditStateCombinationControl_Delete;

                StateCombinationControls.Controls.Add(editStateCombinationControl);

                _editStateCombinationControls.Add(editStateCombinationControl);
            }
        }
예제 #28
0
        public void ValidateUniqueStateCombinations_TwoStateCombinations()
        {
            AccessControlTestHelper testHelper = new AccessControlTestHelper();

            using (testHelper.Transaction.EnterNonDiscardingScope())
            {
                SecurableClassDefinition orderClass       = testHelper.CreateOrderClassDefinition();
                StatePropertyDefinition  paymentProperty  = testHelper.CreatePaymentStateProperty(orderClass);
                StateCombination         paidCombination1 = testHelper.CreateStateCombination(orderClass, paymentProperty[EnumWrapper.Get(PaymentState.Paid).Name]);
                StateCombination         paidCombination2 = testHelper.CreateStateCombination(orderClass, paymentProperty[EnumWrapper.Get(PaymentState.Paid).Name]);
                testHelper.CreateStateCombination(orderClass, paymentProperty[EnumWrapper.Get(PaymentState.None).Name]);

                SecurableClassValidationResult result = new SecurableClassValidationResult();
                orderClass.ValidateUniqueStateCombinations(result);

                Assert.That(result.IsValid, Is.False);
                Assert.That(result.DuplicateStateCombinations.Count, Is.EqualTo(2));
                Assert.That(result.DuplicateStateCombinations, Has.Member(paidCombination1));
                Assert.That(result.DuplicateStateCombinations, Has.Member(paidCombination2));
            }
        }
예제 #29
0
        public void CreateStateCombination_TwoNewEntries()
        {
            StatefulAccessControlList acl = StatefulAccessControlList.NewObject();
            var securableClassDefinition  = _testHelper.CreateClassDefinition("SecurableClass");

            securableClassDefinition.StatefulAccessControlLists.Add(acl);
            using (_testHelper.Transaction.CreateSubTransaction().EnterDiscardingScope())
            {
                acl.EnsureDataAvailable();
                Assert.That(acl.State, Is.EqualTo(StateType.Unchanged));

                StateCombination stateCombination0 = acl.CreateStateCombination();
                StateCombination stateCombination1 = acl.CreateStateCombination();

                Assert.That(acl.StateCombinations.Count, Is.EqualTo(2));
                Assert.That(acl.StateCombinations[0], Is.SameAs(stateCombination0));
                Assert.That(stateCombination0.Index, Is.EqualTo(0));
                Assert.That(acl.StateCombinations[1], Is.SameAs(stateCombination1));
                Assert.That(stateCombination1.Index, Is.EqualTo(1));
                Assert.That(acl.State, Is.EqualTo(StateType.Changed));
            }
        }
예제 #30
0
        public void ValidateDuringCommit_ByTouchOnClassForChangedStateUsagesCollection()
        {
            SecurableClassDefinition orderClass      = _testHelper.CreateOrderClassDefinition();
            StatePropertyDefinition  paymentProperty = _testHelper.CreatePaymentStateProperty(orderClass);
            StateDefinition          paidState       = paymentProperty[EnumWrapper.Get(PaymentState.Paid).Name];
            StateDefinition          notPaidState    = paymentProperty[EnumWrapper.Get(PaymentState.None).Name];
            StateCombination         combination1    = _testHelper.CreateStateCombination(orderClass, paidState);
            StateCombination         combination2    = _testHelper.CreateStateCombination(orderClass, notPaidState);
            StateCombination         combination3    = _testHelper.CreateStateCombination(orderClass);

            combination1.AccessControlList.AccessControlEntries.Add(AccessControlEntry.NewObject());
            combination2.AccessControlList.AccessControlEntries.Add(AccessControlEntry.NewObject());
            combination3.AccessControlList.AccessControlEntries.Add(AccessControlEntry.NewObject());
            var dupicateStateCombination = orderClass.CreateStatefulAccessControlList().StateCombinations[0];

            using (_testHelper.Transaction.CreateSubTransaction().EnterDiscardingScope())
            {
                dupicateStateCombination.AttachState(paidState);

                ClientTransaction.Current.Commit();
            }
        }