public Task <DrsOrder> GetWorkOrderDetails(string workOrderReference)
        {
            if (workOrderReference == "01550853")
            {
                throw new Exception();
            }
            var drsOrder = new DrsOrder
            {
                contract    = "H01",
                prop_ref    = "12345",
                propname    = "Address name",
                address1    = "Address name",
                postcode    = "addresspostcode",
                createdDate = DateTime.Today,
                dueDate     = DateTime.Today.AddDays(30),
                Tasks       = new List <DrsTask> {
                    new DrsTask
                    {
                        job_code  = "00210356",
                        comments  = "Some comments",
                        itemValue = Decimal.MinValue,
                        itemqty   = Decimal.MinValue,
                        trade     = "GL",
                        smv       = 1
                    }
                },
                wo_ref = workOrderReference
            };

            return(Task.Run(() => drsOrder));
        }
예제 #2
0
        public void build_xmb_check_availability_request_return_a_valid_request_object()
        {
            var mockLogger = new Mock <ILoggerAdapter <HackneyAppointmentsServiceRequestBuilder> >();
            IHackneyAppointmentsServiceRequestBuilder builder =
                new HackneyAppointmentsServiceRequestBuilder(new NameValueCollection(), mockLogger.Object);

            var drsOrder = new DrsOrder
            {
                contract    = "H01",
                prop_ref    = "12345",
                propname    = "The Address",
                address1    = "The Address",
                postcode    = "addresspostcode",
                createdDate = DateTime.Today,
                dueDate     = DateTime.Today.AddDays(30),
                Tasks       = new List <DrsTask> {
                    new DrsTask
                    {
                        job_code  = "00210356",
                        comments  = "Some comments",
                        itemValue = Decimal.MinValue,
                        itemqty   = Decimal.MinValue,
                        trade     = "GL",
                        smv       = 1
                    }
                }
            };
            var request = builder.BuildXmbCheckAvailabilityRequest("01550854", "123456", drsOrder, DateTime.Now, DateTime.Now.AddDays(7));

            Assert.Equal(request.sessionId, "123456");
            Assert.Equal(request.theOrder.primaryOrderNumber, "01550854");
            Assert.Equal(request.theOrder.contract, "H01");
            Assert.Equal(request.theOrder.locationID, "12345");
            Assert.Equal(request.theOrder.theBookingCodes[0].bookingCodeSORCode, "00210356");
        }
