public async Task UpdateWorkOrderStatus(int workOrderId, WorkStatusCode newCode)
        {
            var order = await GetWorkOrder(workOrderId);

            order.StatusCode = newCode;
            await _repairsContext.SaveChangesAsync();
        }
Example #2
0
        public async Task ContractorUpdatesWorkOrderStatusNoAccess()
        {
            // arrange
            const string Comment             = "expectedComment";
            DateTime     jobStatusUpdateTime = DateTime.Now;
            const Generated.JobStatusUpdateTypeCode NoAccess = Generated.JobStatusUpdateTypeCode.DeniedAccess_70;
            WorkStatusCode expectedNewStatus = WorkStatusCode.NoAccess;

            _currentUserServiceMock.SetSecurityGroup(UserGroups.Contractor, true);
            var expectedWorkOrder        = CreateWorkOrder();
            var workOrderCompleteRequest = CreateRequest(expectedWorkOrder.Id);

            workOrderCompleteRequest.JobStatusUpdates = new List <Generated.JobStatusUpdates>
            {
                new Generated.JobStatusUpdates
                {
                    TypeCode = NoAccess, Comments = Comment, EventTime = jobStatusUpdateTime
                }
            };

            // act
            await _classUnderTest.Execute(workOrderCompleteRequest);

            // assert

            var lastWorkOrderComplete = _workOrderCompletionGatewayMock.LastWorkOrderComplete;

            _repairsGatewayMock.Verify(rgm => rgm.UpdateWorkOrderStatus(expectedWorkOrder.Id, expectedNewStatus));
            lastWorkOrderComplete.JobStatusUpdates.Single().Comments.Should().Be(Resources.WorkOrderNoAccessPrefix + $"{jobStatusUpdateTime:dd MMMM yyyy HH:mm} " + Comment);
        }
Example #3
0
        public async Task UpdatesWorkOrderStatusCancelled()
        {
            // arrange
            const string   Comment                  = "expectedComment";
            string         customUpdateType         = CustomJobStatusUpdates.Cancelled;
            WorkStatusCode expectedNewStatus        = WorkStatusCode.Canceled;
            var            expectedWorkOrder        = CreateWorkOrder();
            var            workOrderCompleteRequest = CreateRequest(expectedWorkOrder.Id);

            workOrderCompleteRequest.JobStatusUpdates = new List <Generated.JobStatusUpdates>
            {
                new Generated.JobStatusUpdates
                {
                    TypeCode = Generated.JobStatusUpdateTypeCode.Other_0, OtherType = customUpdateType, Comments = Comment
                }
            };

            // act
            await _classUnderTest.Execute(workOrderCompleteRequest);

            // assert
            var lastWorkOrderComplete = _workOrderCompletionGatewayMock.LastWorkOrderComplete;

            _repairsGatewayMock.Verify(rgm => rgm.UpdateWorkOrderStatus(expectedWorkOrder.Id, expectedNewStatus));
            lastWorkOrderComplete.JobStatusUpdates.Single().Comments.Should().Be(Resources.WorkOrderCancelledPrefix + Comment);
        }
 public CreateOrderResult(int id, WorkStatusCode statusCode, string statusCodeDescription)
 {
     Id                           = id;
     StatusCode                   = statusCode;
     StatusCodeDescription        = statusCodeDescription;
     ExternallyManagedAppointment = false;
 }
Example #5
0
        private WorkOrder CreateReturnWorkOrder(int expectedId, WorkStatusCode workStatusCode = WorkStatusCode.VariationApproved)
        {
            var workOrder = BuildWorkOrder(expectedId, workStatusCode);

            _repairsGatewayMock.Setup(gateway => gateway.GetWorkOrder(It.Is <int>(i => i == expectedId)))
            .ReturnsAsync(workOrder);

            return(workOrder);
        }
Example #6
0
        public async Task ThrowsNotSupportedIfNotPendingApproval(WorkStatusCode status)
        {
            _repairsGatewayMock.Setup(g => g.GetWorkOrder(It.IsAny <int>())).ReturnsAsync(new WorkOrder {
                StatusCode = status
            });

            Func <Task> testFn = async() => await _classUnderTest.Execute(1);

            await testFn.Should().ThrowAsync <NotSupportedException>();
        }
Example #7
0
        public async Task ThrowNotSupportedExceptionWhenWorkStatusNotPendingApproval(WorkStatusCode status)
        {
            const int desiredWorkOrderId = 42;
            var       workOrder          = CreateReturnWorkOrder(desiredWorkOrderId, status);
            var       request            = CreateJobStatusUpdateRequest(workOrder,
                                                                        Generated.JobStatusUpdateTypeCode.RejectVariation_125);

            _currentUserServiceMock.SetSecurityGroup(UserGroups.ContractManager);

            Func <Task> fn = () => _classUnderTest.Execute(request);
            await fn.Should().ThrowAsync <NotSupportedException>();
        }
        public async Task ThrowsNotSupportedWhenWOInWrongState(WorkStatusCode status)
        {
            var workOrder = _fixture.Create <WorkOrder>();

            workOrder.StatusCode = status;
            var jobStatusUpdate = BuildUpdate(workOrder);

            Func <Task> act = async() => await _classUnderTest.Execute(jobStatusUpdate);

            (await act.Should().ThrowAsync <NotSupportedException>())
            .Which.Message.Should().Be(Resources.WorkOrderNotPendingApproval);
        }
        private List <WorkOrder> GenerateWorkOrders(int workOrderCount, WorkStatusCode workStatusCode, DateTime closedDate)
        {
            _generator.AddValue(workStatusCode, (RepairsApi.V2.Infrastructure.WorkOrder wo) => wo.StatusCode);
            _generator.AddValue(closedDate, (RepairsApi.V2.Infrastructure.WorkOrder wo) => wo.ClosedDate);
            var generatedWorkOrders = _generator.GenerateList(workOrderCount);

            foreach (var wo in generatedWorkOrders)
            {
                wo.Appointments.First().Date = DateTime.Today;
            }

            return(generatedWorkOrders);
        }
Example #10
0
        public async Task ThrowWhenWorkOrderNotInCorrectState(WorkStatusCode state)
        {
            const int desiredWorkOrderId = 42;
            var       workOrder          = BuildWorkOrder(desiredWorkOrderId);

            workOrder.StatusCode = state;
            var request = BuildUpdate(workOrder);

            Func <Task> fn = () => _classUnderTest.Execute(request);

            (await fn.Should().ThrowAsync <NotSupportedException>())
            .Which.Message.Should().Be(Resources.ActionUnsupported);
        }
Example #11
0
        public async Task UpdatesWorkOrderStatus(WorkStatusCode statusCode)
        {
            var workOrder = _fixture.Create <WorkOrder>();

            workOrder.StatusCode = statusCode;
            var jobStatusUpdate = BuildUpdate(workOrder);

            _repairsGatewayMock.ReturnsWorkOrders(workOrder);

            await _classUnderTest.Execute(jobStatusUpdate);

            workOrder.StatusCode.Should().Be(WorkStatusCode.PendMaterial);
        }
Example #12
0
        public async Task ThrowsNotSupportedWhenWoInWrongStatus(WorkStatusCode statusCode)
        {
            var workOrder = _fixture.Create <WorkOrder>();

            workOrder.StatusCode = statusCode;
            var jobStatusUpdate = BuildUpdate(workOrder);

            _repairsGatewayMock.ReturnsWorkOrders(workOrder);

            Func <Task> act = () => _classUnderTest.Execute(jobStatusUpdate);

            (await act.Should().ThrowAsync <NotSupportedException>())
            .Which.Message.Should().Be(Resources.CannotResumeJob);
        }
