@Test public void dates_should_be_serialized_in_ISO_8601_format() { setupNegativeContains("some_id"); when(httpClient.put(anyString(), anyString())) .thenReturn( HttpResponseStub.valueOf(201, "{\"ok\":true,\"id\":\"some_id\",\"rev\":\"123D123\"}")); DateTime dt = new DateTime(2010, 4, 25, 20, 11, 24, 555, DateTimeZone.forID("+00:00")); Date d = dt.toDate(); System.out.println(d); DateDoc dd = new DateDoc(); dd.setId("some_id"); dd.setDateTime(dt); dd.setDate(dt.toDate()); dbCon.create(dd); ArgumentCaptor<String> ac = ArgumentCaptor.forClass(String.class); verify(httpClient).put(eq("/test_db/some_id"), ac.capture()); String json = ac.getValue(); assertEqualJson("dates.json", json); when(httpClient.get("/test_db/some_id")).thenReturn(HttpResponseStub.valueOf(201, json)); DateDoc deserialized = dbCon.get(DateDoc.class, dd.getId()); assertEquals(dt, deserialized.getDateTime()); assertEquals(d, deserialized.getDate()); }
@Test public void testDelete() { when(httpClient.delete(anyString())) .thenReturn(HttpResponseStub.valueOf(200, "{\"ok\":true,\"rev\":\"123D123\"}")); dbCon.delete("some_id", "123D123"); verify(httpClient).delete("/test_db/some_id?rev=123D123"); }
@Test public void return_null_revisions_when_doc_is_missing() { when(httpClient.get("/test_db/some_doc_id?revs_info=true")) .thenReturn(HttpResponseStub.valueOf(404, "")); List<Revision> l = dbCon.getRevisions("some_doc_id"); assertNotNull(l); assertTrue(l.isEmpty()); }
@Test public void testEnsureFullCommit() { when(httpClient.post("/test_db/_ensure_full_commit", "")) .thenReturn( HttpResponseStub.valueOf( 200, "{\"ok\" : true, \"instance_start_time\" : \"1288186189373361\"}")); dbCon.ensureFullCommit(); verify(httpClient).post("/test_db/_ensure_full_commit", ""); }
@Test public void should_create_db_if_missing() { when(httpClient.head("/test_db/")) .thenReturn( HttpResponseStub.valueOf(404, "{\"error\":\"not_found\",\"reason\":\"no_db_file\"}")); dbCon.createDatabaseIfNotExists(); verify(httpClient).put("/test_db/"); }
private void setupGetDocResponse(String... ids) { for (String id : ids) { when(httpClient.get(TEST_DB_PATH + id)) .thenReturn( HttpResponseStub.valueOf( 200, "{\"name\":\"nisse\",\"age\":12,\"_id\":\" " + id + "\",\"_rev\":\"123D123\"}")); } }
@Test public void testCallUpdateHandler() { when(httpClient.put("/test_db/_design/designDocID/_update/functionName/docID?key=value", "")) .thenReturn(HttpResponseStub.valueOf(201, "response string")); Map<String, String> params = Collections.singletonMap("key", "value"); assertEquals( "response string", dbCon.callUpdateHandler("_design/designDocID", "functionName", "docID", params)); }
@Test public void testDeleteCouchDbDocument() { td.setId("some_id"); td.setRevision("123D123"); setupGetDocResponse(); when(httpClient.delete(anyString())) .thenReturn(HttpResponseStub.valueOf(200, "{\"ok\":true,\"rev\":\"123D123\"}")); dbCon.delete(td); verify(httpClient).delete("/test_db/some_id?rev=123D123"); }
@Test public void should_not_create_db_if_already_exists() { when(httpClient.head("/test_db/")) .thenReturn( HttpResponseStub.valueOf( 200, "{\"test_db\":\"global\",\"doc_count\":1,\"doc_del_count\":0,\"update_seq\":3,\"purge_seq\":0,\"compact_running\":false,\"disk_size\":100,\"instance_start_time\":\"130\",\"disk_format_version\":5,\"committed_update_seq\":3}")); dbCon.createDatabaseIfNotExists(); verify(httpClient, VerificationModeFactory.times(0)).put(anyString()); }
@Test public void testPurge() { String rsp = "{\"purged\" : { \"Billy\" : [ \"17-b3eb5ac6fbaef4428d712e66483dcb79\"]},\"purge_seq\" : 11}"; when(httpClient.post(eq("/test_db/_purge"), anyString())) .thenReturn(HttpResponseStub.valueOf(200, rsp)); Map<String, List<String>> revisionsToPurge = new HashMap<String, List<String>>(); revisionsToPurge.put("Billy", Collections.singletonList("17-b3eb5ac6fbaef4428d712e66483dcb79")); PurgeResult r = dbCon.purge(revisionsToPurge); assertEquals(11, r.getPurgeSeq()); assertTrue(r.getPurged().containsKey("Billy")); }
@Test public void create_should_post_if_id_is_missing() { when(httpClient.post(anyString(), anyString())) .thenReturn( HttpResponseStub.valueOf(201, "{\"ok\":true,\"id\":\"some_id\",\"rev\":\"123D123\"}")); dbCon.create(td); ArgumentCaptor<String> ac = ArgumentCaptor.forClass(String.class); verify(httpClient).post(eq(TEST_DB_PATH), ac.capture()); assertEquals("some_id", td.getId()); assertEquals("123D123", td.getRevision()); assertEqualJson("create_with_no_id.json", ac.getValue()); }
@Test public void save_document_with_utf8_charset() { td.setId("some_id"); td.name = "Örjan Åäö"; setupNegativeContains(td.getId()); when(httpClient.put(anyString(), anyString())) .thenReturn( HttpResponseStub.valueOf(201, "{\"ok\":true,\"id\":\"some_id\",\"rev\":\"123D123\"}")); dbCon.create(td); ArgumentCaptor<String> ac = ArgumentCaptor.forClass(String.class); verify(httpClient).put(eq("/test_db/some_id"), ac.capture()); assertEqualJson("charset.json", ac.getValue()); }
@Test public void docId_should_be_escaped_when_id_contains_slash() throws UnsupportedEncodingException { String escapedId = "http%3A%2F%2Fsome%2Fopenid%3Fgoog"; td.setId("http://some/openid?goog"); setupNegativeContains(escapedId); when(httpClient.put(anyString(), anyString())) .thenReturn( HttpResponseStub.valueOf(201, "{\"ok\":true,\"id\":\"some_id\",\"rev\":\"123D123\"}")); dbCon.create(td); ArgumentCaptor<String> ac = ArgumentCaptor.forClass(String.class); verify(httpClient).put(eq("/test_db/" + escapedId), ac.capture()); assertEquals("http://some/openid?goog", td.getId()); }
@Test public void testCreate() { td.setId("some_id"); setupNegativeContains(td.getId()); when(httpClient.put(anyString(), anyString())) .thenReturn( HttpResponseStub.valueOf(201, "{\"ok\":true,\"id\":\"some_id\",\"rev\":\"123D123\"}")); dbCon.create(td); ArgumentCaptor<String> ac = ArgumentCaptor.forClass(String.class); verify(httpClient).put(eq("/test_db/some_id"), ac.capture()); assertEquals("some_id", td.getId()); assertEquals("123D123", td.getRevision()); assertEqualJson("create.json", ac.getValue()); }
@Test public void testCreateFromJsonNode() throws Exception { when(httpClient.put(anyString(), anyString())) .thenReturn( HttpResponseStub.valueOf(201, "{\"ok\":true,\"id\":\"some_id\",\"rev\":\"123D123\"}")); JsonNode root = new ObjectMapper() .readValue( getClass().getResourceAsStream("create_from_json_node.json"), JsonNode.class); dbCon.create("some_id", root); String facit = IOUtils.toString(getClass().getResourceAsStream("create_from_json_node.json"), "UTF-8") .trim(); verify(httpClient).put("/test_db/some_id", facit); }
@Test public void return_all_docIds_in_db() { when(httpClient.get("/test_db/_all_docs")) .thenReturn( HttpResponseStub.valueOf( 200, "{\"total_rows\": 3, \"offset\": 0, \"rows\": [" + "{\"id\": \"doc1\", \"key\": \"doc1\", \"value\": {\"rev\": \"4324BB\"}}," + "{\"id\": \"doc2\", \"key\": \"doc2\", \"value\": {\"rev\":\"2441HF\"}}," + "{\"id\": \"doc3\", \"key\": \"doc3\", \"value\": {\"rev\":\"74EC24\"}}]}")); List<String> all = dbCon.getAllDocIds(); assertEquals(3, all.size()); assertEquals("doc1", all.get(0)); assertEquals("doc2", all.get(1)); assertEquals("doc3", all.get(2)); }
@Test public void testCallUpdateHanderWithObject() { when(httpClient.put( "/test_db/_design/designDocID/_update/functionName/docID", "{\"value\":\"value\",\"param\":\"param\"}")) .thenReturn( HttpResponseStub.valueOf( 201, "{\"name\":\"nisse\",\"age\":12,\"_id\":\"some_id\",\"_rev\":\"123D123\"}")); UpdateHandlerRequest req = new UpdateHandlerRequest(); req.designDocId("_design/designDocID") .functionName("functionName") .docId("docID") .body(new TestRequest("param", "value")); TestDoc updated = dbCon.callUpdateHandler(req, TestDoc.class); assertNotNull(updated); assertEquals("some_id", updated.getId()); assertEquals("123D123", updated.getRevision()); assertEquals("nisse", updated.name); assertEquals(12, updated.age); }
private void setupGetDocResponse() { when(httpClient.get(anyString())) .thenReturn( HttpResponseStub.valueOf( 200, "{\"name\":\"nisse\",\"age\":12,\"_id\":\"some_id\",\"_rev\":\"123D123\"}")); }
@Test(expected = DocumentNotFoundException.class) public void throw_exception_when_doc_is_missing() { when(httpClient.get(anyString())).thenReturn(HttpResponseStub.valueOf(404, "")); dbCon.get(TestDoc.class, "some_id"); }
private void setupNegativeContains(String id) { when(httpClient.head("/test_db/" + id)).thenReturn(HttpResponseStub.valueOf(404, "")); }
@Test public void testGetRevsLimit() { when(httpClient.get("/test_db/_revs_limit")) .thenReturn(HttpResponseStub.valueOf(201, "\"1500\"")); assertEquals(1500, dbCon.getRevisionLimit()); }