/* * Copyright IBM Corp. 2014 * * 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 net.bluemix.todo.rest; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.Collection; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import net.bluemix.todo.model.ToDo; import net.bluemix.todo.store.InMemoryStore; import net.bluemix.todo.store.ToDoStore; import net.bluemix.todo.store.ToDoStoreException; import org.junit.After; import org.junit.Before; import org.junit.Test; public class ToDoAPITest { private ToDo td1; private ToDo td2; private ToDoStore store; private ToDoAPI api; private ToDoStore exceptionStore = new ToDoStore(){ @Override public Collection<ToDo> getAll() throws ToDoStoreException { throw new ToDoStoreException("Error"); } @Override public ToDo get(String id) throws ToDoStoreException { throw new ToDoStoreException("Error"); } @Override public ToDo persist(ToDo td) throws ToDoStoreException { throw new ToDoStoreException("Error"); } @Override public ToDo update(String id, ToDo td) throws ToDoStoreException { throw new ToDoStoreException("Error"); } @Override public void delete(String id) throws ToDoStoreException { throw new ToDoStoreException("Error"); } @Override public int count() throws ToDoStoreException { throw new ToDoStoreException("Error"); } }; private ToDoAPI errorApi; @Before public void setUp() throws Exception { td1 = new ToDo(); td1.setId("123"); td1.setTitle("pick up kids"); td2 = new ToDo(); td2.setTitle("pick up laundry"); td2.setCompleted(true); td2.setId("abc"); store = new InMemoryStore(); store.persist(td1); store.persist(td2); api = new ToDoAPI(store); errorApi = new ToDoAPI(exceptionStore); } @After public void tearDown() throws Exception { td1 = null; td2 = null; store = null; api = null; errorApi = null; } @Test public void testGetToDo() { assertEquals(td1, api.getToDo(td1.getId())); } @Test public void testGetToDoBadRequest() { try { api.getToDo(null); fail("Expected exception to be thrown."); } catch(WebApplicationException e) { assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), e.getResponse().getStatus()); } } @Test public void testGetToDoException() { try { errorApi.getToDo("123"); fail("Expected exception to be thrown."); } catch(WebApplicationException e) { assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e.getResponse().getStatus()); } } @Test public void testToDoDoesNotExist() { try { api.getToDo("123"); fail("Expected exception to be thrown."); } catch(WebApplicationException e) { assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), e.getResponse().getStatus()); } } @Test public void testGetToDos() { Collection<ToDo> todos = api.getToDos(); assertTrue(todos.contains(td1)); assertTrue(todos.contains(td2)); assertEquals(2, todos.size()); } @Test public void testGetToDosException() { try { errorApi.getToDos(); fail("Expected exception to be thrown."); } catch(WebApplicationException e) { assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e.getResponse().getStatus()); } } @Test public void testNewToDo() { ToDo td = new ToDo(); td.setTitle("do a test"); td = api.newToDo(td); assertNotNull(td.getId()); Collection<ToDo> todos = api.getToDos(); assertTrue(todos.contains(td1)); assertTrue(todos.contains(td2)); assertTrue(todos.contains(td)); assertEquals(3, todos.size()); } @Test public void testNewToDoException() { try { api.newToDo(null); fail("Expected exception to be thrown."); } catch(WebApplicationException e) { assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), e.getResponse().getStatus()); } } @Test public void testNewToDoInternalError() { try { errorApi.newToDo(new ToDo()); fail("Expected exception to be thrown."); } catch(WebApplicationException e) { assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e.getResponse().getStatus()); } } @Test public void testUpdateToDo() { ToDo td = new ToDo(); td.setTitle("do a test"); td.setCompleted(true); api.updateToDo(td1.getId(), td); td = api.getToDo(td1.getId()); assertEquals("do a test", td.getTitle()); assertTrue(td.isCompleted()); } @Test public void testUpdateToDoIdException() { try { api.updateToDo(null, new ToDo()); fail("Expected exception to be thrown."); } catch(WebApplicationException e) { assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), e.getResponse().getStatus()); } } @Test public void testUpdateToDoException() { try { api.updateToDo("123", null); fail("Expected exception to be thrown."); } catch(WebApplicationException e) { assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), e.getResponse().getStatus()); } } @Test public void testUpdateToDoInternalError() { try { errorApi.updateToDo("123", new ToDo()); fail("Expected exception to be thrown."); } catch(WebApplicationException e) { assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e.getResponse().getStatus()); } } @Test public void testUpdateToDoDoesNotExist() { try{ api.updateToDo("123", new ToDo()); fail("Expected exception to be thrown."); } catch(WebApplicationException e) { assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), e.getResponse().getStatus()); } } @Test public void testDeleteToDo() { api.deleteToDo(td1.getId()); Collection<ToDo> todos = api.getToDos(); assertTrue(todos.contains(td2)); assertEquals(1, todos.size()); } @Test public void testDeleteToDoException() { try { errorApi.deleteToDo("123"); fail("Expected exception to be thrown."); } catch (WebApplicationException e) { assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e.getResponse().getStatus()); } } }