public string Invoke(HttpMethod httpMethod, string requestUriSuffix, Dictionary <string, string> headers, string body) { Contract.Requires(!string.IsNullOrWhiteSpace(requestUriSuffix)); Contract.Requires(null == headers || (null != headers && !headers.ContainsKey(Constants.HttpHeaders.AUTHORIZATION))); Contract.Requires(null != UserInformation, Constants.Messages.CLIENT_NOT_LOGGED_IN); if (null == headers) { headers = new Dictionary <string, string>(); } headers.Add(Constants.HttpHeaders.AUTHORIZATION, UserInformation.SecurityToken); var restCallExecutor = new RestCallExecutor(); var requestUri = new Uri(BaseUri, requestUriSuffix); string result; try { result = restCallExecutor.Invoke(httpMethod, requestUri.AbsoluteUri, headers, body ?? ""); } catch (System.Net.Http.HttpRequestException ex) { var sessionResponse = GetToken(UserInformation.Username, UserInformation.Password, UserInformation.SerialNumber); Contract.Assert(null != sessionResponse); result = restCallExecutor.Invoke(httpMethod, requestUri.AbsoluteUri, headers, body ?? ""); } Contract.Assert(!string.IsNullOrWhiteSpace(result)); return(result); }
public String LoadEntity(Uri entityUri) { Debug.WriteLine("Loading entity with Uri: '{0}'", entityUri); CheckEntityUri(entityUri); try { return(_restCallExecutor.Invoke(entityUri.ToString(), _headers)); } catch (HttpRequestException e) { Debug.WriteLine("Error occurred while fetching entity from '{0}': {1}", entityUri.ToString(), e.Message); throw; } }
public void InvokeWithInvalidUriThrowsUriFormatException2() { // Arrange var invalidUri = "abc"; RestCallExecutor restCallExecutor = new RestCallExecutor(); // Act restCallExecutor.Invoke(invalidUri, null); // Assert }
public void InvokeWithWhitespaceUriThrowsContractException3() { // Arrange var whitespaceUri = " "; RestCallExecutor restCallExecutor = new RestCallExecutor(); // Act restCallExecutor.Invoke(HttpMethod.Head, whitespaceUri, null, null); // Assert }
public void InvokeWithNullUriThrowsContractException3() { // Arrange string nullUri = null; RestCallExecutor restCallExecutor = new RestCallExecutor(); // Act restCallExecutor.Invoke(HttpMethod.Head, nullUri, null, null); // Assert }
public void InvokeWithNullUriThrowsContractException() { // Arrange string nullUri = null; RestCallExecutor restCallExecutor = new RestCallExecutor(); // Act restCallExecutor.Invoke(nullUri); // Assert }
public void InvokeWithWhitespaceUriThrowsContractException1() { // Arrange var whitespaceUri = " "; RestCallExecutor restCallExecutor = new RestCallExecutor(); // Act restCallExecutor.Invoke(whitespaceUri); // Assert }
public void InvokeWithWhitespaceUriThrowsArgumentException2() { // Arrange var whitespaceUri = " "; RestCallExecutor restCallExecutor = new RestCallExecutor(); // Act restCallExecutor.Invoke(whitespaceUri, null); // Assert }
public void InvokeWithNullUriThrowsArgumentException2() { // Arrange string nullUri = null; RestCallExecutor restCallExecutor = new RestCallExecutor(); // Act restCallExecutor.Invoke(nullUri, null); // Assert }
public void TurnLightGroupOnSucceeds() { // Arrange var group = new Group { GroupId = TestConstants.GROUP_ID, Name = TestConstants.GROUP_NAME }; Mock.Arrange(() => RestCallExecutor.Invoke(HttpMethod.Get, Arg.Matches <string>(s => s.Contains(Constants.ApiOperation.GROUP_SET)), Arg.IsAny <Dictionary <string, string> >(), "")) .IgnoreInstance() .Returns(_successOperationResponse.SerializeObject) .OccursOnce(); // Act var result = Sut.TurnLightGroupOn(group); // Assert Mock.Assert(RestCallExecutor); Assert.IsNotNull(result); Assert.IsTrue(result); }
public void InvokeSetsAuthorizationHeaderAccordingHeadersDictionaryWhenAuthSchemeIsNotSet() { // Arrange var mockedResponseMessage = Mock.Create <HttpResponseMessage>(); var mockedRequestHeaders = Mock.Create <HttpRequestHeaders>(); Mock.Arrange(() => HttpClient.DefaultRequestHeaders) .IgnoreInstance() .Returns(mockedRequestHeaders) .Occurs(4); Mock.ArrangeSet(() => mockedRequestHeaders.Authorization = new AuthenticationHeaderValue(BEARER_AUTH_SCHEME, SAMPLE_BEARER_TOKEN)) .OccursNever(); Mock.Arrange(() => mockedRequestHeaders.TryAddWithoutValidation(AUTHORIZATION_HEADER_KEY, SAMPLE_BEARER_TOKEN)) .OccursOnce(); Mock.Arrange(() => mockedRequestHeaders.Add(USER_AGENT_KEY, TEST_USER_AGENT)) .OccursOnce(); Mock.Arrange(() => mockedRequestHeaders.TryAddWithoutValidation(ACCEPT_HEADER_KEY, ACCEPT_HEADER_VALUE)) .OccursOnce(); Mock.Arrange(() => HttpClient.GetAsync(Arg.Is(new Uri(URI))).Result) .IgnoreInstance() .Returns(mockedResponseMessage) .OccursOnce(); Mock.Arrange(() => mockedResponseMessage.EnsureSuccessStatusCode()) .OccursOnce(); Mock.Arrange(() => mockedResponseMessage.Content.ReadAsStringAsync().Result) .Returns(SAMPLE_RESPONSE_BODY) .OccursOnce(); RestCallExecutor restCallExecutor = new RestCallExecutor(); var headers = CreateSampleHeaders(); headers.Add(AUTHORIZATION_HEADER_KEY, SAMPLE_BEARER_TOKEN); // Act var result = restCallExecutor.Invoke(HttpMethod.Get, URI, headers, null); // Assert Assert.AreEqual(SAMPLE_RESPONSE_BODY, result); Mock.Assert(HttpClient); Mock.Assert(mockedRequestHeaders); Mock.AssertSet(() => mockedRequestHeaders.Authorization = Arg.Is(new AuthenticationHeaderValue(BEARER_AUTH_SCHEME, SAMPLE_BEARER_TOKEN))); Mock.Assert(mockedResponseMessage); }
public void GetGroupByIdSucceeds() { // Arrange var groupId = 1L; var responseGroup = new Group { GroupId = groupId, Name = "group1" }; Mock.Arrange(() => RestCallExecutor.Invoke(HttpMethod.Get, Arg.AnyString, Arg.IsAny <Dictionary <string, string> >(), "")) .IgnoreInstance() .Returns(responseGroup.SerializeObject) .OccursOnce(); // Act var result = Sut.GetGroup(1); // Assert Mock.Assert(RestCallExecutor); Assert.IsNotNull(result); Assert.AreEqual(responseGroup.GroupId, result.GroupId); }
public void InvokeSetsLastReponseHeadersAccordingHeadersFromResponse() { // Arrange var mockedResponseMessage = Mock.Create <HttpResponseMessage>(); var mockedRequestHeaders = Mock.Create <HttpRequestHeaders>(); var mockedResponseHeaders = Mock.Create <HttpResponseHeaders>(); Mock.Arrange(() => HttpClient.DefaultRequestHeaders) .IgnoreInstance() .Returns(mockedRequestHeaders) .Occurs(3); Mock.Arrange(() => mockedRequestHeaders.Add(USER_AGENT_KEY, TEST_USER_AGENT)) .OccursOnce(); Mock.Arrange(() => mockedRequestHeaders.TryAddWithoutValidation(ACCEPT_HEADER_KEY, ACCEPT_HEADER_VALUE)) .OccursOnce(); Mock.Arrange(() => HttpClient.GetAsync(Arg.Is(new Uri(URI))).Result) .IgnoreInstance() .Returns(mockedResponseMessage) .OccursOnce(); Mock.Arrange(() => mockedResponseMessage.EnsureSuccessStatusCode()) .OccursOnce(); Mock.Arrange(() => mockedResponseMessage.Headers) .Returns(mockedResponseHeaders) .OccursOnce(); Mock.Arrange(() => mockedResponseMessage.Content.ReadAsStringAsync().Result) .Returns(SAMPLE_RESPONSE_BODY) .OccursOnce(); RestCallExecutor restCallExecutor = new RestCallExecutor(); // Act var result = restCallExecutor.Invoke(HttpMethod.Get, URI, CreateSampleHeaders(), null); // Assert Assert.AreEqual(SAMPLE_RESPONSE_BODY, result); Assert.AreEqual(mockedResponseHeaders, restCallExecutor.GetResponseHeaders()); Mock.Assert(HttpClient); Mock.Assert(mockedRequestHeaders); Mock.Assert(mockedResponseMessage); }
public void InvokePostOverwritesDefaultContentTypeHeaderIfCustomContentTypeHeaderProvided() { // Arrange var mockedResponseMessage = Mock.Create <HttpResponseMessage>(); var mockedRequestHeaders = Mock.Create <HttpRequestHeaders>(); Mock.Arrange(() => HttpClient.DefaultRequestHeaders) .IgnoreInstance() .Returns(mockedRequestHeaders) .Occurs(4); Mock.Arrange(() => mockedRequestHeaders.Add(USER_AGENT_KEY, TEST_USER_AGENT)) .OccursOnce(); Mock.Arrange(() => mockedRequestHeaders.TryAddWithoutValidation(ACCEPT_HEADER_KEY, ACCEPT_HEADER_VALUE)) .OccursOnce(); var content = new StringContent(SAMPLE_REQUEST_BODY); Mock.Arrange(() => HttpClient.PostAsync(Arg.Is(new Uri(URI)), Arg.Is(content)).Result) .IgnoreInstance() .Returns(mockedResponseMessage) .OccursOnce(); Mock.Arrange(() => mockedResponseMessage.EnsureSuccessStatusCode()) .OccursOnce(); Mock.Arrange(() => mockedResponseMessage.Content.ReadAsStringAsync().Result) .Returns(SAMPLE_RESPONSE_BODY) .OccursOnce(); RestCallExecutor restCallExecutor = new RestCallExecutor(); var headers = CreateSampleHeaders(); headers.Add(CONTENT_TYPE_KEY, CONTENT_TYPE_VALUE); // Act var result = restCallExecutor.Invoke(HttpMethod.Post, URI, headers, SAMPLE_RESPONSE_BODY); // Assert Assert.AreEqual(SAMPLE_RESPONSE_BODY, result); Mock.Assert(HttpClient); Mock.Assert(mockedRequestHeaders); Mock.Assert(mockedResponseMessage); }
public void InvokePutExecutesPutRequestOnUriWithProvidedHeadersAndBodyEnsuresSuccessStatusCodeAndReturnsResponseContent() { // Arrange var mockedResponseMessage = Mock.Create <HttpResponseMessage>(); var mockedRequestHeaders = Mock.Create <HttpRequestHeaders>(); Mock.Arrange(() => HttpClient.DefaultRequestHeaders) .IgnoreInstance() .Returns(mockedRequestHeaders) .Occurs(3); Mock.Arrange(() => mockedRequestHeaders.Add(USER_AGENT_KEY, TEST_USER_AGENT)) .OccursOnce(); Mock.Arrange(() => mockedRequestHeaders.TryAddWithoutValidation(ACCEPT_HEADER_KEY, ACCEPT_HEADER_VALUE)) .OccursOnce(); HttpContent content = new StringContent(SAMPLE_REQUEST_BODY); Mock.Arrange(() => HttpClient.PutAsync(Arg.Is(new Uri(URI)), Arg.Is(content)).Result) .IgnoreInstance() .Returns(mockedResponseMessage) .OccursOnce(); Mock.Arrange(() => mockedResponseMessage.EnsureSuccessStatusCode()) .OccursOnce(); Mock.Arrange(() => mockedResponseMessage.Content.ReadAsStringAsync().Result) .Returns(SAMPLE_RESPONSE_BODY) .OccursOnce(); RestCallExecutor restCallExecutor = new RestCallExecutor(); // Act var result = restCallExecutor.Invoke(HttpMethod.Put, URI, CreateSampleHeaders(), SAMPLE_REQUEST_BODY); // Assert Assert.AreEqual(SAMPLE_RESPONSE_BODY, result); Assert.AreEqual(ContentType.ApplicationJson, restCallExecutor.ContentType); Mock.Assert(HttpClient); Mock.Assert(mockedRequestHeaders); Mock.Assert(mockedResponseMessage); }
public void InvokeGetExecutesGetRequestOnUriWithProvidedHeadersNotEnsuringSuccessStatusCodeReturnsResponseContent() { // Arrange var mockedResponseMessage = Mock.Create <HttpResponseMessage>(); var mockedRequestHeaders = Mock.Create <HttpRequestHeaders>(); Mock.Arrange(() => HttpClient.DefaultRequestHeaders) .IgnoreInstance() .Returns(mockedRequestHeaders) .Occurs(3); Mock.Arrange(() => mockedRequestHeaders.Add(USER_AGENT_KEY, TEST_USER_AGENT)) .OccursOnce(); Mock.Arrange(() => mockedRequestHeaders.TryAddWithoutValidation(ACCEPT_HEADER_KEY, ACCEPT_HEADER_VALUE)) .OccursOnce(); Mock.Arrange(() => HttpClient.GetAsync(Arg.Is(new Uri(URI))).Result) .IgnoreInstance() .Returns(mockedResponseMessage) .OccursOnce(); Mock.Arrange(() => mockedResponseMessage.Content.ReadAsStringAsync().Result) .Returns(SAMPLE_RESPONSE_BODY) .OccursOnce(); RestCallExecutor restCallExecutor = new RestCallExecutor(false); // Act var result = restCallExecutor.Invoke(URI, CreateSampleHeaders()); Assert.AreEqual(SAMPLE_RESPONSE_BODY, result); // Assert Mock.Assert(HttpClient); Mock.Assert(mockedRequestHeaders); Mock.Assert(mockedResponseMessage); }
public string GetToken(Uri baseUri, string username, string password, string serialNumber) { Contract.Requires(null != baseUri); Contract.Requires(baseUri.IsAbsoluteUri); Contract.Requires(!string.IsNullOrWhiteSpace(username)); Contract.Requires(!string.IsNullOrWhiteSpace(password)); Contract.Requires(!string.IsNullOrWhiteSpace(serialNumber)); Contract.Ensures(!string.IsNullOrWhiteSpace(Contract.Result <string>())); this.BaseUri = baseUri; var sut = new SessionRequest { Username = username, Password = password, SerialNumber = serialNumber }; var body = sut.SerializeObject(); var client = new RestCallExecutor(); var requestUri = new Uri(baseUri, Constants.ApiOperation.SESSION); var result = client.Invoke(HttpMethod.Post, requestUri.AbsoluteUri, null, body); Contract.Assert(!string.IsNullOrWhiteSpace(result)); var response = BaseDto.DeserializeObject <SessionResponse>(result); UserInformation = new UserInformation() { UserId = response.UserId, Username = username, Password = password, SerialNumber = serialNumber, SecurityToken = response.SecurityToken }; return(response.SecurityToken); }
public void ExecuteCallout(String definitionParameters, CalloutData data) { var requestUrl = ExtractUrlFromDefinition(definitionParameters); var headers = ExtractAuthorizationHeadersFromDefinition(definitionParameters); if (null == data) { Debug.WriteLine("CalloutData is null"); throw new ArgumentNullException("data", "CalloutData must not be null"); } Debug.WriteLine("Executing callout to '{0}'", requestUrl.ToString()); try { _restCallExecutor.Invoke(HttpMethod.Post, requestUrl.ToString(), headers, JsonConvert.SerializeObject(data)); } catch (HttpRequestException e) { Debug.WriteLine("Error occurred while executing callout: {0}", e.Message); throw; } }
public void InvokeSetsDefaultUserAgentHeaderIfNoCustomUserAgentHeaderProvided() { // Arrange var mockedResponseMessage = Mock.Create <HttpResponseMessage>(); var mockedRequestHeaders = Mock.Create <HttpRequestHeaders>(); Mock.Arrange(() => HttpClient.DefaultRequestHeaders) .IgnoreInstance() .Returns(mockedRequestHeaders) .Occurs(2); Mock.Arrange(() => mockedRequestHeaders.Add(USER_AGENT_KEY, "RestCallExecutor")) .OccursOnce(); Mock.Arrange(() => HttpClient.GetAsync(Arg.Is(new Uri(URI))).Result) .IgnoreInstance() .Returns(mockedResponseMessage) .OccursOnce(); Mock.Arrange(() => mockedResponseMessage.EnsureSuccessStatusCode()) .OccursOnce(); Mock.Arrange(() => mockedResponseMessage.Content.ReadAsStringAsync().Result) .Returns(SAMPLE_RESPONSE_BODY) .OccursOnce(); RestCallExecutor restCallExecutor = new RestCallExecutor(); var result = restCallExecutor.Invoke(URI); // Act Assert.AreEqual(SAMPLE_RESPONSE_BODY, result); // Assert Mock.Assert(HttpClient); Mock.Assert(mockedRequestHeaders); Mock.Assert(mockedResponseMessage); }
public void TurnDeviceOnSucceeds() { // Arrange var device = new Device { DeviceId = TestConstants.DEVICE_ID, }; Mock.Arrange(() => RestCallExecutor.Invoke(HttpMethod.Get, Arg.Matches <string>(s => s.Contains(Constants.ApiOperation.DEVICE_SET)), Arg.IsAny <Dictionary <string, string> >(), "")) .IgnoreInstance() .Returns(_successOperationResponse.SerializeObject) .OccursOnce(); // Act var result = Sut.TurnDeviceOn(device); // Assert Assert.IsNotNull(result); Assert.IsTrue(result); Mock.Assert(RestCallExecutor); }
public void InvokeExecutesThrowsHttpRequestExceptionIfEnsureSuccessStatusCodeFails() { // Arrange var mockedResponseMessage = Mock.Create <HttpResponseMessage>(); var mockedRequestHeaders = Mock.Create <HttpRequestHeaders>(); Mock.Arrange(() => HttpClient.DefaultRequestHeaders) .IgnoreInstance() .Returns(mockedRequestHeaders) .Occurs(3); Mock.Arrange(() => mockedRequestHeaders.Add(USER_AGENT_KEY, TEST_USER_AGENT)) .OccursOnce(); Mock.Arrange(() => mockedRequestHeaders.TryAddWithoutValidation(ACCEPT_HEADER_KEY, ACCEPT_HEADER_VALUE)) .OccursOnce(); Mock.Arrange(() => HttpClient.GetAsync(Arg.Is(new Uri(URI))).Result) .IgnoreInstance() .Returns(mockedResponseMessage) .OccursOnce(); Mock.Arrange(() => mockedResponseMessage.EnsureSuccessStatusCode()) .Throws <HttpRequestException>() .OccursOnce(); RestCallExecutor restCallExecutor = new RestCallExecutor(); // Act restCallExecutor.Invoke(URI, CreateSampleHeaders()); // Assert Mock.Assert(HttpClient); Mock.Assert(mockedRequestHeaders); Mock.Assert(mockedResponseMessage); }