public void Consumer_CreateRequest()
        {
            //arrange
            var provider = A.Fake<IOAuthProvider>();
            IConsumer consumer = new ConsumerFactory(options, provider)
                .CreateConsumer();

            var request_token = "requestToken";
            var request_token_secret = "requestTokenSecret";
            var authorize_url = new Uri("http://expectedUrl");
            var verifier = "verifier";
            var getRequestTokenRequestResult = string.Format("oauth_token={0}&oauth_token_secret={1}&oauth_expires_in=124&xoauth_request_auth_url={2}",
                request_token,
                request_token_secret,
                authorize_url);

            var access_token = "accessToken";
            var access_token_secret = "accessTokenSecret";

            var getAccessTokenRequestResult = string.Format("oauth_token={0}&oauth_token_secret={1}&oauth_expires_in=124&oauth_session_handle=12334&oauth_authorization_expires_in=1234",
                access_token,
                access_token_secret);

            A.CallTo(() => provider.GetRequestTokenRequest(
                A<string>._, A<string>._, A<string>._, A<string>._, A<SignatureMethod>._))
                .Returns(getRequestTokenRequestResult);

            A.CallTo(() => provider.GetGetAccessTokenRequest(
                A<string>._, A<string>._, A<string>._, A<string>._, A<SignatureMethod>._, A<string>._, A<string>._))
                .Returns(getAccessTokenRequestResult);

            var requestParameters = new IRequestParameter[] {
                new RequestParameter("test1", "value1"),
                new RequestParameter("test2", "value2") };

            //act
            consumer.RequestLogin();
            consumer.AuthorizeUser(verifier);

            var request = consumer.CreateHttpRequest("http://test123", HttpMethod.GET, requestParameters);

            //assert
            A.CallTo(() => provider.GetRequestTokenRequest(
                options.RequestTokenUrl,
                options.ConsumerKey,
                options.ConsumerSecret,
                options.RequestTokenResponseCallbackUrl,
                options.SignatureMethod));

            A.CallTo(() => provider.GetGetAccessTokenRequest(
                options.AccessTokenUrl,
                options.ConsumerKey,
                options.ConsumerSecret,
                request_token_secret,
                options.SignatureMethod,
                request_token,
                verifier));

            var requestString = request.RequestUri.ToString();
            var expectedSignature = OAuthMessageBuilder.GetOAuthSignature_PlainText(options.ConsumerSecret, null);

            Assert.IsTrue(requestString.Contains(options.ConsumerKey), "ConsumerKey");
            Assert.IsTrue(requestString.Contains("plaintext"), "SignatureMethod");
            Assert.IsTrue(requestString.Contains("test1=value1"), "test1");
            Assert.IsTrue(requestString.Contains("test2=value2"), "test2");
            Assert.IsTrue(requestString.Contains(expectedSignature), "signature");
        }
        public void Conumser_CanGetUserFantasySports_Information()
        {
            //arrange
            options.RequestTokenResponseCallbackUrl = TU.GenerateLocalHostBaseAddress();
            IConsumer consumer = new ConsumerFactory(options)
                .CreateConsumer();
            string verifier = null;

            var uri = consumer.RequestLogin();
            Process.Start(uri.ToString());

            var listener = new HttpListener();
            listener.Prefixes.Add(options.RequestTokenResponseCallbackUrl);
            listener.Start();

            var manualResetEvent = new ManualResetEvent(false);

            listener.BeginGetContext(
                ((r) =>
                {
                    var lisnr = (HttpListener)r.AsyncState;
                    var context = lisnr.EndGetContext(r);
                    var rq = context.Request.GetRequestParameters();
                    verifier = rq.Where(p => p.Name == "oauth_verifier")
                        .Select(p => p.Value)
                        .First();

                    manualResetEvent.Set();
                }),
            listener);

            manualResetEvent.WaitOne();
            ((IDisposable)listener).Dispose();

            var accessToken = consumer.AuthorizeUser(verifier);
            //act

            var request = consumer.CreateHttpRequest("http://fantasysports.yahooapis.com/fantasy/v2/users;use_login=1/games", HttpMethod.GET);

            using (var response = request.GetResponse() as HttpWebResponse)
            {
                Assert.IsNotNull(response);
                Assert.IsTrue(response.StatusCode == HttpStatusCode.OK);
            }
        }