
org.iternine.jeppetto.dao.test.updateobject.UpdateObjectDAOTest Maven / Gradle / Ivy
The newest version!
/*
* Copyright (c) 2011-2017 Jeppetto and Jonathan Thompson
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.iternine.jeppetto.dao.test.updateobject;
import org.iternine.jeppetto.dao.ResultFromUpdate;
import org.iternine.jeppetto.dao.test.RelatedObject;
import org.iternine.jeppetto.dao.test.SimpleEnum;
import org.iternine.jeppetto.dao.test.SimpleObject;
import org.junit.After;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public abstract class UpdateObjectDAOTest {
//-------------------------------------------------------------
// Methods - Abstract
//-------------------------------------------------------------
protected abstract UpdateObjectDAO getSimpleObjectReferencesDAO();
protected abstract void reset();
//-------------------------------------------------------------
// Methods - Test Lifecycle
//-------------------------------------------------------------
@After
public void after() {
reset();
}
//-------------------------------------------------------------
// Methods - Test Cases
//-------------------------------------------------------------
@Test
public void updateSimpleFields() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(123);
simpleObject.setLongValue(1l);
simpleObject.setSimpleEnum(SimpleEnum.EnumValue);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
updateObject.setLongValue(Long.MAX_VALUE);
updateObject.setAnotherIntValue(999);
updateObject.setSimpleEnum(null);
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertEquals(123, resultSimpleObject.getIntValue());
assertEquals(Long.MAX_VALUE, resultSimpleObject.getLongValue());
assertEquals(999, resultSimpleObject.getAnotherIntValue());
assertEquals(null, resultSimpleObject.getSimpleEnum());
}
@Test
public void updateSimpleFieldsInMultipleEntities() {
SimpleObject simpleObject1 = new SimpleObject();
simpleObject1.setIntValue(123);
simpleObject1.setLongValue(1l);
getSimpleObjectReferencesDAO().save(simpleObject1);
SimpleObject simpleObject2 = new SimpleObject();
simpleObject2.setIntValue(234);
simpleObject2.setLongValue(2l);
getSimpleObjectReferencesDAO().save(simpleObject2);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
updateObject.setLongValue(Long.MAX_VALUE);
updateObject.setAnotherIntValue(999);
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject1.getId(), simpleObject2.getId());
SimpleObject resultSimpleObject1 = getSimpleObjectReferencesDAO().findById(simpleObject1.getId());
assertEquals(123, resultSimpleObject1.getIntValue());
assertEquals(Long.MAX_VALUE, resultSimpleObject1.getLongValue());
assertEquals(999, resultSimpleObject1.getAnotherIntValue());
SimpleObject resultSimpleObject2 = getSimpleObjectReferencesDAO().findById(simpleObject2.getId());
assertEquals(234, resultSimpleObject2.getIntValue());
assertEquals(Long.MAX_VALUE, resultSimpleObject2.getLongValue());
assertEquals(999, resultSimpleObject2.getAnotherIntValue());
}
@Test
public void addNestedObject() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(123);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
RelatedObject relatedObject = new RelatedObject();
relatedObject.setRelatedIntValue(456);
updateObject.setRelatedObject(relatedObject);
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertEquals(123, resultSimpleObject.getIntValue());
assertNotNull(resultSimpleObject.getRelatedObject());
assertEquals(456, resultSimpleObject.getRelatedObject().getRelatedIntValue());
}
@Test
public void updateNestedObject() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(123);
RelatedObject relatedObject = new RelatedObject();
relatedObject.setRelatedIntValue(456);
simpleObject.setRelatedObject(relatedObject);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
updateObject.setIntValue(456);
RelatedObject relatedUpdateObject = updateObject.getRelatedObject();
relatedUpdateObject.setRelatedIntValue(999);
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertEquals(456, resultSimpleObject.getIntValue());
assertEquals(999, resultSimpleObject.getRelatedObject().getRelatedIntValue());
}
@Test
public void addNewList() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(123);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
RelatedObject relatedObject = new RelatedObject();
relatedObject.setRelatedIntValue(456);
List relatedObjects = new ArrayList();
relatedObjects.add(relatedObject);
updateObject.setRelatedObjects(relatedObjects);
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertNotNull(resultSimpleObject.getRelatedObjects());
assertEquals(1, resultSimpleObject.getRelatedObjects().size());
assertEquals(456, resultSimpleObject.getRelatedObjects().get(0).getRelatedIntValue());
}
@Test
public void addToExistingList() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(123);
RelatedObject relatedObject = new RelatedObject();
relatedObject.setRelatedIntValue(456);
List relatedObjects = new ArrayList();
relatedObjects.add(relatedObject);
simpleObject.setRelatedObjects(relatedObjects);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
List relatedObjectUpdate = updateObject.getRelatedObjects();
RelatedObject relatedObject2 = new RelatedObject();
relatedObject2.setRelatedIntValue(789);
relatedObjectUpdate.add(relatedObject2);
RelatedObject relatedObject3 = new RelatedObject();
relatedObject3.setRelatedIntValue(999);
relatedObjectUpdate.add(relatedObject3);
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertNotNull(resultSimpleObject.getRelatedObjects());
assertEquals(3, resultSimpleObject.getRelatedObjects().size());
assertEquals(456, resultSimpleObject.getRelatedObjects().get(0).getRelatedIntValue());
assertEquals(789, resultSimpleObject.getRelatedObjects().get(1).getRelatedIntValue());
assertEquals(999, resultSimpleObject.getRelatedObjects().get(2).getRelatedIntValue());
}
@Test
public void setAtIndex() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(123);
RelatedObject relatedObject = new RelatedObject();
relatedObject.setRelatedIntValue(456);
List relatedObjects = new ArrayList();
relatedObjects.add(relatedObject);
simpleObject.setRelatedObjects(relatedObjects);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
RelatedObject relatedObject2 = new RelatedObject();
relatedObject2.setRelatedIntValue(789);
updateObject.getRelatedObjects().set(3, relatedObject2);
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertNotNull(resultSimpleObject.getRelatedObjects());
assertEquals(456, resultSimpleObject.getRelatedObjects().get(0).getRelatedIntValue());
// TODO: Different stores treat gaps differently. Some compact them down, others leave nulls in the middle
if (resultSimpleObject.getRelatedObjects().size() == 2) {
assertEquals(789, resultSimpleObject.getRelatedObjects().get(1).getRelatedIntValue());
} else {
assertEquals(4, resultSimpleObject.getRelatedObjects().size());
assertNull(resultSimpleObject.getRelatedObjects().get(1));
assertNull(resultSimpleObject.getRelatedObjects().get(2));
assertEquals(789, resultSimpleObject.getRelatedObjects().get(3).getRelatedIntValue());
}
}
@Test
public void removeFromExistingList() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(123);
RelatedObject relatedObject1 = new RelatedObject();
relatedObject1.setRelatedIntValue(456);
RelatedObject relatedObject2 = new RelatedObject();
relatedObject2.setRelatedIntValue(789);
List relatedObjects = new ArrayList();
relatedObjects.add(relatedObject1);
relatedObjects.add(relatedObject2);
simpleObject.setRelatedObjects(relatedObjects);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
List relatedObjectUpdate = updateObject.getRelatedObjects();
relatedObjectUpdate.remove(relatedObject1);
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertNotNull(resultSimpleObject.getRelatedObjects());
assertEquals(1, resultSimpleObject.getRelatedObjects().size());
assertEquals(789, resultSimpleObject.getRelatedObjects().get(0).getRelatedIntValue());
}
@Test
public void removeFromExistingListUsingIndex() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(123);
RelatedObject relatedObject1 = new RelatedObject();
relatedObject1.setRelatedIntValue(456);
RelatedObject relatedObject2 = new RelatedObject();
relatedObject2.setRelatedIntValue(789);
List relatedObjects = new ArrayList();
relatedObjects.add(relatedObject1);
relatedObjects.add(relatedObject2);
simpleObject.setRelatedObjects(relatedObjects);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
List relatedObjectUpdate = updateObject.getRelatedObjects();
relatedObjectUpdate.remove(0);
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertNotNull(resultSimpleObject.getRelatedObjects());
assertEquals(1, resultSimpleObject.getRelatedObjects().size());
assertEquals(789, resultSimpleObject.getRelatedObjects().get(0).getRelatedIntValue());
}
@Test
public void clearList() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(123);
RelatedObject relatedObject = new RelatedObject();
relatedObject.setRelatedIntValue(456);
List relatedObjects = new ArrayList();
relatedObjects.add(relatedObject);
simpleObject.setRelatedObjects(relatedObjects);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
updateObject.getRelatedObjects().clear();
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertNotNull(resultSimpleObject.getRelatedObjects());
assertEquals(0, resultSimpleObject.getRelatedObjects().size());
}
@Test
public void clearAndAddToList() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(123);
RelatedObject relatedObject = new RelatedObject();
relatedObject.setRelatedIntValue(456);
List relatedObjects = new ArrayList();
relatedObjects.add(relatedObject);
simpleObject.setRelatedObjects(relatedObjects);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
updateObject.getRelatedObjects().clear();
RelatedObject relatedObject2 = new RelatedObject();
relatedObject2.setRelatedIntValue(789);
updateObject.getRelatedObjects().add(relatedObject2);
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertNotNull(resultSimpleObject.getRelatedObjects());
assertEquals(1, resultSimpleObject.getRelatedObjects().size());
assertEquals(789, resultSimpleObject.getRelatedObjects().get(0).getRelatedIntValue());
}
@Test
public void clearMap() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(123);
RelatedObject relatedObject = new RelatedObject();
relatedObject.setRelatedIntValue(456);
Map relatedObjectMap = new HashMap();
relatedObjectMap.put("one", relatedObject);
simpleObject.setRelatedObjectMap(relatedObjectMap);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
updateObject.getRelatedObjectMap().clear();
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertNotNull(resultSimpleObject.getRelatedObjectMap());
assertEquals(0, resultSimpleObject.getRelatedObjectMap().size());
}
@Test
public void clearAndAddToMap() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(123);
RelatedObject relatedObject = new RelatedObject();
relatedObject.setRelatedIntValue(456);
Map relatedObjectMap = new HashMap();
relatedObjectMap.put("one", relatedObject);
simpleObject.setRelatedObjectMap(relatedObjectMap);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
updateObject.getRelatedObjectMap().clear();
RelatedObject relatedObject2 = new RelatedObject();
relatedObject2.setRelatedIntValue(789);
updateObject.getRelatedObjectMap().put("two", relatedObject2);
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertNotNull(resultSimpleObject.getRelatedObjectMap());
assertEquals(1, resultSimpleObject.getRelatedObjectMap().size());
assertEquals(789, resultSimpleObject.getRelatedObjectMap().get("two").getRelatedIntValue());
}
@Test
public void addStringsToList() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(123);
simpleObject.addToStringList("duck");
simpleObject.addToStringList("bunny");
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
List updateList = updateObject.getStringList();
updateList.add("bunny");
updateList.add("cow");
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertNotNull(resultSimpleObject.getStringList());
assertEquals(4, resultSimpleObject.getStringList().size()); // duck, bunny, bunny, cow
assertEquals("duck", resultSimpleObject.getStringList().get(0));
assertEquals("bunny", resultSimpleObject.getStringList().get(1));
assertEquals("bunny", resultSimpleObject.getStringList().get(2));
assertEquals("cow", resultSimpleObject.getStringList().get(3));
}
@Test
public void addStringsToSet() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(123);
simpleObject.addToStringSet("duck");
simpleObject.addToStringSet("bunny");
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
Set updateSet = updateObject.getStringSet();
updateSet.add("bunny"); // should not be duplicated
updateSet.add("cow");
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertNotNull(resultSimpleObject.getStringSet());
assertEquals(3, resultSimpleObject.getStringSet().size()); // duck, bunny, cow
assertTrue(resultSimpleObject.getStringSet().contains("duck"));
assertTrue(resultSimpleObject.getStringSet().contains("bunny"));
assertTrue(resultSimpleObject.getStringSet().contains("cow"));
}
@Test
public void updateByOtherField() {
SimpleObject simpleObject1 = new SimpleObject();
simpleObject1.setIntValue(123);
simpleObject1.setAnotherIntValue(-1);
getSimpleObjectReferencesDAO().save(simpleObject1);
SimpleObject simpleObject2 = new SimpleObject();
simpleObject2.setIntValue(234);
simpleObject2.setAnotherIntValue(-1);
getSimpleObjectReferencesDAO().save(simpleObject2);
SimpleObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
updateObject.setAnotherIntValue(42);
getSimpleObjectReferencesDAO().updateByAnotherIntValue(updateObject, -1);
Iterable results = getSimpleObjectReferencesDAO().findAll();
int resultCount = 0;
for (SimpleObject result : results) {
assertEquals(42, result.getAnotherIntValue());
assertTrue(result.getIntValue() == 123 || result.getIntValue() == 234);
resultCount++;
}
assertEquals(2, resultCount);
}
@Test
public void incrementIntValue() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(1);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleUpdateObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
updateObject.addToIntValue(1);
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertEquals(2, resultSimpleObject.getIntValue());
}
@Test
public void decrementIntValue() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(100);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleUpdateObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
updateObject.addToIntValue(-5);
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertEquals(95, resultSimpleObject.getIntValue());
}
@Test
public void incrementLongValue() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setLongValue(1l);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleUpdateObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
updateObject.addToLongValue(100l);
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertEquals(101l, resultSimpleObject.getLongValue());
}
@Test
public void incrementDoubleValue() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setDoubleValue(1.5d);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleUpdateObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
updateObject.addToDoubleValue(2.25d);
getSimpleObjectReferencesDAO().updateByIds(updateObject, simpleObject.getId());
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().findById(simpleObject.getId());
assertEquals(3.75d, resultSimpleObject.getDoubleValue(), 0.0001d);
}
@Test
public void incrementIntValueAndReturnAfterModified() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(1);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleUpdateObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
updateObject.addToIntValue(1);
updateObject.setResultFromUpdate(ResultFromUpdate.ReturnPostUpdate);
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().updateById(updateObject, simpleObject.getId());
assertEquals(2, resultSimpleObject.getIntValue());
}
@Test
public void incrementIntValueAndReturnBeforeModified() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(1);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleUpdateObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
updateObject.addToIntValue(1);
updateObject.setResultFromUpdate(ResultFromUpdate.ReturnPreUpdate);
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().updateById(updateObject, simpleObject.getId());
assertEquals(1, resultSimpleObject.getIntValue());
}
@Test
public void incrementIntValueAndReturnNone() {
SimpleObject simpleObject = new SimpleObject();
simpleObject.setIntValue(1);
getSimpleObjectReferencesDAO().save(simpleObject);
SimpleUpdateObject updateObject = getSimpleObjectReferencesDAO().getUpdateObject();
updateObject.addToIntValue(1);
updateObject.setResultFromUpdate(ResultFromUpdate.ReturnNone);
SimpleObject resultSimpleObject = getSimpleObjectReferencesDAO().updateById(updateObject, simpleObject.getId());
assertNull(resultSimpleObject);
}
// test iterables
// test when None
// exception scenarios -- some times 'succeeded' contains ids, sometimes T
// TODO: index based operation on existing list
// TODO: replace list
// TODO: test merging of items (e.g. two different $pushAlls) for set, list, map
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy