// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using System; using System.Linq; using System.Web; using System.Web.Helpers.Test; using System.Web.TestUtil; using System.Web.WebPages.Scope; using Xunit; using Assert = Microsoft.TestCommon.AssertEx; namespace Microsoft.Web.Helpers.Test { public class LinkShareTest { private static LinkShareSite[] _allLinkShareSites = new[] { LinkShareSite.Delicious, LinkShareSite.Digg, LinkShareSite.GoogleBuzz, LinkShareSite.Facebook, LinkShareSite.Reddit, LinkShareSite.StumbleUpon, LinkShareSite.Twitter }; [Fact] public void RenderWithFacebookFirst_ReturnsHtmlWithFacebookAndThenOthersTest() { string pageTitle = "page1"; string pageLinkBack = "page link back"; string twitterUserName = String.Empty; string twitterTag = String.Empty; string actual; actual = LinkShare.GetHtml(pageTitle, pageLinkBack, twitterUserName, twitterTag, LinkShareSite.Facebook, LinkShareSite.All).ToString(); Assert.True(actual.Contains("twitter.com")); int pos = actual.IndexOf("facebook.com"); Assert.True(pos > 0); int pos2 = actual.IndexOf("reddit.com"); Assert.True(pos2 > pos); pos2 = actual.IndexOf("digg.com"); Assert.True(pos2 > pos); } [Fact] public void BitlyApiKeyThrowsWhenSetToNull() { Assert.ThrowsArgumentNull(() => LinkShare.BitlyApiKey = null, "value"); } [Fact] public void BitlyApiKeyUsesScopeStorage() { // Arrange var value = "value"; // Act LinkShare.BitlyApiKey = value; // Assert Assert.Equal(LinkShare.BitlyApiKey, value); Assert.Equal(ScopeStorage.CurrentScope[LinkShare._bitlyApiKey], value); } [Fact] public void BitlyLoginThrowsWhenSetToNull() { Assert.ThrowsArgumentNull(() => LinkShare.BitlyLogin = null, "value"); } [Fact] public void BitlyLoginUsesScopeStorage() { // Arrange var value = "value"; // Act LinkShare.BitlyLogin = value; // Assert Assert.Equal(LinkShare.BitlyLogin, value); Assert.Equal(ScopeStorage.CurrentScope[LinkShare._bitlyLogin], value); } [Fact] public void RenderWithNullPageTitle_ThrowsException() { Assert.ThrowsArgumentNullOrEmptyString( () => LinkShare.GetHtml(null).ToString(), "pageTitle"); } [Fact] public void Render_WithFacebook_Works() { string actualHTML = LinkShare.GetHtml("page-title", "www.foo.com", linkSites: LinkShareSite.Facebook).ToString(); string expectedHTML = "\"Share"; UnitTestHelper.AssertEqualsIgnoreWhitespace(actualHTML, expectedHTML); } [Fact] public void Render_WithFacebookAndDigg_Works() { string actualHTML = LinkShare.GetHtml("page-title", "www.foo.com", linkSites: new[] { LinkShareSite.Facebook, LinkShareSite.Digg }).ToString(); string expectedHTML = "\"Share\"Digg!\""; UnitTestHelper.AssertEqualsIgnoreWhitespace(actualHTML, expectedHTML); } [Fact] public void Render_WithFacebook_RendersAnchorTitle() { string actualHTML = LinkShare.GetHtml("page-title", "www.foo.com", linkSites: LinkShareSite.Facebook).ToString(); string expectedHtml = @" "; UnitTestHelper.AssertEqualsIgnoreWhitespace(expectedHtml, actualHTML); } [Fact] public void LinkShare_GetSitesInOrderReturnsAllSitesWhenArgumentIsNull() { // Act and Assert var result = LinkShare.GetSitesInOrder(linkSites: null); Assert.Equal(_allLinkShareSites, result.ToArray()); } [Fact] public void LinkShare_GetSitesInOrderReturnsAllSitesWhenArgumentIEmpty() { // Act var result = LinkShare.GetSitesInOrder(linkSites: new LinkShareSite[] { }); // Assert Assert.Equal(_allLinkShareSites, result.ToArray()); } [Fact] public void LinkShare_GetSitesInOrderReturnsAllSitesWhenAllIsFirstItem() { // Act var result = LinkShare.GetSitesInOrder(linkSites: new[] { LinkShareSite.All, LinkShareSite.Reddit }); // Assert Assert.Equal(_allLinkShareSites, result.ToArray()); } [Fact] public void LinkShare_GetSitesInOrderReturnsSitesInOrderWhenAllIsNotFirstItem() { // Act var result = LinkShare.GetSitesInOrder(linkSites: new[] { LinkShareSite.Reddit, LinkShareSite.Facebook, LinkShareSite.All }); // Assert Assert.Equal(new[] { LinkShareSite.Reddit, LinkShareSite.Facebook, LinkShareSite.Delicious, LinkShareSite.Digg, LinkShareSite.GoogleBuzz, LinkShareSite.StumbleUpon, LinkShareSite.Twitter }, result.ToArray()); } [Fact] public void LinkShare_EncodesParameters() { // Arrange var expectedHtml = @" "; // Act var actualHtml = LinkShare.GetHtml("&&", "www.foo.com", "", "I <3 Tweets", LinkShareSite.Reddit, LinkShareSite.Twitter).ToString(); // Assert UnitTestHelper.AssertEqualsIgnoreWhitespace(expectedHtml, actualHtml); } [Fact] public void LinkshareRendersValidXhtml() { string result = " \n \n \n
\n" + LinkShare.GetHtml("any<>title", "my test page <>") + "\n
\n "; HtmlString htmlResult = new HtmlString(result); XhtmlAssert.Validate1_0(htmlResult); } } }