Skip to content

Commit

Permalink
Text parser eats closing forum code for url tag when URL includes bang.
Browse files Browse the repository at this point in the history
Fixes #20. Also fixed unit tests for #19.
  • Loading branch information
jeffputz committed Mar 11, 2015
1 parent cdea24c commit 25a7c9d
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 8 deletions.
16 changes: 10 additions & 6 deletions PopForums.Test/Controllers/AccountControllerTests.cs
Expand Up @@ -378,7 +378,8 @@ public void ChangePasswordBadOldPassword()
controller.ControllerContext = new ControllerContext(contextHelper.MockContext.Object, new RouteData(), controller);
var user = UserTest.GetTestUser();
controller.SetUser(user);
_userService.Setup(u => u.VerifyPassword(user, It.IsAny<string>())).Returns(false);
_userService.Setup(u => u.VerifyPassword(user, It.IsAny<string>())).Returns(false);
_settingsManager.Setup(x => x.Current.IsNewUserApproved).Returns(true);
var result = controller.ChangePassword(new UserEditSecurity { OldPassword = "no" });
Assert.IsNotNullOrEmpty(result.ViewData["PasswordResult"].ToString());
Assert.AreNotEqual("EditAccountNoUser", result.ViewName);
Expand All @@ -392,8 +393,9 @@ public void ChangePasswordNoMatch()
var contextHelper = new HttpContextHelper();
controller.ControllerContext = new ControllerContext(contextHelper.MockContext.Object, new RouteData(), controller);
var user = UserTest.GetTestUser();
controller.SetUser(user);
_userService.Setup(u => u.VerifyPassword(user, It.IsAny<string>())).Returns(true);
controller.SetUser(user);
_userService.Setup(u => u.VerifyPassword(user, It.IsAny<string>())).Returns(true);
_settingsManager.Setup(x => x.Current.IsNewUserApproved).Returns(true);
var result = controller.ChangePassword(new UserEditSecurity{ NewPassword = "blah", NewPasswordRetype = "blah2"});
Assert.IsNotNullOrEmpty(result.ViewData["PasswordResult"].ToString());
Assert.AreNotEqual("EditAccountNoUser", result.ViewName);
Expand All @@ -410,7 +412,8 @@ public void ChangePasswordFailsRules()
controller.SetUser(user);
_userService.Setup(u => u.VerifyPassword(user, It.IsAny<string>())).Returns(true);
_userService.Setup(u => u.IsPasswordValid(It.IsAny<string>(), It.IsAny<ModelStateDictionary>())).Returns(false).Callback<string, ModelStateDictionary>((p, m) => m.AddModelError("Password", "whatever"));
var password = "awesome";
var password = "awesome";
_settingsManager.Setup(x => x.Current.IsNewUserApproved).Returns(true);
var result = controller.ChangePassword(new UserEditSecurity { NewPassword = password, NewPasswordRetype = password });
Assert.IsNotNullOrEmpty(result.ViewData["PasswordResult"].ToString());
Assert.AreNotEqual("EditAccountNoUser", result.ViewName);
Expand All @@ -427,8 +430,9 @@ public void ChangePasswordMatchAndValid()
var user = UserTest.GetTestUser();
controller.SetUser(user);
_userService.Setup(u => u.VerifyPassword(user, It.IsAny<string>())).Returns(true);
_userService.Setup(u => u.IsPasswordValid(It.IsAny<string>(), It.IsAny<ModelStateDictionary>())).Returns(true);
var password = "awesome";
_userService.Setup(u => u.IsPasswordValid(It.IsAny<string>(), It.IsAny<ModelStateDictionary>())).Returns(true);
var password = "awesome";
_settingsManager.Setup(x => x.Current.IsNewUserApproved).Returns(true);
var result = controller.ChangePassword(new UserEditSecurity { NewPassword = password, NewPasswordRetype = password });
Assert.IsNotNullOrEmpty(result.ViewData["PasswordResult"].ToString());
Assert.AreNotEqual("EditAccountNoUser", result.ViewName);
Expand Down
Expand Up @@ -352,6 +352,14 @@ public void YouTubeTagConvertedToIframe()
_settings.AllowImages = true;
var result = service.ForumCodeToHtml("test test [youtube=http://www.youtube.com/watch?v=NL125lBWYc4] test");
Assert.AreEqual("<p>test test <iframe width=\"456\" height=\"123\" src=\"http://www.youtube.com/embed/NL125lBWYc4\" frameborder=\"0\" allowfullscreen></iframe> test</p>", result);
}

[Test]
public void UrlWithBangParsesCorrectly()
{
var service = GetService();
var result = service.ForumCodeToHtml("(and [url=\"https://groups.google.com/forum/#!original/rec.roller-coaster/iwTIvU2IXKI/hKB_D9uRbaEJ\"]'millennium' is spelled with two n's[/url] regardless of whether the new one starts in 2000 or 2001.)");
Assert.AreEqual("<p>(and <a href=\"https://groups.google.com/forum/#!original/rec.roller-coaster/iwTIvU2IXKI/hKB_D9uRbaEJ\" target=\"_blank\">'millennium' is spelled with two n's</a> regardless of whether the new one starts in 2000 or 2001.)</p>", result);
}
}
}
2 changes: 1 addition & 1 deletion PopForums/Services/TextParsingService.cs
Expand Up @@ -17,7 +17,7 @@ public TextParsingService(ISettingsManager settingsManager)
private ISettingsManager _settingsManager;

public static string[] AllowedCloseableTags = {"b", "i", "code", "pre", "ul", "ol", "li", "url", "quote", "img"};
private readonly static Regex _tagPattern = new Regex(@"\[[\w""\?=&/;\+%\*\:~,\.\-\$\|@#]+\]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private readonly static Regex _tagPattern = new Regex(@"\[[\w""\?=&/;\+%\*\:~,\!\.\-\$\|@#]+\]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private readonly static Regex _tagID = new Regex(@"\[/?(\w+)\=*.*?\]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private readonly static Regex _protocolPattern = new Regex(@"(?<![\]""\>=])(((news|(ht|f)tp(s?))\://)[\w\-\*]+(\.[\w\-/~\*]+)*/?)([\w\?=&/;\+%\*\:~,\.\-\$\|@#])*", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private readonly static Regex _wwwPattern = new Regex(@"(?<!(\]|""|//))(?<=\s|^)(w{3}(\.[\w\-/~\*]+)*/?)([\?\w=&;\+%\*\:~,\-\$\|@#])*", RegexOptions.Compiled | RegexOptions.IgnoreCase);
Expand Down
2 changes: 1 addition & 1 deletion Version.cs
Expand Up @@ -3,4 +3,4 @@
[assembly: AssemblyCompany("POP World Media, LLC")]
[assembly: AssemblyCopyright("Copyright ©2015, POP World Media, LLC")]
[assembly: AssemblyTrademark("POP Forums is a trademark of POP World Media, LLC")]
[assembly: AssemblyVersion("13.0.1.15031")]
[assembly: AssemblyVersion("13.0.2.15032")]

0 comments on commit 25a7c9d

Please sign in to comment.