public Task <RepairGetResponse> GetRepairRequestByReferenceAsync(RepairRefRequest request)
        {
            _logger.LogInformation($"HackneyRepairsService/GetRepairRequestByReferenceAsync(): Sent request to upstream RepairServiceClient (Request ref: {request.RequestReference})");
            var response = _client.GetRepairRequestByReferenceAsync(request);

            _logger.LogInformation($"HackneyRepairsService/GetRepairRequestByReferenceAsync(): Received response from upstream RepairServiceClient (Request ref: {request.RequestReference})");
            return(response);
        }
        public async Task get_repair_request_by_reference_returns_a_repair_object_for_a_valid_request()
        {
            var mockLogger = new Mock <ILoggerAdapter <RepairsActions> >();
            var request    = new RepairRefRequest();
            var response   = new RepairGetResponse()
            {
                Success       = true,
                RepairRequest = new RepairRequestDto()
                {
                    Reference         = "43453543",
                    Problem           = "tap leaking",
                    PriorityCode      = "N",
                    PropertyReference = "123456890",
                    LocationCode      = "1",
                    Name = "Test"
                }
            };
            var tasksListResponse = new TaskListResponse
            {
                Success  = true,
                TaskList = new List <RepairTaskDto>
                {
                    new RepairTaskDto
                    {
                        WorksOrderReference = "987654",
                        SupplierReference   = "00000127",
                        JobCode             = "12345678"
                    }
                }.ToArray()
            };
            var fakeService = new Mock <IHackneyRepairsService>();

            fakeService.Setup(service => service.GetRepairRequestByReferenceAsync(request))
            .ReturnsAsync(response);
            fakeService.Setup(service => service.GetRepairTasksAsync(It.IsAny <RepairRefRequest>()))
            .ReturnsAsync(tasksListResponse);
            var fakeRequestBuilder = new Mock <IHackneyRepairsServiceRequestBuilder>();

            fakeRequestBuilder.Setup(service => service.BuildRepairRequest("43453543")).Returns(request);
            RepairsActions repairsActions = new RepairsActions(fakeService.Object, fakeRequestBuilder.Object, mockLogger.Object);
            var            results        = await repairsActions.GetRepairByReference("43453543");

            var workOrders = new object[1];

            workOrders[0] = new { workOrderReference = "987654", sorCode = "12345678", supplierReference = "00000127" };
            var repairRequest = new
            {
                repairRequestReference = "43453543",
                problemDescription     = "tap leaking",
                priority          = "N",
                propertyReference = "123456890",
                contact           = new { name = "Test" },
                workOrders        = workOrders
            };

            Assert.Equal(JsonConvert.SerializeObject(repairRequest), JsonConvert.SerializeObject(results));
        }
        public async Task get_repair_by_reference_raises_an_exception_if_the_service_responds_with_an_error()
        {
            var mockLogger = new Mock <ILoggerAdapter <RepairsActions> >();
            var request    = new RepairRefRequest();
            var response   = new RepairGetResponse {
                Success = false, RepairRequest = new RepairRequestDto()
            };
            var fakeService = new Mock <IHackneyRepairsService>();

            fakeService.Setup(service => service.GetRepairRequestByReferenceAsync(It.IsAny <RepairRefRequest>()))
            .ReturnsAsync(response);

            var fakeRequestBuilder = new Mock <IHackneyRepairsServiceRequestBuilder>();

            fakeRequestBuilder.Setup(service => service.BuildRepairRequest("52525252534")).Returns(request);
            RepairsActions repairsActions = new RepairsActions(fakeService.Object, fakeRequestBuilder.Object, mockLogger.Object);
            await Assert.ThrowsAsync <HackneyRepairs.Actions.RepairsServiceException>(async() => await repairsActions.GetRepairByReference("52525252534"));
        }
        public Task <RepairGetResponse> GetRepairRequestByReferenceAsync(RepairRefRequest request)
        {
            var response = new RepairGetResponse
            {
                Success       = true,
                RepairRequest = new RepairRequestDto
                {
                    Reference         = "43453543  ",
                    Problem           = "tap leaking ",
                    PriorityCode      = "N",
                    PropertyReference = "123456890",
                    Name = "Al Smith"
                }
            };

            switch (request.RequestReference)
            {
            case "123456890":
                return(Task.Run(() => new RepairGetResponse
                {
                    Success = false,
                    RepairRequest = new RepairRequestDto()
                }));

            case "123456899":
                return(Task.Run(() => new RepairGetResponse
                {
                    Success = true
                }));

            case "123456":
                return(Task.Run(() => response));

            case "ABCXYZ":
                throw new Exception();

            default:
                return(Task.Run(() => new RepairGetResponse
                {
                    Success = true,
                    RepairRequest = new RepairRequestDto()
                }));
            }
        }
        public Task <TaskListResponse> GetRepairTasksAsync(RepairRefRequest request)
        {
            var tasksListResponse = new TaskListResponse
            {
                Success  = true,
                TaskList = new List <RepairTaskDto>
                {
                    new RepairTaskDto
                    {
                        WorksOrderReference    = "987654",
                        RepairRequestReference = "123456",
                        SupplierReference      = "000000127",
                        JobCode = "20090190"
                    }
                }.ToArray()
            };

            return(Task.Run(() => tasksListResponse));
        }