예제 #3
0
        public void build_xmb_schedule_booking_request_returns_a_valid_request_object()
        {
            var mockLogger = new Mock <ILoggerAdapter <HackneyAppointmentsServiceRequestBuilder> >();
            IHackneyAppointmentsServiceRequestBuilder builder =
                new HackneyAppointmentsServiceRequestBuilder(new NameValueCollection(), mockLogger.Object);
            var drsOrder = new DrsOrder
            {
                contract    = "H01",
                prop_ref    = "12345",
                createdDate = DateTime.Today,
                dueDate     = DateTime.Today.AddDays(30),
                Tasks       = new List <DrsTask> {
                    new DrsTask
                    {
                        job_code  = "00210356",
                        comments  = "Some comments",
                        itemValue = Decimal.MinValue,
                        itemqty   = Decimal.MinValue,
                        trade     = "GL",
                        smv       = 1
                    }
                }
            };
            var request = builder.BuildXmbScheduleBookingRequest("01550854", "123456", new DateTime(2017, 11, 21, 10, 00, 00), new DateTime(2017, 11, 21, 12, 00, 00), drsOrder);

            Assert.Equal(request.sessionId, "123456");
            Assert.Equal(request.theBooking.primaryOrderNumber, "01550854");
            Assert.Equal(request.theBooking.contract, "H01");
            Assert.Equal(request.theBooking.locationID, "12345");
            Assert.Equal(request.theBooking.theBookingCodes[0].bookingCodeSORCode, "00210356");
            Assert.Equal(request.theBooking.planningWindowStart, new DateTime(2017, 11, 21, 10, 00, 00));
            Assert.Equal(request.theBooking.planningWindowEnd, new DateTime(2017, 11, 21, 12, 00, 00));
        }
        public async Task get_appointments_raises_an_exception_when_drs_service_responds_with_error_when_opening_session()
        {
            var xmbResponse = new xmbCheckAvailabilityResponse
            {
                status   = responseStatus.success,
                theSlots = new List <daySlotsInfo>().ToArray()
            };
            var response   = new checkAvailabilityResponse(xmbResponse);
            var mockLogger = new Mock <ILoggerAdapter <AppointmentActions> >();
            var mockAppointmentsService = new Mock <IHackneyAppointmentsService>();

            mockAppointmentsService.Setup(service => service.GetAppointmentsForWorkOrderReference(It.IsAny <xmbCheckAvailability>()))
            .ReturnsAsync(response);
            var sessionResponse = new openSessionResponse(
                new xmbOpenSessionResponse
            {
                status    = responseStatus.error,
                sessionId = ""
            }
                );
            var drsOrder = new DrsOrder();

            mockAppointmentsService.Setup(service => service.OpenSessionAsync(It.IsAny <xmbOpenSession>()))
            .ReturnsAsync(sessionResponse);
            var mockRepairsService = new Mock <IHackneyRepairsService>();

            mockRepairsService.Setup(service => service.GetWorkOrderDetails("0000123")).ReturnsAsync(drsOrder);
            var fakeRequestBuilder = new Mock <IHackneyAppointmentsServiceRequestBuilder>();

            fakeRequestBuilder.Setup(service => service.BuildXmbCheckAvailabilityRequest("0000123", "", drsOrder, DateTime.Now, DateTime.Now.AddDays(7))).Returns(new xmbCheckAvailability());
            fakeRequestBuilder.Setup(service => service.BuildXmbOpenSessionRequest()).Returns(new xmbOpenSession());
            var fakeRepairRequestBuilder          = new Mock <IHackneyRepairsServiceRequestBuilder>();
            AppointmentActions appointmentActions = new AppointmentActions(mockLogger.Object, mockAppointmentsService.Object, fakeRequestBuilder.Object, mockRepairsService.Object, fakeRepairRequestBuilder.Object);
            await Assert.ThrowsAsync <AppointmentServiceException>(async() => await appointmentActions.GetAppointments("01550854"));
        }
        public async Task get_appointments_raises_exceptions_if_the_work_order_does_not_exists_in_UH()
        {
            var xmbResponse = new xmbCheckAvailabilityResponse
            {
                status   = responseStatus.success,
                theSlots = new List <daySlotsInfo>().ToArray()
            };
            var response   = new checkAvailabilityResponse(xmbResponse);
            var mockLogger = new Mock <ILoggerAdapter <AppointmentActions> >();
            var mockAppointmentsService = new Mock <IHackneyAppointmentsService>();

            mockAppointmentsService.Setup(service =>
                                          service.GetAppointmentsForWorkOrderReference(It.IsAny <xmbCheckAvailability>()))
            .ReturnsAsync(response);
            var openSessionResponse = new openSessionResponse(
                new xmbOpenSessionResponse
            {
                status    = responseStatus.success,
                sessionId = "123456"
            }
                );
            var closeSessionResponse = new closeSessionResponse(
                new xmbCloseSessionResponse
            {
                status = responseStatus.success
            }
                );
            var drsOrder = new DrsOrder();

            mockAppointmentsService.Setup(service => service.OpenSessionAsync(It.IsAny <xmbOpenSession>()))
            .ReturnsAsync(openSessionResponse);
            mockAppointmentsService.Setup(service => service.CloseSessionAsync(It.IsAny <xmbCloseSession>()))
            .ReturnsAsync(closeSessionResponse);
            var mockRepairsService = new Mock <IHackneyRepairsService>();

            mockRepairsService.Setup(service => service.GetWorkOrderDetails("01550854")).ReturnsAsync(drsOrder);
            var fakeRequestBuilder = new Mock <IHackneyAppointmentsServiceRequestBuilder>();

            fakeRequestBuilder
            .Setup(service => service.BuildXmbCheckAvailabilityRequest("01550854", "123456", drsOrder, DateTime.Now, DateTime.Now.AddDays(7)))
            .Returns(new xmbCheckAvailability());
            fakeRequestBuilder.Setup(service => service.BuildXmbOpenSessionRequest()).Returns(new xmbOpenSession());
            fakeRequestBuilder.Setup(service => service.BuildXmbCreateOrderRequest("01550854", "123456", drsOrder))
            .Returns(new xmbCreateOrder());
            var fakeRepairRequestBuilder          = new Mock <IHackneyRepairsServiceRequestBuilder>();
            AppointmentActions appointmentActions = new AppointmentActions(mockLogger.Object,
                                                                           mockAppointmentsService.Object, fakeRequestBuilder.Object, mockRepairsService.Object, fakeRepairRequestBuilder.Object);
            await Assert.ThrowsAsync <InvalidWorkOrderInUHException>(async() =>
                                                                     await appointmentActions.GetAppointments("01550854"));
        }
