public void TestCreateToReadyMultiplePotentialOwners()
        {
            IdentityId initiatorId = new IdentityId();
            IdentityId potentialOwnerOne = new IdentityId();
            IdentityId potentialOwnerTwo = new IdentityId();
            IdentityId businessAdminId = new IdentityId();
            IPrincipal initiator = new ClaimsPrincipal(initiatorId.GetIdentity());
            _mapStorage[potentialOwnerOne.Id] = new Account(potentialOwnerOne, "s-1-2-3-4-5", "auth", AccountType.User);
            _mapStorage[potentialOwnerTwo.Id] = new Account(potentialOwnerTwo, "s-1-2-3-4-5", "auth", AccountType.User);
            _mapStorage[businessAdminId.Id] = new Account(businessAdminId, "s-55-2-3-4-5", "auth", AccountType.User);

            ILoggingService loggingService = SetupLoggerMock(new List<TaskHistoryEvent> {
                                                                     new TaskHistoryEvent{
                                                                         Event = "Create",
                                                                         OldStatus = TaskStatus.None,
                                                                         NewStatus = TaskStatus.Created,
                                                                         OldPriority = Priority.Normal,
                                                                         NewPriority = Priority.Normal,
                                                                         Comment = "",
                                                                         TimeStamp = DateTime.UtcNow,
                                                                         UserId = initiator.Identity.GetMappedId()}
            });
            Thread.CurrentPrincipal = initiator;
            Task task = new Task(new TaskId(), TaskStatus.Created, string.Empty,
                                 string.Empty, Priority.Normal, false,
                                 DateTime.UtcNow, initiator.Identity,
                                 null, null, null)
            {
                LoggingService = loggingService
            };
            Assert.AreEqual(TaskStatus.Created, task.Status);
            task.PotentialOwners.Add(potentialOwnerOne.GetIdentity());
            task.PotentialOwners.Add(potentialOwnerTwo.GetIdentity());
            task.BusinessAdministrators.Add(businessAdminId.GetIdentity());
            Assert.IsNotNull(task);
            Assert.AreEqual(TaskStatus.Created, task.Status);
            IPrincipal businessAdmin = new ClaimsPrincipal(businessAdminId.GetIdentity());
            Thread.CurrentPrincipal = businessAdmin;
            task.Activate();
            Assert.AreEqual(TaskStatus.Ready, task.Status);
            Assert.IsNull(task.ActualOwner);
            Assert.IsNotNull(task.History);
            Assert.AreEqual(2, task.History.Count());
            TaskHistoryEvent history = task.History.ElementAt(0);
            Assert.IsNotNull(history);
            Assert.AreEqual(TaskStatus.None, history.OldStatus);
            Assert.AreEqual(TaskStatus.Created, history.NewStatus);
            Assert.AreEqual(initiator.Identity.GetMappedId(), history.UserId);
            history = task.History.ElementAt(1);
            Assert.IsNotNull(history);
        }
        public void TestCreateState()
        {
            IdentityId initiatorId = new IdentityId();
            IPrincipal initiator = new ClaimsPrincipal(initiatorId.GetIdentity());

            Task task = new Task(new TaskId(), TaskStatus.Created, string.Empty,
                                 string.Empty, Priority.Normal, false,
                                 DateTime.UtcNow, initiator.Identity,
                                 null, null, null);

            Thread.CurrentPrincipal = initiator;
            Assert.IsNotNull(task);
            Assert.AreEqual(TaskStatus.Created, task.Status);
            Assert.IsNull(task.ActualOwner);
            Assert.IsNotNull(task.Initiator);
            Assert.AreEqual(initiator.Identity, task.Initiator);
            Assert.AreEqual(Priority.Normal, task.Priority);
            Assert.AreEqual(TaskStatus.Created, task.Status);
        }
        public void TestSuspendedToReversedActualOwner()
        {
            IdentityId actualId = new IdentityId();
            ILoggingService loggingService = SetupLoggerMock(new List<TaskHistoryEvent>());
            Task task = new Task(
                         new TaskId(), TaskStatus.Reserved, string.Empty,
                         string.Empty, Priority.Normal, false,
                         DateTime.UtcNow, new IdentityId().GetIdentity(),
                         DateTime.UtcNow, null, actualId.GetIdentity())
            {
                LoggingService = loggingService
            };
            IPrincipal actualOwner = new ClaimsPrincipal(actualId.GetIdentity());
            Thread.CurrentPrincipal = actualOwner;
            task.Suspend();
            Assert.AreEqual(TaskStatus.Suspended, task.Status);
            Assert.AreEqual(actualId.GetIdentity(), task.ActualOwner);
            task.Resume();
            Assert.AreEqual(TaskStatus.Reserved, task.Status);
            Assert.AreEqual(actualId.GetIdentity(), task.ActualOwner);

            Assert.IsNotNull(task.History);
            Assert.AreEqual(2, task.History.Count());
            TaskHistoryEvent history = task.History.ElementAt(0);
            Assert.IsNotNull(history);
            Assert.AreEqual(TaskStatus.Reserved, history.OldStatus);
            Assert.AreEqual(TaskStatus.Suspended, history.NewStatus);
            Assert.AreEqual(actualId, history.UserId);
            history = task.History.ElementAt(1);
            Assert.IsNotNull(history);
            Assert.AreEqual(TaskStatus.Suspended, history.OldStatus);
            Assert.AreEqual(TaskStatus.Reserved, history.NewStatus);
            Assert.AreEqual(actualId, history.UserId);
        }
        public void TestReservedForwardActualOwner()
        {
            IdentityId potentialOwner = new IdentityId();
            IdentityId actualId = new IdentityId();
            _mapStorage[potentialOwner.Id] = new Account(potentialOwner, "s-1-2-3-4-5", "auth", AccountType.User);

            ILoggingService loggingService = SetupLoggerMock(new List<TaskHistoryEvent>());
            Task task = new Task(
                         new TaskId(), TaskStatus.Reserved, string.Empty,
                         string.Empty, Priority.Normal, false,
                         DateTime.UtcNow, new IdentityId().GetIdentity(),
                         DateTime.UtcNow, null, actualId.GetIdentity())
            {
                LoggingService = loggingService
            };
            IPrincipal actualOwner = new ClaimsPrincipal(actualId.GetIdentity());
            Thread.CurrentPrincipal = actualOwner;

            task.Forward(potentialOwner.GetIdentity());
            Assert.AreEqual(TaskStatus.Ready, task.Status);
            Assert.IsNotNull(task.ActualOwner);
            Assert.AreEqual(potentialOwner, task.ActualOwner.GetMappedId());

            Assert.IsNotNull(task.History);
            Assert.AreEqual(1, task.History.Count());
            TaskHistoryEvent history = task.History.ElementAt(0);
            Assert.IsNotNull(history);
            Assert.AreEqual(TaskStatus.Reserved, history.OldStatus);
            Assert.AreEqual(TaskStatus.Ready, history.NewStatus);
            Assert.AreEqual(actualId, history.UserId);
            Assert.AreEqual(actualId, history.StartOwner);
            Assert.AreEqual(potentialOwner, history.EndOwner);
        }
        public void TestNominateIndividual()
        {
            IdentityId potentialOwner = new IdentityId();
            IdentityId businessAdministrator = new IdentityId();
            _mapStorage[potentialOwner.Id] = new Account(potentialOwner, "s-1-2-3-4-5", "auth", AccountType.User);

            ILoggingService loggingService = SetupLoggerMock(new List<TaskHistoryEvent>());
            Task task = new Task(
                         new TaskId(), TaskStatus.Created, string.Empty,
                         string.Empty, Priority.Normal, false,
                         DateTime.UtcNow, new IdentityId().GetIdentity(),
                         DateTime.UtcNow, null, null)
            {
                LoggingService = loggingService
            };
            IPrincipal actualOwner = new ClaimsPrincipal(businessAdministrator.GetIdentity());
            Thread.CurrentPrincipal = actualOwner;
            task.BusinessAdministrators.Add(businessAdministrator.GetIdentity());
            task.Nominate(potentialOwner.GetIdentity());
            Assert.AreEqual(TaskStatus.Reserved, task.Status);
            Assert.IsNotNull(task.ActualOwner);
            Assert.AreEqual(potentialOwner, task.ActualOwner.GetMappedId());
            Assert.IsTrue(task.PotentialOwners.Contains(potentialOwner.GetIdentity()));
            Assert.IsNotNull(task.History);
            Assert.AreEqual(1, task.History.Count());
            TaskHistoryEvent history = task.History.ElementAt(0);
            Assert.IsNotNull(history);
            Assert.AreEqual(TaskStatus.Created, history.OldStatus);
            Assert.AreEqual(TaskStatus.Reserved, history.NewStatus);
            Assert.AreEqual(businessAdministrator, history.UserId);
            Assert.AreEqual(null,history.StartOwner);
            Assert.AreEqual(potentialOwner, history.EndOwner);
        }