public void GetVisibleStepsTest() { // Lists are unordered to check against that. var service = new RegistrationStatusService(); var mockDataService = Substitute.For <IDataService <CustomerRegistrationStepsStatus> >(); service.CustomerRegistrationStepsStatusController = mockDataService; List <CustomerRegistrationStepsStatus> stepList = new List <CustomerRegistrationStepsStatus> { new CustomerRegistrationStepsStatus() { StepName = "Step 2", StepNumber = 2, StepStatus = "NotStarted" }, new CustomerRegistrationStepsStatus() { StepName = "Step 1", StepNumber = 1, StepStatus = "Done" }, new CustomerRegistrationStepsStatus() { StepName = "Step 3", StepNumber = 3, StepStatus = "NotStarted" } }; var dataServiceResponse = Task.FromResult(stepList); mockDataService.GetManyByCriteria(null).ReturnsForAnyArgs(dataServiceResponse); var result = service.GetVisibleSteps(Guid.Empty); Assert.That(result.PreviousStep.StepNumber, Is.EqualTo(1)); Assert.That(result.CurrentStep.StepNumber, Is.EqualTo(2)); Assert.That(result.FutureStep.StepNumber, Is.EqualTo(3)); Assert.That(result.HasPreviousStep, Is.True); Assert.That(result.HasCurrentStep, Is.True); Assert.That(result.HasFutureStep, Is.True); Assert.That(result.CurrentStepNo, Is.EqualTo(2)); Assert.That(result.TotalSteps, Is.EqualTo(3)); stepList = new List <CustomerRegistrationStepsStatus> { new CustomerRegistrationStepsStatus() { StepName = "Step 1", StepNumber = 1, StepStatus = "Done" }, new CustomerRegistrationStepsStatus() { StepName = "Step 4", StepNumber = 4, StepStatus = "NotStarted" }, new CustomerRegistrationStepsStatus() { StepName = "Step 3", StepNumber = 3, StepStatus = "NotStarted" }, new CustomerRegistrationStepsStatus() { StepName = "Step 5", StepNumber = 5, StepStatus = "NotStarted" }, new CustomerRegistrationStepsStatus() { StepName = "Step 2", StepNumber = 2, StepStatus = "Done" } }; // set new mock mockDataService.GetManyByCriteria(null).ReturnsForAnyArgs(Task.FromResult(stepList)); result = service.GetVisibleSteps(Guid.Empty); Assert.That(result.PreviousStep.StepNumber, Is.EqualTo(2)); Assert.That(result.CurrentStep.StepNumber, Is.EqualTo(3)); Assert.That(result.FutureStep.StepNumber, Is.EqualTo(4)); Assert.That(result.HasPreviousStep, Is.True); Assert.That(result.HasCurrentStep, Is.True); Assert.That(result.HasFutureStep, Is.True); Assert.That(result.CurrentStepNo, Is.EqualTo(3)); Assert.That(result.TotalSteps, Is.EqualTo(5)); // no previous step available stepList = new List <CustomerRegistrationStepsStatus> { new CustomerRegistrationStepsStatus() { StepName = "Step 2", StepNumber = 2, StepStatus = "NotStarted" }, new CustomerRegistrationStepsStatus() { StepName = "Step 3", StepNumber = 3, StepStatus = "NotStarted" }, new CustomerRegistrationStepsStatus() { StepName = "Step 1", StepNumber = 1, StepStatus = "NotStarted" }, new CustomerRegistrationStepsStatus() { StepName = "Step 4", StepNumber = 4, StepStatus = "NotStarted" }, new CustomerRegistrationStepsStatus() { StepName = "Step 5", StepNumber = 5, StepStatus = "NotStarted" } }; // set new mock mockDataService.GetManyByCriteria(null).ReturnsForAnyArgs(Task.FromResult(stepList)); result = service.GetVisibleSteps(Guid.Empty); Assert.That(result.PreviousStep, Is.Null); Assert.That(result.CurrentStep.StepNumber, Is.EqualTo(1)); Assert.That(result.FutureStep.StepNumber, Is.EqualTo(2)); Assert.That(result.HasPreviousStep, Is.False); Assert.That(result.HasCurrentStep, Is.True); Assert.That(result.HasFutureStep, Is.True); Assert.That(result.CurrentStepNo, Is.EqualTo(1)); Assert.That(result.TotalSteps, Is.EqualTo(5)); // no previous step available stepList = new List <CustomerRegistrationStepsStatus> { new CustomerRegistrationStepsStatus() { StepName = "Step 1", StepNumber = 1, StepStatus = "Done" }, new CustomerRegistrationStepsStatus() { StepName = "Step 2", StepNumber = 2, StepStatus = "Done" }, new CustomerRegistrationStepsStatus() { StepName = "Step 3", StepNumber = 3, StepStatus = "Done" }, new CustomerRegistrationStepsStatus() { StepName = "Step 4", StepNumber = 4, StepStatus = "Done" }, new CustomerRegistrationStepsStatus() { StepName = "Step 5", StepNumber = 5, StepStatus = "NotStarted" } }; // set new mock mockDataService.GetManyByCriteria(null).ReturnsForAnyArgs(Task.FromResult(stepList)); result = service.GetVisibleSteps(Guid.Empty); Assert.That(result.PreviousStep.StepNumber, Is.EqualTo(4)); Assert.That(result.CurrentStep.StepNumber, Is.EqualTo(5)); Assert.That(result.FutureStep, Is.Null); // all done stepList = new List <CustomerRegistrationStepsStatus> { new CustomerRegistrationStepsStatus() { StepName = "Step 1", StepNumber = 1, StepStatus = "Done" }, new CustomerRegistrationStepsStatus() { StepName = "Step 2", StepNumber = 2, StepStatus = "Done" }, new CustomerRegistrationStepsStatus() { StepName = "Step 3", StepNumber = 3, StepStatus = "Done" }, new CustomerRegistrationStepsStatus() { StepName = "Step 4", StepNumber = 4, StepStatus = "Done" }, new CustomerRegistrationStepsStatus() { StepName = "Step 5", StepNumber = 5, StepStatus = "Done" } }; // set new mock mockDataService.GetManyByCriteria(null).ReturnsForAnyArgs(Task.FromResult(stepList)); result = service.GetVisibleSteps(Guid.Empty); Assert.That(result.PreviousStep.StepNumber, Is.EqualTo(5)); Assert.That(result.CurrentStep, Is.Null); Assert.That(result.FutureStep, Is.Null); Assert.That(result.HasPreviousStep, Is.True); Assert.That(result.HasCurrentStep, Is.False); Assert.That(result.HasFutureStep, Is.False); Assert.That(result.CurrentStepNo, Is.EqualTo(0)); Assert.That(result.TotalSteps, Is.EqualTo(5)); }