예제 #6
0
        public void build_xmb_create_order_request_return_a_valid_request_object()
        {
            var mockLogger = new Mock <ILoggerAdapter <HackneyAppointmentsServiceRequestBuilder> >();
            IHackneyAppointmentsServiceRequestBuilder builder =
                new HackneyAppointmentsServiceRequestBuilder(new NameValueCollection(), mockLogger.Object);

            var bookingCodes = new List <bookingCode> {
                new bookingCode
                {
                    bookingCodeDescription = "Some comments",
                    bookingCodeSORCode     = "00210356",
                    itemValue          = "1.00",
                    primaryOrderNumber = "01550854",
                    trade = "GL",
                    standardMinuteValue     = "1",
                    quantity                = "1.00",
                    itemNumberWithinBooking = "1"
                }
            }
            .ToArray();
            var order = new DrsOrder
            {
                contract    = "H01",
                prop_ref    = "12345",
                propname    = "The Address",
                address1    = "The Address",
                postcode    = "addresspostcode",
                createdDate = DateTime.Today,
                dueDate     = DateTime.Today.AddDays(30),
                Tasks       = new List <DrsTask> {
                    new DrsTask
                    {
                        job_code  = "00210356",
                        comments  = "Some comments",
                        itemValue = Decimal.MinValue,
                        itemqty   = Decimal.MinValue,
                        trade     = "GL",
                        smv       = 1
                    }
                }
            };

            var request = builder.BuildXmbCreateOrderRequest("01550854", "123456", order);

            Assert.Equal(request.sessionId, "123456");
            Assert.Equal(request.theOrder.primaryOrderNumber, "01550854");
            Assert.Equal(request.theOrder.contract, "H01");
            Assert.Equal(request.theOrder.locationID, "12345");
            Assert.Equal(request.theOrder.theBookingCodes[0].bookingCodeSORCode, "00210356");
        }
예제 #7
0
        public xmbScheduleBooking BuildXmbScheduleBookingRequest(string workOrderReference, string sessionId, DateTime beginDate,
                                                                 DateTime endDate, DrsOrder drsOrder)
        {
            var bookingCodes = drsOrder.Tasks.Select((bookingCode, i) => new bookingCode
            {
                bookingCodeDescription = bookingCode.comments.Trim(),
                bookingCodeSORCode     = bookingCode.job_code.Trim(),
                itemValue          = bookingCode.itemValue.ToString().Trim(),
                primaryOrderNumber = workOrderReference.Trim(),
                trade = bookingCode.trade.Trim(),
                standardMinuteValue     = bookingCode.smv.ToString().Trim(),
                quantity                = bookingCode.itemqty.ToString().Trim(),
                itemNumberWithinBooking = i.ToString().Trim()
            })
                               .ToArray();
            var order = new order
            {
                primaryOrderNumber = workOrderReference.Trim(),
                contract           = drsOrder.contract.Trim(),
                locationID         = drsOrder.prop_ref.Trim(),
                userId             = drsOrder.userid,
                theBookingCodes    = bookingCodes,
                priority           = drsOrder.priority,
                contactName        = drsOrder.contactName,
                orderComments      = drsOrder.comments,
                phone      = drsOrder.phone,
                message    = drsOrder.txtMessage,
                targetDate = drsOrder.dueDate
            };
            var xmbSchedulebooking = new xmbScheduleBooking
            {
                theBooking = new booking
                {
                    primaryOrderNumber  = workOrderReference.Trim(),
                    contract            = drsOrder.contract.Trim(),
                    locationID          = drsOrder.prop_ref.Trim(),
                    userId              = drsOrder.userid,
                    theBookingCodes     = bookingCodes,
                    theOrder            = order,
                    planningWindowStart = beginDate,
                    planningWindowEnd   = endDate,
                    isEmergency         = false
                },
                sessionId = sessionId,
                force     = false,
                userId    = drsOrder.userid,
            };

            return(xmbSchedulebooking);
        }
        public async Task book_appointment_raises_an_exception_when_drs_service_responds_with_error_when_opening_session()
        {
            var scheduleBookingResponse = new scheduleBookingResponse(new xmbScheduleBookingResponse {
                status = responseStatus.success
            });
            var mockLogger = new Mock <ILoggerAdapter <AppointmentActions> >();
            var mockAppointmentsService = new Mock <IHackneyAppointmentsService>();
            var openSessionResponse     = new openSessionResponse(
                new xmbOpenSessionResponse
            {
                status    = responseStatus.error,
                sessionId = ""
            }
                );
            var closeSessionResponse = new closeSessionResponse(
                new xmbCloseSessionResponse
            {
                status = responseStatus.success
            }
                );
            var drsOrder = new DrsOrder {
                wo_ref = "01550854"
            };

            mockAppointmentsService.Setup(service => service.OpenSessionAsync(It.IsAny <xmbOpenSession>()))
            .ReturnsAsync(openSessionResponse);
            mockAppointmentsService.Setup(service => service.CloseSessionAsync(It.IsAny <xmbCloseSession>()))
            .ReturnsAsync(closeSessionResponse);
            mockAppointmentsService.Setup(service => service.ScheduleBookingAsync(It.IsAny <xmbScheduleBooking>()))
            .ReturnsAsync(scheduleBookingResponse);
            var mockRepairsService = new Mock <IHackneyRepairsService>();

            mockRepairsService.Setup(service => service.GetWorkOrderDetails("01550854")).ReturnsAsync(drsOrder);
            var fakeRequestBuilder = new Mock <IHackneyAppointmentsServiceRequestBuilder>();

            fakeRequestBuilder.Setup(service => service.BuildXmbOpenSessionRequest()).Returns(new xmbOpenSession());
            fakeRequestBuilder.Setup(service => service.BuildXmbCloseSessionRequest("123456"))
            .Returns(new xmbCloseSession());
            fakeRequestBuilder.Setup(service => service.BuildXmbScheduleBookingRequest("01550854", "123456",
                                                                                       new DateTime(2017, 11, 21, 10, 00, 00), new DateTime(2017, 11, 21, 12, 00, 00), drsOrder))
            .Returns(new xmbScheduleBooking());
            var fakeRepairRequestBuilder          = new Mock <IHackneyRepairsServiceRequestBuilder>();
            AppointmentActions appointmentActions = new AppointmentActions(mockLogger.Object, mockAppointmentsService.Object, fakeRequestBuilder.Object, mockRepairsService.Object, fakeRepairRequestBuilder.Object);
            await Assert.ThrowsAsync <AppointmentServiceException>(async() => await appointmentActions.BookAppointment("01550854", new DateTime(2017, 11, 21, 10, 00, 00), new DateTime(2017, 11, 21, 12, 00, 00)));
        }
