//----------------------------------------------------------------------- // // Copyright (c) Andrew Arnott. All rights reserved. // //----------------------------------------------------------------------- namespace DotNetOpenAuth.Test.OAuthWrap { using System; using System.Collections.Generic; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuthWrap; using DotNetOpenAuth.OAuthWrap.ChannelElements; using DotNetOpenAuth.OAuthWrap.Messages; using NUnit.Framework; /// /// Verifies that the WRAP message types are recognized. /// public class MessageFactoryTests : OAuthWrapTestBase { private readonly MessageReceivingEndpoint recipient = new MessageReceivingEndpoint("http://who", HttpDeliveryMethods.PostRequest); private OAuthWrapAuthorizationServerChannel channel; private IMessageFactory messageFactory; public override void SetUp() { base.SetUp(); this.channel = new OAuthWrapAuthorizationServerChannel(); this.messageFactory = OAuthWrapAuthorizationServerChannel_Accessor.AttachShadow(this.channel).MessageFactory; } #region Refresh Access Token messages [TestCase] public void RefreshAccessTokenRequest() { var fields = new Dictionary { { Protocol.refresh_token, "abc" }, }; IDirectedProtocolMessage request = this.messageFactory.GetNewRequestMessage(this.recipient, fields); Assert.IsInstanceOf(typeof(RefreshAccessTokenRequest), request); } [TestCase] public void RefreshAccessTokenSuccessResponse() { var fields = new Dictionary { { Protocol.access_token, "abc" }, }; var request = new RefreshAccessTokenRequest(this.recipient.Location, Protocol.Default.Version); Assert.IsInstanceOf( typeof(AccessTokenSuccessResponse), this.messageFactory.GetNewResponseMessage(request, fields)); } [TestCase] public void RefreshAccessTokenFailedResponse() { var fields = new Dictionary { }; var request = new RefreshAccessTokenRequest(this.recipient.Location, Protocol.Default.Version); Assert.IsInstanceOf( typeof(AccessTokenFailedResponse), this.messageFactory.GetNewResponseMessage(request, fields)); } #endregion #region Web App profile messages [TestCase] public void WebAppRequestRequest() { var fields = new Dictionary { { Protocol.client_id, "abc" }, { Protocol.redirect_uri, "abc" }, }; IDirectedProtocolMessage request = this.messageFactory.GetNewRequestMessage(this.recipient, fields); Assert.IsInstanceOf(typeof(WebServerRequest), request); } [TestCase] public void WebAppFailedResponse() { var fields = new Dictionary { { Protocol.error, "user_denied" }, }; var request = new WebServerRequest(this.recipient.Location, Protocol.Default.Version); Assert.IsInstanceOf( typeof(WebServerFailedResponse), this.messageFactory.GetNewResponseMessage(request, fields)); } [TestCase] public void WebAppSuccessResponse() { var fields = new Dictionary { { Protocol.code, "abc" }, }; var request = new WebServerRequest(this.recipient.Location, Protocol.Default.Version); Assert.IsInstanceOf( typeof(WebServerSuccessResponse), this.messageFactory.GetNewResponseMessage(request, fields)); } [TestCase] public void WebAppAccessTokenRequest() { var fields = new Dictionary { { Protocol.client_id, "abc" }, { Protocol.client_secret, "abc" }, { Protocol.code, "abc" }, { Protocol.redirect_uri, "abc" }, }; IDirectedProtocolMessage request = this.messageFactory.GetNewRequestMessage(this.recipient, fields); Assert.IsInstanceOf(typeof(WebServerAccessTokenRequest), request); } [TestCase, Ignore("Not implemented")] public void WebAppAccessTokenFailedResponse() { // HTTP 400 Bad Request } [TestCase, Ignore("Not implemented")] public void WebAppAccessTokenBadClientResponse() { // HTTP 401 Unauthorized // WWW-Authenticate: WRAP } #endregion #region Username and Password profile messages [TestCase] public void UserNamePasswordRequest() { var fields = new Dictionary { { Protocol.client_id, "abc" }, { Protocol.client_secret, "abc" }, }; IDirectedProtocolMessage request = this.messageFactory.GetNewRequestMessage(this.recipient, fields); Assert.IsInstanceOf(typeof(UserNamePasswordRequest), request); } [TestCase] public void UserNamePasswordSuccessResponse() { var fields = new Dictionary { { Protocol.access_token, "abc" }, }; var request = new UserNamePasswordRequest(this.recipient.Location, Protocol.Default.Version); Assert.IsInstanceOf( typeof(UserNamePasswordSuccessResponse), this.messageFactory.GetNewResponseMessage(request, fields)); } [TestCase] public void UserNamePasswordVerificationResponse() { // HTTP 400 Bad Request var fields = new Dictionary { { Protocol.code, "abc" }, }; var request = new UserNamePasswordRequest(this.recipient.Location, Protocol.Default.Version); Assert.IsInstanceOf( typeof(UserNamePasswordVerificationResponse), this.messageFactory.GetNewResponseMessage(request, fields)); } [TestCase, Ignore("Not implemented")] public void UserNamePasswordFailedResponse() { // HTTP 401 Unauthorized // WWW-Authenticate: WRAP } [TestCase] public void UsernamePasswordCaptchaResponse() { // HTTP 400 Bad Request var fields = new Dictionary { { Protocol.wrap_captcha_url, "abc" }, }; var request = new UserNamePasswordRequest(this.recipient.Location, Protocol.Default.Version); Assert.IsInstanceOf( typeof(UsernamePasswordCaptchaResponse), this.messageFactory.GetNewResponseMessage(request, fields)); } #endregion #region Rich App profile messages [TestCase] public void RichAppRequest() { // include just required parameters var fields = new Dictionary { { Protocol.client_id, "abc" }, }; IDirectedProtocolMessage request = this.messageFactory.GetNewRequestMessage(this.recipient, fields); Assert.IsInstanceOf(typeof(DeviceRequest), request); // including optional parts fields = new Dictionary { { Protocol.client_id, "abc" }, { Protocol.redirect_uri, "abc" }, { Protocol.state, "abc" }, { Protocol.scope, "abc" }, }; request = this.messageFactory.GetNewRequestMessage(this.recipient, fields); Assert.IsInstanceOf(typeof(DeviceRequest), request); } [TestCase] public void RichAppResponse() { var fields = new Dictionary { { Protocol.refresh_token, "abc" }, { Protocol.access_token, "abc" }, }; IDirectedProtocolMessage request = this.messageFactory.GetNewRequestMessage(this.recipient, fields); Assert.IsInstanceOf(typeof(DeviceResponse), request); } [TestCase] public void RichAppAccessTokenRequest() { // include just required parameters var fields = new Dictionary { { Protocol.client_id, "abc" }, { Protocol.code, "abc" }, }; IDirectedProtocolMessage request = this.messageFactory.GetNewRequestMessage(this.recipient, fields); Assert.IsInstanceOf(typeof(DeviceAccessTokenRequest), request); } #endregion #region Client Account and Password profile messages [TestCase] public void ClientCredentialsRequest() { var fields = new Dictionary { { Protocol.client_id, "abc" }, { Protocol.client_secret, "abc" }, }; IDirectedProtocolMessage request = this.messageFactory.GetNewRequestMessage(this.recipient, fields); Assert.IsInstanceOf(typeof(ClientCredentialsRequest), request); } #endregion #region Assertion profile messages [TestCase] public void AssertionRequest() { var fields = new Dictionary { { Protocol.format, "abc" }, { Protocol.assertion, "abc" }, }; IDirectedProtocolMessage request = this.messageFactory.GetNewRequestMessage(this.recipient, fields); Assert.IsInstanceOf(typeof(AssertionRequest), request); } #endregion } }