public EmailTemplate Apply(CreateReportResponse response, Uri baseUri) { var baseUrl = baseUri.ToString(); if (baseUrl.EndsWith("/", StringComparison.OrdinalIgnoreCase)) { baseUrl = baseUrl.TrimEnd('/'); } string reportUrl; if (response.Fields.ContainsKey("id")) { // https://host/instance/report/resource.do?target=read&id=id&reportType=resource_request reportUrl = baseUrl + "/report/resource.do?target=read&reportType=resource_request&id=" + response.Fields["id"]; } else { // that is not good reportUrl = baseUrl; } Apply(reportUrl, "Report.Url"); Apply(response, "Response."); return(this); }
public async Task <CreateResponse> Handle(CreateCommand request, CancellationToken cancellationToken) { if (request == null) { throw new ArgumentNullException(nameof(request)); } var loggingState = new Dictionary <string, object> { { "ExpenseAuthorization.Request", request.Request }, { "ExpenseAuthorization.FileCount", request.Files.Count }, }; // ensure we log the request details, especially if an error occurs using (_logger.BeginScope(loggingState)) { try { _logger.LogDebug("Creating report in E-Team"); CreateReportResponse response = await _eteamService.CreateReportAsync(request.Request); _logger.LogDebug("Sending email to notify of new request submission"); await _emailService.SendEmailAsync(request.Request, response, request.Files); return(new CreateResponse(response.Fields["id"])); } catch (Exception e) { _logger.LogError(e, "Failed to create expense authorization"); return(new CreateResponse(e)); } } }
public void ThrowsSoapFaultWhenFault() { string xml = EmbeddedResource.Get <CreateReportResponseTests>("SoapFaultResponse.txt"); CreateReportResponse sut = new CreateReportResponse(); var soapFaultException = Assert.Throws <SoapFaultException>(() => sut.LoadFromXml(xml)); Assert.NotNull(soapFaultException.SoapFault); }
public void ParseResponse() { string xml = EmbeddedResource.Get <CreateReportResponseTests>("CreateResponse.txt"); CreateReportResponse sut = new CreateReportResponse(); sut.LoadFromXml(xml); Assert.Equal("Control4222019144914-embcTraining-159742987459901082006", sut.Fields["reportId"]); Assert.Equal("Control4222019144914-embcTraining-159742987459901082006", sut.Fields["id"]); Assert.Equal("resource_request", sut.Fields["reportType"]); }
public void can_apply_create_report_response_to_template() { string id = _fixture.Create <string>(); var createReportResponse = new CreateReportResponse(); createReportResponse.Fields.Add("id", id); var url = _fixture.Create <Uri>(); _sut.Apply(createReportResponse, url); var actual = _sut.Content; Assert.Contains(url.ToString(), actual); }
public async Task <CreateReportResponse> CreateReportAsync(ExpenseAuthorizationRequest expenseAuthorizationRequest) { if (expenseAuthorizationRequest == null) { throw new ArgumentNullException(nameof(expenseAuthorizationRequest)); } // login and get session cookie await LoginAsync(_options.Value); CreateReportResponse ret; // get the defaults, we could cache this in the future var resourceCategories = await GetLookupAsync(LookupType.ResourceCategory); var statuses = await GetLookupAsync(LookupType.StatusResource); var priorities = await GetLookupAsync(LookupType.PriorityResource); string resourceCategory = resourceCategories.FirstOrDefault(_ => _.Value == DefaultResourceCategory)?.Value; string currentStatus = statuses.FirstOrDefault(_ => _.Value == DefaultCurrentStatus)?.Id; string priority = priorities.FirstOrDefault(_ => _.Value == DefaultPriority)?.Id; var items = _mapper.Map(expenseAuthorizationRequest, priority, resourceCategory, currentStatus); var request = new CreaterReportRequest(items); string soapRequest = request.CreateSoapRequest(); try { CreateReportResponse response1 = new CreateReportResponse(); var soapResponse = await _client.CreateReportAsync(soapRequest); response1.LoadFromXml(soapResponse); ret = response1; } catch (ApiException exception) { throw new SoapFaultException(exception); } CreateReportResponse response = ret; return(response); }
public async Task SendEmailAsync( ExpenseAuthorizationRequest request, CreateReportResponse response, IList <IFormFile> attachments) { ETeamSettings eteamSettings = _eteamOptions.Value; // create and apply data to the email template string content = new EmailTemplate() .Apply(request) .Apply(response, eteamSettings.Url) .Content; _logger.LogDebug("Getting the email to recipient list base on request"); var to = _recipientService.GetToRecipients(request); _logger.LogDebug("Email will be sent to {@EmailTo}", to); // Request from R. Wainwright, subject line of the email should // be [Region abbreviation + PREOC] – [A new EAF has been submitted to ETEAMS] // however, it is difficult to know the region abbreviation string subject = "A new EAF has been submitted to ETEAMS"; if (!string.IsNullOrEmpty(eteamSettings.Environment)) { subject = $"[{eteamSettings.Environment}] {subject}"; } var message = new Message(to, subject, content, attachments); message.AddCc(_recipientService.GetCcRecipients(request)); message.AddBcc(_recipientService.GetBccRecipients(request)); await _sender.SendEmailAsync(message); }