/*
* Copyright 2011 VZ Netzwerke Ltd
* Copyright 2014 devbliss GmbH
*
* 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.mongojack;
import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.List;
import org.bson.types.ObjectId;
import org.hamcrest.Matchers;
import org.junit.Test;
public class TestObjectIdHandling extends MongoDBTestBase {
@Test
public void testObjectIdGenerated() {
ObjectIdId object = new ObjectIdId();
JacksonDBCollection<ObjectIdId, ObjectId> coll = getCollection(ObjectIdId.class, org.bson.types.ObjectId.class);
coll.insert(object);
org.bson.types.ObjectId id = coll.findOne()._id;
ObjectIdId result = coll.findOneById(id);
assertThat(result._id, equalTo(id));
assertThat((org.bson.types.ObjectId) coll.getDbCollection().findOne().get("_id"), equalTo(id));
}
@Test
public void testObjectIdSaved() {
ObjectIdId object = new ObjectIdId();
org.bson.types.ObjectId id = new org.bson.types.ObjectId();
object._id = id;
JacksonDBCollection<ObjectIdId, org.bson.types.ObjectId> coll = getCollection(ObjectIdId.class,
org.bson.types.ObjectId.class);
coll.insert(object);
ObjectIdId result = coll.findOneById(id);
assertThat(result._id, equalTo(id));
assertThat((org.bson.types.ObjectId) coll.getDbCollection().findOne().get("_id"), equalTo(id));
}
public static class ObjectIdId {
public org.bson.types.ObjectId _id;
}
@Test
public void testObjectIdAnnotationOnStringGenerated() {
StringId object = new StringId();
JacksonDBCollection<StringId, String> coll = getCollection(StringId.class, String.class);
coll.insert(object);
String id = coll.findOne()._id;
// Check that it's a valid object id
assertTrue(org.bson.types.ObjectId.isValid(id));
StringId result = coll.findOneById(id);
assertThat(result._id, equalTo(id));
assertThat(coll.getDbCollection().findOne().get("_id").toString(), equalTo(id));
}
@Test
public void testObjectIdAnnotationOnStringSaved() {
StringId object = new StringId();
String id = new org.bson.types.ObjectId().toString();
object._id = id;
JacksonDBCollection<StringId, String> coll = getCollection(StringId.class, String.class);
coll.insert(object);
StringId result = coll.findOneById(id);
assertThat(result._id, equalTo(id));
assertThat(coll.getDbCollection().findOne().get("_id").toString(), equalTo(id));
}
@Test
public void testRemoveByIdWithObjectId() {
JacksonDBCollection<StringId, String> coll = getCollection(StringId.class, String.class);
coll.insert(new StringId());
String id = coll.findOne()._id;
coll.insert(new StringId());
assertThat(coll.find().toArray(), hasSize(2));
coll.removeById(id);
List<StringId> results = coll.find().toArray();
assertThat(results, hasSize(1));
assertThat(results.get(0)._id, not(Matchers.equalTo(id)));
}
@Test
public void testFindOneByIdWithObjectId() {
JacksonDBCollection<StringId, String> coll = getCollection(StringId.class, String.class);
StringId object = new StringId();
coll.insert(object);
assertThat(coll.getDbCollection().findOne().get("_id"), instanceOf(org.bson.types.ObjectId.class));
String id = coll.findOne()._id;
assertThat(id, instanceOf(String.class));
StringId result = coll.findOneById(id);
assertThat(result._id, Matchers.equalTo(id));
}
public static class StringId {
@org.mongojack.ObjectId
public String _id;
}
@Test
public void testObjectIdAnnotationOnByteArrayGenerated() {
ByteArrayId object = new ByteArrayId();
JacksonDBCollection<ByteArrayId, byte[]> coll = getCollection(ByteArrayId.class, byte[].class);
coll.insert(object);
byte[] id = coll.findOne()._id;
// Check that it's a valid object id, should be 12 bytes
assertEquals(12, id.length);
ByteArrayId result = coll.findOneById(id);
assertThat(result._id, equalTo(id));
}
@Test
public void testObjectIdAnnotationOnByteArraySaved() {
ByteArrayId object = new ByteArrayId();
byte[] id = new org.bson.types.ObjectId().toByteArray();
object._id = id;
JacksonDBCollection<ByteArrayId, byte[]> coll = getCollection(ByteArrayId.class, byte[].class);
coll.insert(object);
ByteArrayId result = coll.findOneById(id);
assertThat(result._id, equalTo(id));
}
public static class ByteArrayId {
@org.mongojack.ObjectId
public byte[] _id;
}
@Test
public void testCollectionOfObjectIds() {
ObjectIdCollection object = new ObjectIdCollection();
object._id = "id";
object.list = Arrays.asList(org.bson.types.ObjectId.get(), org.bson.types.ObjectId.get());
JacksonDBCollection<ObjectIdCollection, String> coll = getCollection(ObjectIdCollection.class, String.class);
coll.insert(object);
ObjectIdCollection result = coll.findOneById("id");
assertThat(result.list, equalTo(object.list));
}
public static class ObjectIdCollection {
public String _id;
public List<org.bson.types.ObjectId> list;
}
@Test
public void testCollectionOfObjectIdStrings() {
StringIdCollection object = new StringIdCollection();
object._id = "id";
object.list = Arrays.asList(org.bson.types.ObjectId.get().toString(), org.bson.types.ObjectId.get().toString());
JacksonDBCollection<StringIdCollection, String> coll = getCollection(StringIdCollection.class, String.class);
coll.insert(object);
StringIdCollection result = coll.findOneById("id");
assertThat(result.list, equalTo(object.list));
}
public static class StringIdCollection {
public String _id;
@org.mongojack.ObjectId
public List<String> list;
}
@Test
public void testCollectionOfObjectIdByteArrays() {
ByteArrayIdCollection object = new ByteArrayIdCollection();
object._id = "id";
object.list = Arrays.asList(org.bson.types.ObjectId.get().toByteArray(), org.bson.types.ObjectId.get()
.toByteArray());
JacksonDBCollection<ByteArrayIdCollection, String> coll = getCollection(ByteArrayIdCollection.class,
String.class);
coll.insert(object);
ByteArrayIdCollection result = coll.findOneById("id");
assertThat(result.list, hasSize(2));
assertThat(result.list.get(0), equalTo(object.list.get(0)));
assertThat(result.list.get(1), equalTo(object.list.get(1)));
}
public static class ByteArrayIdCollection {
public String _id;
@org.mongojack.ObjectId
public List<byte[]> list;
}
public static class StringIdMethods {
private String _id;
@org.mongojack.ObjectId
@Id
public String getId() {
return _id;
}
@org.mongojack.ObjectId
@Id
public void setId(String key) {
_id = key;
}
}
@Test
public void testObjectIdAnnotationOnMethodsGenerated() {
StringIdMethods object = new StringIdMethods();
JacksonDBCollection<StringIdMethods, String> coll = getCollection(StringIdMethods.class, String.class);
coll.insert(object);
String id = coll.findOne().getId();
// Check that it's a valid object id
assertTrue(org.bson.types.ObjectId.isValid(id));
StringIdMethods result = coll.findOneById(id);
assertThat(result.getId(), equalTo(id));
assertThat(coll.getDbCollection().findOne().get("_id").toString(), equalTo(id));
}
@Test
public void testObjectIdAnnotationOnMethodsSaved() {
StringIdMethods object = new StringIdMethods();
String id = new org.bson.types.ObjectId().toString();
object.setId(id);
JacksonDBCollection<StringIdMethods, String> coll = getCollection(StringIdMethods.class, String.class);
coll.insert(object);
StringIdMethods result = coll.findOneById(id);
assertThat(result.getId(), equalTo(id));
assertThat(coll.getDbCollection().findOne().get("_id").toString(), equalTo(id));
}
}