1   package com.neidetcher.petunia.service;
2   
3   import java.util.List;
4   
5   import junit.framework.TestCase;
6   
7   import org.springframework.beans.factory.BeanFactory;
8   import org.springframework.beans.factory.xml.XmlBeanFactory;
9   import org.springframework.core.io.ClassPathResource;
10  import org.springframework.core.io.Resource;
11  import org.springframework.dao.OptimisticLockingFailureException;
12  
13  public class KnowledgeDaoTest extends TestCase
14  {
15  
16     KnowledgeDao knowledgeDao;
17  
18     @Override
19     public void setUp()
20     {
21        knowledgeDao = (KnowledgeDao) getBean("KnowledgeDao");
22     }
23  
24     public void testSave_insert()
25     {
26        Knowledge knowledge = new KnowledgeImpl();
27        knowledge.setContent("hit the power button");
28        knowledge.setName("How to Turn Off The Computer");
29        knowledge.setUserName("demian");
30  
31        Knowledge knowledgeResult = knowledgeDao.save(knowledge);
32        assertNotNull(knowledgeResult);
33     }
34  
35     public void testSave_update()
36     {
37        Knowledge knowledge = new KnowledgeImpl();
38        knowledge.setContent("press the quit button");
39        knowledge.setName("how to quit");
40        knowledge.setUserName("demian");
41  
42        Knowledge knowledgeResult = knowledgeDao.save(knowledge);
43        assertNotNull(knowledgeResult);
44  
45        knowledgeResult.setContent("pa-ress the quit button");
46        Knowledge knowledgeResult2 = knowledgeDao.save(knowledgeResult);
47        assertNotNull(knowledgeResult2);
48        assertEquals(knowledgeResult.getId(), knowledgeResult2.getId());
49     }
50  
51     public void testSave_dirtyUpdate()
52     {
53        Knowledge knowledge = new KnowledgeImpl();
54        knowledge.setContent("press the quit button");
55        knowledge.setName("how to quit");
56        knowledge.setUserName("demian");
57  
58        Knowledge knowledgeResult = knowledgeDao.save(knowledge);
59        assertNotNull(knowledgeResult);
60  
61        // do a read & write underneath
62        Knowledge knowledgeUnderneath = knowledgeDao.find(knowledgeResult.getId());
63        knowledgeUnderneath.setContent("System -> Quit");
64        knowledgeDao.save(knowledgeUnderneath);
65  
66        // now the save will have trouble
67        knowledgeResult.setContent("pa-ress the quit button");
68        try
69        {
70           knowledgeDao.save(knowledgeResult);
71           fail("should've thrown an exception");
72        }
73        catch (OptimisticLockingFailureException e)
74        {
75           assertTrue(e.getMessage().startsWith("Provided you have given an"));
76        }
77     }
78  
79     public void testFind()
80     {
81        Knowledge knowledgeResult = knowledgeDao.find(1);
82        assertNotNull(knowledgeResult);
83     }
84  
85     public void testFindByTagName()
86     {
87        List<Knowledge> knowledges = knowledgeDao.findByTagName("tiger");
88  
89        assertFalse(knowledges.isEmpty());
90        for (Knowledge currKnowledge : knowledges)
91        {
92           System.out.println("currKnowledge: " + currKnowledge);
93        }
94     }
95  
96     public void testFindByCategoryId()
97     {
98        List<Knowledge> knowledges = knowledgeDao.findByCategoryId(9);
99  
100       assertFalse(knowledges.isEmpty());
101       for (Knowledge currKnowledge : knowledges)
102       {
103          System.out.println("currKnowledge: " + currKnowledge);
104       }
105    }
106 
107    public void testFindTags()
108    {
109       List<String> tags = knowledgeDao.findTags(1);
110       assertFalse(tags.isEmpty());
111       assertTrue(tags.size() > 1);
112 
113       boolean hasJava = false;
114       boolean hasTiger = false;
115 
116       for (String tag : tags)
117       {
118          System.out.println("tag: " + tag);
119          if (tag.equals("java"))
120          {
121             hasJava = true;
122          }
123 
124          if (tag.equals("tiger"))
125          {
126             hasTiger = true;
127          }
128       }
129 
130       assertTrue("should've found java", hasJava);
131       assertTrue("should've found tiger", hasTiger);
132    }
133 
134    private final Integer KNOWLEDGE_ID = 1;
135 
136    public void testTagMethods()
137    {
138       int initialSize = knowledgeDao.findTags(KNOWLEDGE_ID).size();
139 
140       knowledgeDao.addTag(KNOWLEDGE_ID, "fafa");
141       assertEquals(initialSize + 1, knowledgeDao.findTags(KNOWLEDGE_ID).size());
142 
143       knowledgeDao.removeTag(KNOWLEDGE_ID, "fafa");
144       assertEquals(initialSize, knowledgeDao.findTags(KNOWLEDGE_ID).size());
145    }
146 
147    protected Object getBean(String name)
148    {
149       Resource resource = new ClassPathResource("applicationContext.xml");
150       BeanFactory factory = new XmlBeanFactory(resource);
151       return factory.getBean(name);
152    }
153 }