예제 #9
0
        public async Task Get_workorder_details_by_reference_returns_object()
        {
            var mockLogger = new Mock <ILoggerAdapter <RepairsActions> >();
            var drsOrder   = new DrsOrder
            {
                postcode = "E8 2LN",
                prop_ref = "12345",
                priority = "N"
            };
            var mockRepository    = new Mock <IUhtRepository>();
            var mockUHWRepository = new Mock <IUhwRepository>();

            mockRepository.Setup(repo => repo.GetWorkOrderDetails("123456")).ReturnsAsync(drsOrder);
            var repairsService = new HackneyRepairsService(mockRepository.Object, mockUHWRepository.Object, mockLogger.Object);
            var workOrder      = repairsService.GetWorkOrderDetails("123456").Result;

            Assert.Equal(workOrder.postcode, drsOrder.postcode);
            Assert.Equal(workOrder.prop_ref, drsOrder.prop_ref);
            Assert.Equal(workOrder.priority, drsOrder.priority);
        }
예제 #10
0
        private order buildTheOrderForRequest(string workOrderReference, DrsOrder drsOrder)
        {
            var bookingCodes = drsOrder.Tasks.Select((bookingCode, i) => new bookingCode
            {
                bookingCodeDescription = bookingCode.comments.Trim(),
                bookingCodeSORCode     = bookingCode.job_code.Trim(),
                itemValue          = bookingCode.itemValue.ToString().Trim(),
                primaryOrderNumber = workOrderReference.Trim(),
                trade = bookingCode.trade.Trim(),
                standardMinuteValue     = bookingCode.smv.ToString().Trim(),
                quantity                = bookingCode.itemqty.ToString().Trim(),
                itemNumberWithinBooking = (i + 1).ToString().Trim()
            })
                               .ToArray();
            var repairLocation = new location
            {
                locationId = drsOrder.prop_ref.Trim(),
                contract   = drsOrder.contract.Trim(),
                name       = drsOrder.propname.Trim(),
                address1   = drsOrder.address1.Trim(),
                postCode   = drsOrder.postcode.Trim()
            };

            return(new order
            {
                primaryOrderNumber = workOrderReference.Trim(),
                contract = drsOrder.contract.Trim(),
                locationID = drsOrder.prop_ref.Trim(),
                //TODO:: need to discuss what the user id will be
                userId = "createARepair",
                theBookingCodes = bookingCodes,
                priority = drsOrder.priority,
                contactName = drsOrder.contactName,
                orderComments = drsOrder.comments,
                phone = drsOrder.phone,
                message = drsOrder.txtMessage,
                targetDate = drsOrder.dueDate,
                theLocation = repairLocation
            });
        }
