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