Author: bdaniel
Date: Wed Sep 27 12:26:10 2006
New Revision: 450549

URL: http://svn.apache.org/viewvc?view=rev&rev=450549
Log:
Fix an issue where database result ordering could cause a test to fail

Added:
    
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java

Added: 
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java?view=auto&rev=450549
==============================================================================
--- 
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java
 (added)
+++ 
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java
 Wed Sep 27 12:26:10 2006
@@ -0,0 +1,354 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License"); you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ * 

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ * 

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.    

+ */

+package org.apache.tuscany.das.rdb.test;

+

+/*

+ * This provdes the simplest examples that make use of the change history. The

+ * assumptions are:

+ * 

+ * Single type Change history utilized Dynamic DataObjects

+ * 

+ * 

+ */

+

+import java.util.Iterator;

+

+import org.apache.tuscany.das.rdb.Command;

+import org.apache.tuscany.das.rdb.ConfigHelper;

+import org.apache.tuscany.das.rdb.DAS;

+import org.apache.tuscany.das.rdb.config.Table;

+import org.apache.tuscany.das.rdb.test.data.CustomerData;

+import org.apache.tuscany.das.rdb.test.data.OrderDetailsData;

+import org.apache.tuscany.das.rdb.test.framework.DasTest;

+

+import commonj.sdo.DataObject;

+

