Advertisement
Guest User

Untitled

a guest
May 27th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.24 KB | None | 0 0
  1. package at.ac.tuwien.sepm.assignment.groupphase.demeter.dao;
  2.  
  3. import at.ac.tuwien.sepm.assignment.groupphase.demeter.dao.InterfacesDAO.IDishDAO;
  4. import at.ac.tuwien.sepm.assignment.groupphase.demeter.dao.InterfacesDAO.IImageManagementDAO;
  5. import at.ac.tuwien.sepm.assignment.groupphase.demeter.dto.Allergen;
  6. import at.ac.tuwien.sepm.assignment.groupphase.demeter.dto.Dish;
  7. import at.ac.tuwien.sepm.assignment.groupphase.demeter.dto.DishSearch;
  8. import at.ac.tuwien.sepm.assignment.groupphase.demeter.dto.Ingredient;
  9. import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
  10. import at.ac.tuwien.sepm.assignment.groupphase.util.Category;
  11. import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager;
  12. import net.jcip.annotations.NotThreadSafe;
  13. import org.junit.*;
  14. import org.junit.rules.ErrorCollector;
  15.  
  16. import java.sql.Connection;
  17. import java.sql.DriverManager;
  18. import java.sql.SQLException;
  19. import java.util.ArrayList;
  20. import java.util.Arrays;
  21. import java.util.List;
  22.  
  23. import static org.junit.Assert.assertEquals;
  24. import static org.junit.Assert.assertNull;
  25. import static org.mockito.ArgumentMatchers.any;
  26. import static org.mockito.Mockito.mock;
  27. import static org.mockito.Mockito.when;
  28.  
  29. @NotThreadSafe
  30. public class DishDAOTest {
  31. private static final JDBCConnectionManager jdbcConnectionManager = mock(JDBCConnectionManager.class);
  32. private static Connection connection;
  33. private static final JDBCConnectionManager errorConnectionManager = mock(JDBCConnectionManager.class);
  34. private static final Connection errorConnection = mock(Connection.class);
  35. private static final String CONNECTION_URL = "jdbc:h2:mem:;INIT=RUNSCRIPT FROM 'classpath:sql/Test.sql'";
  36. private static IImageManagementDAO imageManagementDAO=mock(ImageHybridDB.class);
  37. private static IDishDAO dishDAO;
  38. private static IDishDAO errorDishDAO;
  39. private DishSearch validSearch;
  40.  
  41. @Rule
  42. public ErrorCollector err = new ErrorCollector();
  43.  
  44. @SuppressWarnings("MagicConstant")
  45. @BeforeClass
  46. public static void init() throws SQLException, PersistenceException {
  47. when(jdbcConnectionManager.getConnection()).thenReturn(getConnection());
  48. when(errorConnection.prepareStatement(any())).thenThrow(new SQLException());
  49. when(errorConnection.prepareStatement(any(), any(Integer.class))).thenThrow(new SQLException());
  50. when(errorConnectionManager.getConnection()).thenReturn(errorConnection);
  51. dishDAO = new DishDAO(jdbcConnectionManager, imageManagementDAO);
  52. errorDishDAO=new DishDAO(errorConnectionManager, imageManagementDAO);
  53. }
  54.  
  55. @AfterClass
  56. public static void tearDown() throws SQLException {
  57. if (connection != null) {
  58. connection.rollback();
  59. }
  60. }
  61.  
  62. private static Connection getConnection() throws SQLException{
  63. if (connection == null){
  64. connection = DriverManager.getConnection(CONNECTION_URL, "admin", "admin");
  65. connection.setAutoCommit(false);
  66. }
  67. return connection;
  68. }
  69.  
  70. @Before
  71. public void initBeforeEachTest() throws SQLException{
  72.  
  73. if (connection != null) {
  74. connection.rollback();
  75. }
  76. List<Ingredient> validIngList = new ArrayList<>();
  77. List<Allergen> validAlgList = new ArrayList<>();
  78. validSearch = new DishSearch("",0d,9000d,validIngList,validAlgList);
  79. }
  80.  
  81.  
  82. @Test
  83. public void errorDishDAOConstructorTest() throws SQLException{
  84. when(errorConnectionManager.getConnection()).thenThrow(new SQLException());
  85. try {
  86. new DishDAO(errorConnectionManager, imageManagementDAO);
  87. err.addError(new AssertionError("Persistence exception is not thrown"));
  88. } catch (PersistenceException e) {
  89. assertEquals("java.sql.SQLException", e.getMessage());
  90. }
  91. }
  92. @Test
  93. public void getAllDishesFromDBTest(){
  94. try {
  95. var dishes=dishDAO.getAllDishes();
  96. assertEquals(2, dishes.size());
  97. assertEquals("Dish name", dishes.get(0).getName());
  98. assertEquals("Dish description", dishes.get(0).getDescription());
  99. assertEquals(Category.MAINCOURSE, dishes.get(0).getCategory());
  100. assertEquals(2, dishes.get(0).getListOfAllergens().size());
  101. assertEquals("A", dishes.get(0).getListOfAllergens().get(0).getSymbol().toString());
  102. assertEquals("B", dishes.get(0).getListOfAllergens().get(1).getSymbol().toString());
  103. assertEquals(2, dishes.get(0).getListOfIngredients().size());
  104.  
  105. assertEquals("Second dish", dishes.get(1).getName());
  106. assertEquals("second description", dishes.get(1).getDescription());
  107. assertEquals(Category.SOUP, dishes.get(1).getCategory());
  108. assertEquals(2, dishes.get(1).getListOfAllergens().size());
  109. assertEquals("C", dishes.get(1).getListOfAllergens().get(0).getSymbol().toString());
  110. assertEquals("D", dishes.get(1).getListOfAllergens().get(1).getSymbol().toString());
  111. assertEquals(2, dishes.get(1).getListOfIngredients().size());
  112.  
  113. } catch (PersistenceException e) {
  114. err.addError(e);
  115. }
  116. }
  117.  
  118. @Test
  119. public void getAllDishesException(){
  120. try {
  121. errorDishDAO.getAllDishes();
  122. err.addError(new AssertionError("Persistence exception is not thrown"));
  123. } catch (PersistenceException e) {
  124. assertEquals("java.sql.SQLException", e.getMessage());
  125. }
  126. }
  127.  
  128. @Test
  129. public void addNewDishTest(){
  130.  
  131. var dish=new Dish();
  132. dish.setName("Dish for test");
  133. dish.setDescription("Description of test dish");
  134. dish.setPrice(10.0);
  135. dish.setCategory(Category.DESSERT);
  136. dish.setListOfAllergens(new ArrayList<>());
  137. dish.setListOfIngredients(new ArrayList<>());
  138. try {
  139. dishDAO.addNewDish(dish);
  140. var dishes=dishDAO.getAllDishes();
  141. assertEquals(3, dishes.size());
  142. assertEquals("Dish for test", dishes.get(2).getName());
  143. assertEquals("Description of test dish", dishes.get(2).getDescription());
  144. assertEquals(Category.DESSERT, dishes.get(2).getCategory());
  145. assertEquals(0, dishes.get(2).getListOfAllergens().size());
  146. assertEquals(0, dishes.get(2).getListOfIngredients().size());
  147. } catch (PersistenceException e) {
  148. err.addError(e);
  149. }
  150.  
  151. }
  152.  
  153. @Test
  154. public void addNewDishException(){
  155.  
  156. try {
  157. var dish=new Dish();
  158. errorDishDAO.addNewDish(dish);
  159. err.addError(new AssertionError("Persistence exception is not thrown"));
  160. } catch (PersistenceException e) {
  161. assertEquals("java.sql.SQLException", e.getMessage());
  162. }
  163. }
  164.  
  165. @Test
  166. public void deleteDishTest(){
  167. try {
  168. var dishes=dishDAO.getAllDishes();
  169. dishDAO.deleteDish(dishes.get(0));
  170. dishes=dishDAO.getAllDishes();
  171. assertEquals(1, dishes.size());
  172. assertEquals("Second dish", dishes.get(0).getName());
  173. } catch (PersistenceException e) {
  174. err.addError(e);
  175. }
  176. }
  177.  
  178. @Test
  179. public void deleteDishException(){
  180. var dish=new Dish();
  181. try {
  182. errorDishDAO.deleteDish(dish);
  183. err.addError(new AssertionError("Persistence exception is not thrown"));
  184. } catch (PersistenceException e) {
  185. assertEquals("java.sql.SQLException", e.getMessage());
  186. }
  187.  
  188. }
  189.  
  190. @Test
  191. public void getDishIngredientsTest(){
  192. try {
  193. var dishes=dishDAO.getAllDishes();
  194. var ingredients=dishDAO.getIngredients(dishes.get(0));
  195. assertEquals(2, ingredients.size());
  196. assertEquals("chicken", ingredients.get(0).getName());
  197. assertEquals("tomato", ingredients.get(1).getName());
  198. } catch (PersistenceException e) {
  199. err.addError(e);
  200. }
  201. }
  202.  
  203. @Test
  204. public void getDishIngredientsException(){
  205. var dish=new Dish();
  206. try {
  207. errorDishDAO.getIngredients(dish);
  208. err.addError(new AssertionError("Persistence exception is not thrown"));
  209. } catch (PersistenceException e) {
  210. assertEquals("java.sql.SQLException", e.getMessage());
  211. }
  212.  
  213. }
  214.  
  215. @Test
  216. public void getDishAllergensTest(){
  217. try {
  218. var dishes=dishDAO.getAllDishes();
  219. var allergens=dishDAO.getAllergensInDish(dishes.get(1));
  220. assertEquals(2, allergens.size());
  221. assertEquals("C", allergens.get(0).getSymbol().toString());
  222. assertEquals("D", allergens.get(1).getSymbol().toString());
  223. } catch (PersistenceException e) {
  224. err.addError(e);
  225. }
  226. }
  227.  
  228. @Test
  229. public void getDishAllergensException(){
  230. var dish=new Dish();
  231. try {
  232. errorDishDAO.getAllergensInDish(dish);
  233. err.addError(new AssertionError("Persistence exception is not thrown"));
  234. } catch (PersistenceException e) {
  235. assertEquals("java.sql.SQLException", e.getMessage());
  236. }
  237.  
  238. }
  239.  
  240. @Test
  241. public void updateDishTest(){
  242. try {
  243. var dishes=dishDAO.getAllDishes();
  244. var dish=dishes.get(0);
  245. dish.setName("Updated name");
  246. dish.setDescription(null);
  247. dish.setCategory(Category.DRINK);
  248. dishDAO.updateDish(dish);
  249. dishes=dishDAO.getAllDishes();
  250. assertEquals(2, dishes.size());
  251. assertEquals("Updated name", dishes.get(0).getName());
  252. assertNull(dishes.get(0).getDescription());
  253. assertEquals(Category.DRINK, dishes.get(0).getCategory());
  254. } catch (PersistenceException e) {
  255. err.addError(e);
  256. }
  257. }
  258.  
  259. @Test
  260. public void updateDishException(){
  261. var dish=new Dish();
  262. try {
  263. errorDishDAO.updateDish(dish);
  264. err.addError(new AssertionError("Persistence exception is not thrown"));
  265. } catch (PersistenceException e) {
  266. assertEquals("java.sql.SQLException", e.getMessage());
  267. }
  268. }
  269.  
  270. @Test
  271. public void deleteDishAllergensTest(){
  272. var DELETE_DISH_ALLERGENS_QUERY="DELETE FROM dish_allergen WHERE dish_id=?";
  273. try {
  274. var dishes=dishDAO.getAllDishes();
  275. dishDAO.deleteDishIngredientsAllergens(dishes.get(0), DELETE_DISH_ALLERGENS_QUERY);
  276. dishes=dishDAO.getAllDishes();
  277. assertEquals(0, dishes.get(0).getListOfAllergens().size());
  278. } catch (PersistenceException e) {
  279. err.addError(e);
  280. }
  281. }
  282.  
  283. @Test
  284. public void deleteDishAllergensException(){
  285. var dish=new Dish();
  286. try {
  287. errorDishDAO.deleteDishIngredientsAllergens(dish, "DELETE FROM dish_allergen WHERE dish_id = ?");
  288. err.addError(new AssertionError("Persistence exception is not thrown"));
  289. } catch (PersistenceException e) {
  290. assertEquals("java.sql.SQLException", e.getMessage());
  291. }
  292. }
  293.  
  294. @Test
  295. public void deleteDishIngredientsTest(){
  296. var DELETE_DISH_INGREDIENTS_QUERY="DELETE FROM dish_ingredient WHERE dish_id=?";
  297. try {
  298. var dishes=dishDAO.getAllDishes();
  299. dishDAO.deleteDishIngredientsAllergens(dishes.get(0), DELETE_DISH_INGREDIENTS_QUERY);
  300. dishes=dishDAO.getAllDishes();
  301. assertEquals(0, dishes.get(0).getListOfIngredients().size());
  302. } catch (PersistenceException e) {
  303. err.addError(e);
  304. }
  305. }
  306. @Test
  307. public void deleteDishIngredientsException(){
  308. var dish=new Dish();
  309. try {
  310. errorDishDAO.deleteDishIngredientsAllergens(dish, "DELETE FROM dish_ingredient WHERE dish_id = ?");
  311. err.addError(new AssertionError("Persistence exception is not thrown"));
  312. } catch (PersistenceException e) {
  313. assertEquals("java.sql.SQLException", e.getMessage());
  314. }
  315. }
  316.  
  317. @Test
  318. public void saveDishAllergensTest(){
  319. try {
  320. var dishes=dishDAO.getAllDishes();
  321. var allergenList=new ArrayList<Allergen>();
  322. var allergen1=new Allergen();
  323. allergen1.setSymbol('F');
  324. allergen1.setName("Soya");
  325. allergenList.add(allergen1);
  326. var allergen2=new Allergen();
  327. allergen2.setSymbol('H');
  328. allergen2.setName("Nuts");
  329. allergenList.add(allergen2);
  330. dishes.get(0).setListOfAllergens(allergenList);
  331. dishDAO.saveDishAllergens(dishes.get(0));
  332. dishes=dishDAO.getAllDishes();
  333. assertEquals(4, dishes.get(0).getListOfAllergens().size());
  334. assertEquals("F", dishes.get(0).getListOfAllergens().get(2).getSymbol().toString());
  335. assertEquals("H", dishes.get(0).getListOfAllergens().get(3).getSymbol().toString());
  336.  
  337. } catch (PersistenceException e) {
  338. err.addError(e);
  339. }
  340. }
  341.  
  342. @Test
  343. public void saveDishAllergenException(){
  344. var dish=new Dish();
  345. try {
  346. errorDishDAO.saveDishAllergens(dish);
  347. err.addError(new AssertionError("Persistence exception is not thrown"));
  348. } catch (PersistenceException e) {
  349. assertEquals("java.sql.SQLException", e.getMessage());
  350. }
  351. }
  352.  
  353. @Test
  354. public void saveDishIngredientTest(){
  355. try {
  356. var dishes=dishDAO.getAllDishes();
  357. var ingredientList=new ArrayList<Ingredient>();
  358. var ingredient1=new Ingredient();
  359. ingredient1.setId(3L);
  360. ingredient1.setName("salmon");
  361. ingredientList.add(ingredient1);
  362. var ingredient2=new Ingredient();
  363. ingredient2.setId(4L);
  364. ingredient2.setName("cucumber");
  365. ingredientList.add(ingredient2);
  366. dishes.get(0).setListOfIngredients(ingredientList);
  367. dishDAO.saveDishIngredients(dishes.get(0));
  368. dishes=dishDAO.getAllDishes();
  369. assertEquals(4, dishes.get(0).getListOfIngredients().size());
  370. assertEquals("salmon", dishes.get(0).getListOfIngredients().get(2).getName());
  371. assertEquals("cucumber", dishes.get(0).getListOfIngredients().get(3).getName());
  372. } catch (PersistenceException e) {
  373. err.addError(e);
  374. }
  375. }
  376.  
  377. @Test
  378. public void saveDishIngredientException(){
  379. var dish=new Dish();
  380. try {
  381. errorDishDAO.saveDishIngredients(dish);
  382. err.addError(new AssertionError("Persistence exception is not thrown"));
  383. } catch (PersistenceException e) {
  384. assertEquals("java.sql.SQLException", e.getMessage());
  385. }
  386. }
  387.  
  388. @Test
  389. public void validTotalSearch() {
  390. try {
  391. var result = dishDAO.searchDishes(validSearch);
  392. Assert.assertEquals(2,result.size());
  393. } catch (PersistenceException e) {
  394. err.addError(e);
  395. }
  396. }
  397.  
  398. @Test
  399. public void searchWithIngredients() {
  400. Ingredient chicken = new Ingredient(null,"chicken",false);
  401. Ingredient tomato = new Ingredient(null,"tomato",false);
  402. List<Ingredient> ingredientList = new ArrayList<>();
  403. ingredientList.addAll(Arrays.asList(chicken,tomato));
  404. validSearch.setIngredients(ingredientList);
  405. try {
  406. var result = dishDAO.searchDishes(validSearch);
  407. Assert.assertEquals(1,result.size());
  408. Assert.assertEquals("Dish name", result.get(0).getName());
  409. } catch (PersistenceException e) {
  410. err.addError(e);
  411. }
  412. }
  413.  
  414. @Test
  415. public void searchWithAllergens() {
  416. Allergen gluten = new Allergen('A', "Gluten");
  417. List<Allergen> allergens = new ArrayList<>();
  418. allergens.add(gluten);
  419. validSearch.setAllergens(allergens);
  420. try {
  421. var result = dishDAO.searchDishes(validSearch);
  422. Assert.assertEquals(1,result.size());
  423. Assert.assertEquals("Second dish",result.get(0).getName());
  424. } catch (PersistenceException e) {
  425. err.addError(e);
  426. }
  427.  
  428. }
  429.  
  430. @Test
  431. public void searchNullPricFr() {
  432. validSearch.setPriceFrom(null);
  433. try {
  434. var result = dishDAO.searchDishes(validSearch);
  435. Assert.assertEquals(2,result.size());
  436. } catch (PersistenceException e) {
  437. err.addError(e);
  438. }
  439. }
  440.  
  441. @Test
  442. public void searchNullPricTo() {
  443. validSearch.setPriceTo(null);
  444. try {
  445. var result = dishDAO.searchDishes(validSearch);
  446. Assert.assertEquals(2,result.size());
  447. } catch (PersistenceException e) {
  448. err.addError(e);
  449. }
  450. }
  451.  
  452. @Test
  453. public void persistanceExceptionSearch() {
  454. try{
  455. errorDishDAO.searchDishes(validSearch);
  456. err.addError(new AssertionError("Persistence exception not thrown"));
  457. } catch (PersistenceException e) {
  458. assertEquals("java.sql.SQLException", e.getMessage());
  459. }
  460. }
  461. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement