public void WorkOrderResponseMaps()
        {
            var workOrder = new Helpers.StubGeneration.Generator <WorkOrder>()
                            .AddDefaultGenerators()
                            .Generate();

            AppointmentDetails appointment = new AppointmentDetails
            {
                Date        = DateTime.UtcNow,
                Description = "test",
                End         = DateTime.UtcNow,
                Start       = DateTime.UtcNow
            };
            var response = workOrder.ToResponse(appointment, new Uri("https://managementAddress.none"), canAssignOperative: false);

            PropertyClass propertyClass = workOrder.Site?.PropertyClass.FirstOrDefault();
            string        addressLine   = propertyClass?.Address?.AddressLine;

            response.CallerNumber.Should().Be(workOrder.Customer.Person.Communication.Where(cc => cc.Channel.Medium == RepairsApi.V2.Generated.CommunicationMediumCode._20).FirstOrDefault()?.Value);
            response.CallerName.Should().Be(workOrder.Customer.Person.Name.Full);
            response.DateRaised.Should().Be(workOrder.DateRaised);
            response.Description.Should().Be(workOrder.DescriptionOfWork);
            response.Owner.Should().Be(workOrder.AssignedToPrimary.Name);
            response.Priority.Should().Be(workOrder.WorkPriority.PriorityDescription);
            response.PriorityCode.Should().Be(workOrder.WorkPriority.PriorityCode);
            response.Property.Should().Be(addressLine);
            response.PropertyReference.Should().Be(workOrder.Site?.PropertyClass.FirstOrDefault()?.PropertyReference);
            response.Reference.Should().Be(workOrder.Id);
            response.Target.Should().Be(workOrder.WorkPriority.RequiredCompletionDateTime);
            response.Property.Should().Be(addressLine);
            response.ExternalAppointmentManagementUrl.ToString().Should().Contain(workOrder.ExternalSchedulerReference);
            response.CanAssignOperative.Should().BeFalse();
            response.PlannerComments.Should().Be(workOrder.PlannerComments);
        }
        private order GenerateDrsOrder(int expectedOrderNumber)
        {
            var index = 1;
            var bookingCodesGenerator = new Helpers.StubGeneration.Generator <bookingCode[]>()
                                        .AddDefaultGenerators()
                                        .AddValue(_fixture.Create <int>().ToString(), (bookingCode bc) => bc.quantity)
                                        .AddValue(_fixture.Create <int>().ToString(), (bookingCode bc) => bc.standardMinuteValue)
                                        .AddValue(_fixture.Create <int>().ToString(), (bookingCode bc) => bc.itemValue)
                                        .AddValue(expectedOrderNumber.ToString(), (bookingCode bc) => bc.primaryOrderNumber)
                                        .AddGenerator(() => (index++).ToString(), (bookingCode bc) => bc.itemNumberWithinBooking);

            var generator = new Helpers.StubGeneration.Generator <order>()
                            .AddDefaultGenerators()
                            .AddGenerator(() =>
            {
                index = 1;
                return(bookingCodesGenerator.Generate());
            })
                            .AddValue(expectedOrderNumber.ToString(), (order o) => o.primaryOrderNumber)
                            .AddValue(expectedOrderNumber.ToString(), (booking b) => b.primaryOrderNumber)
                            .AddValue(expectedOrderNumber.ToString(), (resource r) => r.primaryOrderNumber)
                            .AddValue(orderStatus.PLANNED, (order o) => o.status)
                            .Ignore((order o) => o.phone)
                            .Ignore((booking b) => b.theOrder);

            var drsOrder = generator.Generate();

            drsOrder.orderCommentsExtended = _locationAlerts.Alerts.ToCommentsExtendedString() + _personAlerts.Alerts.ToCommentsExtendedString();
            return(drsOrder);
        }
        public async Task StoresExternalSchedulerRef()
        {
            const int    newId           = 1;
            const string expectedTokenId = "externalRef";

            _repairsGatewayMock.ReturnWOId(newId);
            ContractorUsesExternalScheduler(true);
            _notificationMock.AddHandler <WorkOrderOpened>(workOrderOpened =>
            {
                workOrderOpened.TokenId = expectedTokenId;
            });
            var generator = new Helpers.StubGeneration.Generator <WorkOrder>()
                            .AddInfrastructureWorkOrderGenerators()
                            .AddValue(new List <Trade>
            {
                new Trade
                {
                    Code = TradeCode.B2
                }
            }, (WorkElement we) => we.Trade);
            var workOrder = generator.Generate();

            var result = await _classUnderTest.Execute(workOrder);

            workOrder.ExternalSchedulerReference.Should().Be(expectedTokenId);
            _repairsGatewayMock.VerifyChangesSaved();
        }
        public void WorkOrderListItemMapsCorrectly()
        {
            var workOrder = new Helpers.StubGeneration.Generator <WorkOrder>()
                            .AddDefaultGenerators()
                            .Generate();

            var result = workOrder.ToListItem();

            ValidateListItem(workOrder, result);
        }
        public async Task <HttpStatusCode> CancelWorkOrder(int id)
        {
            var request = new Helpers.StubGeneration.Generator <WorkOrderComplete>()
                          .AddWorkOrderCompleteGenerators()
                          .SetListLength <JobStatusUpdates>(1)
                          .AddValue(id.ToString(), (WorkOrderComplete woc) => woc.WorkOrderReference.ID)
                          .AddValue(JobStatusUpdateTypeCode.Other_0, (JobStatusUpdates jsu) => jsu.TypeCode)
                          .AddValue(CustomJobStatusUpdates.Cancelled, (JobStatusUpdates jsu) => jsu.OtherType)
                          .Generate();

            return(await Post("/api/v2/workOrderComplete", request));
        }
        private async Task <HttpStatusCode> UpdateJob(int workOrderId, Action <JobStatusUpdate> interceptor = null)
        {
            JobStatusUpdate request = new Helpers.StubGeneration.Generator <JobStatusUpdate>()
                                      .AddJobStatusUpdateGenerators()
                                      .AddValue(JobStatusUpdateTypeCode.Variation_80, (JobStatusUpdate jsu) => jsu.TypeCode)
                                      .AddValue(workOrderId.ToString(), (JobStatusUpdate jsu) => jsu.RelatedWorkOrderReference.ID)
                                      .AddValue("comments", (JobStatusUpdate jsu) => jsu.Comments)
                                      .Generate();

            interceptor?.Invoke(request);

            return(await Post("/api/v2/jobStatusUpdate", request));
        }
        private IEnumerable <WorkOrder> CreateWorkOrders(int quantity = 5)
        {
            var generator = new Helpers.StubGeneration.Generator <WorkOrder>()
                            .AddWorkOrderGenerators()
                            .AddGenerator(() => _workOrderId++, (WorkOrder wo) => wo.Id);

            var workOrders = generator.GenerateList(quantity);

            _listWorkOrdersMock
            .Setup(m => m.Execute(It.IsAny <WorkOrderSearchParameters>()))
            .ReturnsAsync(workOrders);

            _repairsGatewayMock.Setup(x => x.GetWorkOrder(Moq.It.IsAny <int>()))
            .Returns((int reqId) => Task.FromResult(workOrders.Where(wo => wo.Id == reqId).First()));

            return(workOrders);
        }
        public async Task SetsRSIToOriginalTrue()
        {
            var generator = new Helpers.StubGeneration.Generator <WorkOrder>()
                            .AddInfrastructureWorkOrderGenerators()
                            .AddValue(new List <Trade>
            {
                new Trade
                {
                    Code = TradeCode.B2
                }
            }, (WorkElement we) => we.Trade);
            var workOrder = generator.Generate();

            await _classUnderTest.Execute(workOrder);

            _repairsGatewayMock.LastWorkOrder.WorkElements.All(we => we.RateScheduleItem.All(rsi => rsi.Original))
            .Should().BeTrue();
        }
        public void OperativeWorkOrderListItemMapsCorrectly()
        {
            var workOrder = new Helpers.StubGeneration.Generator <WorkOrder>()
                            .AddDefaultGenerators()
                            .Generate();

            var result = workOrder.ToOperativeListItem();

            ValidateListItem(workOrder, result);

            var appointment = workOrder.Appointments.FirstOrDefault();

            result.Appointment.Date.Should().Be(appointment.Date.Date.ToDate());
            result.Appointment.Description.Should().Be(appointment.Day != null ? appointment.Day.AvailableAppointment.Description : Resources.ExternallyManagedAppointment);
            result.Appointment.Start.Should().Be(appointment.StartTime.ToTime());
            result.Appointment.End.Should().Be(appointment.EndTime.ToTime());
            result.Appointment.Reason.Should().Be(appointment.AppointmentReason);
            result.Appointment.Note.Should().Be(appointment.AppointmentNote);
        }
        public void DoesNotSetExternalAppointmentManagementUrlWhenNotDrs()
        {
            var workOrder = new Helpers.StubGeneration.Generator <WorkOrder>()
                            .AddDefaultGenerators()
                            .Generate();

            workOrder.ExternalSchedulerReference = null;

            AppointmentDetails appointment = new AppointmentDetails
            {
                Date        = DateTime.UtcNow,
                Description = "test",
                End         = DateTime.UtcNow,
                Start       = DateTime.UtcNow
            };
            var response = workOrder.ToResponse(appointment, new Uri("https://managementAddress.none"), false);

            response.ExternalAppointmentManagementUrl.Should().BeNull();
        }
        public void Setup()
        {
            _fixture = new Fixture();
            _fixture.Behaviors.Remove(new ThrowingRecursionBehavior());
            _fixture.Behaviors.Add(new OmitOnRecursionBehavior());
            _workOrderGenerator = new Helpers.StubGeneration.Generator <WorkOrder>()
                                  .AddInfrastructureWorkOrderGenerators();

            _sessionId         = "sessionId";
            _sorGatewayMock    = new Mock <IScheduleOfRatesGateway>();
            _alertsGatewayMock = new Mock <IAlertsGateway>();

            _tenureInformationUseCaseMock = new Mock <ITenureInformationUseCase>();

            _sorPriorityGatewayMock = new Mock <ISorPriorityGateway>();


            _classUnderTest = new DrsMapping(
                _sorGatewayMock.Object,
                _alertsGatewayMock.Object,
                _tenureInformationUseCaseMock.Object,
                _sorPriorityGatewayMock.Object,
                new NullLogger <DrsMapping>()
                );

            _locationAlerts = new Helpers.StubGeneration.Generator <PropertyAlertList>().AddDefaultGenerators().Generate();
            _personAlerts   = new Helpers.StubGeneration.Generator <PersonAlertList>().AddDefaultGenerators().Generate();
            var commonAlerts = new Helpers.StubGeneration.Generator <Alert>().AddDefaultGenerators().GenerateList(5);

            _locationAlerts.Alerts = _locationAlerts.Alerts.Union(commonAlerts);
            _personAlerts.Alerts   = _personAlerts.Alerts.Union(commonAlerts);

            _tenureInformation = new Helpers.StubGeneration.Generator <TenureInformation>().AddDefaultGenerators().Generate();

            _alertsGatewayMock.Setup(x => x.GetLocationAlertsAsync(It.IsAny <string>()))
            .ReturnsAsync(_locationAlerts);
            _alertsGatewayMock.Setup(x => x.GetPersonAlertsAsync(It.IsAny <string>()))
            .ReturnsAsync(_personAlerts);

            _tenureInformationUseCaseMock
            .Setup(x => x.GetTenureInformationWithPropertyReference(It.IsAny <string>()))
            .ReturnsAsync(_tenureInformation);
        }
        public async Task SetsExternalFlagOnResultWhenContractorHasDrsEnabled()
        {
            int newId = 1;

            _repairsGatewayMock.ReturnWOId(newId);
            ContractorUsesExternalScheduler(true);
            var generator = new Helpers.StubGeneration.Generator <WorkOrder>()
                            .AddInfrastructureWorkOrderGenerators()
                            .AddValue(new List <Trade>
            {
                new Trade
                {
                    Code = TradeCode.B2
                }
            }, (WorkElement we) => we.Trade);
            var workOrder = generator.Generate();

            var result = await _classUnderTest.Execute(workOrder);

            result.ExternallyManagedAppointment.Should().BeTrue();
        }
        private async Task <HttpStatusCode> CompleteWorkOrder(int workOrderId, bool preAssignOperative = true, Action <WorkOrderComplete> interceptor = null)
        {
            if (preAssignOperative)
            {
                await AssignOperative(workOrderId, TestDataSeeder.OperativeId);
            }

            var request = new Helpers.StubGeneration.Generator <WorkOrderComplete>()
                          .AddWorkOrderCompleteGenerators()
                          .AddValue(workOrderId.ToString(), (WorkOrderComplete woc) => woc.WorkOrderReference.ID)
                          .SetListLength <JobStatusUpdates>(1)
                          .AddValue(JobStatusUpdateTypeCode.Other_0, (JobStatusUpdates jsu) => jsu.TypeCode)
                          .AddValue(CustomJobStatusUpdates.Completed, (JobStatusUpdates jsu) => jsu.OtherType)
                          .Generate();

            interceptor?.Invoke(request);

            var response = await Post("/api/v2/workOrderComplete", request);

            return(response);
        }
Ejemplo n.º 14
0
 private void ConfigureGenerator()
 {
     _generator = new Helpers.StubGeneration.Generator <WorkOrder>()
                  .AddWorkOrderGenerators();
 }