001 package com.khubla.pragmatach.contrib.testsupport.dao; 002 003 import java.io.Serializable; 004 import java.util.List; 005 006 import org.testng.Assert; 007 import org.testng.annotations.BeforeClass; 008 import org.testng.annotations.Test; 009 010 import com.khubla.pragmatach.framework.application.Application; 011 import com.khubla.pragmatach.framework.configuration.PropertiesFileConfigurationImpl; 012 import com.khubla.pragmatach.framework.dao.DAO; 013 import com.khubla.pragmatach.framework.dao.Pager; 014 import com.khubla.pragmatach.framework.scanner.AnnotationScanner; 015 016 /** 017 * @author tome 018 */ 019 public abstract class AbstractDAOTest<T, I extends Serializable> { 020 /** 021 * get the DAO 022 */ 023 public abstract DAO<T, I> getDAO(); 024 025 /** 026 * get id 027 */ 028 public abstract I getId(T t); 029 030 /** 031 * get an instance 032 */ 033 public abstract T getInstance(); 034 035 /** 036 * for the class 037 */ 038 @BeforeClass 039 public void setupClass() { 040 /* 041 * run the scanner 042 */ 043 try { 044 AnnotationScanner.scan(null); 045 } catch (final Exception e) { 046 e.printStackTrace(); 047 Assert.fail(); 048 } 049 /* 050 * set the config 051 */ 052 Application.setConfiguration(new PropertiesFileConfigurationImpl()); 053 } 054 055 /** 056 * basic CRUD tests on the DAO 057 */ 058 @Test(enabled = true) 059 public void testCRUD() { 060 try { 061 /* 062 * get DAO 063 */ 064 final DAO<T, I> dao = this.getDAO(); 065 Assert.assertNotNull(dao); 066 /* 067 * get an instance 068 */ 069 final T t = this.getInstance(); 070 Assert.assertNotNull(t); 071 /* 072 * there are no rows 073 */ 074 long count = dao.count(); 075 Assert.assertTrue(0 == count); 076 /* 077 * get all 078 */ 079 List<T> all = dao.getAll(); 080 Assert.assertNotNull(all); 081 Assert.assertTrue(all.size() == 0); 082 /* 083 * save the instance 084 */ 085 dao.save(t); 086 final I id = this.getId(t); 087 Assert.assertNotNull(id); 088 /* 089 * there's 1 row 090 */ 091 count = dao.count(); 092 Assert.assertTrue(1 == count); 093 /* 094 * get it back 095 */ 096 final T retrieved = dao.findById(id); 097 final I retrievedId = this.getId(retrieved); 098 Assert.assertNotNull(retrieved); 099 Assert.assertNotNull(retrievedId); 100 /* 101 * get a list of rows 102 */ 103 all = dao.getAll(); 104 Assert.assertNotNull(all); 105 Assert.assertTrue(all.size() == 1); 106 /* 107 * delete it 108 */ 109 dao.delete(t); 110 /* 111 * no rows 112 */ 113 count = dao.count(); 114 Assert.assertTrue(0 == count); 115 /* 116 * it's gone 117 */ 118 final T retrieved2 = dao.findById(id); 119 Assert.assertNull(retrieved2); 120 /* 121 * nothing in list 122 */ 123 all = dao.getAll(); 124 Assert.assertNotNull(all); 125 Assert.assertTrue(all.size() == 0); 126 } catch (final Exception e) { 127 e.printStackTrace(); 128 Assert.fail(); 129 } 130 } 131 132 /** 133 * test that we can get pager 134 */ 135 @Test(enabled = true) 136 public void testPager() { 137 try { 138 /* 139 * get DAO 140 */ 141 final DAO<T, I> dao = this.getDAO(); 142 Assert.assertNotNull(dao); 143 /* 144 * get pager 145 */ 146 final Pager<T> pager = dao.getPager(10); 147 Assert.assertNotNull(pager); 148 } catch (final Exception e) { 149 e.printStackTrace(); 150 Assert.fail(); 151 } 152 } 153 }