/*
* Copyright (C) Scott Cranton, Jakub Korab, and Christian Posta
* https://github.com/CamelCookbook
*
* 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.camelcookbook.rest.common;
import org.junit.Before;
import org.junit.Test;
import java.util.Collection;
import static org.junit.Assert.*;
public class MenuServiceTest {
private MenuService menuService = null;
@Before
public void setUp() throws Exception {
menuService = new MenuService();
}
@Test
public void createMenuItem() throws Exception {
final Collection<MenuItem> menuItems = menuService.getMenuItems();
final int initialSize = menuItems.size();
MenuItem newItem = new MenuItem();
newItem.setId(-1); // intentionally initialize to an invalid id
newItem.setName("Hawt New Stuff");
newItem.setDescription("So new and yet so cool");
newItem.setCost(3);
// assert new Item does not exist in current menu
assertFalse(menuItems.contains(newItem));
int newItemId = menuService.createMenuItem(newItem);
// Should not mutate input item
assertNotEquals(newItem.getId(), newItemId);
final MenuItem menuItem = menuService.getMenuItem(newItemId);
assertNotEquals(newItem, menuItem); // only true because we initialized to invalid id, and service not mutating input
assertEquals(newItemId, menuItem.getId());
assertEquals(newItem.getName(), menuItem.getName());
assertEquals(newItem.getCost(), menuItem.getCost());
assertEquals(newItem.getDescription(), menuItem.getDescription());
Collection<MenuItem> newMenuItems = menuService.getMenuItems();
assertTrue(newMenuItems.size() > initialSize);
assertTrue(newMenuItems.contains(menuItem));
}
@Test
public void createMenuItemDuplicateId() throws Exception {
final Collection<MenuItem> menuItems = menuService.getMenuItems();
final int initialSize = menuItems.size();
assertTrue(initialSize >= 1); // assumes menuService setup with at least 1 item
MenuItem newItem = new MenuItem();
newItem.setId(-1); // intentionally initialize to an invalid id
newItem.setName("Hawt New Stuff");
newItem.setDescription("So new and yet so cool");
newItem.setCost(3);
// assert new Item does not exist in current menu
assertFalse(menuItems.contains(newItem));
try {
int newItemId = menuService.createMenuItem(1, newItem);
} catch (MenuItemInvalidException e) {
return;
}
fail("Should have failed with thrown Invalid Item exception");
}
@Test
public void createMenuItemInvalidCost() throws Exception {
MenuItem newItem = new MenuItem();
newItem.setId(-1); // intentionally initialize to an invalid id
newItem.setName("Hawt New Stuff");
newItem.setDescription("So new and yet so cool");
newItem.setCost(-1);
assertTrue(newItem.getCost() <= 0);
try {
int newItemId = menuService.createMenuItem(newItem);
fail("Should have failed with thrown Invalid Item exception");
} catch (MenuItemInvalidException e) {
}
}
@Test
public void getMenuItems() throws Exception {
assertNotNull(menuService.getMenuItems());
}
@Test
public void getMenuItem() throws Exception {
final Collection<MenuItem> menuItems = menuService.getMenuItems();
assertTrue(menuItems.size() >= 1);
final MenuItem menuItem = menuService.getMenuItem(1);
assertEquals(menuItems.iterator().next(), menuItem);
}
@Test
public void updateMenuItemCreate() throws Exception {
final Collection<MenuItem> menuItems = menuService.getMenuItems();
final int initialSize = menuItems.size();
MenuItem newItem = new MenuItem();
newItem.setId(-1); // intentionally initialize to an invalid id
newItem.setName("Hawt New Stuff");
newItem.setDescription("So new and yet so cool");
newItem.setCost(3);
// assert new Item does not exist in current menu
assertFalse(menuItems.contains(newItem));
final int newId = initialSize + 1;
menuService.updateMenuItem(newId, newItem);
MenuItem curMenuItem = menuService.getMenuItem(newId);
assertNotNull(curMenuItem);
assertNotEquals(newItem, curMenuItem); // curMenuItem id should be different, and equal to newId
assertEquals(newId, curMenuItem.getId());
assertEquals(newItem.getName(), curMenuItem.getName());
assertEquals(newItem.getCost(), curMenuItem.getCost());
assertEquals(newItem.getDescription(), curMenuItem.getDescription());
}
@Test
public void updateMenuItemModify() throws Exception {
final int testId = 1;
Collection<MenuItem> menuItems = menuService.getMenuItems();
final int initialSize = menuItems.size();
assertTrue(initialSize >= 1);
MenuItem origMenuItem = menuService.getMenuItem(testId);
assertEquals(testId, origMenuItem.getId());
MenuItem newMenuItem = new MenuItem(origMenuItem);
newMenuItem.setName("Different than " + origMenuItem.getName());
assertNotEquals(origMenuItem, newMenuItem);
menuService.updateMenuItem(testId, newMenuItem);
MenuItem curMenuItem = menuService.getMenuItem(testId);
assertEquals(newMenuItem, curMenuItem);
}
@Test
public void removeMenuItem() throws Exception {
final int testId = 1;
Collection<MenuItem> menuItems = menuService.getMenuItems();
final int initialSize = menuItems.size();
assertTrue(initialSize >= 1);
final MenuItem origMenuItem = menuService.getMenuItem(testId);
assertNotNull(origMenuItem);
menuService.removeMenuItem(testId);
final Collection<MenuItem> curMenuItems = menuService.getMenuItems();
assertTrue(curMenuItems.size() < initialSize);
assertFalse(curMenuItems.contains(origMenuItem));
try {
MenuItem menuItem = menuService.getMenuItem(testId);
fail("Should have thrown MenuItemNotFoundException");
} catch (MenuItemNotFoundException e) {
}
}
}