예제 #11
0
        public xmbCreateOrder BuildXmbCreateOrderRequest(string workOrderReference, string sessionId, DrsOrder drsOrder)
        {
            var xmbCreateOrder = new xmbCreateOrder
            {
                sessionId = sessionId,
                theOrder  = buildTheOrderForRequest(workOrderReference, drsOrder)
            };

            return(xmbCreateOrder);
        }
        public async Task get_appointmets_returns_list_of_appointments_if_the_work_order_already_exists_in_DRS()
        {
            var xmbResponse = new xmbCheckAvailabilityResponse
            {
                status   = responseStatus.success,
                theSlots = new List <daySlotsInfo>
                {
                    new daySlotsInfo
                    {
                        day           = new DateTime(2017, 10, 18, 00, 00, 00),
                        nonWorkingDay = false,
                        daySpecified  = false,
                        weeklyDayOff  = false,
                        slotsForDay   = new List <slotInfo>
                        {
                            new slotInfo
                            {
                                available = availableValue.YES,
                                beginDate = new DateTime(2017, 10, 18, 10, 00, 00),
                                endDate   = new DateTime(2017, 10, 18, 12, 00, 00),
                                bestSlot  = true
                            },
                            new slotInfo
                            {
                                available = availableValue.YES,
                                beginDate = new DateTime(2017, 10, 18, 12, 00, 00),
                                endDate   = new DateTime(2017, 10, 18, 14, 00, 00),
                                bestSlot  = false
                            },
                            new slotInfo
                            {
                                available = availableValue.YES,
                                beginDate = new DateTime(2017, 10, 18, 14, 00, 00),
                                endDate   = new DateTime(2017, 10, 18, 16, 00, 00),
                                bestSlot  = false
                            }
                        }.ToArray()
                    }
                }.ToArray()
            };
            var response   = new checkAvailabilityResponse(xmbResponse);
            var mockLogger = new Mock <ILoggerAdapter <AppointmentActions> >();
            var mockAppointmentsService = new Mock <IHackneyAppointmentsService>();

            mockAppointmentsService.Setup(service => service.GetAppointmentsForWorkOrderReference(It.IsAny <xmbCheckAvailability>()))
            .ReturnsAsync(response);
            var openSessionResponse = new openSessionResponse(
                new xmbOpenSessionResponse
            {
                status    = responseStatus.success,
                sessionId = "123456"
            }
                );
            var closeSessionResponse = new closeSessionResponse(
                new xmbCloseSessionResponse
            {
                status = responseStatus.success
            }
                );
            var drsOrder = new DrsOrder {
                wo_ref = "01550854"
            };
            var xmbCheckAvailabilty = new xmbCheckAvailability {
                theOrder = new order {
                    primaryOrderNumber = "01550854"
                }
            };
            var xmbCreateOrder =
                new xmbCreateOrder {
                sessionId = "123456", theOrder = new order {
                    primaryOrderNumber = "01550864"
                }
            };
            var createOrderResponse = new createOrderResponse
            {
                @return = new xmbCreateOrderResponse
                {
                    status   = responseStatus.error,
                    errorMsg = "Unable to create order, an order already exists for the order number 01550854",
                    theOrder = new order {
                        orderId = 123
                    }
                }
            };

            mockAppointmentsService.Setup(service => service.OpenSessionAsync(It.IsAny <xmbOpenSession>()))
            .ReturnsAsync(openSessionResponse);
            mockAppointmentsService.Setup(service => service.CloseSessionAsync(It.IsAny <xmbCloseSession>()))
            .ReturnsAsync(closeSessionResponse);
            mockAppointmentsService.Setup(service => service.CreateWorkOrderAsync(xmbCreateOrder))
            .ReturnsAsync(createOrderResponse);
            var mockRepairsService = new Mock <IHackneyRepairsService>();

            mockRepairsService.Setup(service => service.GetWorkOrderDetails("01550854")).ReturnsAsync(drsOrder);
            var fakeRequestBuilder = new Mock <IHackneyAppointmentsServiceRequestBuilder>();

            fakeRequestBuilder.Setup(service => service.BuildXmbCheckAvailabilityRequest("01550854", "123456", drsOrder, DateTime.Now, DateTime.Now.AddDays(7))).Returns(xmbCheckAvailabilty);
            fakeRequestBuilder.Setup(service => service.BuildXmbOpenSessionRequest()).Returns(new xmbOpenSession());
            fakeRequestBuilder.Setup(service => service.BuildXmbCreateOrderRequest("01550854", "123456", drsOrder))
            .Returns(xmbCreateOrder);
            var fakeRepairRequestBuilder          = new Mock <IHackneyRepairsServiceRequestBuilder>();
            AppointmentActions appointmentActions = new AppointmentActions(mockLogger.Object, mockAppointmentsService.Object, fakeRequestBuilder.Object, mockRepairsService.Object, fakeRepairRequestBuilder.Object);
            var results = await appointmentActions.GetAppointments("01550854");

            Assert.Equal(results.Count, xmbResponse.theSlots[0].slotsForDay.Length);
        }
