Пример #1
0
        public void GetNextAvailableStatesWithMultiPersonFieldSecurity()
        {
            var personIds = new Dictionary<string, int>();
            personIds[Constants.BasePersonProcessName] = 111;
            personIds["Employee"] = 222;

            var identity = Mock.Create<IMQ1Identity>();
            Mock.Arrange(() => identity.IsAdmin).Returns(false);
            Mock.Arrange(() => identity.IsAuthenticated).Returns(true);
            Mock.Arrange(() => identity.PersonId).Returns(111);
            Mock.Arrange(() => identity.PersonIds).Returns(personIds);
            Mock.Arrange(() => identity.BusinessUnitId).Returns(10);
            Mock.Arrange(() => identity.RolesId).Returns(new List<int> { 1, 2 });

            var principal = Mock.Create<IPrincipal>();

            Mock.Arrange(() => principal.Identity).Returns(identity);

            Csla.ApplicationContext.User = principal;

            var currentState = Mock.Create<IState>();
            Mock.Arrange(() => currentState.Id).Returns(100);

            var state1 = Mock.Create<IState>();
            Mock.Arrange(() => state1.Id).Returns(1);
            Mock.Arrange(() => state1.Guid).Returns(Guid.NewGuid);

            var state2 = Mock.Create<IState>();
            Mock.Arrange(() => state2.Id).Returns(2);
            Mock.Arrange(() => state2.Guid).Returns(Guid.NewGuid);

            // Approvers can move from CurrentState to State1.
            var connector1 = Mock.Create<IStateConnector>();
            Mock.Arrange(() => connector1.ConnectedTo).Returns(state1);
            var sc1 = Mock.Create<IStateConnectorSecurityConfiguration>();
            Mock.Arrange(() => sc1.BusinessUnitId).Returns(Constants.AllBusinessUnitsId);
            Mock.Arrange(() => sc1.RoleId).Returns(Constants.AllRolesId);
            Mock.Arrange(() => sc1.PersonFieldName).Returns("Approvers");
            Mock.Arrange(() => sc1.CanMove).Returns(true);
            Mock.Arrange(() => connector1.SecurityConfigurations).Returns(new[] { sc1 });

            // Employees can move from CurrentState to State2.
            var connector2 = Mock.Create<IStateConnector>();
            Mock.Arrange(() => connector2.ConnectedTo).Returns(state2);
            var sc2 = Mock.Create<IStateConnectorSecurityConfiguration>();
            Mock.Arrange(() => sc2.BusinessUnitId).Returns(Constants.AllBusinessUnitsId);
            Mock.Arrange(() => sc2.RoleId).Returns(Constants.AllRolesId);
            Mock.Arrange(() => sc2.PersonFieldName).Returns("Employees");
            Mock.Arrange(() => sc2.CanMove).Returns(true);
            Mock.Arrange(() => connector2.SecurityConfigurations).Returns(new[] { sc2 });

            Mock.Arrange(() => currentState.Connectors).Returns(new[] { connector1, connector2 });

            var approver = Mock.Create<ICrossRefItemInfo>();
            Mock.Arrange(() => approver.Id).Returns(111);
            var approvers = new List<ICrossRefItemInfo> { approver };

            var employee = Mock.Create<ICrossRefItemInfo>();
            Mock.Arrange(() => employee.Id).Returns(222);
            var employees = new List<ICrossRefItemInfo> { employee };

            var item = new ItemWithPersonFields { CurrentState = 100, Approvers = approvers, Employees = employees };

            var stateManager = new StateManager();

            stateManager.States.Add(currentState);
            stateManager.States.Add(state1);
            stateManager.States.Add(state2);

            var nextStates = stateManager.GetNextAvailableStates(item);

            Assert.AreEqual(2, nextStates.Length);
            Assert.IsTrue(nextStates.Contains(state1));
            Assert.IsTrue(nextStates.Contains(state2));

            approvers.Clear();
            employees.Clear();
            nextStates = stateManager.GetNextAvailableStates(item);
            Assert.AreEqual(0, nextStates.Length);
        }
Пример #2
0
        public void GetNextAvailableStatesWithPersonFieldSecurity()
        {
            var personIds = new Dictionary<string, int>();
            personIds[Constants.BasePersonProcessName] = 111;
            personIds["Employee"] = 222;

            var identity = Mock.Create<IMQ1Identity>();
            Mock.Arrange(() => identity.IsAdmin).Returns(false);
            Mock.Arrange(() => identity.IsAuthenticated).Returns(true);
            Mock.Arrange(() => identity.PersonId).Returns(111);
            Mock.Arrange(() => identity.PersonIds).Returns(personIds);
            Mock.Arrange(() => identity.BusinessUnitId).Returns(10);
            Mock.Arrange(() => identity.RolesId).Returns(new List<int> { 1, 2 });

            var principal = Mock.Create<IPrincipal>();

            Mock.Arrange(() => principal.Identity).Returns(identity);

            Csla.ApplicationContext.User = principal;

            var state1 = Mock.Create<IState>();
            Mock.Arrange(() => state1.Id).Returns(1);
            
            var state2 = Mock.Create<IState>();
            Mock.Arrange(() => state2.Id).Returns(2);

            var securityConfig = Mock.Create<IStateConnectorSecurityConfiguration>();
            Mock.Arrange(() => securityConfig.BusinessUnitId).Returns(Constants.AllBusinessUnitsId);
            Mock.Arrange(() => securityConfig.RoleId).Returns(Constants.AllRolesId);
            Mock.Arrange(() => securityConfig.PersonFieldName).Returns("Manager");
            Mock.Arrange(() => securityConfig.CanMove).Returns(true);

            var connector = Mock.Create<IStateConnector>();
            Mock.Arrange(() => connector.ConnectedTo).Returns(state2);
            Mock.Arrange(() => connector.SecurityConfigurations).Returns(new[] { securityConfig });

            Mock.Arrange(() => state1.Connectors).Returns(new[] { connector });

            var stateManager = new StateManager();

            stateManager.States.Add(state1);
            stateManager.States.Add(state2);

            var item = new ItemWithPersonFields { CurrentState = 1, Manager = 222 };

            var nextStates = stateManager.GetNextAvailableStates(item);

            Assert.AreEqual(1, nextStates.Length);
            Assert.AreSame(state2, nextStates[0]);

            item.Manager = 333;
            nextStates = stateManager.GetNextAvailableStates(item);

            Assert.AreEqual(0, nextStates.Length);
        }