1 package org.marketchangers.prayer.lucene;
2
3 import java.io.IOException;
4 import java.text.ParseException;
5 import java.text.SimpleDateFormat;
6 import java.util.Date;
7 import java.util.Hashtable;
8 import java.util.List;
9 import java.util.Map;
10
11 import junit.framework.TestCase;
12 import junit.textui.TestRunner;
13
14 import org.apache.lucene.analysis.Analyzer;
15 import org.apache.lucene.analysis.standard.StandardAnalyzer;
16 import org.apache.lucene.index.IndexWriter;
17 import org.apache.lucene.store.Directory;
18 import org.apache.lucene.store.RAMDirectory;
19 import org.marketchangers.prayer.PrayerRequest;
20 import org.marketchangers.prayer.PrayerRequestQuery;
21 import org.marketchangers.prayer.PrayerRequestSearcher;
22
23 /***
24 * @author <a href="mailto:mtodd@wc-group.com">Matthew Todd</a>
25 */
26 public class LucenePrayerRequestSearcherIntegrationTest extends TestCase {
27 private PrayerRequestSearcher searcher;
28 private int currentId;
29
30 protected void setUp() throws IOException {
31 currentId = 0;
32
33 Directory directory = new RAMDirectory();
34 Analyzer analyzer = new StandardAnalyzer();
35 IndexProvider provider = new DefaultIndexProvider(directory, analyzer);
36 initializeDirectory(directory, analyzer);
37
38 searcher = new LucenePrayerRequestSearcher(provider);
39 }
40
41
42 public void testCanSearchOverIndexedRequests() throws ParseException {
43 searcher.index(request("JOE", "Help.", "08-10-2004", "08-12-2004"));
44 searcher.index(request("JOE", "Hello?", "08-10-2004", "08-12-2004"));
45
46 List results =
47 searcher.search(query("JOE", "Help.", "08-10-2004", "08-12-2004"));
48 assertEquals(1, results.size());
49 assertEquals(0, ((Integer) results.get(0)).intValue());
50 }
51
52 public void testDoesntAssociateDocIdWithHitId() throws ParseException {
53 searcher.index(request("JOE", "Help.", "08-10-2004", "08-12-2004"));
54 searcher.index(request("JOE", "Hello?", "08-10-2004", "08-12-2004"));
55
56 List results =
57 searcher.search(query("JOE", "Hello?", "08-10-2004", "08-12-2004"));
58 assertEquals(1, results.size());
59 assertEquals(1, ((Integer) results.get(0)).intValue());
60 }
61
62 public void testDateRangesAreHardValues() throws ParseException {
63 searcher.index(request("JOE", "", "08-19-2004", "08-20-2004"));
64
65 size(0, searcher.search(query("JOE", "", "08-17-2004", "08-18-2004")));
66 size(0, searcher.search(query("JOE", "", "08-18-2004", "08-19-2004")));
67 size(1, searcher.search(query("JOE", "", "08-19-2004", "08-20-2004")));
68 size(0, searcher.search(query("JOE", "", "08-20-2004", "08-21-2004")));
69 size(0, searcher.search(query("JOE", "", "08-21-2004", "08-22-2004")));
70 }
71
72
73 private Date date(String date) throws ParseException {
74 return new SimpleDateFormat("MM-dd-yyyy").parse(date);
75 }
76
77 private void initializeDirectory(Directory directory, Analyzer analyzer)
78 throws IOException {
79 new IndexWriter(directory, analyzer, true).close();
80 }
81
82 private PrayerRequest request(
83 String requestorUserId,
84 String content,
85 String startDate,
86 String endDate)
87 throws ParseException {
88
89 PrayerRequest request = new PrayerRequest();
90 request.setBackground("");
91 request.setContent(content);
92 request.setEndDate(date(endDate));
93 request.setId(new Integer(currentId++));
94 request.setRequestorUserId(requestorUserId);
95 request.setStartDate(date(startDate));
96 request.setStatus(PrayerRequest.OPEN);
97 request.setSubject("");
98 return request;
99 }
100
101 private PrayerRequestQuery query(
102 String requestorUserId,
103 String searchTerms,
104 String startDate,
105 String endDate) {
106
107 Map parameters = new Hashtable();
108 parameters.put("requestorUserId", new String[] { requestorUserId });
109 parameters.put("searchTerms", new String[] { searchTerms });
110 parameters.put("startDate", new String[] { startDate });
111 parameters.put("endDate", new String[] { endDate });
112
113 return new PrayerRequestQuery(parameters);
114 }
115
116 private void size(int size, List list) {
117 assertEquals(size, list.size());
118 }
119
120
121
122
123
124
125 public static void main(String[] args) {
126 TestRunner.run(LucenePrayerRequestSearcherIntegrationTest.class);
127 }
128 }