public void Can_get_an_artists_releases() 
		{
			const string endpoint = "artist/releases";

			var endPointInfo = new EndPointInfo
				{
					UriPath = endpoint, 
					Parameters =  new Dictionary<string,string>
						{
							{ "artistId", "1" },
							{ "pageSize", "100" }
						}
				};

			var response = _requestCoordinator.HitEndpoint(endPointInfo);

			dynamic dx = new DynamicXmlParser(XDocument.Parse(response.Body));
			
		    string [] titles = Enumerable.ToArray(Enumerable.Select<dynamic, string>(dx.releases.release, (Func<dynamic, string>) (r => r.title.value)));

		    foreach (var title in titles) 
			{
		        Console.WriteLine(title);
		    }

			Assert.That(titles.Count(), Is.GreaterThan(0));
		}
 public XmlNode HitEndpoint(EndPointInfo endPointInfo)
 {
     string output = GetEndpointOutput(endPointInfo);
     XmlNode response = GetResponseNode(output);
     AssertError(response);
     return response.FirstChild;
 }
Example #3
0
        public XmlNode HitEndpoint(EndPointInfo endPointInfo)
        {
            string output = GetEndpointOutput(endPointInfo);

            Debug.WriteLine(output);
            XmlNode response = GetResponseNode(output);

            AssertError(response);
            return(response.FirstChild);
        }
		public void Should_not_care_how_many_times_you_create_an_endpoint()
		{
			var endPointState = new EndPointInfo
				{
					UriPath = "{slug}", 
					HttpMethod = "GET", 
					Parameters = new Dictionary<string, string> { { "slug", "something" } }
				};
			var result = _requestCoordinator.ConstructEndpoint(endPointState);

			Assert.That(result, Is.EqualTo(_requestCoordinator.ConstructEndpoint(endPointState)));
		}
		private RequestHandler ConstructBuilder(EndPointInfo endPointInfo)
		{
			switch (endPointInfo.HttpMethod.ToUpperInvariant())
			{
				case "GET":
					return new GetRequestHandler(_apiUri, _oAuthCredentials, _urlSigner);
				case "POST":
					return new PostRequestHandler(_apiUri, _oAuthCredentials, _urlSigner);
				default:
					throw new NotImplementedException();
			}
		}
		private string GetEndpointOutput(EndPointInfo endPointInfo)
		{
			if (endPointInfo.UseHttps)
				_apiUrl = _apiUrl.Replace("http://", "https://");

			string uriString = string.Format("{0}/{1}?oauth_consumer_key={2}&{3}", 
														_apiUrl, 
														endPointInfo.Uri, 
														_consumerCredentials.ConsumerKey, 
														endPointInfo.Parameters.ToQueryString());

		    return GetResponse(uriString, endPointInfo.UserToken, endPointInfo.UserSecret);
		}
