Exemplo n.º 1
0
        public async Task <string> CreateCase(ContactSTARTRequest request)
        {
            if (!verintConfiguration.ClassificationMap.TryGetValue(request.AreaOfConcern.Trim(), out var eventCode))
            {
                throw new Exception("ContactSTARTService.CreateCase: EventCode not found");
            }

            var response = await verintServiceGateway.CreateCase(request.MapToCase(eventCode));

            if (!response.IsSuccessStatusCode)
            {
                throw new Exception($"ContactSTARTService.CreateCase: the status code {response.StatusCode} indicates something has gone wrong when attempting to create a case within verint-service.");
            }

            if (request.IsAboutSelf && !string.IsNullOrEmpty(request.RefereePerson.EmailAddress))
            {
                _ = mailingServiceGateway.Send(new Mail
                {
                    Template = EMailTemplate.ContactStartRequest,
                    Payload  = JsonConvert.SerializeObject(new
                    {
                        Reference = response.ResponseContent,
                        request.RefereePerson.FirstName,
                        RecipientAddress = request.RefereePerson.EmailAddress,
                        Subject          = "Thank you for contacting START"
                    })
                });
            }

            return(response.ResponseContent);
        }
Exemplo n.º 2
0
        public async Task CreateCase_ShouldCallVerintServiceWithTelNumberAndTimeSlot()
        {
            // reporting other person - has referer
            var request = new ContactSTARTRequest
            {
                AboutYourSelfRadio = "no",
                AreaOfConcern      = "Alcohol",
                RefereePerson      = new RefereePerson
                {
                    Address     = new Address(),
                    PhoneNumber = "+440000000000",
                    TimeSlot    = "10:00 - 17:00"
                },
                MoreInfomation = "test more infomation"
            };

            Case caseRequest = null;

            _mockVerintService
            .Setup(_ => _.CreateCase(It.IsAny <Case>()))
            .Callback <Case>(_ => caseRequest = _)
            .ReturnsAsync(new HttpResponse <string>
            {
                IsSuccessStatusCode = true
            });

            await _service.CreateCase(request);

            Assert.NotNull(caseRequest);
            Assert.NotNull(caseRequest.Description);

            Assert.Contains($"Tel: {request.RefereePerson.PhoneNumber}", caseRequest.Description);
            Assert.Contains($"Call Time: {request.RefereePerson.TimeSlot}", caseRequest.Description);
        }
Exemplo n.º 3
0
        public async Task CreateCase_ShouldNotCallMailingGateway()
        {
            var request = new ContactSTARTRequest
            {
                AboutYourSelfRadio = "no",
                AreaOfConcern      = "Alcohol",
                RefereePerson      = new RefereePerson
                {
                    Address      = new Address(),
                    PhoneNumber  = "+440000000000",
                    TimeSlot     = "10:00 - 17:00",
                    EmailAddress = "*****@*****.**"
                },
                MoreInfomation = "test more infomation"
            };

            _mockVerintService
            .Setup(_ => _.CreateCase(It.IsAny <Case>()))
            .ReturnsAsync(new HttpResponse <string>
            {
                IsSuccessStatusCode = true
            });

            await _service.CreateCase(request);

            _mockMailingService.VerifyNoOtherCalls();
        }
Exemplo n.º 4
0
        public async Task CreateCase_ShouldCallVerintServiceWithAdditionalFields()
        {
            // reporting self - no referer
            var request = new ContactSTARTRequest
            {
                AboutYourSelfRadio = "no",
                AreaOfConcern      = "Alcohol",
                RefereePerson      = new RefereePerson
                {
                    Address = new Address()
                },
                MoreInfomation = "test more infomation"
            };

            Case caseRequest = null;

            _mockVerintService
            .Setup(_ => _.CreateCase(It.IsAny <Case>()))
            .Callback <Case>(_ => caseRequest = _)
            .ReturnsAsync(new HttpResponse <string>
            {
                IsSuccessStatusCode = true
            });

            await _service.CreateCase(request);

            Assert.NotNull(caseRequest);
            Assert.NotNull(caseRequest.Description);

            Assert.Contains($"Details: {request.MoreInfomation}", caseRequest.Description);
            Assert.Contains($"Primary concern: {request.AreaOfConcern}", caseRequest.Description);
        }
