//-----------------------------------------------------------------------
//
// Copyright (c) Microsoft. All rights reserved.
//
//-----------------------------------------------------------------------
namespace DotNetOpenAuth.AspNet.Test {
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Web;
using DotNetOpenAuth.AspNet.Clients;
using Moq;
using NUnit.Framework;
[TestFixture]
public class OAuth2ClientTest {
[TestCase]
public void TestProviderName() {
// Arrange
var client = new MockOAuth2Client();
// Act
string providerName = client.ProviderName;
// Assert
Assert.AreEqual("mockprovider", providerName);
}
[TestCase]
public void RequestAuthenticationIssueCorrectRedirect() {
// Arrange
var client = new MockOAuth2Client();
var context = new Mock(MockBehavior.Strict);
context.Setup(c => c.Response.Redirect("http://live.com/?q=http://return.to.me/", true)).Verifiable();
// Act
client.RequestAuthentication(context.Object, new Uri("http://return.to.me"));
// Assert
context.Verify();
}
[TestCase]
public void VerifyAuthenticationThrowsIfContextIsNull() {
// Arrange
var client = new MockOAuth2Client();
// Act && Assert
Assert.Throws(() => client.VerifyAuthentication(null));
}
[TestCase]
public void VerifyAuthenticationFailsIfCodeIsNotPresent() {
// Arrange
var client = new MockOAuth2Client();
var context = new Mock(MockBehavior.Strict);
var queryStrings = new NameValueCollection();
context.Setup(c => c.Request.QueryString).Returns(queryStrings);
// Act
AuthenticationResult result = client.VerifyAuthentication(context.Object);
// Assert
Assert.IsFalse(result.IsSuccessful);
}
[TestCase]
public void VerifyAuthenticationFailsIfAccessTokenIsNull() {
// Arrange
var client = new MockOAuth2Client();
var context = new Mock(MockBehavior.Strict);
var queryStrings = new NameValueCollection();
queryStrings.Add("code", "random");
context.Setup(c => c.Request.QueryString).Returns(queryStrings);
// Act
AuthenticationResult result = client.VerifyAuthentication(context.Object);
// Assert
Assert.IsFalse(result.IsSuccessful);
}
[TestCase]
public void VerifyAuthenticationSucceeds() {
// Arrange
var client = new MockOAuth2Client();
var context = new Mock(MockBehavior.Strict);
var queryStrings = new NameValueCollection();
queryStrings.Add("code", "secret");
context.Setup(c => c.Request.QueryString).Returns(queryStrings);
// Act
AuthenticationResult result = client.VerifyAuthentication(context.Object);
// Assert
Assert.True(result.IsSuccessful);
Assert.AreEqual("mockprovider", result.Provider);
Assert.AreEqual("12345", result.ProviderUserId);
Assert.AreEqual("John Doe", result.UserName);
Assert.NotNull(result.ExtraData);
Assert.AreEqual("abcde", result.ExtraData["accesstoken"]);
}
private class MockOAuth2Client : OAuth2Client {
public MockOAuth2Client()
: base("mockprovider") {
}
protected override Uri GetServiceLoginUrl(Uri returnUrl) {
string url = "http://live.com/?q=" + returnUrl.ToString();
return new Uri(url);
}
protected override string QueryAccessToken(Uri returnUrl, string authorizationCode) {
return (authorizationCode == "secret") ? "abcde" : null;
}
protected override IDictionary GetUserData(string accessToken) {
if (accessToken == "abcde") {
return new Dictionary
{
{ "id", "12345" },
{ "name", "John Doe" },
};
}
return null;
}
}
}
}