// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using System; using System.Collections.Generic; using System.Web; using System.Web.TestUtil; using Microsoft.TestCommon; using Moq; using Xunit; using Assert = Microsoft.TestCommon.AssertEx; namespace Microsoft.Web.Helpers.Test { public class FacebookTest { public FacebookTest() { Facebook.AppId = "myapp'"; Facebook.AppSecret = "myappsecret"; Facebook.Language = "french"; } [Fact] public void GetFacebookCookieInfoReturnsEmptyStringIfCookieIsNotPresent() { // Arrange var context = CreateHttpContext(); // Act var info = Facebook.GetFacebookCookieInfo(context, "foo"); // Assert Assert.Equal("", info); } [Fact] public void GetFacebookCookieInfoThrowsIfCookieIsNotValid() { // Arrange var context = CreateHttpContext(new Dictionary { {"fbs_myapp'", "sig=malformed-signature&name=foo&val=bar&uid=MyFacebookName"}, {"fbs_uid", "MyFacebookName"}, }); // Act and Assert Assert.Throws(() => Facebook.GetFacebookCookieInfo(context, "uid"), "Invalid Facebook cookie."); } [Fact] public void GetFacebookCookieReturnsUserIdIfCookieIsValid() { // Arrange var context = CreateHttpContext(new Dictionary { {"fbs_myapp'", "sig=B2E6B3A21D0C9FA72E612BD6C3084807&name=foo&val=bar&uid=MyFacebookName"}, }); // Act var info = Facebook.GetFacebookCookieInfo(context, "uid"); // Assert Assert.Equal("MyFacebookName", info); } [Fact] public void GetInitScriptsJSEncodesParameters() { // Arrange var expectedText = @"
"; // Act var actualText = Facebook.GetInitializationScripts(); // Assert UnitTestHelper.AssertEqualsIgnoreWhitespace(expectedText, actualText.ToString()); } [Fact] public void LoginButtonTest() { // Arrange var expected40 = @"Awesome "button text""; var expected45 = @"Awesome "button text""; // Act var actualText = Facebook.LoginButton("http://www.test.com", "http://ww.test.com/Login.cshtml", "http://www.test.com/facebook/", "Awesome \"button text\"", true, "extra-small", "extra-long", true, "none\""); // Assert UnitTestHelper.AssertEqualsIgnoreWhitespace(RuntimeEnvironment.IsVersion45Installed ? expected45 : expected40, actualText.ToString()); } [Fact] public void LoginButtonOnlyTagTest() { // Arrange var expectedText = @""Awesome button text""; // Act var actualText = Facebook.LoginButtonTagOnly("\"Awesome button text\"", true, "small", "medium", "foobar();", true, "none\""); // Assert UnitTestHelper.AssertEqualsIgnoreWhitespace(expectedText, actualText.ToString()); } [Fact] public void LikeButtonTest() { // Arrange var expectedText = @""; // Act var actualText = Facebook.LikeButton("http://somewebsite", "modern", false, 300, 30, "hop", "Comic Sans", "lighter", "foo bar"); // Assert UnitTestHelper.AssertEqualsIgnoreWhitespace(expectedText, actualText.ToString()); } [Fact] public void CommentsWithNoXidTest() { // Arrange var expectedText = @""; // Act var actualText = Facebook.Comments(null, 300, 3, true, true); // Assert UnitTestHelper.AssertEqualsIgnoreWhitespace(expectedText, actualText.ToString()); } [Fact] public void CommentsWithXidTest() { // Arrange var expectedText = @""; // Act var actualText = Facebook.Comments("bar", 300, 3, true, true); // Assert UnitTestHelper.AssertEqualsIgnoreWhitespace(expectedText, actualText.ToString()); } [Fact] public void RecommendationsTest() { // Arrange var expectedText = @""; // Act var actualText = Facebook.Recommendations("http://somesite", 100, 200, false, "blue", "none", "black", "All posts", "ref label"); // Assert UnitTestHelper.AssertEqualsIgnoreWhitespace(expectedText, actualText.ToString()); } [Fact] public void LikeBoxTest() { // Arrange var expectedText = @""; // Act var actualText = Facebook.LikeBox("http://somesite", 100, 200, "blue", 5, true, false); // Assert UnitTestHelper.AssertEqualsIgnoreWhitespace(expectedText, actualText.ToString()); } [Fact] public void FacepileTest() { // Arrange var expectedText = @""; // Act var actualText = Facebook.Facepile(3, 100); // Assert UnitTestHelper.AssertEqualsIgnoreWhitespace(expectedText, actualText.ToString()); } [Fact] public void LiveStreamWithEmptyXidTest() { // Arrange var expectedText = @""; // Act var actualText = Facebook.LiveStream(100, 100, "", "", true); // Assert UnitTestHelper.AssertEqualsIgnoreWhitespace(expectedText, actualText.ToString()); } [Fact] public void LiveStreamWithXidValueTest() { // Arrange var expectedText = @""; // Act var actualText = Facebook.LiveStream(100, 100, "some-val", "http://mysite", true); // Assert UnitTestHelper.AssertEqualsIgnoreWhitespace(expectedText, actualText.ToString()); } [Fact] public void ActivityStreamTest() { // Arrange var expectedText = @""; // Act var actualText = Facebook.ActivityFeed("http://mysite", 100, 120, false, "gray", "Arial", "blue", true); // Assert UnitTestHelper.AssertEqualsIgnoreWhitespace(expectedText, actualText.ToString()); } [Fact] public void FbmlNamespacesTest() { // Arrange var expectedText = @"xmlns:fb=""http://www.facebook.com/2008/fbml"" xmlns:og=""http://opengraphprotocol.org/schema/"""; // Act var actualText = Facebook.FbmlNamespaces(); // Assert Assert.Equal(expectedText, actualText.ToString()); } private static HttpContextBase CreateHttpContext(IDictionary cookieValues = null) { var context = new Mock(); var httpRequest = new Mock(); var cookies = new HttpCookieCollection(); httpRequest.Setup(c => c.Cookies).Returns(cookies); context.Setup(c => c.Request).Returns(httpRequest.Object); if (cookieValues != null) { foreach (var item in cookieValues) { cookies.Add(new HttpCookie(item.Key, item.Value)); } } return context.Object; } } }