Exemplo n.º 5
0
        public async Task CreateCase_ShouldCallVerintServiceWithCustomer()
        {
            // reporting self - no referer
            var request = new ContactSTARTRequest
            {
                AboutYourSelfRadio = "no",
                AreaOfConcern      = "Alcohol",
                RefereePerson      = new RefereePerson
                {
                    Address = new Address
                    {
                        AddressLine1 = "test line 1",
                        Postcode     = "test postcode"
                    },
                    DateOfBirth  = DateTime.MinValue,
                    EmailAddress = "*****@*****.**",
                    FirstName    = "test first name",
                    LastName     = "test last name",
                    PhoneNumber  = "+44000000000",
                    TimeSlot     = "8:30 - 12:30"
                }
            };

            Case caseRequest = null;

            _mockVerintService
            .Setup(_ => _.CreateCase(It.IsAny <Case>()))
            .Callback <Case>(_ => caseRequest = _)
            .ReturnsAsync(new HttpResponse <string>
            {
                IsSuccessStatusCode = true
            });

            await _service.CreateCase(request);

            Assert.NotNull(caseRequest);
            Assert.NotNull(caseRequest.Customer);
            Assert.NotNull(caseRequest.Description);

            // checking the description field contains the user who needs assistance from the START team
            Assert.Contains($"Name: {request.RefereePerson.FirstName} {request.RefereePerson.LastName}", caseRequest.Description);
            Assert.Contains($"Tel: {request.RefereePerson.PhoneNumber}", caseRequest.Description);
            Assert.Contains($"Call Time: {request.RefereePerson.TimeSlot}", caseRequest.Description);
            Assert.Contains($"Email: {request.RefereePerson.EmailAddress}", caseRequest.Description);
            Assert.Contains($"Date of Birth: {request.RefereePerson.DateOfBirth.ToShortDateString()}", caseRequest.Description);
            Assert.Contains($"Address: {request.RefereePerson.Address.AddressLine1}, {request.RefereePerson.Address.Postcode}", caseRequest.Description);

            // checking the user who needs assistent exists in the Customer object used for matching
            Assert.Equal(request.RefereePerson.FirstName, caseRequest.Customer.Forename);
            Assert.Equal(request.RefereePerson.LastName, caseRequest.Customer.Surname);
            Assert.Equal(request.RefereePerson.EmailAddress, caseRequest.Customer.Email);
            Assert.Equal(request.RefereePerson.PhoneNumber, caseRequest.Customer.Telephone);
            Assert.Equal(request.RefereePerson.DateOfBirth, caseRequest.Customer.DateOfBirth);
            Assert.Equal(request.RefereePerson.Address.AddressLine1, caseRequest.Customer.Address.AddressLine1);
            Assert.Equal(request.RefereePerson.Address.Postcode, caseRequest.Customer.Address.Postcode);
        }
Exemplo n.º 6
0
        public async Task CreateCase_ShouldThrowExceptionWhenNoMatchingClassificationFound()
        {
            var request = new ContactSTARTRequest
            {
                AreaOfConcern = "NoMatchExample"
            };

            _mockVerintService
            .Setup(_ => _.CreateCase(It.IsAny <Case>()))
            .ReturnsAsync(new HttpResponse <string>());

            var result = await Assert.ThrowsAsync <Exception>(async() =>
            {
                await _service.CreateCase(request);
            });

            Assert.Equal("ContactSTARTService.CreateCase: EventCode not found", result.Message);
        }
Exemplo n.º 7
0
        public async Task CreateCase_ShouldCallVerintServiceWithRefererDetails()
        {
            // reporting other person - has referer
            var request = new ContactSTARTRequest
            {
                AreaOfConcern      = "Alcohol",
                AboutYourSelfRadio = "no",
                RefereePerson      = new RefereePerson
                {
                    Address = new Address()
                },
                RefererPerson = new RefererPerson
                {
                    ConnectionAbout = "test connection about",
                    FirstName       = "test referer first name",
                    LastName        = "test referer last name",
                    Permissions     = "test permissions",
                    PhoneNumber     = "+44 0000000000"
                },
                MoreInfomation = "test more infomation"
            };

            Case caseRequest = null;

            _mockVerintService
            .Setup(_ => _.CreateCase(It.IsAny <Case>()))
            .Callback <Case>(_ => caseRequest = _)
            .ReturnsAsync(new HttpResponse <string>
            {
                IsSuccessStatusCode = true
            });

            await _service.CreateCase(request);

            Assert.NotNull(caseRequest);
            Assert.NotNull(caseRequest.Description);

            Assert.Contains($"(Lagan) Referrer: {request.RefererPerson.FirstName} {request.RefererPerson.LastName}", caseRequest.Description);
            Assert.Contains($"Connection to the Referee: {request.RefererPerson.ConnectionAbout}", caseRequest.Description);
            Assert.Contains($"Contact number: {request.RefererPerson.PhoneNumber}", caseRequest.Description);
        }