예제 #13
0
        public async Task <DrsOrder> GetWorkOrderDetails(string workOrderReference)
        {
            DrsOrder drsOrder = new DrsOrder();

            _logger.LogInformation($"Getting the work order details from UHT for {workOrderReference}");
            try
            {
                using (var command = _context.Database.GetDbConnection().CreateCommand())
                {
                    _context.Database.OpenConnection();
                    command.CommandText = @"select	created createdDate,
                    date_due dueDate,
                    rtrim(wo_ref) wo_ref,
                    rtrim(rq_name) contactName,
                    rtrim(sup_ref) contract,
                    rmworder.prop_ref,
                    case when (convert(varchar(50),rq_phone))>'' then convert(bit,1)
                    else
                    convert(bit,0)
                    end  txtMessage,
                    rq_phone phone,
                    rq_priority priority,
                    rtrim(rmreqst.user_code) userid,
                    null tasks,
                    rtrim(short_address) propname,
                    short_address address1,
                    post_code postcode,
                    convert(varchar(50),rq_problem) comments
                    from rmworder 
                    inner join property on rmworder.prop_ref=property.prop_ref
                    inner join rmreqst on rmworder.rq_ref=rmreqst.rq_ref
                    where wo_ref='" + workOrderReference + "'";

                    command.CommandType = CommandType.Text;

                    using (var reader = await command.ExecuteReaderAsync())
                    {
                        if (reader != null & reader.HasRows)
                        {
                            drsOrder = reader.MapToList <DrsOrder>().FirstOrDefault();
                        }
                    }

                    command.CommandText = @"select  rmtask.job_code,
                convert(varchar(50), task_text) comments,
                est_cost itemValue,
                    est_units itemqty,
                u_smv smv,
                    rmjob.trade
                    from rmtask inner join rmjob on rmtask.job_code = rmjob.job_code

                where wo_ref = '" + workOrderReference + "'";
                    command.CommandType = CommandType.Text;

                    using (var reader = await command.ExecuteReaderAsync())
                    {
                        drsOrder.Tasks = reader.MapToList <DrsTask>();
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
            }
            return(drsOrder);
        }
예제 #14
0
 public xmbCheckAvailability BuildXmbCheckAvailabilityRequest(string workOrderReference, string sessionId, DrsOrder drsOrder, DateTime startPeriod, DateTime endPeriod)
 {
     _logger.LogInformation($"Building the xmbCheckAvailability request for {workOrderReference}");
     try
     {
         var xmbCheckAvailability = new xmbCheckAvailability
         {
             theOrder             = buildTheOrderForRequest(workOrderReference, drsOrder),
             sessionId            = sessionId,
             periodBegin          = startPeriod,
             periodEnd            = endPeriod,
             periodBeginSpecified = true,
             periodEndSpecified   = true,
             canSelectOtherOrders = false,
             checkAvailType       = checkAvailTypeType.standard,
             onlyBestSlots        = onlyBestSlotsValue.fullPeriod
         };
         return(xmbCheckAvailability);
     }
     catch (Exception ex)
     {
         _logger.LogError(ex.Message);
     }
     return(null);
 }
        public async Task get_appointments_raises_exceptions_if_service_fails_to_create_order_in_DRS()
        {
            var xmbResponse = new xmbCheckAvailabilityResponse
            {
                status   = responseStatus.success,
                theSlots = new List <daySlotsInfo>().ToArray()
            };
            var response   = new checkAvailabilityResponse(xmbResponse);
            var mockLogger = new Mock <ILoggerAdapter <AppointmentActions> >();
            var mockAppointmentsService = new Mock <IHackneyAppointmentsService>();

            mockAppointmentsService.Setup(service =>
                                          service.GetAppointmentsForWorkOrderReference(It.IsAny <xmbCheckAvailability>()))
            .ReturnsAsync(response);
            var openSessionResponse = new openSessionResponse(
                new xmbOpenSessionResponse
            {
                status    = responseStatus.success,
                sessionId = "123456"
            }
                );
            var closeSessionResponse = new closeSessionResponse(
                new xmbCloseSessionResponse
            {
                status = responseStatus.success
            }
                );
            var createOrderResponse = new createOrderResponse
            {
                @return = new xmbCreateOrderResponse
                {
                    status   = responseStatus.error,
                    errorMsg = "error creating the order"
                }
            };
            var drsOrder = new DrsOrder {
                wo_ref = "01550854"
            };
            var xmbCheckAvailabilty = new xmbCheckAvailability {
                theOrder = new order {
                    primaryOrderNumber = "01550854"
                }
            };
            var xmbCreateOrder =
                new xmbCreateOrder {
                sessionId = "123456", theOrder = new order {
                    primaryOrderNumber = "01550864"
                }
            };

            mockAppointmentsService.Setup(service => service.OpenSessionAsync(It.IsAny <xmbOpenSession>()))
            .ReturnsAsync(openSessionResponse);
            mockAppointmentsService.Setup(service => service.CloseSessionAsync(It.IsAny <xmbCloseSession>()))
            .ReturnsAsync(closeSessionResponse);
            mockAppointmentsService.Setup(service => service.CreateWorkOrderAsync(xmbCreateOrder))
            .ReturnsAsync(createOrderResponse);
            var mockRepairsService = new Mock <IHackneyRepairsService>();

            mockRepairsService.Setup(service => service.GetWorkOrderDetails("01550854")).ReturnsAsync(drsOrder);
            var fakeRequestBuilder = new Mock <IHackneyAppointmentsServiceRequestBuilder>();

            fakeRequestBuilder
            .Setup(service => service.BuildXmbCheckAvailabilityRequest("01550854", "123456", drsOrder, DateTime.Now, DateTime.Now.AddDays(7)))
            .Returns(xmbCheckAvailabilty);
            fakeRequestBuilder.Setup(service => service.BuildXmbOpenSessionRequest()).Returns(new xmbOpenSession());
            fakeRequestBuilder.Setup(service => service.BuildXmbCreateOrderRequest("01550854", "123456", drsOrder))
            .Returns(xmbCreateOrder);
            var fakeRepairRequestBuilder          = new Mock <IHackneyRepairsServiceRequestBuilder>();
            AppointmentActions appointmentActions = new AppointmentActions(mockLogger.Object,
                                                                           mockAppointmentsService.Object, fakeRequestBuilder.Object, mockRepairsService.Object, fakeRepairRequestBuilder.Object);
            await Assert.ThrowsAsync <AppointmentServiceException>(async() =>
                                                                   await appointmentActions.GetAppointments("01550854"));
        }
        public async Task get_appointments_raises_an_exception_if_the_slots_list_is_missing()
        {
            var xmbResponse = new xmbCheckAvailabilityResponse
            {
                status   = responseStatus.success,
                theSlots = null
            };
            var response   = new checkAvailabilityResponse(xmbResponse);
            var mockLogger = new Mock <ILoggerAdapter <AppointmentActions> >();
            var mockAppointmentsService = new Mock <IHackneyAppointmentsService>();

            mockAppointmentsService.Setup(service => service.GetAppointmentsForWorkOrderReference(It.IsAny <xmbCheckAvailability>()))
            .ReturnsAsync(response);
            var sessionResponse = new openSessionResponse(
                new xmbOpenSessionResponse
            {
                status    = responseStatus.success,
                sessionId = "123456"
            }
                );
            var closeSessionResponse = new closeSessionResponse(
                new xmbCloseSessionResponse
            {
                status = responseStatus.success
            }
                );
            var drsOrder = new DrsOrder {
                wo_ref = "01550854"
            };
            var xmbCheckAvailabilty = new xmbCheckAvailability {
                theOrder = new order {
                    primaryOrderNumber = "01550854"
                }
            };
            var xmbCreateOrder =
                new xmbCreateOrder {
                sessionId = "123456", theOrder = new order {
                    primaryOrderNumber = "01550864"
                }
            };
            var createOrderResponse = new createOrderResponse
            {
                @return = new xmbCreateOrderResponse
                {
                    status   = responseStatus.success,
                    theOrder = new order {
                        orderId = 123
                    }
                }
            };

            mockAppointmentsService.Setup(service => service.OpenSessionAsync(It.IsAny <xmbOpenSession>()))
            .ReturnsAsync(sessionResponse);
            mockAppointmentsService.Setup(service => service.CloseSessionAsync(It.IsAny <xmbCloseSession>()))
            .ReturnsAsync(closeSessionResponse);
            mockAppointmentsService.Setup(service => service.CreateWorkOrderAsync(xmbCreateOrder))
            .ReturnsAsync(createOrderResponse);
            var mockRepairsService = new Mock <IHackneyRepairsService>();

            mockRepairsService.Setup(service => service.GetWorkOrderDetails("01550854")).ReturnsAsync(drsOrder);
            var fakeRequestBuilder = new Mock <IHackneyAppointmentsServiceRequestBuilder>();

            fakeRequestBuilder.Setup(service => service.BuildXmbCheckAvailabilityRequest("01550854", "123456", drsOrder, DateTime.Now, DateTime.Now.AddDays(7))).Returns(xmbCheckAvailabilty);
            fakeRequestBuilder.Setup(service => service.BuildXmbCreateOrderRequest("01550854", "123456", drsOrder))
            .Returns(xmbCreateOrder);
            var fakeRepairRequestBuilder          = new Mock <IHackneyRepairsServiceRequestBuilder>();
            AppointmentActions appointmentActions = new AppointmentActions(mockLogger.Object, mockAppointmentsService.Object, fakeRequestBuilder.Object, mockRepairsService.Object, fakeRepairRequestBuilder.Object);
            await Assert.ThrowsAsync <MissingSlotsException>(async() => await appointmentActions.GetAppointments("01550854"));
        }
예제 #17
0
        private async Task <List <Slot> > getAppointmentSlots(string workOrderReference, string sessionId, DrsOrder drsOrder, DateTime startPeriod, DateTime endPeriod)
        {
            var request =
                _appointmentsServiceRequestBuilder.BuildXmbCheckAvailabilityRequest(workOrderReference, sessionId, drsOrder, startPeriod, endPeriod);
            // get the appointments
            var response = await _appointmentsService.GetAppointmentsForWorkOrderReference(request);

            var responseString = response.@return;

            if (responseString.status != responseStatus.success)
            {
                _logger.LogError(responseString.errorMsg);
                throw new AppointmentServiceException();
            }
            var slots = responseString.theSlots;

            if (slots == null)
            {
                _logger.LogError($"Missing the slots from the response string {responseString}");
                throw new MissingSlotsException();
            }
            var slotList = new List <Slot>();

            foreach (var slot in slots)
            {
                slotList.AddRange(buildSlot(slot));
            }
            return(slotList.Where(slot => slot.Available).ToList());
        }
예제 #18
0
        private async Task <createOrderResponse> CreateWorkOrderInDrs(string workOrderReference, string sessionId, DrsOrder drsOrder)
        {
            // build the request
            var request = _appointmentsServiceRequestBuilder.BuildXmbCreateOrderRequest(workOrderReference, sessionId, drsOrder);
            //create the work order
            var response = await _appointmentsService.CreateWorkOrderAsync(request);

            var returnResponse = response.@return;

            if (returnResponse.status == responseStatus.error && returnResponse.errorMsg.Contains("order already exists"))
            {
                _logger.LogInformation($"Unable to create order in DRS, an order already exists with order reference {workOrderReference}");
                [email protected] = responseStatus.success;
            }
            return(response);
        }
        public async Task book_appointment_returns_success_result()
        {
            var scheduleBookingResponse = new scheduleBookingResponse(new xmbScheduleBookingResponse {
                status = responseStatus.success
            });
            var mockLogger = new Mock <ILoggerAdapter <AppointmentActions> >();
            var mockAppointmentsService = new Mock <IHackneyAppointmentsService>();
            var openSessionResponse     = new openSessionResponse(
                new xmbOpenSessionResponse
            {
                status    = responseStatus.success,
                sessionId = "123456"
            }
                );
            var closeSessionResponse = new closeSessionResponse(
                new xmbCloseSessionResponse
            {
                status = responseStatus.success
            }
                );
            var drsOrder = new DrsOrder {
                wo_ref = "01550854"
            };
            var xmbScheduleBooking = new xmbScheduleBooking
            {
                theBooking = new booking()
            };

            mockAppointmentsService.Setup(service => service.OpenSessionAsync(It.IsAny <xmbOpenSession>()))
            .ReturnsAsync(openSessionResponse);
            mockAppointmentsService.Setup(service => service.CloseSessionAsync(It.IsAny <xmbCloseSession>()))
            .ReturnsAsync(closeSessionResponse);
            mockAppointmentsService.Setup(service => service.ScheduleBookingAsync(xmbScheduleBooking))
            .ReturnsAsync(scheduleBookingResponse);
            mockAppointmentsService.Setup(service => service.SelectOrderAsync(It.IsAny <xmbSelectOrder>()))
            .ReturnsAsync(new selectOrderResponse(new xmbSelectOrderResponse
            {
                status    = responseStatus.success,
                theOrders = new List <order>
                {
                    new order
                    {
                        contract    = "H01",
                        theBookings = new List <booking>
                        {
                            new booking
                            {
                                bookingId = 123456
                            }
                        }.ToArray(),
                        theLocation = new location
                        {
                            locationId = "012345",
                            contract   = "H01",
                            name       = "An address",
                            address1   = "An address",
                            postCode   = "Apostcode"
                        }
                    }
                }.ToArray()
            }));
            var mockWorksOrderResponse = new RepairsService.WebResponse
            {
                Success = true
            };
            var mockRepairsService = new Mock <IHackneyRepairsService>();

            mockRepairsService.Setup(service => service.GetWorkOrderDetails("01550854")).ReturnsAsync(drsOrder);
            mockRepairsService.Setup(service => service.IssueOrderAsync(It.IsAny <RepairsService.WorksOrderRequest>()))
            .ReturnsAsync(mockWorksOrderResponse);
            var fakeRequestBuilder = new Mock <IHackneyAppointmentsServiceRequestBuilder>();

            fakeRequestBuilder.Setup(service => service.BuildXmbOpenSessionRequest()).Returns(new xmbOpenSession());
            fakeRequestBuilder.Setup(service => service.BuildXmbCloseSessionRequest("123456"))
            .Returns(new xmbCloseSession());
            fakeRequestBuilder.Setup(service => service.BuildXmbScheduleBookingRequest("01550854", "123456",
                                                                                       new DateTime(2017, 11, 21, 10, 00, 00), new DateTime(2017, 11, 21, 12, 00, 00), drsOrder))
            .Returns(xmbScheduleBooking);
            var fakeRepairRequestBuilder          = new Mock <IHackneyRepairsServiceRequestBuilder>();
            AppointmentActions appointmentActions = new AppointmentActions(mockLogger.Object, mockAppointmentsService.Object, fakeRequestBuilder.Object, mockRepairsService.Object, fakeRepairRequestBuilder.Object);
            var result = await appointmentActions.BookAppointment("01550854", new DateTime(2017, 11, 21, 10, 00, 00), new DateTime(2017, 11, 21, 12, 00, 00));

            Assert.Contains("{ beginDate = 2017-11-21T10:00:00Z, endDate = 2017-11-21T12:00:00Z }", result.ToString());
        }