package com.fourspaces.couchdb.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.fourspaces.couchdb.AdHocView; import com.fourspaces.couchdb.Database; import com.fourspaces.couchdb.Document; import com.fourspaces.couchdb.Session; import com.fourspaces.couchdb.View; import com.fourspaces.couchdb.ViewResults; public class ViewTest { Log log = LogFactory.getLog(getClass()); Session sess = TestSession.getTestSession(); Database foo; @Before public void createTestDB() throws Exception { sess.createDatabase("foo"); foo = sess.getDatabase("foo"); Document d = new Document(); d.put("foo", "bar"); foo.saveDocument(d); log.debug("known id:" + d.getId()); log.debug(foo.getDocument(d.getId())); foo.saveDocument(new Document()); foo.saveDocument(new Document()); foo.saveDocument(new Document()); foo.saveDocument(new Document()); } @After public void removeTestDB() { sess.deleteDatabase("foo"); } @Test public void adhoc() { int all = foo.getAllDocuments().getResults().size(); ViewResults results = foo.adhoc("function (doc) {emit(null, doc);}"); assertNotNull(results); int adhoc = foo.adhoc("function (doc) {emit(null, doc);}").getResults().size(); assertEquals(all, adhoc); } /** * Test to demonstrate that the query string isn't being passed for adhoc * views. */ @Test public void adhoc_query_string() { // Establish that all results are returned with our view int all = foo.getAllDocuments().getResults().size(); AdHocView view = new AdHocView("function (doc) { emit(null, doc);}"); ViewResults results = foo.adhoc(view); assertNotNull(results); assertEquals( "Expected results to return all records", all, results.getResults().size() ); // Now set a limit on the number of results that may be returned // and verify that only that number of results are returned. view.setLimit(2); results = foo.adhoc(view); assertNotNull(results); assertEquals( "Expected a subset of records to be returned", 2, results.getResults().size() ); } @Test public void adhoc2() { int adhoc = foo.adhoc("function (doc){ if (doc.foo=='bar'){ emit(doc, doc)}}").getResults().size(); assertEquals(1, adhoc); } @Test public void addNamed() throws Exception { Document d = new Document(); d.put("foo", "bar"); log.debug("Saving d"); foo.saveDocument(d); Document d2 = new Document(); //d2.put("foo","baz"); // d2.addView("all_documents", "function (doc){ return doc; }"); d2.addView("viewfoobar", "testview", "function (doc){ if (doc.foo=='bar'){ emit(null, doc); }}"); log.debug("Saving d2 - " + d2.getId() + " - " + d2.toString()); foo.saveDocument(d2); log.debug("Saved d2 - " + d2.getId() + " - " + d2.toString()); System.err.println("Saved d2 - " + d2.getId() + " - " + d2.toString()); Document d2_2 = foo.getDocument(d2.getId()); log.debug("Saved d2_2 - " + d2_2.toString()); assertNotNull(d2_2.getView("testview")); assertEquals(2, foo.view(d2.getView("testview")).getResults().size()); foo.deleteDocument(d); foo.deleteDocument(d2); } }