private async Task <Provider[]> SendRequestAsync(ProviderQueryRequest request, CancellationToken cancellationToken) { var requestXml = _requestSerializer.Serialize(request); var httpRequest = new HttpRequestMessage { Method = HttpMethod.Post, Headers = { { "SOAPAction", "retrieveAllProviders" } }, Content = new StringContent(requestXml, Encoding.UTF8, "text/xml"), }; var response = await _httpClient.SendAsync(httpRequest, cancellationToken); var responseXml = await response.Content.ReadAsStringAsync(); var result = _responseDeserializer.DeserializeResponse(responseXml); if (!response.IsSuccessStatusCode) { // If we are here then we got a failed response without a SOAP fault throw new Exception($"Error calling UKRLP SOAP Api. Not fault returned. Http Status {(int) response.StatusCode}"); } return(result); }
public void ThenItShouldIncludeProviderUpdatedSinceWhenSpecifiedInQuery(DateTime providerUpdatedSince) { var serializer = new RequestSerializer(); var request = new ProviderQueryRequest { SelectionCriteria = new SelectionCriteria { CriteriaCondition = CriteriaConditionEnum.OR, ProviderStatus = ProviderStatusEnum.A, StakeholderId = 123, ApprovedProvidersOnly = ApprovedProvidersOnlyEnum.Yes, ProviderUpdatedSince = providerUpdatedSince, }, QueryId = "123213", }; var actual = serializer.Serialize(request); var doc = XDocument.Parse(actual); var requestElement = doc? .Element(RequestSerializer.SoapNs + "Envelope")? .Element(RequestSerializer.SoapNs + "Body")? .Element(RequestSerializer.UkrlpNs + "ProviderQueryRequest"); var expectedElement = requestElement? .Element("SelectionCriteria")? .Element("ProviderUpdatedSince"); Assert.IsNotNull(expectedElement); Assert.AreEqual(providerUpdatedSince.ToUniversalTime().ToString("O"), expectedElement.Value); }
public void ThenItShouldIncludeUkprnsWhenSpecifiedInQuery(long ukprn1, long ukprn2) { var serializer = new RequestSerializer(); var request = new ProviderQueryRequest { SelectionCriteria = new SelectionCriteria { CriteriaCondition = CriteriaConditionEnum.OR, ProviderStatus = ProviderStatusEnum.A, StakeholderId = 123, ApprovedProvidersOnly = ApprovedProvidersOnlyEnum.Yes, UnitedKingdomProviderReferenceNumberList = new[] { ukprn1, ukprn2 }, }, QueryId = "123213", }; var actual = serializer.Serialize(request); var doc = XDocument.Parse(actual); var requestElement = doc? .Element(RequestSerializer.SoapNs + "Envelope")? .Element(RequestSerializer.SoapNs + "Body")? .Element(RequestSerializer.UkrlpNs + "ProviderQueryRequest"); var expectedElement = requestElement? .Element("SelectionCriteria")? .Element("UnitedKingdomProviderReferenceNumberList"); Assert.IsNotNull(expectedElement); Assert.AreEqual(2, expectedElement.Elements().Count()); Assert.AreEqual("UnitedKingdomProviderReferenceNumber", expectedElement.Elements().ElementAt(0).Name.LocalName); Assert.AreEqual(ukprn1.ToString(), expectedElement.Elements().ElementAt(0).Value); Assert.AreEqual("UnitedKingdomProviderReferenceNumber", expectedElement.Elements().ElementAt(1).Name.LocalName); Assert.AreEqual(ukprn2.ToString(), expectedElement.Elements().ElementAt(1).Value); }
public string Serialize(ProviderQueryRequest request) { var requestElement = SerializeRequest(request); var envelopeElement = WrapRequestInSoapEnvelope(requestElement); return(envelopeElement.ToString()); }
private XElement SerializeRequest(ProviderQueryRequest request) { var selectionCriteriaElement = SerializeSelectionCriteria(request.SelectionCriteria); var requestElement = new XElement(UkrlpNs + "ProviderQueryRequest", selectionCriteriaElement, new XElement("QueryId", request.QueryId)); return(requestElement); }
public void ThenItShouldReturnValidXml(ProviderQueryRequest request) { var serializer = new RequestSerializer(); var actual = serializer.Serialize(request); XDocument doc = null; Assert.DoesNotThrow(() => doc = XDocument.Parse(actual)); Assert.IsNotNull(doc); }
public void ThenItShouldIncludeTheRequestQueryId(ProviderQueryRequest request) { var serializer = new RequestSerializer(); var actual = serializer.Serialize(request); var doc = XDocument.Parse(actual); var requestElement = doc? .Element(RequestSerializer.SoapNs + "Envelope")? .Element(RequestSerializer.SoapNs + "Body")? .Element(RequestSerializer.UkrlpNs + "ProviderQueryRequest"); var expectedElement = requestElement?.Element("QueryId"); Assert.IsNotNull(expectedElement); Assert.AreEqual(request.QueryId.ToString(), expectedElement.Value); }
public void ThenItShouldIncludeApprovedProvidersOnly(ProviderQueryRequest request) { var serializer = new RequestSerializer(); var actual = serializer.Serialize(request); var doc = XDocument.Parse(actual); var requestElement = doc? .Element(RequestSerializer.SoapNs + "Envelope")? .Element(RequestSerializer.SoapNs + "Body")? .Element(RequestSerializer.UkrlpNs + "ProviderQueryRequest"); var expectedElement = requestElement? .Element("SelectionCriteria")? .Element("ApprovedProvidersOnly"); Assert.IsNotNull(expectedElement); Assert.AreEqual(request.SelectionCriteria.ApprovedProvidersOnly.ToString(), expectedElement.Value); }
public void ThenItShouldWrapTheRequestInASoapPackage(ProviderQueryRequest request) { var serializer = new RequestSerializer(); var actual = serializer.Serialize(request); XDocument doc = XDocument.Parse(actual); Assert.IsNotNull(doc.Root.Name == RequestSerializer.SoapNs + "Envelope"); Assert.IsNotNull(doc? .Element(RequestSerializer.SoapNs + "Envelope")? .Element(RequestSerializer.SoapNs + "Header")); Assert.IsNotNull(doc? .Element(RequestSerializer.SoapNs + "Envelope")? .Element(RequestSerializer.SoapNs + "Body")); Assert.IsNotNull(doc? .Element(RequestSerializer.SoapNs + "Envelope")? .Element(RequestSerializer.SoapNs + "Body")? .Element(RequestSerializer.UkrlpNs + "ProviderQueryRequest")); }
public async Task <Provider[]> GetProvidersChangedSinceAsync(DateTime changedSince, CancellationToken cancellationToken) { var statusesToQuery = new[] { ProviderStatusEnum.A, ProviderStatusEnum.V, ProviderStatusEnum.PD1, ProviderStatusEnum.PD2, }; var results = new List <Provider>(); foreach (var status in statusesToQuery) { var request = new ProviderQueryRequest { SelectionCriteria = new SelectionCriteria { ProviderUpdatedSince = changedSince, CriteriaCondition = CriteriaConditionEnum.OR, ProviderStatus = status, ApprovedProvidersOnly = ApprovedProvidersOnlyEnum.No, StakeholderId = _configuration.StakeholderId, }, QueryId = DateTime.Now.Ticks.ToString(), }; var providersOfStatus = await SendRequestAsync(request, cancellationToken); var unreadProviders = providersOfStatus .Where(p1 => !results.Any(p2 => p1.UnitedKingdomProviderReferenceNumber == p2.UnitedKingdomProviderReferenceNumber)) .ToArray(); if (unreadProviders.Any()) { results.AddRange(unreadProviders); } } return(results.ToArray()); }