diff --git a/functional-test/src/main/java/org/zanata/page/projects/projectsettings/ProjectGeneralTab.java b/functional-test/src/main/java/org/zanata/page/projects/projectsettings/ProjectGeneralTab.java index 4010f41ebd..57a95d6f03 100644 --- a/functional-test/src/main/java/org/zanata/page/projects/projectsettings/ProjectGeneralTab.java +++ b/functional-test/src/main/java/org/zanata/page/projects/projectsettings/ProjectGeneralTab.java @@ -63,6 +63,20 @@ public String getProjectId() { return readyElement(projectIdField).getAttribute("value"); } + /** + * Enter a new slug for the project. Removes any existing text. + * + * @param projectSlug new project slug + * @return new Project General Settings page + */ + public ProjectGeneralTab enterProjectSlug(String projectSlug) { + log.info("Enter project slug {}", projectSlug); + waitForWebElement(projectIdField).clear(); + waitForWebElement(projectIdField).sendKeys(projectSlug); + defocus(projectIdField); + return new ProjectGeneralTab(getDriver()); + } + /** * Enter a new name for the project. Removes any existing text. * diff --git a/functional-test/src/test/java/org/zanata/feature/project/EditProjectGeneralTest.java b/functional-test/src/test/java/org/zanata/feature/project/EditProjectGeneralTest.java index e14b7ca262..c5fc351bfe 100644 --- a/functional-test/src/test/java/org/zanata/feature/project/EditProjectGeneralTest.java +++ b/functional-test/src/test/java/org/zanata/feature/project/EditProjectGeneralTest.java @@ -210,4 +210,24 @@ public void changeSourceLinks() throws Exception { .isEqualTo("http://git.example.com") .as("The git url is correct"); } + + @Test + public void changeProjectSlug() { + ProjectGeneralTab projectGeneralTab = new ProjectWorkFlow() + .goToProjectByName("about fedora") + .gotoSettingsTab() + .gotoSettingsGeneral() + .enterProjectSlug("fedora-reborn") + .updateProject(); + + projectGeneralTab.reload(); + // above will make sure url has been updated to use new slug + projectGeneralTab = projectGeneralTab + .gotoSettingsTab() + .gotoSettingsGeneral(); + + assertThat(projectGeneralTab.getProjectId()) + .isEqualTo("fedora-reborn") + .as("The project slug is correct"); + } } diff --git a/zanata-war/src/main/java/org/zanata/service/impl/SlugEntityUpdatedListener.java b/zanata-war/src/main/java/org/zanata/service/impl/SlugEntityUpdatedListener.java index cead146a1b..9bd43a4ca1 100644 --- a/zanata-war/src/main/java/org/zanata/service/impl/SlugEntityUpdatedListener.java +++ b/zanata-war/src/main/java/org/zanata/service/impl/SlugEntityUpdatedListener.java @@ -18,6 +18,8 @@ import org.zanata.model.SlugEntityBase; import org.zanata.service.IndexingService; import org.zanata.util.Event; +import org.zanata.util.ServiceLocator; +import com.google.common.collect.Lists; /** * This class is a hibernate event listener which listens on post commit events @@ -33,23 +35,9 @@ * @author Patrick Huang pahuang@redhat.com */ -@Name("slugEntityUpdatedListener") -@Scope(ScopeType.APPLICATION) -@AutoCreate @Slf4j public class SlugEntityUpdatedListener implements PostUpdateEventListener { private static final long serialVersionUID = -1L; - @In - private AsyncTaskHandleManager asyncTaskHandleManager; - - @In - private IndexingService indexingServiceImpl; - - @In("event") - private Event projectUpdateEvent; - - @In("event") - private Event projectIterationUpdateEvent; private static Integer slugFieldIndexInProject; private static Integer slugFieldIndexInIteration; @@ -70,7 +58,7 @@ public void onPostUpdate(PostUpdateEvent event) { slugFieldIndexInProject = getSlugFieldIndex(slugFieldIndexInProject, event); String oldSlug = event.getOldState()[slugFieldIndexInProject].toString(); String newSlug = event.getState()[slugFieldIndexInProject].toString(); - projectUpdateEvent.fire(new ProjectUpdate(project, oldSlug)); + getProjectUpdateEvent().fire(new ProjectUpdate(project, oldSlug)); reindexIfProjectSlugHasChanged(oldSlug, newSlug, project); } else if (slugEntityBase instanceof HProjectIteration) { @@ -78,7 +66,7 @@ public void onPostUpdate(PostUpdateEvent event) { (HProjectIteration) slugEntityBase; slugFieldIndexInIteration = getSlugFieldIndex(slugFieldIndexInIteration, event); String oldSlug = event.getOldState()[slugFieldIndexInIteration].toString(); - projectIterationUpdateEvent.fire(new ProjectIterationUpdate( + getProjectIterationUpdateEvent().fire(new ProjectIterationUpdate( iteration, oldSlug)); } } @@ -89,9 +77,9 @@ public void reindexIfProjectSlugHasChanged(String oldSlug, String newSlug, log.debug("HProject [{}] changed slug. old slug: {}, new slug: {}", project, oldSlug, newSlug); AsyncTaskHandle handle = new AsyncTaskHandle<>(); - asyncTaskHandleManager.registerTaskHandle(handle); + getAsyncTaskHandleManager().registerTaskHandle(handle); try { - indexingServiceImpl.reindexHTextFlowTargetsForProject( + getIndexingServiceImpl().reindexHTextFlowTargetsForProject( project, handle); } catch (Exception e) { log.error("exception happen in async framework", e); @@ -124,6 +112,25 @@ private static Integer getSlugFieldIndex(Integer slugFieldIndex, PostUpdateEvent return i; } } - throw new IllegalStateException("can not find slug index in entity properties"); + log.error("can not find slug index in entity [{}] properties [{}]", + event.getEntity(), Lists.newArrayList(propertyNames)); + throw new IllegalStateException( + "can not find slug index in entity properties"); + } + + public AsyncTaskHandleManager getAsyncTaskHandleManager() { + return ServiceLocator.instance().getInstance(AsyncTaskHandleManager.class); + } + + public IndexingService getIndexingServiceImpl() { + return ServiceLocator.instance().getInstance(IndexingService.class); + } + + public Event getProjectUpdateEvent() { + return ServiceLocator.instance().getInstance("event", Event.class); + } + + public Event getProjectIterationUpdateEvent() { + return ServiceLocator.instance().getInstance("event", Event.class); } } diff --git a/zanata-war/src/main/java/org/zanata/webtrans/server/HibernateIntegrator.java b/zanata-war/src/main/java/org/zanata/webtrans/server/HibernateIntegrator.java index a97565676a..7f29b8baa5 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/server/HibernateIntegrator.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/server/HibernateIntegrator.java @@ -39,7 +39,7 @@ public void integrate(Configuration configuration, eventListenerRegistry.appendListeners(EventType.POST_INSERT, updateListener); eventListenerRegistry.appendListeners(EventType.POST_COMMIT_UPDATE, - ServiceLocator.instance().getInstance(SlugEntityUpdatedListener.class)); + new SlugEntityUpdatedListener()); } }