public void RepoAdminCannotRemoveThemselves() { var user = ITH.CreateUsers().Single(); var repoId = ITH.CreateRepositoryOnWebInterface(ITH.MakeName()); app.NavigateTo <RepositoryController>(c => c.Edit(repoId)); var form = app.FindFormFor <RepositoryDetailModel>(); // Set User0 to be admin for this repo var adminBox = form.WebApp.Browser.FindElementsByCssSelector( string.Format("input[name=PostedSelectedAdministrators][value=\"{0}\"]", user.Id)).Single(); ITH.SetCheckbox(adminBox, true); form.Submit(); ITH.AssertThatNoValidationErrorOccurred(); // Now, log in as the ordinary user ITH.LoginAsUser(user); app.NavigateTo <RepositoryController>(c => c.Edit(repoId)); form = app.FindFormFor <RepositoryDetailModel>(); var chkboxes = form.WebApp.Browser.FindElementsByCssSelector("input[name=PostedSelectedAdministrators]"); ITH.SetCheckboxes(chkboxes, false); form.Submit(); app.WaitForElementToBeVisible(By.CssSelector("div.validation-summary-errors"), TimeSpan.FromSeconds(1)); ITH.AssertThatValidationErrorContains(Resources.Repository_Edit_CantRemoveYourself); }
public void TeamNameEnsureDuplicationDetectionStillAllowsEditOtherProperties() { var ids = ITH.CreateTeams().ToList(); var id1 = ids[0]; app.NavigateTo <TeamController>(c => c.Edit(id1.Id)); app.FindFormFor <TeamEditModel>() .Field(f => f.Description).SetValueTo("somename") .Submit(); app.NavigateTo <TeamController>(c => c.Edit(id1.Id)); // force refresh app.FindFormFor <TeamEditModel>() .Field(f => f.Description).ValueShouldEqual("somename"); }
public void TeamNameEnsureDuplicationDetectionAsYouTypeWorksOnCreation() { var id1 = ITH.CreateTeams().Single(); app.NavigateTo <TeamController>(c => c.Create()); var form = app.FindFormFor <TeamEditModel>() .Field(f => f.Name).SetValueTo(id1.Name) .Field(f => f.Description).Click(); // Set focus var input = app.Browser.FindElementByCssSelector("input#Name"); Assert.IsTrue(input.GetAttribute("class").Contains("input-validation-error")); }
public void SettingsAcceptEmptyStringForRegex() { ITH.SetGlobalSetting(g => g.LinksRegex, "some_value"); app.NavigateTo <SettingsController>(c => c.Index()); app.FindFormFor <GlobalSettingsModel>() .Field(f => f.LinksRegex).SetValueTo("") .Submit(); var field = app.FindFormFor <GlobalSettingsModel>() .Field(f => f.LinksRegex); field.ValueShouldEqual(""); Assert.AreEqual(false, field.Field.GetAttribute("class").Contains("valid")); }
public void RepoNameEnsureDuplicationDetectionStillAllowsEditOtherProperties() { var reponame = ITH.MakeName(); var repo = ITH.CreateRepositoryOnWebInterface(reponame); app.NavigateTo <RepositoryController>(c => c.Edit(repo)); app.FindFormFor <RepositoryDetailModel>() .Field(f => f.Description).SetValueTo(reponame + "_other") .Submit(); ITH.AssertThatNoValidationErrorOccurred(); app.NavigateTo <RepositoryController>(c => c.Edit(repo)); // force refresh app.FindFormFor <RepositoryDetailModel>() .Field(f => f.Description).ValueShouldEqual(reponame + "_other"); }
public void RepositoryCanBeSavedBySysAdminWithoutHavingAnyRepoAdmins() { var repoId = ITH.CreateRepositoryOnWebInterface(ITH.MakeName()); app.NavigateTo <RepositoryController>(c => c.Edit(repoId)); var form = app.FindFormFor <RepositoryDetailModel>(); // Turn off all the admin checkboxes and save the form var chkboxes = form.WebApp.Browser.FindElementsByCssSelector("input[name=PostedSelectedAdministrators]"); ITH.SetCheckboxes(chkboxes, false); form.Submit(); ITH.AssertThatNoValidationErrorOccurred(); }
public void AnonymousPushModeNotAcceptInvalidValueWhenCreatingRepo() { app.NavigateTo <RepositoryController>(c => c.Create()); var form = app.FindFormFor <RepositoryDetailModel>(); form.Field(f => f.Name).SetValueTo(ITH.MakeName()); ITH.SetCheckbox(form.Field(f => f.AllowAnonymous).Field, true); var select = new SelectElement(form.Field(f => f.AllowAnonymousPush).Field); select.SelectByValue(((int)RepositoryPushMode.Global).ToString()); ITH.SetElementAttribute(select.Options[(int)RepositoryPushMode.Global], "value", "47"); form.Submit(); ITH.AssertThatValidationErrorContains(Resources.Repository_Edit_InvalidAnonymousPushMode); }
public void CreateDuplicateRepoNameNotAllowed() { var reponame = ITH.MakeName(); ITH.CreateRepositoryOnWebInterface(reponame); app.NavigateTo <RepositoryController>(c => c.Create()); app.FindFormFor <RepositoryDetailModel>() .Field(f => f.Name).SetValueTo(reponame) .Submit(); var field = app.FindFormFor <RepositoryDetailModel>() .Field(f => f.Name); field.ShouldBeInvalid(); Assert.AreEqual(Resources.Validation_Duplicate_Name, field.HasValidationMessage().Text); }
public void UsernameEnsureDuplicationDetectionAsYouTypeWorksOnCreation() { var id1 = ITH.CreateUsers().Single(); app.NavigateTo <AccountController>(c => c.Create()); var form = app.FindFormFor <UserCreateModel>() .Field(f => f.Username).SetValueTo(id1.Username) .Field(f => f.Name).Click(); // Set focus var validation = app.WaitForElementToBeVisible(By.CssSelector("input#Username~span.field-validation-error>span"), TimeSpan.FromSeconds(1), true); Assert.AreEqual(Resources.Validation_Duplicate_Name, validation.Text); var input = app.Browser.FindElementByCssSelector("input#Username"); Assert.IsTrue(input.GetAttribute("class").Contains("input-validation-error")); }
public void EnsureCookiePersistBetweenBrowserRestart() { app.NavigateTo <HomeController>(c => c.LogOff()); // in case the cookie is set app.NavigateTo <RepositoryController>(c => c.Index(null, null)); app.Browser.Manage().Cookies.DeleteAllCookies(); Thread.Sleep(TimeSpan.FromSeconds(5)); // give it some time to delete the cookies app.NavigateTo <AccountController>(c => c.Detail(new Guid("7479fc09-2c0b-4e93-a2cf-5e4bbf6bab4f"))); app.UrlShouldMapTo <HomeController>(c => c.LogOn("/Account/Detail/7479fc09-2c0b-4e93-a2cf-5e4bbf6bab4f")); var form = app.FindFormFor <LogOnModel>(); var chkField = form.Field(f => f.Username).SetValueTo("admin") .Field(f => f.Password).SetValueTo("admin") .Field(f => f.RememberMe).Field; ITH.SetCheckbox(chkField, true); form.Submit(); app.UrlShouldMapTo <AccountController>(c => c.Detail(new Guid("7479fc09-2c0b-4e93-a2cf-5e4bbf6bab4f"))); MvcWebApp.Driver.Shutdown(); app = new MvcWebApp(); ITH = new IntegrationTestHelpers(app, lc); app.NavigateTo <AccountController>(c => c.Detail(new Guid("7479fc09-2c0b-4e93-a2cf-5e4bbf6bab4f"))); app.UrlShouldMapTo <AccountController>(c => c.Detail(new Guid("7479fc09-2c0b-4e93-a2cf-5e4bbf6bab4f"))); // ok we re logged in with success. // Now let's make sure we can unset remember me app.NavigateTo <HomeController>(c => c.LogOff()); app.NavigateTo <HomeController>(c => c.LogOn("")); form = app.FindFormFor <LogOnModel>(); chkField = form.Field(f => f.Username).SetValueTo("admin") .Field(f => f.Password).SetValueTo("admin") .Field(f => f.RememberMe).Field; ITH.SetCheckbox(chkField, false); form.Submit(); app.UrlShouldMapTo <RepositoryController>(c => c.Index(null, null)); MvcWebApp.Driver.Shutdown(); app = new MvcWebApp(); ITH = new IntegrationTestHelpers(app, lc); app.NavigateTo <AccountController>(c => c.Detail(new Guid("7479fc09-2c0b-4e93-a2cf-5e4bbf6bab4f"))); app.UrlShouldMapTo <HomeController>(c => c.LogOn("/Account/Detail/7479fc09-2c0b-4e93-a2cf-5e4bbf6bab4f")); }
public void TeamNameEnsureDuplicationDetectionAsYouTypeWorksOnEdit() { var teams = ITH.CreateTeams(2).ToList(); var id1 = teams[0]; var id2 = teams[1]; app.NavigateTo <TeamController>(c => c.Edit(id2.Id)); var form = app.FindFormFor <TeamEditModel>() .Field(f => f.Name).SetValueTo(id1.Name) .Field(f => f.Description).Click(); // Set focus var validation = app.WaitForElementToBeVisible(By.CssSelector("input#Name~span.field-validation-error>span"), TimeSpan.FromSeconds(1), true); Assert.AreEqual(Resources.Validation_Duplicate_Name, validation.Text); var input = app.Browser.FindElementByCssSelector("input#Name"); Assert.IsTrue(input.GetAttribute("class").Contains("input-validation-error")); }
public void RepoNameEnsureDuplicationDetectionAsYouTypeWorksOnCreation() { var reponame = ITH.MakeName(); ITH.CreateRepositoryOnWebInterface(reponame); app.NavigateTo <RepositoryController>(c => c.Create()); app.FindFormFor <RepositoryDetailModel>() .Field(f => f.Name).SetValueTo(reponame) .Field(f => f.Description).Click(); // Set focus var validation = app.WaitForElementToBeVisible(By.CssSelector("input#Name~span.field-validation-error>span"), TimeSpan.FromSeconds(1), true); Assert.AreEqual(Resources.Validation_Duplicate_Name, validation.Text); var input = app.Browser.FindElementByCssSelector("input#Name"); Assert.IsTrue(input.GetAttribute("class").Contains("input-validation-error")); }
public void RenameRepoToExistingRepoNameNotAllowedDifferentCase() { var reponame = ITH.MakeName(); var otherreponame = ITH.MakeName(reponame + "_other"); ITH.CreateRepositoryOnWebInterface(reponame); var id2 = ITH.CreateRepositoryOnWebInterface(otherreponame); app.NavigateTo <RepositoryController>(c => c.Edit(id2)); app.FindFormFor <RepositoryDetailModel>() .Field(f => f.Name).SetValueTo(reponame.ToUpper()) .Submit(); var field = app.FindFormFor <RepositoryDetailModel>() .Field(f => f.Name); field.ShouldBeInvalid(); Assert.AreEqual(Resources.Validation_Duplicate_Name, field.HasValidationMessage().Text); }
public void InvalidLinkifyRegexAsYouTypeInRepository() { var reponame = ITH.MakeName(); var repo_id = ITH.CreateRepositoryOnWebInterface(reponame); var brokenRegex = @"\"; app.NavigateTo <RepositoryController>(c => c.Edit(repo_id)); app.FindFormFor <RepositoryDetailModel>() .Field(f => f.LinksUseGlobal).Click() .Field(f => f.LinksRegex).SetValueTo(brokenRegex) .Field(f => f.Description).Click(); // Set focus var validation = app.WaitForElementToBeVisible(By.CssSelector("input#LinksRegex~span.field-validation-error>span"), TimeSpan.FromSeconds(1), true); Assert.IsTrue(validation.Text.Contains(Resources.Validation_Invalid_Regex.Replace("{0}", ""))); var input = app.Browser.FindElementByCssSelector("input#LinksRegex"); Assert.IsTrue(input.GetAttribute("class").Contains("input-validation-error")); }
public void EnsureCheckboxesStayCheckOnCreateError() { ITH.CreateUsers(1); app.NavigateTo <RepositoryController>(c => c.Create()); var form = app.FindFormFor <RepositoryDetailModel>(); var chkboxes = form.WebApp.Browser.FindElementsByCssSelector("form.pure-form>fieldset>div.pure-control-group.checkboxlist>input"); foreach (var chk in chkboxes) { ITH.SetCheckbox(chk, true); } form.Submit(); form = app.FindFormFor <RepositoryDetailModel>(); chkboxes = form.WebApp.Browser.FindElementsByCssSelector("form.pure-form>fieldset>div.pure-control-group.checkboxlist>input"); foreach (var chk in chkboxes) { Assert.AreEqual(true, chk.Selected, "A message box was unselected eventhough we selected all!"); } }
public void DropdownNavigationWorks() { var reponame = ITH.MakeName(); var otherreponame = ITH.MakeName(reponame + "_other"); var repoId = ITH.CreateRepositoryOnWebInterface(reponame); var otherrepoId = ITH.CreateRepositoryOnWebInterface(otherreponame); app.NavigateTo <RepositoryController>(c => c.Detail(otherrepoId)); var element = app.Browser.FindElementByCssSelector("select#Repositories"); var dropdown = new SelectElement(element); dropdown.SelectByText(reponame); Thread.Sleep(2000); app.UrlMapsTo <RepositoryController>(c => c.Detail(repoId)); app.WaitForElementToBeVisible(By.CssSelector("select#Repositories"), TimeSpan.FromSeconds(10)); dropdown = new SelectElement(app.Browser.FindElementByCssSelector("select#Repositories")); dropdown.SelectByText(otherreponame); Thread.Sleep(2000); app.UrlMapsTo <RepositoryController>(c => c.Detail(otherrepoId)); }