Example #13
0
        public async Task ThrowNotSupportedExceptionWhenWoInWrongState([Values] WorkStatusCode statusCode)
        {
            if (statusCode == WorkStatusCode.VariationPendingApproval)
            {
                return;
            }

            _currentUserServiceMock.SetSecurityGroup(UserGroups.ContractManager);
            const int desiredWorkOrderId = 42;
            var       workOrder          = CreateReturnWorkOrder(desiredWorkOrderId);

            workOrder.StatusCode = statusCode;
            var request = CreateJobStatusUpdateRequest(workOrder,
                                                       Generated.JobStatusUpdateTypeCode.ApproveVariation_10020);

            Func <Task> fn = async() => await _classUnderTest.Execute(request);

            (await fn.Should().ThrowAsync <NotSupportedException>())
            .Which.Message.Should().Be(Resources.ActionUnsupported);
        }
        public async Task HoldAndResumeWorkOrder(JobStatusUpdateTypeCode updateCode, WorkStatusCode workOrderHoldCode)
        {
            // Arrange
            var result = await CreateWorkOrder();

            // Act
            await UpdateSorCodes(result.Id, req => req.TypeCode = updateCode);

            var heldOrder = GetWorkOrderFromDB(result.Id);

            await UpdateSorCodes(result.Id, req =>
            {
                req.TypeCode  = JobStatusUpdateTypeCode.Other_0;
                req.OtherType = CustomJobStatusUpdates.Resume;
            });

            var resumedOrder = GetWorkOrderFromDB(result.Id);

            // Assert
            heldOrder.StatusCode.Should().Be(workOrderHoldCode);
            resumedOrder.StatusCode.Should().Be(WorkStatusCode.Open);
        }
Example #15
0
        public async Task ContractManagerUpdatesWorkOrderStatusComplete()
        {
            // arrange
            string         customUpdateType  = CustomJobStatusUpdates.Completed;
            WorkStatusCode expectedNewStatus = WorkStatusCode.Complete;

            _currentUserServiceMock.SetSecurityGroup(UserGroups.ContractManager, true);
            var expectedWorkOrder        = CreateWorkOrder();
            var workOrderCompleteRequest = CreateRequest(expectedWorkOrder.Id);

            workOrderCompleteRequest.JobStatusUpdates = new List <Generated.JobStatusUpdates>
            {
                new Generated.JobStatusUpdates
                {
                    TypeCode = Generated.JobStatusUpdateTypeCode.Other_0, OtherType = customUpdateType, Comments = "expectedComment"
                }
            };

            // act
            await _classUnderTest.Execute(workOrderCompleteRequest);

            // assert
            _repairsGatewayMock.Verify(rgm => rgm.UpdateWorkOrderStatus(expectedWorkOrder.Id, expectedNewStatus));
        }
Example #16
0
        public async Task ContractManagerUpdatesWorkOrderStatusNoAccess()
        {
            // arrange
            const Generated.JobStatusUpdateTypeCode NoAccess = Generated.JobStatusUpdateTypeCode.DeniedAccess_70;
            WorkStatusCode expectedNewStatus = WorkStatusCode.NoAccess;

            _currentUserServiceMock.SetSecurityGroup(UserGroups.ContractManager, true);
            var expectedWorkOrder        = CreateWorkOrder();
            var workOrderCompleteRequest = CreateRequest(expectedWorkOrder.Id);

            workOrderCompleteRequest.JobStatusUpdates = new List <Generated.JobStatusUpdates>
            {
                new Generated.JobStatusUpdates
                {
                    TypeCode = NoAccess, Comments = "expectedComment"
                }
            };

            // act
            await _classUnderTest.Execute(workOrderCompleteRequest);

            // assert
            _repairsGatewayMock.Verify(rgm => rgm.UpdateWorkOrderStatus(expectedWorkOrder.Id, expectedNewStatus));
        }