+public class CrudWithChangeHistory extends DasTest {

+

+    protected void setUp() throws Exception {

+        super.setUp();

+        new CustomerData(getAutoConnection()).refresh();

+        new OrderDetailsData(getAutoConnection()).refresh();

+    }

+

+    protected void tearDown() throws Exception {

+        super.tearDown();

+    }

+

+    public void testDeleteAndCreate() throws Exception {

+               DAS das = DAS.FACTORY.createDAS(

+                               getConfig("basicCustomerMappingWithCUD2.xml"), 
getConnection());

+               // Read customer 1

+               Command select = das

+                               .createCommand("Select * from CUSTOMER");

+               DataObject root = select.executeQuery();

+

+               DataObject customer = (DataObject) root.get("CUSTOMER[1]");

+

+               int customerId = customer.getInt("ID");

+               // Modify customer

+               customer.delete();

+

+               DataObject newCustomer = root.createDataObject("CUSTOMER");

+               newCustomer.setInt("ID", 9999);

+               newCustomer.setString("LASTNAME", "Jones");

+               

+               // Build apply changes command

+               das.applyChanges(root);

+

+               // Verify changes

+               root = select.executeQuery();

+               boolean found = false;

+               Iterator i = root.getList("CUSTOMER").iterator();

+               while ( i.hasNext()) {

+                       customer = (DataObject)i.next();

+                       assertFalse(customerId == customer.getInt("ID"));

+                       if ( customer.getInt("ID") == 9999 )

+                               found = true;

+               }

+               

+               assertTrue(found);

+

+       }

+    /**

+     * Read and modify a customer. Provide needed Create/Update/Delete

+     * statements programatically

+     */

+    public void testReadModifyApply() throws Exception {

+

+        // Provide updatecommand programmatically via config

+        ConfigHelper helper = new ConfigHelper();

+        Table customerTable = helper.addTable("CUSTOMER", "CUSTOMER");

+        helper.addUpdateStatement(customerTable, "update CUSTOMER set LASTNAME 
= ?, ADDRESS = ? where ID = ?",

+                "LASTNAME ADDRESS ID");

+

+        DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());

+        // Read customer 1

+        Command select = das.createCommand("Select * from CUSTOMER where ID = 
1");

+        DataObject root = select.executeQuery();

+

+        DataObject customer = (DataObject) root.get("CUSTOMER[1]");

+

+        // Modify customer

+        customer.set("LASTNAME", "Pavick");

+

+        // Build apply changes command

+        das.applyChanges(root);

+

+        // Verify changes

+        root = select.executeQuery();

+        assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME"));

+

+    }

+

+    /**

+     * Read and modify a customer. Provide needed Create/Update/Delete

+     * statements via xml file

+     */

+    public void testReadModifyApply1() throws Exception {

+

+        DAS das = 
DAS.FACTORY.createDAS(getConfig("basicCustomerMappingWithCUD.xml"), 
getConnection());

+        // Read customer 1

+        Command select = das.createCommand("Select * from CUSTOMER where ID = 
1");

+        DataObject root = select.executeQuery();

+

+        DataObject customer = (DataObject) root.get("CUSTOMER[1]");

+

+        // Modify customer

+        customer.set("LASTNAME", "Pavick");

+

+        // Build apply changes command

+        das.applyChanges(root);

+

+        // Verify changes

+        root = select.executeQuery();

+        assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME"));

+

+    }

+

+    /**

+     * Same as previous but: Utilizes generated CUD statements Key info 
provided

+     * programatically

+     */

+    public void testReadModifyApply2() throws Exception {

+

+        DAS das = DAS.FACTORY.createDAS(getConnection());

+        // Read customer with particular ID

+        Command select = das.createCommand("Select * from CUSTOMER where ID = 
1");

+        DataObject root = select.executeQuery();

+

+        DataObject customer = root.getDataObject("CUSTOMER[1]");

+

+        // Modify customer

+        customer.set("LASTNAME", "Pavick");

+

+        // Build apply changes command

+        das.applyChanges(root);

+

+        // Verify the change

+        root = select.executeQuery();

+        assertEquals("Pavick", 
root.getDataObject("CUSTOMER[1]").getString("LASTNAME"));

+

+    }

+

+    /**

+     * Builds on previous but: 1. Key info provided via XML file

+     */

+    public void testReadModifyApply3() throws Exception {

+        DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMapping.xml"), 
getConnection());

+        // Read customer with particular ID

+        Command select = das.createCommand("Select * from CUSTOMER where ID = 
1");

+        DataObject root = select.executeQuery();

+

+        DataObject customer = (DataObject) root.get("CUSTOMER[1]");

+

+        // Modify customer

+        customer.set("LASTNAME", "Pavick");

+

+        // Build apply changes command

+        das.applyChanges(root);

+

+        // Verify the change

+        root = select.executeQuery();

+        assertEquals("Pavick", 
root.getDataObject("CUSTOMER[1]").getString("LASTNAME"));

+

+    }

+

+    /**

+     * Test ability to handle multiple changes to the graph including

+     * Creates/Updates/Deletes Employs generated CUD

+     */

+    public void testReadModifyDeleteInsertApply() throws Exception {

+

+        DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMapping.xml"), 
getConnection());

+        // Read some customers

+        Command select = das.createCommand("Select * from CUSTOMER where 
LASTNAME = 'Williams'");

+        DataObject root = select.executeQuery();

+

+        DataObject cust1 = (DataObject) root.getList("CUSTOMER").get(0);

+        DataObject cust2 = (DataObject) root.getList("CUSTOMER").get(1);

+        DataObject cust3 = (DataObject) root.getList("CUSTOMER").get(2);

+

+        // Modify a customer

+        cust1.set("LASTNAME", "Pavick");

+        int cust1ID = cust1.getInt("ID");

+

+        // Save IDs before delete

+        int cust2ID = cust2.getInt("ID");

+        int cust3ID = cust3.getInt("ID");

+        // Delete a couple

+        cust2.delete();

+        cust3.delete();

+

+        // Create a new customer

+        DataObject cust4 = root.createDataObject("CUSTOMER");

+        cust4.set("ID", new Integer(100));

+        cust4.set("ADDRESS", "5528 Wells Fargo Drive");

+        cust4.set("LASTNAME", "Gerkin");

+

+        // Build apply changes command

+        das.applyChanges(root);

+

+        // Verify deletes

+        select = das.createCommand("Select * from CUSTOMER where ID = ?");

+        select.setParameter(1, new Integer(cust2ID));

+        root = select.executeQuery();

+        assertTrue(root.getList("CUSTOMER").isEmpty());

+        // reparameterize same command

+        select.setParameter(1, new Integer(cust3ID));

+        root = select.executeQuery();

+        assertTrue(root.getList("CUSTOMER").isEmpty());

+

+        // verify insert

+        select.setParameter(1, new Integer(100));

+        root = select.executeQuery();

+        assertEquals(1, root.getList("CUSTOMER").size());

+        assertEquals("5528 Wells Fargo Drive", 
root.getString("CUSTOMER[1]/ADDRESS"));

+        assertEquals("Gerkin", root.getString("CUSTOMER[1]/LASTNAME"));

+

+        // verify update

+        select.setParameter(1, new Integer(cust1ID));

+        root = select.executeQuery();

+        assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME"));

+

+    }

+

+    public void testReadModifyApplyWithAssumedID() throws Exception {

+

+        DAS das = DAS.FACTORY.createDAS(getConnection());

+        // Read customer with particular ID

+        Command select = das.createCommand("Select * from CUSTOMER");

+        DataObject root = select.executeQuery();

+

+        DataObject customer = root.getDataObject("CUSTOMER[1]");

+

+        // Modify customer

+        customer.set("LASTNAME", "Pavick");

+

+        DataObject customerForDelete = getCustomerByLastName(root, "Daniel");  
     

+        customerForDelete.delete();

+

+        DataObject newCustomer = root.createDataObject("CUSTOMER");

+        newCustomer.set("LASTNAME", "NewCustomer");

+        newCustomer.setInt("ID", 9000);

+

+        // Build apply changes command

+        das.applyChanges(root);

+

+        // Verify the change

+        root = select.executeQuery();

+        assertEquals("Pavick", getCustomerByLastName(root, 
"Pavick").getString("LASTNAME"));

+        assertEquals("NewCustomer", getCustomerByLastName(root, 
"NewCustomer").getString("LASTNAME"));

+        assertNull(getCustomerByLastName(root, "Daniel"));

+

+    }

+

+    public void testReadModifyApplyWithAssumedIDFailure() throws Exception {

+        DAS das = DAS.FACTORY.createDAS(getConnection());

+        Command select = das.createCommand("Select * from ORDERDETAILS");

+

+        DataObject root = select.executeQuery();

+

+        DataObject od = root.getDataObject("ORDERDETAILS[1]");

+

+        // Modify customer

+        od.setInt("PRODUCTID", 72);

+

+        // Flush changes -- This should fail because Order Details does not 
have

+        // a column that

+        // we can assume to be an ID

+        try {

+            das.applyChanges(root);

+        } catch (RuntimeException ex) {

+            assertTrue(ex.getMessage().contains("changed in the DataGraph but 
is not present in the Config"));

+        }

+

+    }

+

+    public void testReadModifyApplyWithAssumedIDFailure2() throws Exception {

+        DAS das = DAS.FACTORY.createDAS(getConnection());

+        Command select = das.createCommand("Select * from ORDERDETAILS");

+        DataObject root = select.executeQuery();

+

+        DataObject od = root.getDataObject("ORDERDETAILS[1]");

+        od.delete();

+

+        // Flush changes -- This should fail because Order Details does not 
have

+        // a column that

+        // we can assume to be an ID

+        try {

+            das.applyChanges(root);

+        } catch (RuntimeException ex) {

+            assertTrue(ex.getMessage().contains("changed in the DataGraph but 
is not present in the Config"));

+        }

+

+    }

+

+    public void testReadModifyApplyWithAssumedIDFailure3() throws Exception {

+        DAS das = DAS.FACTORY.createDAS(getConnection());

+        Command select = das.createCommand("Select * from ORDERDETAILS");

+        DataObject root = select.executeQuery();

+

+        DataObject od = root.createDataObject("ORDERDETAILS");

+

+        // Modify customer

+        od.setInt("PRODUCTID", 72);

+        od.setInt("ORDERID", 500);

+

+        // Flush changes -- This should fail because Order Details does not 
have

+        // a column that

+        // we can assume to be an ID

+        try {

+            das.applyChanges(root);

+        } catch (RuntimeException ex) {

+            assertTrue(ex.getMessage().contains("changed in the DataGraph but 
is not present in the Config"));

+        }

+

+    }

+

+    private DataObject getCustomerByLastName(DataObject root, String name) {

+        Iterator i = root.getList("CUSTOMER").iterator();

+        while (i.hasNext()) {

+            DataObject obj = (DataObject) i.next();

+            if (name.equals(obj.getString("LASTNAME")))

+                return obj;

+        }

+        return null;

+    }

+}




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to