Example #7
0
        private string GetEndpointOutput(EndPointInfo endPointInfo)
        {
            if (endPointInfo.UseHttps)
            {
                _apiUrl = _apiUrl.Replace("http://", "https://");
            }

            string uriString = string.Format("{0}/{1}?oauth_consumer_key={2}&{3}",
                                             _apiUrl,
                                             endPointInfo.Uri,
                                             _consumerCredentials.ConsumerKey,
                                             endPointInfo.Parameters.ToQueryString());

            return(GetResponse(uriString, endPointInfo.UserToken, endPointInfo.UserSecret));
        }
		public void should_substitue_route_parameters()
		{
			var endpointInfo = new EndPointInfo
			{
				UriPath = "something/{route}",
				Parameters = new Dictionary<string, string>
					{
						{"route","routevalue"}
					}
			};

			var result = _requestCoordinator.ConstructEndpoint(endpointInfo);

			Assert.That(result,Is.StringContaining("something/routevalue"));
		}
        private string GetEndpointOutput(EndPointInfo endPointInfo)
        {
            if (endPointInfo.UseHttps)
                _apiUrl = _apiUrl.Replace("http://", "https://");

            var uriString = string.Format("{0}/{1}?oauth_consumer_key={2}&{3}", _apiUrl, endPointInfo.Uri,
                _consumerCredentials.ConsumerKey, endPointInfo.Parameters.ToQueryString()).TrimEnd('&');

            var signedUrl = new Uri(uriString);

            if(endPointInfo.IsSigned)
                signedUrl = _urlSigner.SignUrl(uriString, endPointInfo.UserToken, endPointInfo.UserSecret, _consumerCredentials);

            return _urlResolver.Resolve(signedUrl, endPointInfo.HttpMethod, new WebHeaderCollection());
        }
		public void Can_get_an_artists_releases()
		{
			const string endpoint = "artist/releases";

			var endPointInfo = new EndPointInfo { Uri = endpoint, Parameters = new NameValueCollection { { "artistId", "1" } } };

			string xml = _endpointResolver.GetRawXml(endPointInfo);

			dynamic dx = new DynamicXmlParser(xml);

			var name = dx.releases.release[0].title.Value;
			var secondName = dx.releases.release[1].title.Value;

			Assert.That(name, Is.EqualTo("Night Train"));
			Assert.That(secondName, Is.EqualTo("Crystal Ball"));
		}
		public void Should_fire_resolve_with_correct_values()
		{
			A.CallTo(() => _urlResolver.Resolve(A<Uri>.Ignored, A<string>.Ignored, A<WebHeaderCollection>.Ignored))
				.Returns("<response status=\"ok\" version=\"1.2\" ><serviceStatus><serverTime>2011-03-04T08:10:29Z</serverTime></serviceStatus></response>");

			const string expectedMethod = "GET";
			var expectedHeaders = new WebHeaderCollection();

			var endPointState = new EndPointInfo() {Uri = "test", HttpMethod = expectedMethod, Headers = expectedHeaders};
			var expected = new Uri(string.Format("{0}/test?oauth_consumer_key={1}", _apiUrl, _consumerKey));

			_endpointResolver.HitEndpoint(endPointState);

			A.CallTo(() => _urlResolver.Resolve(A<Uri>.That.Matches(x => x.PathAndQuery == expected.PathAndQuery), expectedMethod, A<WebHeaderCollection>.Ignored))
				.MustHaveHappened();
		}
		public void Can_get_an_artist() {
			const string endpoint = "artist/details";

			var endPointInfo = new EndPointInfo { Uri = endpoint, Parameters = new Dictionary<string,string> { { "artistId", "1" } } };

			string xml = _endpointResolver.HitEndpoint(endPointInfo);

			dynamic dx = new DynamicXmlParser(XDocument.Parse(xml));

			var name = dx.artist[0].name.value;
			var sortName = dx.artist[0].sortName.value;
			var url = dx.artist[0].url.value;

			Assert.That(name, Is.EqualTo("Keane"));
			Assert.That(sortName, Is.EqualTo("Keane"));
			Assert.That(url, Is.StringStarting("http://www.7digital.com/artists/keane/"));
		}
		public void Can_get_an_artists_releases() {
			const string endpoint = "artist/releases";

			var endPointInfo = new EndPointInfo { Uri = endpoint, Parameters =  new Dictionary<string,string> { { "artistId", "1" } } };

			string xml = _endpointResolver.HitEndpoint(endPointInfo);

			dynamic dx = new DynamicXmlParser(XDocument.Parse(xml));

		    string [] titles = Enumerable.ToArray(Enumerable.Select<dynamic, string>(dx.releases.release, (Func<dynamic, string>) (r => r.title.value)));

		    foreach (var title in titles) {
		        Console.WriteLine(title);
		    }

            Assert.That(titles, Has.Member("Night Train").And.Member("Perfect Symmetry"));
		}
		public void Should_fire_resolve_with_correct_values()
		{
			A.CallTo(() => _httpClient.Get(A<GetRequest>.Ignored))
				.Returns(new Response(HttpStatusCode.OK, SERVICE_STATUS));

			const string expectedMethod = "GET";
			var expectedHeaders = new Dictionary<string, string>();
			var expected = string.Format("{0}/test?oauth_consumer_key={1}", API_URL, _consumerKey);

			var endPointState = new EndPointInfo { UriPath = "test", HttpMethod = expectedMethod, Headers = expectedHeaders };


			_requestCoordinator.HitEndpoint(endPointState);

			A.CallTo(() => _httpClient
					.Get(A<GetRequest>.That.Matches(y => y.Url == expected)))
					.MustHaveHappened();
		}
		public void should_substitue_multiple_route_parameters()
		{
			var endpointInfo = new EndPointInfo
			{
				UriPath = "something/{firstRoute}/{secondRoute}/thrid/{thirdRoute}",
				Parameters = new Dictionary<string, string>
					{
						{"firstRoute" , "firstValue"},
						{"secondRoute","secondValue"},
						{"thirdRoute" , "thirdValue"}
							
					}
			};

			var result = _requestCoordinator.ConstructEndpoint(endpointInfo);

			Assert.That(result, Is.StringContaining("something/firstvalue/secondvalue/thrid/thirdvalue"));
		}
		private Uri GetSignedUrl(EndPointInfo endPointInfo)
		{
			string apiUri = _apiUri.Uri;

			if (endPointInfo.UseHttps)
				apiUri = apiUri.Replace("http://", "https://");

			var uriString = string.Format("{0}/{1}?oauth_consumer_key={2}&{3}",
				apiUri, SubstituteRouteParameters(endPointInfo.Uri,endPointInfo.Parameters),
				_oAuthCredentials.ConsumerKey,
				endPointInfo.Parameters.ToQueryString()).TrimEnd('&');

			var signedUrl = new Uri(uriString);

			if (endPointInfo.IsSigned)
				signedUrl = _urlSigner.SignUrl(uriString, endPointInfo.UserToken, endPointInfo.UserSecret, _oAuthCredentials);
			return signedUrl;
		}
		public void routes_should_be_case_insensitive()
		{
			var endpointInfo = new EndPointInfo
			{
				UriPath = "something/{firstRoUte}/{secOndrouTe}/thrid/{tHirdRoute}",
				Parameters = new Dictionary<string, string>
					{
						{"firstRoute" , "firstValue"},
						{"secondRoute","secondValue"},
						{"thirdRoute" , "thirdValue"}
							
					}
			};

			var result = _requestCoordinator.ConstructEndpoint(endpointInfo);

			Assert.That(result, Is.StringContaining("something/firstvalue/secondvalue/thrid/thirdvalue"));
		}
        public void Should_fire_resolve_with_correct_values()
        {
            A.CallTo(() => _urlResolver.Resolve(A<Uri>.Ignored, A<string>.Ignored, A<Dictionary<string, string>>.Ignored))
                .Returns(SERVICE_STATUS);

            const string expectedMethod = "GET";
            var expectedHeaders = new Dictionary<string, string>();

            var endPointState = new EndPointInfo { Uri = "test", HttpMethod = expectedMethod, Headers = expectedHeaders };
            var expected = new Uri(string.Format("{0}/test?oauth_consumer_key={1}", API_URL, _consumerKey));

            A.CallTo(() => _urlSigner.SignUrl(A<string>.Ignored, A<string>.Ignored, A<string>.Ignored, null)).Returns(expected);

            _endpointResolver.HitEndpoint(endPointState);

            A.CallTo(() => _urlResolver
                    .Resolve(A<Uri>.That.Matches(x => x.PathAndQuery == expected.PathAndQuery), expectedMethod, A<Dictionary<string, string>>.Ignored))
                    .MustHaveHappened();
        }
		public void Should_fire_resolve_with_url_encoded_parameters()
		{
			A.CallTo(() => _httpClient.Get(A<GetRequest>.Ignored))
				.Returns(new Response(HttpStatusCode.OK, SERVICE_STATUS));

			const string unEncodedParameterValue = "Alive & Amplified";

			const string expectedParameterValue = "Alive%20%26%20Amplified";
			var expectedHeaders = new Dictionary<string, string>();
			var testParameters = new Dictionary<string, string> { { "q", unEncodedParameterValue } };
			var expected = string.Format("{0}/test?oauth_consumer_key={1}&q={2}", API_URL, _consumerKey, expectedParameterValue);

			var endPointState = new EndPointInfo { UriPath = "test", HttpMethod = "GET", Headers = expectedHeaders, Parameters = testParameters };

			_requestCoordinator.HitEndpoint(endPointState);

			A.CallTo(() => _httpClient
					.Get(A<GetRequest>.That.Matches(y => y.Url == expected)))
					.MustHaveHappened();
		}
 public string GetRawXml(EndPointInfo endPointInfo)
 {
     return GetEndpointOutput(endPointInfo);
 }
		public void Should_use_api_uri_provided_by_IApiUri_interface()
		{
			const string expectedApiUri = "http://api.7dizzle";

			Given_a_urlresolver_that_returns_valid_xml();

			var apiUri = A.Fake<IApiUri>();

			A.CallTo(() => apiUri.Uri).Returns(expectedApiUri);

			IOAuthCredentials oAuthCredentials = EssentialDependencyCheck<IOAuthCredentials>.Instance;
			var endpointResolver = new EndpointResolver(_urlResolver, _urlSigner, oAuthCredentials, apiUri);

			var endPointState = new EndPointInfo { Uri = "test", HttpMethod = "GET", Headers = new Dictionary<string, string>() };

			endpointResolver.HitEndpoint(endPointState);

			A.CallTo(() => apiUri.Uri).MustHaveHappened(Repeated.Exactly.Once);

			A.CallTo(() => _urlResolver.Resolve(
				A<Uri>.That.Matches(x => x.ToString().Contains(expectedApiUri)),
				A<string>.Ignored, A<Dictionary<string, string>>.Ignored))
				.MustHaveHappened(Repeated.Exactly.Once);
		}
		public string ConstructEndpoint(EndPointInfo endPointInfo) {
			return GetSignedUrl(endPointInfo).ToString();
		}
			public Response HitEndpoint(EndPointInfo endPointInfo)
			{
				throw new NotImplementedException();
			}
