PageRenderTime 40ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/jira-project/jira-functional-tests/jira-webdriver-tests/src/main/java/com/atlassian/jira/webtest/webdriver/tests/projectconfig/TestEditProject.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 248 lines | 186 code | 56 blank | 6 comment | 1 complexity | 5142d0f8b6ed60bb630d008b375f0868 MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.webtest.webdriver.tests.projectconfig;
  2. import com.atlassian.integrationtesting.runner.restore.Restore;
  3. import com.atlassian.jira.functest.framework.FunctTestConstants;
  4. import com.atlassian.jira.functest.framework.suite.Category;
  5. import com.atlassian.jira.functest.framework.suite.WebTest;
  6. import com.atlassian.jira.pageobjects.BaseJiraWebTest;
  7. import com.atlassian.jira.pageobjects.project.summary.EditProjectPageTab;
  8. import com.atlassian.jira.security.Permissions;
  9. import com.atlassian.jira.testkit.client.restclient.Project;
  10. import com.atlassian.jira.webtests.LicenseKeys;
  11. import com.atlassian.pageobjects.elements.query.Poller;
  12. import org.junit.Before;
  13. import org.junit.Test;
  14. import java.util.Map;
  15. import static com.atlassian.pageobjects.elements.query.Poller.waitUntilFalse;
  16. import static org.hamcrest.MatcherAssert.assertThat;
  17. import static org.hamcrest.Matchers.equalTo;
  18. import static org.hamcrest.Matchers.is;
  19. import static org.hamcrest.core.IsNot.not;
  20. import static org.junit.Assert.assertEquals;
  21. import static org.junit.Assert.assertFalse;
  22. /**
  23. * @since v4.4
  24. */
  25. @WebTest({Category.WEBDRIVER_TEST, Category.ADMINISTRATION, Category.PLUGINS, Category.PROJECTS})
  26. @Restore("xml/projectconfig/TestEditProjectPage.xml")
  27. public class TestEditProject extends BaseJiraWebTest {
  28. private static final String NEW_URL = "http://www.realsurf.com";
  29. private static final String NEW_DESCRIPTION = "Yeah you would like me to set a description";
  30. private static final String NEW_NAME = "Scott's Project";
  31. private static final String INVALID_URL = "dfgsfdgs";
  32. private static final String BLA_PROJECT = "BLA";
  33. private static final String MKY_PROJECT = "MKY";
  34. private static final String PROJ_ID_BLA = "10010";
  35. private static final String PROJ_ID_MKY = "10001";
  36. private static final String INVALID_TYPE_PROJECT_KEY = "T1";
  37. private static final String UNINSTALLED_TYPE_NAME = "Uninstalled Type";
  38. private static final String UNINSTALLED_TYPE_KEY = "uninstalled_type";
  39. private static final String SOFTWARE_KEY = "software";
  40. private static final String SOFTWARE_PROJECT_NAME = "Software";
  41. private static final String BUSINESS_KEY = "business";
  42. private static final String BUSINESS_PROJECT_NAME = "Business";
  43. public static final long PROJECT_CATEGORY_ID = 10000L;
  44. public static final String PROJECT_CATEGORY = "test project category";
  45. public static final String PROJECT_ADMIN_GROUP = "project_admin_group";
  46. @Before
  47. public void setUp() {
  48. backdoor.license().replace(LicenseKeys.COMMERCIAL);
  49. }
  50. @Test
  51. public void testSuccessfulEdit() {
  52. Project originalProject = backdoor.project().getProject(BLA_PROJECT);
  53. EditProjectPageTab editProjectPageTab = navigateToEditProjectPageFor(PROJ_ID_BLA);
  54. editProjectPageTab.setProjectName(NEW_NAME)
  55. .setProjectUrl(NEW_URL)
  56. .chooseAvatarOption("10001")
  57. .setDescription(NEW_DESCRIPTION)
  58. .submit();
  59. Project newProject = backdoor.project().getProject(BLA_PROJECT);
  60. assertEquals(NEW_NAME, newProject.name);
  61. assertEquals(NEW_URL, newProject.url);
  62. assertEquals(NEW_DESCRIPTION, newProject.description);
  63. assertThat(newProject.avatarUrls, not(equalTo(originalProject.avatarUrls)));
  64. }
  65. @Test
  66. public void testEditWithInlineErrors() {
  67. EditProjectPageTab editProjectPageTab = navigateToEditProjectPageFor(PROJ_ID_BLA);
  68. String shortName = "a";
  69. editProjectPageTab.setProjectName(shortName)
  70. .setProjectUrl(INVALID_URL)
  71. .submit();
  72. Map<String, String> errors = editProjectPageTab.getFormErrors();
  73. assertEquals("The URL specified is not valid - it must start with http://", errors.get("url"));
  74. assertEquals("The project name should be at least 2 characters in length.", errors.get("name"));
  75. }
  76. @Test
  77. public void testEditWithTooLongName() {
  78. EditProjectPageTab editProjectPageTab = navigateToEditProjectPageFor(PROJ_ID_BLA);
  79. final int stringSize = 152;
  80. StringBuilder longNameBuilder = new StringBuilder(stringSize);
  81. for (int i = 0; i < stringSize; i++) {
  82. longNameBuilder.append(PROJECT_CATEGORY);
  83. }
  84. String longName = longNameBuilder.toString();
  85. String shortenedName = longName.substring(0, 80);
  86. editProjectPageTab.setProjectName(longName);
  87. Poller.waitUntil(editProjectPageTab.getProjectName(), equalTo(shortenedName));
  88. }
  89. @Test
  90. public void testEditWithInvalidProjectLead() {
  91. EditProjectPageTab editProjectPageTab = navigateToEditProjectPageFor(PROJ_ID_MKY);
  92. waitUntilFalse("Error message should not be visible.", editProjectPageTab.isErrorMessagePresent());
  93. }
  94. /**
  95. * JRADEV-8106 clicking on project avatar in edit dialog goes to 404 page
  96. */
  97. @Test
  98. public void testChangeAvatar() {
  99. backdoor.restoreBlankInstance();
  100. EditProjectPageTab editProjectPageTab = navigateToEditProjectPageFor(PROJ_ID_MKY);
  101. editProjectPageTab.setAvatar("10001")
  102. .submit();
  103. Project project = backdoor.project().getProject(MKY_PROJECT);
  104. assertThat("Should have updated avatar", project.avatarUrls.get("16x16").contains("avatarId=10001"), is(true));
  105. }
  106. @Test
  107. public void testChangeProjectTypeAsGlobalAdmin() {
  108. jira.quickLoginAsAdmin();
  109. assertThat("Should originally be a software project", backdoor.project().getProject(BLA_PROJECT).projectTypeKey, equalTo(SOFTWARE_KEY));
  110. EditProjectPageTab editProjectPageTab = navigateToEditProjectPageFor(PROJ_ID_BLA);
  111. editProjectPageTab.setProjectType(BUSINESS_KEY)
  112. .submit();
  113. assertThat("Project Type should now have been updated", backdoor.project().getProject(BLA_PROJECT).projectTypeKey, equalTo(BUSINESS_KEY));
  114. }
  115. @Test
  116. public void testEditWithInlineErrorsShouldNotClearDescription() {
  117. EditProjectPageTab editProjectPageTab = navigateToEditProjectPageFor(PROJ_ID_BLA);
  118. editProjectPageTab.setProjectName("")
  119. .setDescription("This is a description.")
  120. .setProjectUrl(INVALID_URL)
  121. .submit();
  122. editProjectPageTab = pageBinder.bind(EditProjectPageTab.class, PROJ_ID_BLA);
  123. Poller.waitUntil(editProjectPageTab.getProjectDescription(), equalTo("This is a description."));
  124. Poller.waitUntil(editProjectPageTab.getProjectUrl(), equalTo(INVALID_URL));
  125. }
  126. @Test
  127. public void testEditWithInlineErrorsShouldNotResetProjectType() {
  128. EditProjectPageTab editProjectPageTab = navigateToEditProjectPageFor(PROJ_ID_BLA);
  129. editProjectPageTab.setProjectUrl(INVALID_URL)
  130. .setProjectType(BUSINESS_KEY)
  131. .submit();
  132. assertThat("Project Type should not have been updated", editProjectPageTab.getProjectType(), equalTo(BUSINESS_PROJECT_NAME));
  133. }
  134. @Test
  135. public void testExpiredLicenceShowsSomething() {
  136. backdoor.license().replace(LicenseKeys.CORE_ROLE);
  137. EditProjectPageTab editProjectPageTab = navigateToEditProjectPageFor(PROJ_ID_BLA);
  138. assertThat("Project Type should not have been updated", editProjectPageTab.getProjectType(), equalTo(SOFTWARE_PROJECT_NAME));
  139. }
  140. @Test
  141. public void testProjectAdminWithNoAdminPermissionCannotChangeProjectTypeOrProjectCategory() {
  142. jira.logout();
  143. jira.quickLogin("project_admin", "project_admin");
  144. EditProjectPageTab editProjectPageTab = navigateToEditProjectPageFor(PROJ_ID_BLA);
  145. assertThat("Project Type should be not be editable", editProjectPageTab.isProjectTypeDisabled(), is(true));
  146. assertThat("Project category should be not be editable", editProjectPageTab.isProjectCategoryDisabled(), is(true));
  147. }
  148. @Test
  149. public void testChangeAdminToProjectAdminCannotChangeProjectCategory() {
  150. String[] projectCategories = {"None", "test project category"};
  151. try {
  152. backdoor.project().addProjectCategory(PROJECT_CATEGORY, "description here");
  153. backdoor.userProfile().changeUserLanguage("project_admin", FunctTestConstants.MOON_LOCALE);
  154. jira.logout();
  155. backdoor.usersAndGroups().addGroup(PROJECT_ADMIN_GROUP);
  156. backdoor.usersAndGroups().addUserToGroup("project_admin", PROJECT_ADMIN_GROUP);
  157. backdoor.permissions().addGlobalPermission(Permissions.ADMINISTER, PROJECT_ADMIN_GROUP);
  158. jira.quickLogin("project_admin", "project_admin");
  159. EditProjectPageTab editProjectPageTab = navigateToEditProjectPageFor(PROJ_ID_BLA);
  160. editProjectPageTab.setProjectCategory(PROJECT_CATEGORY);
  161. backdoor.permissions().removeGlobalPermission(Permissions.ADMINISTER, PROJECT_ADMIN_GROUP);
  162. editProjectPageTab.submit();
  163. assertThat("Error message should say that only global admins can modify project category",
  164. editProjectPageTab.getErrorMessage(),
  165. is("admin.projects.service.error.no.admin.permission.projectcategory"));
  166. } finally {
  167. backdoor.project().deleteProjectCategory(Long.toString(PROJECT_CATEGORY_ID));
  168. backdoor.userProfile().changeUserLanguage("project_admin", "");
  169. }
  170. }
  171. @Test
  172. @Restore("xml/projectconfig/TestProjectTypeInaccesible.xml")
  173. public void testUninstalledProjectTypeShowsCorrectly() {
  174. EditProjectPageTab editProjectPageTab = navigateToEditProjectPageFor(PROJ_ID_BLA);
  175. assertThat("Project Type should be un unknown one", editProjectPageTab.getProjectType(), equalTo(UNINSTALLED_TYPE_NAME));
  176. editProjectPageTab.setProjectType(BUSINESS_KEY).submit();
  177. assertThat("Should now be a business product", backdoor.project().getProject(INVALID_TYPE_PROJECT_KEY).projectTypeKey, equalTo(BUSINESS_KEY));
  178. }
  179. @Test
  180. @Restore("xml/projectconfig/TestProjectTypeInaccesible.xml")
  181. public void testCanUpdateProjectFieldsWithInvalidType() {
  182. EditProjectPageTab editProjectPageTab = navigateToEditProjectPageFor(PROJ_ID_BLA);
  183. assertThat("Project Type should be un unknown one", editProjectPageTab.getProjectType(), equalTo(UNINSTALLED_TYPE_NAME));
  184. editProjectPageTab.setDescription(NEW_DESCRIPTION).submit();
  185. Project project = backdoor.project().getProject(INVALID_TYPE_PROJECT_KEY);
  186. assertThat("Description should have been updated", project.description, equalTo(NEW_DESCRIPTION));
  187. assertThat("Project type should still be invalid", project.projectTypeKey, equalTo(UNINSTALLED_TYPE_KEY));
  188. }
  189. private EditProjectPageTab navigateToEditProjectPageFor(final String projectId) {
  190. return pageBinder.navigateToAndBind(EditProjectPageTab.class, projectId);
  191. }
  192. }