/* * Copyright (C) 2011 lightcouch.org * * 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.lightcouch.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.UUID; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.lightcouch.CouchDbClient; import org.lightcouch.DocumentConflictException; import org.lightcouch.NoDocumentException; import org.lightcouch.Params; import org.lightcouch.Response; import com.google.gson.JsonArray; import com.google.gson.JsonObject; public class DocumentsCRUDTest { private static CouchDbClient dbClient; @BeforeClass public static void setUpClass() { dbClient = new CouchDbClient(); } @AfterClass public static void tearDownClass() { dbClient.shutdown(); } // Find @Test public void findById() { Response response = dbClient.save(new Foo()); Foo foo = dbClient.find(Foo.class, response.getId()); assertNotNull(foo); } @Test public void findByIdAndRev() { Response response = dbClient.save(new Foo()); Foo foo = dbClient.find(Foo.class, response.getId(), response.getRev()); assertNotNull(foo); } @Test public void findByIdContainSlash() { Response response = dbClient.save(new Foo(generateUUID() + "/" + generateUUID())); Foo foo = dbClient.find(Foo.class, response.getId()); assertNotNull(foo); Foo foo2 = dbClient.find(Foo.class, response.getId(), response.getRev()); assertNotNull(foo2); } @Test public void findJsonObject() { Response response = dbClient.save(new Foo()); JsonObject jsonObject = dbClient.find(JsonObject.class, response.getId()); assertNotNull(jsonObject); } @Test public void findAny() { String uri = dbClient.getBaseUri() + "_stats"; JsonObject jsonObject = dbClient.findAny(JsonObject.class, uri); assertNotNull(jsonObject); } @Test public void findInputstream() throws IOException { Response response = dbClient.save(new Foo()); InputStream inputStream = dbClient.find(response.getId()); assertTrue(inputStream.read() != -1); inputStream.close(); } @Test public void findWithParams() { Response response = dbClient.save(new Foo()); Foo foo = dbClient.find(Foo.class, response.getId(), new Params().revsInfo()); assertNotNull(foo); } @Test(expected = IllegalArgumentException.class) public void findWithInvalidId_throwsIllegalArgumentException() { dbClient.find(Foo.class, ""); } @Test(expected = NoDocumentException.class) public void findWithUnknownId_throwsNoDocumentException() { dbClient.find(Foo.class, generateUUID()); } @Test public void contains() { Response response = dbClient.save(new Foo()); boolean found = dbClient.contains(response.getId()); assertTrue(found); found = dbClient.contains(generateUUID()); assertFalse(found); } // Save @Test public void savePOJO() { dbClient.save(new Foo()); } @Test public void saveMap() { Map<String, Object> map = new HashMap<String, Object>(); map.put("_id", generateUUID()); map.put("field1", "value1"); dbClient.save(map); } @Test public void saveJsonObject() { JsonObject json = new JsonObject(); json.addProperty("_id", generateUUID()); json.add("json-array", new JsonArray()); dbClient.save(json); } @Test public void saveWithIdContainSlash() { String idWithSlash = "a/b/" + generateUUID(); Response response = dbClient.save(new Foo(idWithSlash)); assertEquals(idWithSlash, response.getId()); } @Test public void saveObjectPost() { // database generated id will be assigned Response response = dbClient.post(new Foo()); assertNotNull(response.getId()); } @Test(expected = IllegalArgumentException.class) public void saveInvalidObject_throwsIllegalArgumentException() { dbClient.save(null); } @Test(expected = IllegalArgumentException.class) public void saveNewDocWithRevision_throwsIllegalArgumentException() { Bar bar = new Bar(); bar.setRevision("unkown"); dbClient.save(bar); } @Test(expected = DocumentConflictException.class) public void saveDocWithDuplicateId_throwsDocumentConflictException() { String id = generateUUID(); dbClient.save(new Foo(id)); dbClient.save(new Foo(id)); } @Test public void batch() { dbClient.batch(new Foo()); } // Update @Test public void update() { Response response = dbClient.save(new Foo()); Foo foo = dbClient.find(Foo.class, response.getId()); dbClient.update(foo); } @Test public void updateWithIdContainSlash() { String idWithSlash = "a/" + generateUUID(); Response response = dbClient.save(new Bar(idWithSlash)); Bar bar = dbClient.find(Bar.class, response.getId()); Response responseUpdate = dbClient.update(bar); assertEquals(idWithSlash, responseUpdate.getId()); } @Test(expected = IllegalArgumentException.class) public void updateWithoutIdAndRev_throwsIllegalArgumentException() { dbClient.update(new Foo()); } @Test(expected = DocumentConflictException.class) public void updateWithInvalidRev_throwsDocumentConflictException() { Response response = dbClient.save(new Foo()); Foo foo = dbClient.find(Foo.class, response.getId()); dbClient.update(foo); dbClient.update(foo); } // Delete @Test public void deleteObject() { Response response = dbClient.save(new Foo()); Foo foo = dbClient.find(Foo.class, response.getId()); dbClient.remove(foo); } @Test public void deleteByIdAndRevValues() { Response response = dbClient.save(new Foo()); dbClient.remove(response.getId(), response.getRev()); } @Test public void deleteByIdContainSlash() { String idWithSlash = "a/" + generateUUID(); Response response = dbClient.save(new Bar(idWithSlash)); Response responseRemove = dbClient.remove(response.getId(), response.getRev()); assertEquals(idWithSlash, responseRemove.getId()); } // Helper private static String generateUUID() { return UUID.randomUUID().toString().replace("-", ""); } }