diff options
Diffstat (limited to 'src/DotNetOpenAuth.Test/OpenId/Extensions')
3 files changed, 292 insertions, 0 deletions
diff --git a/src/DotNetOpenAuth.Test/OpenId/Extensions/ClaimsResponseTests.cs b/src/DotNetOpenAuth.Test/OpenId/Extensions/ClaimsResponseTests.cs new file mode 100644 index 0000000..2e18b58 --- /dev/null +++ b/src/DotNetOpenAuth.Test/OpenId/Extensions/ClaimsResponseTests.cs @@ -0,0 +1,142 @@ +//-----------------------------------------------------------------------
+// <copyright file="ClaimsResponseTests.cs" company="Andrew Arnott">
+// Copyright (c) Andrew Arnott. All rights reserved.
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace DotNetOpenAuth.Test.OpenId.Extensions {
+ using System;
+ using System.Collections.Generic;
+ using System.Text;
+ using System.Runtime.Serialization;
+ using System.Runtime.Serialization.Formatters.Binary;
+ using System.Xml.Serialization;
+ using System.IO;
+ using Microsoft.VisualStudio.TestTools.UnitTesting;
+ using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration;
+
+ [TestClass]
+ public class ClaimsResponseTests {
+ private ClaimsResponse getFilledData() {
+ return new ClaimsResponse(Constants.sreg_ns) {
+ BirthDate = new DateTime(2005, 2, 3),
+ Culture = new System.Globalization.CultureInfo("en-US"),
+ Email = "a@b.com",
+ FullName = "Jimmy buffet",
+ Gender = Gender.Male,
+ Nickname = "Jimbo",
+ PostalCode = "12345",
+ TimeZone = "PST",
+ };
+ }
+
+ [TestMethod]
+ public void EmptyMailAddress() {
+ ClaimsResponse response = new ClaimsResponse(Constants.sreg_ns);
+ response.Email = "";
+ Assert.IsNull(response.MailAddress);
+ }
+
+ [TestMethod]
+ public void BinarySerialization() {
+ ClaimsResponse fields = getFilledData();
+ MemoryStream ms = new MemoryStream();
+ IFormatter formatter = new BinaryFormatter();
+ formatter.Serialize(ms, fields);
+
+ ms.Position = 0;
+ ClaimsResponse fields2 = (ClaimsResponse)formatter.Deserialize(ms);
+ Assert.AreEqual(fields, fields2);
+ }
+
+ [TestMethod]
+ public void XmlSerialization() {
+ ClaimsResponse fields = getFilledData();
+ MemoryStream ms = new MemoryStream();
+ XmlSerializer xs = new XmlSerializer(typeof(ClaimsResponse));
+ xs.Serialize(ms, fields);
+
+ ms.Position = 0;
+ ClaimsResponse fields2 = (ClaimsResponse)xs.Deserialize(ms);
+ Assert.AreEqual(fields, fields2);
+ }
+
+ [TestMethod]
+ public void TestEquals() {
+ ClaimsResponse fields1 = getFilledData();
+
+ Assert.AreNotEqual(fields1, null);
+ Assert.AreNotEqual(fields1, "string");
+
+ ClaimsResponse fields2 = getFilledData();
+ Assert.AreNotSame(fields1, fields2, "Test sanity check.");
+ Assert.AreEqual(fields1, fields2);
+
+ // go through each property and change it slightly and make sure it causes inequality.
+ fields2.Email += "q";
+ Assert.AreNotEqual(fields1, fields2);
+ fields1.Email = fields2.Email;
+ Assert.AreEqual(fields1, fields2, "Test sanity check.");
+ fields2.BirthDate = DateTime.Now;
+ Assert.AreNotEqual(fields1, fields2);
+ fields2.BirthDate = fields1.BirthDate;
+ Assert.AreEqual(fields1, fields2, "Test sanity check.");
+ fields2.Country += "q";
+ Assert.AreNotEqual(fields1, fields2);
+ fields2.Country = fields1.Country;
+ Assert.AreEqual(fields1, fields2, "Test sanity check.");
+ fields2.FullName += "q";
+ Assert.AreNotEqual(fields1, fields2);
+ fields2.FullName = fields1.FullName;
+ Assert.AreEqual(fields1, fields2, "Test sanity check.");
+ fields2.Gender = Gender.Female;
+ Assert.AreNotEqual(fields1, fields2);
+ fields2.Gender = fields1.Gender;
+ Assert.AreEqual(fields1, fields2, "Test sanity check.");
+ fields2.Language = "gb";
+ Assert.AreNotEqual(fields1, fields2);
+ fields2.Language = fields1.Language;
+ Assert.AreEqual(fields1, fields2, "Test sanity check.");
+ fields2.Nickname += "q";
+ Assert.AreNotEqual(fields1, fields2);
+ fields2.Nickname = fields1.Nickname;
+ Assert.AreEqual(fields1, fields2, "Test sanity check.");
+ fields2.PostalCode += "q";
+ Assert.AreNotEqual(fields1, fields2);
+ fields2.PostalCode = fields1.PostalCode;
+ Assert.AreEqual(fields1, fields2, "Test sanity check.");
+ fields2.TimeZone += "q";
+ Assert.AreNotEqual(fields1, fields2);
+ }
+
+ void parameterizedPreserveVersionFromRequest(string versionTypeUri) {
+ Dictionary<string, string> fields = new Dictionary<string, string>{
+ {"optional", "nickname"},
+ };
+ var req = new ClaimsRequest();
+ Assert.IsTrue(((IExtensionRequest)req).Deserialize(fields, null, versionTypeUri));
+ Assert.AreEqual(DemandLevel.Request, req.Nickname);
+ ClaimsResponse resp = req.CreateResponse();
+ Assert.AreEqual(versionTypeUri, ((IExtensionResponse)resp).TypeUri);
+ }
+
+ [TestMethod]
+ public void PreserveVersionFromRequest() {
+ // some unofficial type URIs...
+ parameterizedPreserveVersionFromRequest("http://openid.net/sreg/1.0");
+ parameterizedPreserveVersionFromRequest("http://openid.net/sreg/1.1");
+ // and the official one.
+ parameterizedPreserveVersionFromRequest("http://openid.net/extensions/sreg/1.1");
+ }
+
+ //[TestMethod]
+ public void AddToResponse() {
+ // TODO
+ }
+
+ //[TestMethod]
+ public void ReadFromResponse() {
+ // TODO
+ }
+ }
+}
diff --git a/src/DotNetOpenAuth.Test/OpenId/Extensions/ExtensionTestBase.cs b/src/DotNetOpenAuth.Test/OpenId/Extensions/ExtensionTestBase.cs new file mode 100644 index 0000000..4da8dfe --- /dev/null +++ b/src/DotNetOpenAuth.Test/OpenId/Extensions/ExtensionTestBase.cs @@ -0,0 +1,67 @@ +//-----------------------------------------------------------------------
+// <copyright file="ExtensionTestBase.cs" company="Andrew Arnott">
+// Copyright (c) Andrew Arnott. All rights reserved.
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace DotNetOpenAuth.Test.OpenId.Extensions {
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+ using DotNetOpenId.Extensions;
+ using DotNetOpenAuth.OpenId;
+ using Microsoft.VisualStudio.TestTools.UnitTesting;
+ using DotNetOpenAuth.OpenId.Messages;
+ using System.Collections.ObjectModel;
+ using DotNetOpenAuth.Messaging;
+ using DotNetOpenAuth.Test.Messaging;
+
+ public class ExtensionTestBase : OpenIdTestBase {
+ protected const ProtocolVersion Version = ProtocolVersion.V20;
+
+ [TestInitialize]
+ public virtual void Setup() {
+ base.SetUp();
+ }
+
+ internal void Roundtrip(
+ Protocol protocol,
+ IEnumerable<IOpenIdMessageExtension> requests,
+ IEnumerable<IOpenIdMessageExtension> responses) {
+ Association association = HmacShaAssociation.Create(protocol, protocol.Args.SignatureAlgorithm.Best, AssociationRelyingPartyType.Smart);
+ var coordinator = new OpenIdCoordinator(
+ rp => {
+ var requestBase = new CheckIdRequest(protocol.Version, ProviderUri, true);
+ rp.AssociationStore.StoreAssociation(ProviderUri, association);
+ requestBase.AssociationHandle = association.Handle;
+ requestBase.ClaimedIdentifier = "http://claimedid";
+ requestBase.LocalIdentifier = "http://localid";
+ requestBase.ReturnTo = RPUri;
+
+ foreach (IOpenIdMessageExtension extension in requests) {
+ requestBase.Extensions.Add(extension);
+ }
+
+ rp.Channel.Send(requestBase);
+ var response = rp.Channel.ReadFromRequest<PositiveAssertionResponse>();
+
+ var receivedResponses = response.Extensions.Cast<IOpenIdMessageExtension>();
+ CollectionAssert<IOpenIdMessageExtension>.AreEquivalentByEquality(responses.ToArray(), receivedResponses.ToArray());
+ },
+ op => {
+ op.AssociationStore.StoreAssociation(AssociationRelyingPartyType.Smart, association);
+ var request = op.Channel.ReadFromRequest<CheckIdRequest>();
+ var response = new PositiveAssertionResponse(request);
+ var receivedRequests = request.Extensions.Cast<IOpenIdMessageExtension>();
+ CollectionAssert<IOpenIdMessageExtension>.AreEquivalentByEquality(requests.ToArray(), receivedRequests.ToArray());
+
+ foreach (var extensionResponse in responses) {
+ response.Extensions.Add(extensionResponse);
+ }
+
+ op.Channel.Send(response); + });
+ coordinator.Run();
+ }
+ }
+}
diff --git a/src/DotNetOpenAuth.Test/OpenId/Extensions/SimpleRegistrationTests.cs b/src/DotNetOpenAuth.Test/OpenId/Extensions/SimpleRegistrationTests.cs new file mode 100644 index 0000000..7f2592e --- /dev/null +++ b/src/DotNetOpenAuth.Test/OpenId/Extensions/SimpleRegistrationTests.cs @@ -0,0 +1,83 @@ +namespace DotNetOpenAuth.Test.OpenId.Extensions {
+ using System;
+ using System.Collections.Generic;
+ using System.Globalization;
+ using System.Linq;
+ using System.Text;
+ using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration;
+ using Microsoft.VisualStudio.TestTools.UnitTesting;
+ using DotNetOpenAuth.OpenId;
+
+ [TestClass]
+ public class SimpleRegistrationTests : ExtensionTestBase {
+ [TestMethod]
+ public void Simple() {
+ Roundtrip(Protocol.Default,
+ new[] { new ClaimsRequest() { Nickname = DemandLevel.Request } },
+ new[] { new ClaimsResponse() { Nickname = "Andrew" } });
+ }
+
+ ////[TestMethod]
+ ////public void None() {
+ //// var response = ParameterizedTest<ClaimsResponse>(
+ //// TestSupport.Scenarios.ExtensionFullCooperation, Version, null);
+ //// Assert.IsNull(response);
+ ////}
+
+ ////[TestMethod]
+ ////public void Full() {
+ //// var request = new ClaimsRequest();
+ //// request.FullName = DemandLevel.Request;
+ //// request.Email = DemandLevel.Require;
+ //// var response = ParameterizedTest<ClaimsResponse>(
+ //// TestSupport.Scenarios.ExtensionFullCooperation, Version, request);
+ //// Assert.AreEqual("Andrew Arnott", response.FullName);
+ //// Assert.AreEqual("andrewarnott@gmail.com", response.Email);
+ ////}
+ ////[TestMethod]
+ ////public void Partial() {
+ //// var request = new ClaimsRequest();
+ //// request.FullName = DemandLevel.Request;
+ //// request.Email = DemandLevel.Require;
+ //// var response = ParameterizedTest<ClaimsResponse>(
+ //// TestSupport.Scenarios.ExtensionPartialCooperation, Version, request);
+ //// Assert.IsNull(response.FullName);
+ //// Assert.AreEqual("andrewarnott@gmail.com", response.Email);
+ ////}
+
+ ////[TestMethod]
+ ////public void Birthdates() {
+ //// var response = new ClaimsResponse();
+ //// // Verify that they both start out as null
+ //// Assert.IsNull(response.BirthDateRaw);
+ //// Assert.IsFalse(response.BirthDate.HasValue);
+
+ //// // Verify that null can be set.
+ //// response.BirthDate = null;
+ //// response.BirthDateRaw = null;
+ //// Assert.IsNull(response.BirthDateRaw);
+ //// Assert.IsFalse(response.BirthDate.HasValue);
+
+ //// // Verify that the strong-typed BirthDate property can be set and that it affects the raw property.
+ //// response.BirthDate = DateTime.Parse("April 4, 1984");
+ //// Assert.AreEqual(4, response.BirthDate.Value.Month);
+ //// Assert.AreEqual("1984-04-04", response.BirthDateRaw);
+
+ //// // Verify that the raw property can be set with a complete birthdate and that it affects the strong-typed property.
+ //// response.BirthDateRaw = "1998-05-08";
+ //// Assert.AreEqual("1998-05-08", response.BirthDateRaw);
+ //// Assert.AreEqual(DateTime.Parse("May 8, 1998", CultureInfo.InvariantCulture), response.BirthDate);
+
+ //// // Verify that an partial raw birthdate works, and sets the strong-typed property to null since it cannot be represented.
+ //// response.BirthDateRaw = "2000-00-00";
+ //// Assert.AreEqual("2000-00-00", response.BirthDateRaw);
+ //// Assert.IsFalse(response.BirthDate.HasValue);
+ ////}
+
+ ////[TestMethod, ExpectedException(typeof(ArgumentException))]
+ ////public void InvalidRawBirthdate() {
+ //// var response = new ClaimsResponse();
+ //// response.BirthDateRaw = "2008";
+ ////}
+ }
+}
|