@Test
 public void searchRestrictionTest() {
   final UserGroupModel group = new UserGroupModel();
   group.setUid("customergroup");
   modelService.save(group);
   // create test user
   final UserModel user = new UserModel();
   user.setUid(TEST_USER);
   // assign user to customergroup
   user.setGroups(Collections.singleton((PrincipalGroupModel) group));
   modelService.save(user);
   // create test catalog
   final CatalogModel catalog = new CatalogModel();
   catalog.setId(TEST_CATALOG);
   modelService.save(catalog);
   // create test catalog version
   final CatalogVersionModel catalogVersion = new CatalogVersionModel();
   catalogVersion.setCatalog(catalog);
   catalogVersion.setVersion(TEST_VERSION);
   modelService.save(catalogVersion);
   // create test product
   final ProductModel product = new ProductModel();
   product.setCode(TEST_PRODUCT);
   product.setCatalogVersion(catalogVersion);
   modelService.save(product);
   // set current user
   userService.setCurrentUser(user);
   // create search restriction
   commonI18NService.setCurrentLanguage(commonI18NService.getLanguage(LANG_EN));
   final Map<String, String[]> params = new HashMap<String, String[]>();
   params.put("customerreview.searchrestrictions.create", new String[] {"true"});
   final SystemSetupContext ctx =
       new SystemSetupContext(params, Type.ESSENTIAL, Process.ALL, "customerreview");
   customerReviewSystemSetup.createSearchRestrictions(ctx);
   // enable search restrictions
   searchRestrictionService.enableSearchRestrictions();
   // make sure that number of customer reviews is 0
   assertEquals(
       INVALID_NUMBER_OF_CUSTOMER_REVIEWS,
       Integer.valueOf(0),
       customerReviewService.getNumberOfReviews(product));
   // create restricted customer review
   createCustomerReview(null, user, product, CustomerReviewApprovalType.PENDING);
   // create valid customer review
   createCustomerReview("headline", user, product, CustomerReviewApprovalType.APPROVED);
   // make sure that number of customer reviews is 1
   assertEquals(
       INVALID_NUMBER_OF_CUSTOMER_REVIEWS,
       Integer.valueOf(1),
       customerReviewService.getNumberOfReviews(product));
   // disable search restrictions
   searchRestrictionService.disableSearchRestrictions();
   // make sure that number of customer reviews is 2
   assertEquals(
       INVALID_NUMBER_OF_CUSTOMER_REVIEWS,
       Integer.valueOf(2),
       customerReviewService.getNumberOfReviews(product));
 }
  /** @return */
  private CatalogVersionModel prepareCatalogVersion(final String version, final String catalogId) {
    final CatalogModel cat = new CatalogModel();
    cat.setId(catalogId);
    final CatalogVersionModel templateCatalogVersion = new CatalogVersionModel();
    templateCatalogVersion.setVersion(version);
    templateCatalogVersion.setCatalog(cat);

    return templateCatalogVersion;
  }
  @Override
  public Collection<CatalogVersionModel> findCatalogVersions(
      final String catalogId, final String version) {
    if (catalogId.equals(CATALOG_ID) && version.equals(CATALOGVERSION_ONE)) {
      final List<CatalogVersionModel> catalogVersions = new ArrayList<CatalogVersionModel>();

      final CatalogModel catalog = new CatalogModel();
      catalog.setId(CATALOG_ID);
      final CatalogVersionModel catalogVersion = new CatalogVersionModel();
      catalogVersion.setCatalog(catalog);
      catalogVersion.setVersion(CATALOGVERSION_ONE);
      catalogVersions.add(catalogVersion);

      return catalogVersions;
    } else if (catalogId.equals(CATALOG_ID) && version.equals(CATALOGVERSION_TWO)) {
      final List<CatalogVersionModel> catalogVersions = new ArrayList<CatalogVersionModel>();

      final CatalogModel catalog = new CatalogModel();
      catalog.setId(CATALOG_ID);
      final CatalogVersionModel catalogVersion1 = new CatalogVersionModel();
      catalogVersion1.setCatalog(catalog);
      catalogVersion1.setVersion(CATALOGVERSION_TWO);

      final CatalogVersionModel catalogVersion2 = new CatalogVersionModel();
      catalogVersion2.setCatalog(catalog);
      catalogVersion2.setVersion(CATALOGVERSION_TWO);

      catalogVersions.add(catalogVersion1);
      catalogVersions.add(catalogVersion2);
      return catalogVersions;
    }
    return Collections.EMPTY_LIST;
  }
  private CatalogVersionModel setUpCatalog(final String catId) {
    final CatalogModel catalog = modelService.create(CatalogModel.class);
    catalog.setId(catId);

    final CatalogVersionModel cv = modelService.create(CatalogVersionModel.class);
    cv.setVersion(catId + "Version");
    cv.setCatalog(catalog);

    modelService.saveAll(catalog, cv);

    return cv;
  }
  private void destroyMedia(final MediaModel media) {
    try {
      final CatalogVersionModel catalogVersion = media.getCatalogVersion();
      final CatalogModel catalog = catalogVersion.getCatalog();

      modelService.remove(media);
      modelService.remove(catalogVersion);
      modelService.remove(catalog);
    } catch (final Exception e) {
      // ignore for now
    }
  }