/domain/domain-ts/src/test/java/com/thoriumsoft/domain/model/ModelTestsSupport.java
https://bitbucket.org/leemur/logistica · Java · 354 lines · 199 code · 91 blank · 64 comment · 0 complexity · 9f34a7634567ff9c122fbc676a22a779 MD5 · raw file
- package com.thoriumsoft.domain.model;
- import com.google.common.collect.ImmutableMap;
- import com.google.common.collect.Sets;
- import com.thoriumsoft.domain.DomainTestsSupport;
- import com.thoriumsoft.domain.model.annotations.Model;
- import com.thoriumsoft.domain.services.*;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.testng.annotations.Test;
- import java.util.Map;
- import java.util.Set;
- import java.util.concurrent.atomic.AtomicInteger;
- import static com.thoriumsoft.test.TsTestGroups.COMMIT;
- import static org.testng.Assert.assertEquals;
- import static org.testng.AssertJUnit.fail;
- /**
- * @author Andrey Naumenko
- * @version $Revision: 5276 $ $Date: 2011-04-19 15:25:02 +0300 (Tue, 19 Apr 2011) $
- */
- @Test(groups = COMMIT)
- public class ModelTestsSupport extends DomainTestsSupport {
- private final AtomicInteger counter = new AtomicInteger();
- @Autowired
- private RegionService regionService;
- @Autowired
- @Model(Language.class)
- private TsEntityService<Language> languagesService;
- @Autowired
- @Model(Country.class)
- private TsEntityService<Country> countriesService;
- @Autowired
- @Model(CurrencyInfo.class)
- private TsEntityService<CurrencyInfo> currencyService;
- protected Region newStoredRegion() {
- return regionService.getRegion();
- }
- private final AtomicInteger lCounter = new AtomicInteger();
- protected Language newStoredLanguage() {
- final Language lang = new Language("L" + lCounter.getAndIncrement());
- lang.setName("new language" + counter.getAndIncrement());
- languagesService.save(lang);
- return reload(lang);
- }
- private final AtomicInteger cCounter = new AtomicInteger();
- protected Country newStoredCountry() {
- final Country country = new Country("C" + cCounter.getAndIncrement());
- country.setName("new country" + counter.getAndIncrement());
- countriesService.save(country);
- return reload(country);
- }
- /**
- * @author Andrey Naumenko
- * @version $Revision: 5276 $ $Date: 2011-04-19 15:25:02 +0300 (Tue, 19 Apr 2011) $
- */
- protected abstract class SimpleUnidirectionalSetTestsHelper<P extends TsObject, C extends TsObject> {
- public void testSet() {
- //initialize Entities
- final P p = newParent();
- try {
- getChildren(p).clear();
- fail("Collection must be unmodifiable");
- } catch (Exception e) {
- //collection is unmodifiable.
- }
- final C c_1 = newChild();
- final C c_2 = newChild();
- doSet(p, Sets.newHashSet(c_1, c_2));
- //check in-memory model
- assertEquals(getChildren(p).size(), 2);
- //read persisted state into different objects
- final P reloaded = reload(p);
- //now validate that 'set' operation persists association
- assertEquals(getChildren(reloaded).size(), 2);
- //change association elements
- doSet(reloaded, Sets.newHashSet(c_1));
- //check in-memory model
- assertEquals(getChildren(reloaded).size(), 1);
- //now validate that 'setPixels' remove pixels from database
- assertEquals(getChildren(reload(reloaded)).size(), 1);
- }
- protected abstract P newParent();
- protected abstract C newChild();
- protected abstract Set<? extends C> getChildren(final P p);
- protected abstract void doSet(final P p, final Set<? extends C> cs);
- }
- /**
- * @author Andrey Naumenko
- * @version $Revision: 5276 $ $Date: 2011-04-19 15:25:02 +0300 (Tue, 19 Apr 2011) $
- */
- protected abstract class SimpleManyToManyTestsHelper<P extends TsObject, C extends TsObject> {
- public void testSet() {
- //initialize Entities
- final P p = newParent();
- try {
- getChildren(p).clear();
- fail("Collection must be unmodifiable");
- } catch (Exception e) {
- //collection is unmodifiable.
- }
- final C c_1 = newChild();
- try {
- getParent(c_1).clear();
- fail("Collection must be unmodifiable");
- } catch (Exception e) {
- //collection is unmodifiable.
- }
- final C c_2 = newChild();
- try {
- getParent(c_2).clear();
- fail("Collection must be unmodifiable");
- } catch (Exception e) {
- //collection is unmodifiable.
- }
- doSet(p, Sets.newHashSet(c_1, c_2));
- //check in-memory model
- assertEquals(getChildren(p).size(), 2);
- assertEquals(getParent(c_1).size(), 1);
- assertEquals(getParent(c_2).size(), 1);
- //read persisted state into different objects
- final P reloaded = reload(p);
- //now validate that 'set' operation persists association
- assertEquals(getChildren(reloaded).size(), 2);
- //change association elements
- doSet(reloaded, Sets.newHashSet(c_1));
- //check in-memory model
- assertEquals(getChildren(reloaded).size(), 1);
- assertEquals(getParent(c_1).size(), 1);
- assertEquals(getParent(c_2).size(), 0);
- //now validate that 'setPixels' remove pixels from database
- assertEquals(getChildren(reload(reloaded)).size(), 1);
- assertEquals(getParent(reload(c_1)).size(), 1);
- assertEquals(getParent(reload(c_2)).size(), 0);
- }
- protected abstract P newParent();
- protected abstract C newChild();
- protected abstract Set<? extends P> getParent(final C c);
- protected abstract Set<? extends C> getChildren(final P p);
- protected abstract void doSet(final P p, final Set<? extends C> cs);
- }
- /**
- * @author Andrey Naumenko
- * @version $Revision: 5276 $ $Date: 2011-04-19 15:25:02 +0300 (Tue, 19 Apr 2011) $
- */
- protected abstract class ManyToManyTestsHelper<P extends TsObject, C extends TsObject> extends SimpleManyToManyTestsHelper<P, C> {
- public void testRemove() {
- //initialize Entities
- final P p = newParent();
- final C c_1 = newChild();
- final C c_2 = newChild();
- doSet(p, Sets.newHashSet(c_1, c_2));
- //check in-memory model
- assertEquals(getChildren(p).size(), 2);
- assertEquals(getParent(c_1).size(), 1);
- assertEquals(getParent(c_2).size(), 1);
- //read persisted state into different objects
- final P reloaded = reload(p);
- //now validate that 'set' operation persists association
- assertEquals(getChildren(reloaded).size(), 2);
- //change association elements
- doRemove(reloaded, c_2);
- //check in-memory model
- assertEquals(getChildren(reloaded).size(), 1);
- assertEquals(getParent(c_1).size(), 1);
- assertEquals(getParent(c_2).size(), 0);
- //now validate that 'setPixels' remove pixels from database
- assertEquals(getChildren(reload(reloaded)).size(), 1);
- assertEquals(getParent(reload(c_1)).size(), 1);
- assertEquals(getParent(reload(c_2)).size(), 0);
- }
- public void testAdd() {
- //initialize Entities
- final P p = newParent();
- final C c_1 = newChild();
- doSet(p, Sets.newHashSet(c_1));
- //check in-memory model
- assertEquals(getChildren(p).size(), 1);
- assertEquals(getParent(c_1).size(), 1);
- //read persisted state into different objects
- final P reloaded = reload(p);
- //now validate that 'set' operation persists association
- assertEquals(getChildren(reloaded).size(), 1);
- final C c_2 = newChild();
- //change association elements
- doAdd(reloaded, c_2);
- //check in-memory model
- assertEquals(getChildren(reloaded).size(), 2);
- assertEquals(getParent(c_1).size(), 1);
- assertEquals(getParent(c_2).size(), 1);
- //now validate that 'setPixels' remove pixels from database
- assertEquals(getChildren(reload(reloaded)).size(), 2);
- assertEquals(getParent(reload(c_1)).size(), 1);
- assertEquals(getParent(reload(c_2)).size(), 1);
- }
- protected abstract void doRemove(final P p, final C c);
- protected abstract void doAdd(final P p, final C c);
- }
- /**
- * @author Andrey Naumenko
- * @version $Revision: 5276 $ $Date: 2011-04-19 15:25:02 +0300 (Tue, 19 Apr 2011) $
- */
- protected abstract class MapsTestsHelper<P extends TsObject, K, V> {
- public void testSet() {
- //initialize Entities
- final P p = newParent();
- try {
- getMap(p).clear();
- fail("Map must be unmodifiable");
- } catch (Exception e) {
- //collection is unmodifiable.
- }
- final K k_1 = newKey();
- final V v_1 = cast(newValue());
- final K k_2 = newKey();
- final V v_2 = cast(newValue());
- doSet(p, ImmutableMap.<K, V>builder().
- put(k_1, v_1).
- put(k_2, v_2).
- build()
- );
- //check in-memory model
- final Map<K, V> map = getMap(p);
- assertEquals(map.size(), 2);
- assertEquals(cast(map.get(k_1)), v_1);
- assertEquals(cast(map.get(k_2)), v_2);
- //read persisted state
- final P stored = reload(p);
- final Map<K, V> storedMap = getMap(stored);
- //now validate that 'set' operation persists association
- assertEquals(storedMap.size(), 2);
- assertEquals(cast(storedMap.get(k_1)), v_1);
- assertEquals(cast(storedMap.get(k_2)), v_2);
- final K k_3 = newKey();
- final V v_3 = cast(newValue());
- final V v_1_1 = cast(newValue());
- //change association elements
- doSet(stored, ImmutableMap.<K, V>builder().
- put(k_1, v_1_1).
- put(k_3, v_3).
- build()
- );
- //check in-memory model
- assertEquals(storedMap.size(), 2);
- assertEquals(cast(storedMap.get(k_1)), v_1_1);
- assertEquals(cast(storedMap.get(k_2)), null);
- assertEquals(cast(storedMap.get(k_3)), v_3);
- //now validate that 'set' remove association from database
- final Map<K, V> reloadedMap = getMap(reload(p));
- assertEquals(reloadedMap.size(), 2);
- assertEquals(cast(reloadedMap.get(k_1)), v_1_1);
- assertEquals(cast(reloadedMap.get(k_2)), null);
- assertEquals(cast(reloadedMap.get(k_3)), v_3);
- }
- protected abstract P newParent();
- protected abstract K newKey();
- protected abstract V newValue();
- protected abstract V cast(final V v);
- protected abstract Map<K, V> getMap(P p);
- protected abstract void doSet(final P p, final Map<K, V> cs);
- // protected abstract void doRemove(final P p, final C c);
- //
- // protected abstract void doAdd(final P p, final C c);
- //
- }
- }