001: /*
002: * ====================================================================
003: * JAFFA - Java Application Framework For All
004: *
005: * Copyright (C) 2002 JAFFA Development Group
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation; either
010: * version 2.1 of the License, or (at your option) any later version.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this library; if not, write to the Free Software
019: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020: *
021: * Redistribution and use of this software and associated documentation ("Software"),
022: * with or without modification, are permitted provided that the following conditions are met:
023: * 1. Redistributions of source code must retain copyright statements and notices.
024: * Redistributions must also contain a copy of this document.
025: * 2. Redistributions in binary form must reproduce the above copyright notice,
026: * this list of conditions and the following disclaimer in the documentation
027: * and/or other materials provided with the distribution.
028: * 3. The name "JAFFA" must not be used to endorse or promote products derived from
029: * this Software without prior written permission. For written permission,
030: * please contact mail to: jaffagroup@yahoo.com.
031: * 4. Products derived from this Software may not be called "JAFFA" nor may "JAFFA"
032: * appear in their names without prior written permission.
033: * 5. Due credit should be given to the JAFFA Project (http://jaffa.sourceforge.net).
034: *
035: * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
036: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
037: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
038: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
039: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
040: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
041: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
042: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
043: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
044: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
045: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
046: * SUCH DAMAGE.
047: * ====================================================================
048: */
049:
050: /*
051: * UpdateTest.java
052: *
053: * Created on April 1, 2002, 5:47 PM
054: */
055:
056: package org.jaffa.persistence.blackboxtests;
057:
058: import junit.framework.TestCase;
059: import org.jaffa.persistence.domainobjects.*;
060: import org.jaffa.persistence.UOW;
061: import org.jaffa.persistence.Criteria;
062: import java.util.Iterator;
063: import org.jaffa.datatypes.DateTime;
064: import org.jaffa.persistence.AtomicCriteria;
065: import org.jaffa.util.StringHelper;
066:
067: /** Tests for performing updates through the Jaffa Persistence Engine.
068: *
069: * @author GautamJ
070: */
071: public class UpdateTest extends TestCase {
072:
073: private static StringBuffer buf = new StringBuffer();
074: static {
075: for (int i = 0; i < 100000; i++)
076: buf.append('Z');
077: }
078: private static final String LONG_FIELD = buf.toString();
079:
080: private UOW m_uow = null;
081:
082: /** Creates new QueryTest
083: * @param name The name of the test case.
084: */
085: public UpdateTest(String name) {
086: super (name);
087: }
088:
089: /** Sets up the fixture, by creating the UOW. This method is called before a test is executed.
090: */
091: protected void setUp() {
092: try {
093: m_uow = new UOW();
094: } catch (Exception e) {
095: e.printStackTrace();
096: fail("Failed to create a UOW: " + e.toString());
097: }
098: }
099:
100: /** Tears down the fixture, by closing the UOW. This method is called after a test is executed.
101: */
102: protected void tearDown() {
103: try {
104: if (m_uow != null)
105: m_uow.rollback();
106: m_uow = null;
107: } catch (Exception e) {
108: e.printStackTrace();
109: fail("Failed to rollback a UOW: " + e.toString());
110: }
111: }
112:
113: /** Executes the following query:
114: * update syci set description='UPDATED DESC', SUPPORT_EQUIP_B='F', CALCULATE_MTBF_B='T' WHERE CATEGORY_INSTRUMENT='Z-TESTCI-01'
115: * It then ensures that the record was properly updated.
116: */
117: public void testUpdateCategoryOfInstrument() {
118: try {
119: Criteria c = new Criteria();
120: c.setTable(CategoryOfInstrumentMeta.getName());
121: c.addCriteria(CategoryOfInstrumentMeta.CATEGORY_INSTRUMENT,
122: "Z-TESTCI-01");
123: Iterator i = m_uow.query(c).iterator();
124: CategoryOfInstrument syci = (CategoryOfInstrument) i.next();
125: syci.updateDescription("UPDATED DESC");
126: syci.updateSupportEquip(Boolean.FALSE);
127: syci.updateCalculateMtbf(Boolean.TRUE);
128: m_uow.update(syci);
129: m_uow.commit();
130:
131: // Now ensure that the record got updated
132: m_uow = new UOW();
133: c = new Criteria();
134: c.setTable(CategoryOfInstrumentMeta.getName());
135: c.addCriteria(CategoryOfInstrumentMeta.CATEGORY_INSTRUMENT,
136: "Z-TESTCI-01");
137: i = m_uow.query(c).iterator();
138: syci = (CategoryOfInstrument) i.next();
139: assertEquals("UPDATED DESC", syci.getDescription());
140: assertEquals(Boolean.FALSE, syci.getSupportEquip());
141: assertEquals(Boolean.TRUE, syci.getCalculateMtbf());
142:
143: } catch (Exception e) {
144: e.printStackTrace();
145: fail();
146: }
147: }
148:
149: /** Updates a CATZ using the query:
150: * update catz set REMARKS = some 10,000 character string WHERE PART='Z-TESTPART-01'
151: * It then ensures that the record was properly updated.
152: */
153: public void testUpdateLong() {
154: try {
155: String longString = LONG_FIELD + '\n' + LONG_FIELD;
156: Criteria c = new Criteria();
157: c.setTable(PartRemarksMeta.getName());
158: c.addCriteria(PartRemarksMeta.PART, "Z-TESTPART-01");
159: Iterator i = m_uow.query(c).iterator();
160: PartRemarks catz = (PartRemarks) i.next();
161: catz.updateRemarks(longString);
162: m_uow.update(catz);
163: m_uow.commit();
164:
165: // Now ensure that the record got updated
166: m_uow = new UOW();
167: c = new Criteria();
168: c.setTable(PartRemarksMeta.getName());
169: c.addCriteria(PartRemarksMeta.PART, "Z-TESTPART-01");
170: i = m_uow.query(c).iterator();
171: catz = (PartRemarks) i.next();
172: assertEquals(longString, catz.getRemarks());
173:
174: } catch (Exception e) {
175: e.printStackTrace();
176: fail();
177: }
178: }
179:
180: /** Executes the following query:
181: * update syci set description='AFTER ROLLBACK' WHERE CATEGORY_INSTRUMENT='Z-TESTCI-01'
182: * It then does a rollback. This is followed by a commit.
183: * The test fails if the record is updated.
184: */
185: public void testCheckRollbackAfterUpdate() {
186: try {
187: Criteria c = new Criteria();
188: c.setTable(CategoryOfInstrumentMeta.getName());
189: c.addCriteria(CategoryOfInstrumentMeta.CATEGORY_INSTRUMENT,
190: "Z-TESTCI-01");
191: Iterator i = m_uow.query(c).iterator();
192: CategoryOfInstrument syci = (CategoryOfInstrument) i.next();
193: String originalDescription = syci.getDescription();
194: syci.updateDescription("AFTER ROLLBACK");
195: m_uow.update(syci);
196: m_uow.rollback();
197:
198: // Now ensure the record isn't updated
199: m_uow = new UOW();
200: c = new Criteria();
201: c.setTable(CategoryOfInstrumentMeta.getName());
202: c.addCriteria(CategoryOfInstrumentMeta.CATEGORY_INSTRUMENT,
203: "Z-TESTCI-01");
204: i = m_uow.query(c).iterator();
205: syci = (CategoryOfInstrument) i.next();
206: assertEquals(
207: "Record has been updated even after a rollback",
208: originalDescription, syci.getDescription());
209: } catch (Exception e) {
210: e.printStackTrace();
211: fail();
212: }
213: }
214:
215: /** Executes the following query:
216: * update item set created_datetime=to_date('2003-10-10', 'yyyy-MM-dd') where item_id='Z-TESTITEM-01'
217: * It then ensures that the record was properly updated and then resets it back to the original value
218: */
219: public void testUpdateDateTime() {
220: try {
221: Criteria c = new Criteria();
222: c.setTable(ItemMeta.getName());
223: c.addCriteria(ItemMeta.ITEM_ID, "Z-TESTITEM-01");
224: Iterator i = m_uow.query(c).iterator();
225: Item item = (Item) i.next();
226: DateTime originalCreatedDatetime = item
227: .getCreatedDatetime();
228: DateTime newCreatedDatetime = new DateTime(2003,
229: DateTime.OCTOBER, 10);
230: item.updateCreatedDatetime(newCreatedDatetime);
231: m_uow.update(item);
232: m_uow.commit();
233:
234: // Now ensure that the record got updated
235: m_uow = new UOW();
236: c = new Criteria();
237: c.setTable(ItemMeta.getName());
238: c.addCriteria(ItemMeta.ITEM_ID, "Z-TESTITEM-01");
239: i = m_uow.query(c).iterator();
240: item = (Item) i.next();
241: assertEquals(newCreatedDatetime, item.getCreatedDatetime());
242:
243: // Now reset to the original value
244: item.updateCreatedDatetime(originalCreatedDatetime);
245: m_uow.update(item);
246: m_uow.commit();
247:
248: } catch (Exception e) {
249: e.printStackTrace();
250: fail();
251: }
252: }
253:
254: /** Executes the following query:
255: * update syci set description='JOHN'S DESC' WHERE CATEGORY_INSTRUMENT='Z-TESTCI-01'
256: * It then ensures that the record was properly updated and resets the description to the old value.
257: */
258: public void testUpdateUsingQuote() {
259: try {
260: String category = "Z-TESTCI-01";
261: String newDesc = "DE'SC WI'TH Q'UOTES'";
262: String oldDesc = null;
263:
264: Criteria c = new Criteria();
265: c.setTable(CategoryOfInstrumentMeta.getName());
266: c.addCriteria(CategoryOfInstrumentMeta.CATEGORY_INSTRUMENT,
267: category);
268: Iterator i = m_uow.query(c).iterator();
269: CategoryOfInstrument syci = (CategoryOfInstrument) i.next();
270: oldDesc = syci.getDescription();
271: syci.updateDescription(newDesc);
272: m_uow.update(syci);
273: m_uow.commit();
274:
275: // Now ensure that the record got updated
276: m_uow = new UOW();
277: c = new Criteria();
278: c.setTable(CategoryOfInstrumentMeta.getName());
279: c
280: .addCriteria(CategoryOfInstrumentMeta.DESCRIPTION,
281: newDesc);
282: i = m_uow.query(c).iterator();
283: syci = (CategoryOfInstrument) i.next();
284: assertEquals(category, syci.getCategoryInstrument());
285: assertEquals(newDesc, syci.getDescription());
286:
287: // Reset to the original value
288: syci.updateDescription(oldDesc);
289: m_uow.update(syci);
290: m_uow.commit();
291:
292: } catch (Exception e) {
293: e.printStackTrace();
294: fail();
295: }
296: }
297:
298: }
|