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
62 Knowledge knowledgeUnderneath = knowledgeDao.find(knowledgeResult.getId());
63 knowledgeUnderneath.setContent("System -> Quit");
64 knowledgeDao.save(knowledgeUnderneath);
65
66
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 }