Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Add unit test for group service
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Eng committed Nov 15, 2013
1 parent b6a9cbe commit 5cd17b0
Show file tree
Hide file tree
Showing 13 changed files with 456 additions and 49 deletions.
Expand Up @@ -43,7 +43,6 @@
import org.zanata.model.HLocale;
import org.zanata.model.HPerson;
import org.zanata.model.HProjectIteration;
import org.zanata.service.LocaleService;
import org.zanata.service.VersionGroupService;
import org.zanata.service.VersionLocaleKey;
import org.zanata.ui.model.statistic.WordStatistic;
Expand All @@ -62,9 +61,6 @@
public class VersionGroupHomeAction implements Serializable {
private static final long serialVersionUID = 1L;

@In
private LocaleService localeServiceImpl;

@In
private VersionGroupService versionGroupServiceImpl;

Expand Down Expand Up @@ -247,7 +243,7 @@ public void sortProjectList() {
public List<HLocale> getActiveLocales() {
if (activeLocales == null) {
Set<HLocale> groupActiveLocales =
localeServiceImpl.getGroupActiveLocales(getSlug());
versionGroupServiceImpl.getGroupActiveLocales(getSlug());
activeLocales = Lists.newArrayList(groupActiveLocales);
}
Collections.sort(activeLocales, languageComparator);
Expand Down Expand Up @@ -342,7 +338,7 @@ public WordStatistic getSelectedVersionStatistic(LocaleId localeId) {
}

public List<HPerson> getMaintainers() {
return versionGroupDAO.getMaintainerBySlug(getSlug());
return versionGroupDAO.getMaintainersBySlug(getSlug());
}

private Map<LocaleId, List<HProjectIteration>> getMissingLocaleVersionMap() {
Expand All @@ -356,7 +352,7 @@ private Map<LocaleId, List<HProjectIteration>> getMissingLocaleVersionMap() {

/**
* Search for locale that is not activated in given version
*
*
* @param version
* @return
*/
Expand All @@ -382,7 +378,7 @@ public String getMissingLocaleTitle(HProjectIteration version) {

/**
* Search for version that doesn't activate given locale
*
*
* @param localeId
* @return
*/
Expand Down
Expand Up @@ -129,7 +129,7 @@ public String send() {
if (isAnyVersionSelected) {
List<HPerson> maintainers = new ArrayList<HPerson>();
for (HPerson maintainer : versionGroupServiceImpl
.getMaintainerBySlug(slug)) {
.getMaintainersBySlug(slug)) {
maintainers.add(maintainer);
}
return sendEmail.sendToVersionGroupMaintainer(maintainers);
Expand Down
6 changes: 3 additions & 3 deletions zanata-war/src/main/java/org/zanata/dao/VersionGroupDAO.java
Expand Up @@ -81,13 +81,13 @@ public HIterationGroup getBySlug(@Nonnull String slug) {
return null;
}

public List<HPerson> getMaintainerBySlug(String slug) {
public List<HPerson> getMaintainersBySlug(String slug) {
Query q =
getSession()
.createQuery(
"select g.maintainers from HIterationGroup as g where g.slug = :slug");
q.setParameter("slug", slug);
q.setComment("VersionGroupDAO.getMaintainerBySlug");
q.setComment("VersionGroupDAO.getMaintainersBySlug");
@SuppressWarnings("unchecked")
List<HPerson> results = q.list();
return results;
Expand All @@ -112,7 +112,7 @@ public List<HIterationGroup> searchGroupBySlugAndName(String searchTerm) {
Query query =
getSession()
.createQuery(
"from HIterationGroup g where lower(g.slug) LIKE :searchTerm OR lower(g.name) LIKE :searchTerm AND g.status = :status");
"from HIterationGroup g where (lower(g.slug) LIKE :searchTerm OR lower(g.name) LIKE :searchTerm) AND g.status = :status");
query.setParameter("searchTerm", "%" + searchTerm.toLowerCase() + "%");
query.setParameter("status", EntityStatus.ACTIVE);
query.setComment("VersionGroupDAO.searchGroupBySlugAndName");
Expand Down
Expand Up @@ -92,6 +92,4 @@ Map<String, String> getIterationCustomizedLocalesItems(String projectSlug,

HTextFlowTarget getLastTranslated(String projectSlug, String iterationSlug,
LocaleId localeId);

Set<HLocale> getGroupActiveLocales(String slug);
}
Expand Up @@ -22,13 +22,15 @@

import java.util.List;
import java.util.Map;
import java.util.Set;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

import org.zanata.common.LocaleId;
import org.zanata.model.HIterationGroup;
import org.zanata.model.HLocale;
import org.zanata.model.HPerson;
import org.zanata.model.HProjectIteration;
import org.zanata.ui.model.statistic.WordStatistic;
Expand All @@ -40,7 +42,7 @@ public interface VersionGroupService {

/**
* Return all active groups + maintained groups of the person
*
*
* @param person
* @return
*/
Expand All @@ -50,37 +52,37 @@ public interface VersionGroupService {

/**
* Search project version by fuzzy matching of version slug or project slug
*
*
* @param searchTerm
*/
List<HProjectIteration> searchLikeSlugOrProjectSlug(String searchTerm);

/**
* Search group by fuzzy matching of slug or name
*
*
* @param searchTerm
*/
List<HIterationGroup> searchGroupBySlugAndName(String searchTerm);

/**
* Return maintainers of the group
*
*
* @param slug
* @return
*/
List<HPerson> getMaintainerBySlug(String slug);
List<HPerson> getMaintainersBySlug(String slug);

/**
* Return if a version had joined a group
*
*
* @param groupSlug
* @param versionId
*/
boolean isVersionInGroup(String groupSlug, Long versionId);

/**
* Return map of statistics for all version and active locales in group
*
*
* @param groupSlug
* @param localeId
*/
Expand All @@ -89,20 +91,27 @@ Map<VersionLocaleKey, WordStatistic> getLocaleStatistic(String groupSlug,

/**
* Return total message count of the versions in group
*
*
* @param groupSlug
*/
int getTotalMessageCount(String groupSlug);

/**
* Return versions that doesn't contained all active locales of the group.
*
*
* @param groupSlug
* @return
*/
Map<LocaleId, List<HProjectIteration>> getMissingLocaleVersionMap(
String groupSlug);

/**
* Return group's activate locales
*
* @param groupSlug
*/
Set<HLocale> getGroupActiveLocales(String groupSlug);

@AllArgsConstructor
public final class SelectableHProject {

Expand Down
Expand Up @@ -43,19 +43,17 @@
import org.zanata.dao.TextFlowTargetDAO;
import org.zanata.dao.VersionGroupDAO;
import org.zanata.exception.ZanataServiceException;
import org.zanata.model.HIterationGroup;
import org.zanata.model.HLocale;
import org.zanata.model.HProject;
import org.zanata.model.HProjectIteration;
import org.zanata.model.HTextFlowTarget;
import org.zanata.service.LocaleService;

import com.google.common.collect.Sets;
import com.ibm.icu.util.ULocale;

/**
* This implementation provides all the business logic related to Locale.
*
*
*/
@Name("localeServiceImpl")
@Scope(ScopeType.STATELESS)
Expand Down Expand Up @@ -368,13 +366,4 @@ public HTextFlowTarget getLastTranslated(String projectSlug,
return textFlowTargetDAO.getLastTranslated(projectSlug, iterationSlug,
localeId);
}

@Override
public Set<HLocale> getGroupActiveLocales(String slug) {
HIterationGroup group = versionGroupDAO.getBySlug(slug);
if (group != null) {
return group.getActiveLocales();
}
return Sets.newHashSet();
}
}
Expand Up @@ -131,8 +131,8 @@ public List<HIterationGroup> searchGroupBySlugAndName(String searchTerm) {
}

@Override
public List<HPerson> getMaintainerBySlug(String groupSlug) {
return versionGroupDAO.getMaintainerBySlug(groupSlug);
public List<HPerson> getMaintainersBySlug(String groupSlug) {
return versionGroupDAO.getMaintainersBySlug(groupSlug);
}

@Override
Expand All @@ -148,9 +148,18 @@ public boolean isVersionInGroup(String groupSlug, Long versionId) {
return false;
}

@Override
public Set<HLocale> getGroupActiveLocales(String groupSlug) {
HIterationGroup group = versionGroupDAO.getBySlug(groupSlug);
if (group != null) {
return group.getActiveLocales();
}
return Sets.newHashSet();
}

/**
* Return versions that doesn't contained all active locales of the group.
*
*
* @param groupSlug
* @return
*/
Expand All @@ -164,11 +173,7 @@ public Map<LocaleId, List<HProjectIteration>> getMissingLocaleVersionMap(
for (HLocale activeLocale : group.getActiveLocales()) {
List<HProjectIteration> versionList = Lists.newArrayList();
for (HProjectIteration version : group.getProjectIterations()) {
Set<HLocale> customisedLocales =
getVersionCustomisedLocales(version);

if (!customisedLocales.isEmpty()
&& !customisedLocales.contains(activeLocale)) {
if (!isLocaleActivateInVersion(version, activeLocale)) {
versionList.add(version);
}
}
Expand All @@ -179,14 +184,17 @@ public Map<LocaleId, List<HProjectIteration>> getMissingLocaleVersionMap(
}

/**
* Return version's customised locales.
*
* Return if the locale is activate in the version. Return true if version
* and project doesn't overrides locale.
*
* Fallback to project customised locale if version doesn't overrides
* locales
*
*
* @param version
* @param locale
*/
private Set<HLocale> getVersionCustomisedLocales(HProjectIteration version) {
private boolean isLocaleActivateInVersion(HProjectIteration version,
HLocale locale) {
Set<HLocale> customisedLocales = Sets.newHashSet();

if (version.isOverrideLocales()) {
Expand All @@ -195,6 +203,10 @@ private Set<HLocale> getVersionCustomisedLocales(HProjectIteration version) {
customisedLocales = version.getProject().getCustomizedLocales();
}

return customisedLocales;
if (version.isOverrideLocales()
|| version.getProject().isOverrideLocales()) {
return customisedLocales.contains(locale);
}
return true; // no overrides of locales from version or it's project
}
}
Expand Up @@ -58,11 +58,17 @@ public class VersionStateCacheImpl implements VersionStateCache {
private CacheWrapper<VersionLocaleKey, WordStatistic> versionStatisticCache;
private CacheLoader<VersionLocaleKey, WordStatistic> versionStatisticLoader;

// constructor for Seam
public VersionStateCacheImpl() {
// constructor for Seam
this.versionStatisticLoader = new VersionStatisticLoader();
}

// Constructor for testing
public VersionStateCacheImpl(
CacheLoader<VersionLocaleKey, WordStatistic> versionStatisticLoader) {
this.versionStatisticLoader = versionStatisticLoader;
}

@Create
public void create() {
cacheManager = CacheManager.create();
Expand Down

0 comments on commit 5cd17b0

Please sign in to comment.