Exemplo n.º 8
0
        public async Task CreateCase_ShouldCallMailingGatewayWithCorrectPayload()
        {
            var request = new ContactSTARTRequest
            {
                AboutYourSelfRadio = "yes",
                AreaOfConcern      = "Alcohol",
                RefereePerson      = new RefereePerson
                {
                    Address      = new Address(),
                    PhoneNumber  = "+440000000000",
                    TimeSlot     = "10:00 - 17:00",
                    EmailAddress = "*****@*****.**"
                },
                MoreInfomation = "test more infomation"
            };

            var caseRef = "000000000";

            _mockVerintService
            .Setup(_ => _.CreateCase(It.IsAny <Case>()))
            .ReturnsAsync(new HttpResponse <string>
            {
                IsSuccessStatusCode = true,
                ResponseContent     = caseRef
            });

            Mail mailModel = null;

            _mockMailingService
            .Setup(_ => _.Send(It.IsAny <Mail>()))
            .Callback <Mail>(_ => mailModel = _);

            await _service.CreateCase(request);

            _mockMailingService.Verify(_ => _.Send(It.IsAny <Mail>()), Times.Once);

            Assert.Contains(request.RefereePerson.EmailAddress, mailModel.Payload);
            Assert.Equal(EMailTemplate.ContactStartRequest, mailModel.Template);
            Assert.Contains(caseRef, mailModel.Payload);
        }
Exemplo n.º 9
0
        public static Case MapToCase(this ContactSTARTRequest request, int eventCode)
        {
            var description = new DescriptionBuilder();

            if (request.RefererPerson != null && !request.IsAboutSelf)
            {
                description
                .Add("(Lagan) Referrer", new[] { request.RefererPerson.FirstName, request.RefererPerson.LastName })
                .Add("Connection to the Referee", request.RefererPerson.ConnectionAbout)
                .Add("Contact number", request.RefererPerson.PhoneNumber)
                .Add(string.Empty);
            }

            description
            .Add("Client")
            .Add("Name", new[] { request.RefereePerson.FirstName, request.RefereePerson.LastName })
            .Add("Date of Birth", request.RefereePerson.DateOfBirth.ToShortDateString());

            if (!string.IsNullOrEmpty(request.RefereePerson.EmailAddress))
            {
                description.Add("Email", request.RefereePerson.EmailAddress);
            }

            if (!string.IsNullOrEmpty(request.RefereePerson.PhoneNumber))
            {
                description
                .Add("Tel", request.RefereePerson.PhoneNumber)
                .Add("Call Time", request.RefereePerson.TimeSlot);
            }

            if (request.RefereePerson.Address.IsAutomaticallyFound)
            {
                description.Add("Address", request.RefereePerson.Address.SelectedAddress);
            }
            else
            {
                description.Add("Address", new[] {
                    request.RefereePerson.Address.AddressLine1,
                    request.RefereePerson.Address.AddressLine2,
                    request.RefereePerson.Address.Town,
                    request.RefereePerson.Address.Postcode
                }, ", ");
            }

            description.Add("Primary concern", request.AreaOfConcern);

            if (!string.IsNullOrEmpty(request.MoreInfomation))
            {
                description.Add("Details", request.MoreInfomation);
            }

            return(new Case
            {
                CaseTitle = request.AreaOfConcern.Trim(),
                Classification = $"Public Health > START > {request.AreaOfConcern.Trim()}",
                EventCode = eventCode,
                AssociatedWithBehaviour = AssociatedWithBehaviourEnum.Individual,
                RaisedByBehaviour = RaisedByBehaviourEnum.Individual,
                Customer = new Customer
                {
                    Forename = request.RefereePerson.FirstName,
                    Surname = request.RefereePerson.LastName,
                    Email = request.RefereePerson.EmailAddress,
                    Telephone = request.RefereePerson.PhoneNumber,
                    DateOfBirth = request.RefereePerson.DateOfBirth,
                    Address = new Address
                    {
                        AddressLine1 = request.RefereePerson.Address.AddressLine1,
                        AddressLine2 = request.RefereePerson.Address.AddressLine2,
                        AddressLine3 = request.RefereePerson.Address.Town,
                        Postcode = request.RefereePerson.Address.Postcode,
                        Reference = request.RefereePerson.Address.PlaceRef,
                        UPRN = request.RefereePerson.Address.PlaceRef
                    }
                },
                Description = description.Build(),
            });
        }
Exemplo n.º 10
0
 public async Task <IActionResult> Post(ContactSTARTRequest model)
 {
     return(Ok(await contactSTARTService.CreateCase(model)));
 }