Example #24
0
 public string GetRawXml(EndPointInfo endPointInfo)
 {
     return(GetEndpointOutput(endPointInfo));
 }
			public void HitEndpointAsync(EndPointInfo endPointInfo, Action<Response> callback)
			{
				callback(StubPayload);
			}
		public virtual IResponse HitEndpoint(EndPointInfo endPointInfo)
		{
			var builder = ConstructBuilder(endPointInfo);
			builder.HttpClient = HttpClient;
			return builder.HitEndpoint(endPointInfo);
		}
			public void HitEndpointAsync(EndPointInfo endPointInfo, Action<string> payload)
			{
				payload(StubPayload);
			}
		public string ConstructEndpoint(EndPointInfo endPointInfo)
		{
			return ConstructBuilder(endPointInfo).ConstructEndpoint(endPointInfo);
		}
		public virtual string HitEndpoint(EndPointInfo endPointInfo)
		{
			Uri signedUrl = GetSignedUrl(endPointInfo);

			return _urlResolver.Resolve(signedUrl, endPointInfo.HttpMethod, new Dictionary<string, string>());
		}
		public void should_remove_parameters_that_match()
		{
			var endpointInfo = new EndPointInfo
			{
				UriPath = "something/{route-66}",
				Parameters = new Dictionary<string, string>
					{
						{"route-66","routevalue"}
					}
			};

			var result = _requestCoordinator.ConstructEndpoint(endpointInfo);

			Assert.That(result, Is.Not.StringContaining("route-66=routevalue"));
		}
		public virtual void HitEndpointAsync(EndPointInfo endPointInfo, Action<string> payload)
		{
			Uri signedUrl = GetSignedUrl(endPointInfo);
			_urlResolver.ResolveAsync(signedUrl, endPointInfo.HttpMethod, new Dictionary<string, string>(), payload);
		}
		public virtual void HitEndpointAsync(EndPointInfo endPointInfo, Action<IResponse> callback)
		{
			var builder = ConstructBuilder(endPointInfo);
			builder.HttpClient = HttpClient;
			builder.HitEndpointAsync(endPointInfo, callback);
		}
			public string ConstructEndpoint(EndPointInfo endPointInfo)
			{
				throw new NotImplementedException();
			}