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); }
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); }
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(); }
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); }
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); }
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); }
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); }
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); }
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(), }); }
public async Task <IActionResult> Post(ContactSTARTRequest model) { return(Ok(await contactSTARTService.CreateCase(model))); }