001: package org.tigris.scarab.util.word;
002:
003: /* ================================================================
004: * Copyright (c) 2000-2002 CollabNet. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions are
008: * met:
009: *
010: * 1. Redistributions of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * 2. Redistributions in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in the
015: * documentation and/or other materials provided with the distribution.
016: *
017: * 3. The end-user documentation included with the redistribution, if
018: * any, must include the following acknowlegement: "This product includes
019: * software developed by Collab.Net <http://www.Collab.Net/>."
020: * Alternately, this acknowlegement may appear in the software itself, if
021: * and wherever such third-party acknowlegements normally appear.
022: *
023: * 4. The hosted project names must not be used to endorse or promote
024: * products derived from this software without prior written
025: * permission. For written permission, please contact info@collab.net.
026: *
027: * 5. Products derived from this software may not use the "Tigris" or
028: * "Scarab" names nor may "Tigris" or "Scarab" appear in their names without
029: * prior written permission of Collab.Net.
030: *
031: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
032: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
033: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
034: * IN NO EVENT SHALL COLLAB.NET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
035: * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
036: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
037: * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
038: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
039: * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
040: * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
041: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
042: *
043: * ====================================================================
044: *
045: * This software consists of voluntary contributions made by many
046: * individuals on behalf of Collab.Net.
047: */
048:
049: import org.apache.torque.om.NumberKey;
050: import org.tigris.scarab.test.BaseScarabTestCase;
051: import org.tigris.scarab.om.Module;
052: import org.tigris.scarab.om.IssueType;
053: import org.tigris.scarab.om.AttributeValue;
054: import org.tigris.scarab.om.AttributeManager;
055: import org.tigris.scarab.om.AttributeOptionManager;
056: import org.tigris.scarab.om.AttributeOption;
057: import org.tigris.scarab.util.IteratorWithSize;
058:
059: /**
060: * A Testing Suite for the om.IssueSearch class.
061: *
062: * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
063: * @version $Id: IssueSearchTest.java 9966 2005-11-27 22:10:05Z jorgeuriarte $
064: */
065: public class IssueSearchTest extends BaseScarabTestCase {
066: private IssueSearch search;
067:
068: private int[] attributeIds = { 3, 4, 6, 7, 8 }; //, 9, 12};
069: private int[] optionIds = { 1, 8, 24, 54, 58 }; //, 62, 88};
070:
071: private IssueSearch getSearch() throws Exception,
072: MaxConcurrentSearchException {
073: Module module = getModule();
074: IssueType it = getDefaultIssueType();
075: IssueSearch search = IssueSearchFactory.INSTANCE.getInstance(
076: module, it, getUser1());
077: search.setIssueListAttributeColumns(module
078: .getDefaultRModuleUserAttributes(it));
079: return search;
080: }
081:
082: public void testSingleOptionAttribute() throws Exception {
083: IssueSearch search = getSearch();
084: AttributeValue platformAV = AttributeValue.getNewInstance(
085: getPlatformAttribute(), search);
086: AttributeOption sgi = AttributeOptionManager
087: .getInstance(new Integer(21));
088: platformAV.setAttributeOption(sgi);
089: search.addAttributeValue(platformAV);
090: IteratorWithSize results = search.getQueryResults();
091: assertTrue("Should be one result.", (results.size() == 1));
092: IssueSearchFactory.INSTANCE.notifyDone();
093: }
094:
095: public void testWrongOptionAttribute() throws Exception {
096: IssueSearch search = getSearch();
097: AttributeValue platformAV = AttributeValue.getNewInstance(
098: getPlatformAttribute(), search);
099: AttributeOption notsgi = AttributeOptionManager
100: .getInstance(new Integer(20));
101: platformAV.setAttributeOption(notsgi);
102: search.addAttributeValue(platformAV);
103: IteratorWithSize results = search.getQueryResults();
104: assertTrue("Should be no result.", (results.size() == 0));
105: IssueSearchFactory.INSTANCE.notifyDone();
106: }
107:
108: /**
109: * The sample data set contains ONE issue in Pacman>Source with
110: * the Vote attribute without value.
111: * This test tries to search for it, using 0 as empty attribute.
112: * @throws Exception
113: */
114: public void testEmptyOptionAttribute() throws Exception {
115: IssueSearch search = getSearch();
116: AttributeValue statusAV = AttributeValue.getNewInstance(
117: getVoteAttribute(), search);
118: AttributeOption empty = AttributeOptionManager
119: .getInstance(new Integer(0));
120: statusAV.setAttributeOption(empty);
121: search.addAttributeValue(statusAV);
122: IteratorWithSize results = search.getQueryResults();
123: assertTrue("Should be ONE result.", (results.size() == 1));
124: IssueSearchFactory.INSTANCE.notifyDone();
125: }
126:
127: public void testUserWithAny() throws Exception {
128: IssueSearch search = getSearch();
129: search.addUserCriteria(getUser5().getUserId().toString(),
130: IssueSearch.ANY_KEY);
131: IteratorWithSize results = search.getQueryResults();
132: assertTrue("Should be one result.", (results.size() == 1));
133: IssueSearchFactory.INSTANCE.notifyDone();
134: }
135:
136: public void testUserWithCreatedBy() throws Exception {
137: IssueSearch search = getSearch();
138: search.addUserCriteria(getUser5().getUserId().toString(),
139: IssueSearch.CREATED_BY_KEY);
140: IteratorWithSize results = search.getQueryResults();
141: assertTrue("Should be one result.", (results.size() == 1));
142: IssueSearchFactory.INSTANCE.notifyDone();
143: }
144:
145: public void testUserWithAssignedTo() throws Exception {
146: IssueSearch search = getSearch();
147: search.addUserCriteria(getUser5().getUserId().toString(),
148: getAssignAttribute().getAttributeId().toString());
149: IteratorWithSize results = search.getQueryResults();
150: assertTrue("Should be no results.", (results.size() == 0));
151: IssueSearchFactory.INSTANCE.notifyDone();
152: }
153:
154: // these seem to cause timeouts
155: public void OFFtestUserWithAssignedToAndCreatedDate()
156: throws Exception {
157: IssueSearch search = getSearch();
158: search.addUserCriteria(getUser5().getUserId().toString(),
159: getAssignAttribute().getAttributeId().toString());
160: search.setMinDate("01/01/2000");
161: IteratorWithSize results = search.getQueryResults();
162: assertTrue("Should be no results.", (results.size() == 0));
163: IssueSearchFactory.INSTANCE.notifyDone();
164: }
165:
166: public void testSingleOptionAndUserWithAny() throws Exception {
167: IssueSearch search = getSearch();
168: AttributeValue platformAV = AttributeValue.getNewInstance(
169: getPlatformAttribute(), search);
170: AttributeOption sgi = AttributeOptionManager
171: .getInstance(new Integer(21));
172: platformAV.setAttributeOption(sgi);
173: search.addAttributeValue(platformAV);
174: search.addUserCriteria(getUser5().getUserId().toString(),
175: IssueSearch.ANY_KEY);
176: IteratorWithSize results = search.getQueryResults();
177: assertTrue("Should be one result.", (results.size() == 1));
178: IssueSearchFactory.INSTANCE.notifyDone();
179: }
180:
181: public void OFFtestLargeQuery() throws Exception {
182: IssueSearch search = getSearch();
183: search.setMinDate("01/01/2000"); // 1
184: AttributeValue av;
185: AttributeOption o;
186: for (int i = 0; i < attributeIds.length; i++) {
187: av = AttributeValue.getNewInstance(AttributeManager
188: .getInstance(new Integer(attributeIds[i])), search);
189: o = AttributeOptionManager.getInstance(new Integer(
190: optionIds[i]));
191: av.setAttributeOption(o);
192: search.addAttributeValue(av); // 6
193: }
194:
195: search.addUserCriteria(getUser5().getUserId().toString(),
196: IssueSearch.ANY_KEY); // 7
197:
198: search.setStateChangeFromOptionId(new Integer(2));
199: search.setStateChangeToOptionId(new Integer(1)); // 8
200: search.setStateChangeFromDate("01/01/2000");
201: search.setStateChangeToDate("01/01/2004"); // 9
202:
203: IteratorWithSize results = search.getQueryResults();
204: assertTrue("Should be no results.", (results.size() == 0));
205: IssueSearchFactory.INSTANCE.notifyDone();
206:
207: av = AttributeValue.getNewInstance(getPlatformAttribute(),
208: search);
209: o = AttributeOptionManager.getInstance(new Integer(21));
210: av.setAttributeOption(o);
211: System.out.println("av size="
212: + search.getAttributeValues().size());
213: search.addAttributeValue(av); // 11
214: System.out.println("after av size="
215: + search.getAttributeValues().size());
216:
217: try {
218: search.getQueryResults();
219: fail("Should have thrown ComplexQueryException");
220: } catch (ComplexQueryException e) {
221: // expected
222: }
223: IssueSearchFactory.INSTANCE.notifyDone();
224: }
225: }
|