/// <summary>
 /// Initializes a new instance of the <see cref="OAuthAccessTokenSettings"/> class.
 /// </summary>
 /// <param name="oAuthRequestTokenSettings">The settings used to generate the request token.</param>
 /// <param name="oAuthRequestToken">The request token object returned by <see cref="OAuthTokenHelper.GenerateRequestTokenAsync" />.</param>
 public OAuthAccessTokenSettings(
     OAuthRequestTokenSettings oAuthRequestTokenSettings,
     OAuthRequestToken oAuthRequestToken)
 {
     Url               = oAuthRequestTokenSettings.Url;
     ConsumerKey       = oAuthRequestTokenSettings.ConsumerKey;
     ConsumerSecret    = oAuthRequestTokenSettings.ConsumerSecret;
     SignatureMethod   = oAuthRequestTokenSettings.SignatureMethod;
     OAuthRequestToken = oAuthRequestToken.OAuthToken;
     OAuthTokenSecret  = oAuthRequestToken.OAuthTokenSecret;
     AccessTokenUrl    = DefaultAccessTokenUrl;
 }
        public async Task CanGenerateRequestAndAccessTokens()
        {
            // Arrange
            var oAuthTokenSettings = new OAuthRequestTokenSettings(
                JiraProvider.HOST,
                JiraProvider.OAUTHCONSUMERKEY,
                JiraProvider.OAUTHCONSUMERSECRET);

            // Generate request token
            var oAuthRequestToken = await OAuthTokenHelper.GenerateRequestTokenAsync(oAuthTokenSettings);

            // Verify request token exists
            UniTestAssert.NotNull(oAuthRequestToken);

            // Attempt to get an access token before it has been authorized.
            var oAuthAccessTokenSettings = new OAuthAccessTokenSettings(oAuthTokenSettings, oAuthRequestToken);
            var accessToken = await OAuthTokenHelper.ObtainAccessTokenAsync(oAuthAccessTokenSettings, CancellationToken.None);

            // Verify no access token is granted.
            UniTestAssert.Null(accessToken);

            // Login to Jira
            var page = new HtmlPage(new Uri(JiraProvider.HOST));

            page.Navigate("/login.jsp");
            var elements = page.RootElement.ChildElements;

            elements.Find("username").SetText(JiraProvider.USERNAME);
            elements.Find("password").SetText(JiraProvider.PASSWORD);
            elements.Find("submit").Click();

            // Authorize token
            page.Navigate(oAuthRequestToken.AuthorizeUri);
            page.RootElement.ChildElements.Find("approve").Click();

            // Re-Attempt to get an access token
            accessToken = await OAuthTokenHelper.ObtainAccessTokenAsync(oAuthAccessTokenSettings, CancellationToken.None);

            // Verify access token exists.
            UniTestAssert.NotNull(accessToken);
        }