Example #17
0
        private WorkOrder BuildWorkOrder(int expectedId, WorkStatusCode workStatusCode)
        {
            var workOrder = _fixture.Build <WorkOrder>()
                            .With(x => x.WorkElements, new List <WorkElement>
            {
                _fixture.Build <WorkElement>()
                .With(x => x.RateScheduleItem,
                      new List <RateScheduleItem>
                {
                    _fixture.Create <RateScheduleItem>()
                }
                      ).With(x => x.Trade,
                             new List <Trade>
                {
                    _fixture.Create <Trade>()
                })
                .Create()
            })
                            .With(x => x.Id, expectedId)
                            .With(x => x.StatusCode, workStatusCode)
                            .Create();

            return(workOrder);
        }
Example #18
0
        public async Task OperativeCanCompleteJobWhenAssigned(Generated.JobStatusUpdateTypeCode updateCode, string otherTypeCode, WorkStatusCode expectedStatus)
        {
            const string expectedPayroll = "payrollNumber";

            _currentUserServiceMock.SetUser("id", "*****@*****.**", "operative", null, null, null, expectedPayroll);
            _currentUserServiceMock.SetSecurityGroup(UserGroups.Contractor, false);
            _currentUserServiceMock.SetSecurityGroup(UserGroups.ContractManager, false);
            _currentUserServiceMock.SetSecurityGroup(UserGroups.Agent, false);
            _currentUserServiceMock.SetSecurityGroup(UserGroups.Operative, true);
            var assignedOperatives = new List <Operative>
            {
                new Operative {
                    PayrollNumber = expectedPayroll
                }
            };
            var woGenerator = CreateGenerator()
                              .AddValue(assignedOperatives, (WorkOrder wo) => wo.AssignedOperatives);
            var expectedWorkOrder        = CreateWorkOrder(woGenerator);
            var workOrderCompleteRequest = CreateRequest(expectedWorkOrder.Id);

            workOrderCompleteRequest.JobStatusUpdates = new List <Generated.JobStatusUpdates>
            {
                new Generated.JobStatusUpdates
                {
                    TypeCode = updateCode, OtherType = otherTypeCode, Comments = "expectedComment"
                }
            };

            await _classUnderTest.Execute(workOrderCompleteRequest);

            _repairsGatewayMock.Verify(x => x.UpdateWorkOrderStatus(expectedWorkOrder.Id, expectedStatus));
        }
Example #19
0
        public async Task UpdatesAssignedOperativesWhenFeatureFlagSetAndContractorUsesDrs(WorkStatusCode workStatus,
                                                                                          bool updateFeatureEnabled,
                                                                                          bool drsFeatureEnabled,
                                                                                          bool contractorUsesDrs,
                                                                                          bool shouldAssign)
        {
            var expectedWorkOrder = _generator
                                    .AddValue(workStatus, (WorkOrder wo) => wo.StatusCode)
                                    .Generate();

            _repairsGatewayMock.ReturnsWorkOrders(expectedWorkOrder);
            _sorGatewayMock.Setup(x => x.GetContractor(expectedWorkOrder.AssignedToPrimary.ContractorReference))
            .ReturnsAsync(new Contractor
            {
                UseExternalScheduleManager = contractorUsesDrs
            });
            _featureManager.Setup(x => x.IsEnabledAsync(FeatureFlags.UpdateOperativesOnWorkOrderGet))
            .ReturnsAsync(updateFeatureEnabled);
            _featureManager.Setup(x => x.IsEnabledAsync(FeatureFlags.DRSIntegration))
            .ReturnsAsync(drsFeatureEnabled);

            await _classUnderTest.Execute(expectedWorkOrder.Id);

            _drsService.Verify(x => x.UpdateWorkOrderDetails(expectedWorkOrder.Id), shouldAssign ? Times.Once() : Times.Never());
        }