diff --git a/ccm-core/src/test/java/org/libreccm/categorization/CategoryManagerTest.java b/ccm-core/src/test/java/org/libreccm/categorization/CategoryManagerTest.java index c572db45b..9093cd5ed 100644 --- a/ccm-core/src/test/java/org/libreccm/categorization/CategoryManagerTest.java +++ b/ccm-core/src/test/java/org/libreccm/categorization/CategoryManagerTest.java @@ -47,6 +47,8 @@ import org.libreccm.security.Shiro; import org.libreccm.tests.categories.IntegrationTest; import java.io.File; +import java.util.List; +import java.util.Map; import java.util.Optional; import javax.inject.Inject; @@ -86,6 +88,9 @@ public class CategoryManagerTest { @Inject private Subject subject; + @Inject + private TestCategoryController controller; + @PersistenceContext(name = "LibreCCM") private EntityManager entityManager; @@ -582,7 +587,7 @@ public class CategoryManagerTest { categoryManager.addSubCategoryToCategory(test, categories); }); } - + @Test @UsingDataSet( "datasets/org/libreccm/categorization/CategoryManagerTest/data.yml") @@ -590,11 +595,11 @@ public class CategoryManagerTest { public void hasIndexObject() { final Category category1 = categoryRepo.findById(-2100L); final Category category2 = categoryRepo.findById(-2200L); - + assertThat(categoryManager.hasIndexObject(category1), is(false)); assertThat(categoryManager.hasIndexObject(category2), is(true)); } - + @Test @UsingDataSet( "datasets/org/libreccm/categorization/CategoryManagerTest/data.yml") @@ -602,14 +607,39 @@ public class CategoryManagerTest { public void getIndexObject() { final Category category1 = categoryRepo.findById(-2100L); final Category category2 = categoryRepo.findById(-2200L); - - assertThat(categoryManager.getIndexObject(category1).isPresent(), + + assertThat(categoryManager.getIndexObject(category1).isPresent(), is(false)); - + final Optional index2 = categoryManager.getIndexObject( category2); assertThat(index2.isPresent(), is(true)); assertThat(index2.get().getDisplayName(), is(equalTo("object3"))); } + /** + * This is a test to check if accessing multiple lazy fetched collections in + * a single transaction (provided by + * {@link TestCategoryController#getData(long)}) works. + */ + @Test + @UsingDataSet( + "datasets/org/libreccm/categorization/CategoryManagerTest/data.yml") + @InSequence(7000) + public void retrieveMultipleLazyCollections() { + assertThat(controller, is(not(nullValue()))); + + final Map> data = controller.getData(-2100L); + + final List subCategories = data.get("subCategories"); + final List objects = data.get("objects"); + + assertThat(subCategories.size(), is(1)); + assertThat(subCategories.get(0), is(equalTo("bar"))); + assertThat(subCategories, hasItem("bar")); + + assertThat(objects.size(), is(1)); + assertThat(objects, hasItem("object1")); + } + } diff --git a/ccm-core/src/test/java/org/libreccm/categorization/TestCategoryController.java b/ccm-core/src/test/java/org/libreccm/categorization/TestCategoryController.java new file mode 100644 index 000000000..105cc5bec --- /dev/null +++ b/ccm-core/src/test/java/org/libreccm/categorization/TestCategoryController.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2016 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.categorization; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +public class TestCategoryController { + + @Inject + private CategoryRepository categoryRepo; + + @Transactional(Transactional.TxType.REQUIRED) + public Map> getData(final long categoryId) { + + final Category category = categoryRepo.findById(categoryId); + if (category == null) { + throw new IllegalArgumentException(String.format( + "No category for id %d.", categoryId)); + } + + final Map> result = new HashMap<>(); + final List subCategories = new ArrayList<>(); + final List objects = new ArrayList<>(); + result.put("subCategories", subCategories); + result.put("objects", objects); + + category.getSubCategories().forEach( + subCategory -> subCategories.add(subCategory.getDisplayName())); + + category.getObjects().forEach( + object -> objects + .add(object.getCategorizedObject().getDisplayName())); + + return result; + } + +}