public void IsStatusChangeAllowed_As_Admin() { Status IN_PROGRESS = _dbContext.Statuses.Single(s => s.Code == Status.IN_PROGRESS_CODE); Status SUBMITTED = _dbContext.Statuses.Single(s => s.Code == Status.SUBMITTED_CODE); Status APPROVED = _dbContext.Statuses.Single(s => s.Code == Status.APPROVED_CODE); Status DECLINED = _dbContext.Statuses.Single(s => s.Code == Status.DECLINED_CODE); Status ACCEPTED_TOS = _dbContext.Statuses.Single(s => s.Code == Status.ACCEPTED_TOS_CODE); Status DECLINED_TOS = _dbContext.Statuses.Single(s => s.Code == Status.DECLINED_TOS_CODE); // add the admin role to the user TestUtils.AddAdminRoleToUser(_httpContext?.HttpContext?.User); // check all of the permutations for workflow state changes Assert.True(_service.IsStatusChangeAllowed(null, IN_PROGRESS)); Assert.False(_service.IsStatusChangeAllowed(null, SUBMITTED)); Assert.False(_service.IsStatusChangeAllowed(null, APPROVED)); Assert.False(_service.IsStatusChangeAllowed(null, DECLINED)); Assert.False(_service.IsStatusChangeAllowed(null, ACCEPTED_TOS)); Assert.False(_service.IsStatusChangeAllowed(null, DECLINED_TOS)); Assert.False(_service.IsStatusChangeAllowed(IN_PROGRESS, null)); Assert.False(_service.IsStatusChangeAllowed(IN_PROGRESS, IN_PROGRESS)); Assert.True(_service.IsStatusChangeAllowed(IN_PROGRESS, SUBMITTED)); Assert.False(_service.IsStatusChangeAllowed(IN_PROGRESS, APPROVED)); Assert.False(_service.IsStatusChangeAllowed(IN_PROGRESS, DECLINED)); Assert.False(_service.IsStatusChangeAllowed(IN_PROGRESS, ACCEPTED_TOS)); Assert.False(_service.IsStatusChangeAllowed(IN_PROGRESS, DECLINED_TOS)); Assert.False(_service.IsStatusChangeAllowed(SUBMITTED, null)); Assert.True(_service.IsStatusChangeAllowed(SUBMITTED, IN_PROGRESS)); Assert.False(_service.IsStatusChangeAllowed(SUBMITTED, SUBMITTED)); Assert.True(_service.IsStatusChangeAllowed(SUBMITTED, APPROVED)); Assert.True(_service.IsStatusChangeAllowed(SUBMITTED, DECLINED)); Assert.False(_service.IsStatusChangeAllowed(SUBMITTED, ACCEPTED_TOS)); Assert.False(_service.IsStatusChangeAllowed(SUBMITTED, DECLINED_TOS)); Assert.False(_service.IsStatusChangeAllowed(APPROVED, null)); Assert.False(_service.IsStatusChangeAllowed(APPROVED, IN_PROGRESS)); Assert.False(_service.IsStatusChangeAllowed(APPROVED, SUBMITTED)); Assert.False(_service.IsStatusChangeAllowed(APPROVED, APPROVED)); Assert.False(_service.IsStatusChangeAllowed(APPROVED, DECLINED)); Assert.True(_service.IsStatusChangeAllowed(APPROVED, ACCEPTED_TOS)); Assert.True(_service.IsStatusChangeAllowed(APPROVED, DECLINED_TOS)); Assert.False(_service.IsStatusChangeAllowed(DECLINED, null)); Assert.True(_service.IsStatusChangeAllowed(DECLINED, IN_PROGRESS)); Assert.False(_service.IsStatusChangeAllowed(DECLINED, SUBMITTED)); Assert.False(_service.IsStatusChangeAllowed(DECLINED, APPROVED)); Assert.False(_service.IsStatusChangeAllowed(DECLINED, DECLINED)); Assert.False(_service.IsStatusChangeAllowed(DECLINED, ACCEPTED_TOS)); Assert.False(_service.IsStatusChangeAllowed(DECLINED, DECLINED_TOS)); Assert.False(_service.IsStatusChangeAllowed(ACCEPTED_TOS, null)); Assert.True(_service.IsStatusChangeAllowed(ACCEPTED_TOS, IN_PROGRESS)); Assert.False(_service.IsStatusChangeAllowed(ACCEPTED_TOS, SUBMITTED)); Assert.False(_service.IsStatusChangeAllowed(ACCEPTED_TOS, APPROVED)); Assert.False(_service.IsStatusChangeAllowed(ACCEPTED_TOS, DECLINED)); Assert.False(_service.IsStatusChangeAllowed(ACCEPTED_TOS, ACCEPTED_TOS)); Assert.False(_service.IsStatusChangeAllowed(ACCEPTED_TOS, DECLINED_TOS)); Assert.False(_service.IsStatusChangeAllowed(DECLINED_TOS, null)); Assert.True(_service.IsStatusChangeAllowed(DECLINED_TOS, IN_PROGRESS)); Assert.False(_service.IsStatusChangeAllowed(DECLINED_TOS, SUBMITTED)); Assert.False(_service.IsStatusChangeAllowed(DECLINED_TOS, APPROVED)); Assert.False(_service.IsStatusChangeAllowed(DECLINED_TOS, DECLINED)); Assert.False(_service.IsStatusChangeAllowed(DECLINED_TOS, ACCEPTED_TOS)); Assert.False(_service.IsStatusChangeAllowed(DECLINED_TOS, DECLINED_TOS)); // remove the admin role from the user TestUtils.RemoveAdminRoleFromUser(_httpContext?.HttpContext?.User); }