package org.test4j.testng.database.dbop; import java.sql.SQLException; import java.util.Date; import mockit.Mock; import org.test4j.database.table.ITable; import org.test4j.database.table.TddUserTable; import org.test4j.hamcrest.matcher.property.reflection.EqMode; import org.test4j.hamcrest.matcher.string.StringMode; import org.test4j.module.database.IDatabase; import org.test4j.module.database.annotations.Transactional; import org.test4j.module.database.annotations.Transactional.TransactionMode; import org.test4j.module.database.dbop.TableOp; import org.test4j.module.database.environment.TableMeta.ColumnMeta; import org.test4j.testng.Test4J; import org.test4j.tools.commons.ExceptionWrapper; import org.test4j.tools.datagen.DataSet; import org.testng.annotations.Test; @SuppressWarnings({ "serial", "unchecked" }) @Transactional(TransactionMode.COMMIT) @Test(groups = { "test4j", "database" }) public class TableOpTest extends Test4J implements IDatabase { @Test public void testInsertData() throws SQLException { db.table(ITable.t_tdd_user).clean().insert(new TddUserTable() { { this.put(IColumn.f_id, 1); this.put(IColumn.f_first_name, "darui.wu"); this.put(IColumn.f_gmt_created, new Date()); } }); db.table(ITable.t_tdd_user).query().reflectionEqMap(1, new TddUserTable() { { this.put(IColumn.f_id, 1); this.put(IColumn.f_first_name, "darui.wu"); } }); } @Test public void testInsert_ErrorColumnName() { try { db.table(ITable.t_tdd_user).insert(new DataSet() { { this.data("{'id':1,'my_name':'darui.wu'}"); } }); want.fail(); } catch (Exception e) { String message = ExceptionWrapper.toString(e); want.string(message).contains("can't find column[my_name] field in table"); } } @Test public void testAdd() { db.table(ITable.t_tdd_user).clean().insert(new DataSet() { { data("{'id':1, 'first_name':'name1'}"); data(2, new TddUserTable() { { this.put(IColumn.f_id, new int[] { 2, 3 }); this.put(IColumn.f_first_name, new String[] { "darui.wu", "jobs.he" }); } }); } }); db.queryAsPoJo("select count(*) from tdd_user", Integer.class).isEqualTo(3L); } public void testInsert_NoSuchColumn() throws SQLException { try { new TableOp(ITable.t_tdd_user).insert(new TddUserTable() { { this.put("no_column", "darui.wu"); this.put(IColumn.f_gmt_created, new Date()); } }); want.fail(); } catch (Exception e) { String message = e.getMessage(); want.string(message).contains("no_column"); } } public void testInsert_BadType() throws SQLException { try { new TableOp(ITable.t_tdd_user).insert(new TddUserTable() { { this.put(IColumn.f_first_name, "darui.wu"); this.put(IColumn.f_gmt_created, "2011-08-19ss"); } }); want.fail(); } catch (Exception e) { String message = e.getMessage(); want.string(message).contains("2011-08-19ss"); } } public void testInsert_DataIterator() { new TableOp(ITable.t_tdd_user).clean().insert(2, new TddUserTable() { { this.put(IColumn.f_id, new Integer[] { 1, 2 }); this.put(IColumn.f_first_name, new Object[] { "darui.wu", "data.iterator" }); } }); db.query("select * from tdd_user").sizeEq(2) .propertyEq(TddUserTable.IColumn.f_first_name, new String[] { "darui.wu", "data.iterator" }); } public void testInsert_DataIterator_1() { db.table(ITable.t_tdd_user).clean().insert(new TddUserTable() { { this.put(IColumn.f_id, 1); this.put(IColumn.f_first_name, "darui.wu"); } }, new TddUserTable() { { this.put(IColumn.f_id, 2); this.put(IColumn.f_first_name, "data.iterator"); } }); db.query("select * from tdd_user").sizeEq(2) .propertyEq(TddUserTable.IColumn.f_first_name, new String[] { "darui.wu", "data.iterator" }); } public void testInsert_DataIterator_2() { db.table(ITable.t_tdd_user).clean().insert(new TddUserTable() { { this.put(IColumn.f_id, 1); this.put(IColumn.f_first_name, "darui.wu"); } }); db.table(ITable.t_tdd_user).insert(new TddUserTable() { { this.put(IColumn.f_id, 2); this.put(IColumn.f_first_name, "data.iterator"); } }); db.query("select * from tdd_user").sizeEq(2) .propertyEq(TddUserTable.IColumn.f_first_name, new String[] { "darui.wu", "data.iterator" }); } public void testInsert_DuplicateKey() { try { db.table(ITable.t_tdd_user).clean().insert(new DataSet() { { this.data("{id:1,first_name:darui.wu}"); this.data("{id:1,first_name:data.iterator}"); } }); want.fail(); } catch (Exception e) { String message = ExceptionWrapper.toString(e); want.string(message).contains("duplicate entry", StringMode.IgnoreCase); } } public void testInsert_CheckFillData() { new MockUp<ColumnMeta>() { @Mock public boolean isNullable() { return false; } }; db.table(ITable.t_tdd_user).clean().insert(new DataSet() { { this.data("{id:1,first_name:darui.wu}"); this.data("{id:2,first_name:data.iterator}"); } }).commit(); db.table(ITable.t_tdd_user).query().reflectionEqMap(toList(new TddUserTable() { { this.put(IColumn.f_id, 1); this.put(IColumn.f_first_name, "darui.wu"); this.put(IColumn.f_post_code, "test4j"); this.put(IColumn.f_address_id, 0); this.put(IColumn.f_last_name, "test4j"); this.put(IColumn.f_sarary, 0.0); } }, new TddUserTable() { private static final long serialVersionUID = 1L; { this.put(IColumn.f_id, 2); this.put(IColumn.f_first_name, "data.iterator"); this.put(IColumn.f_post_code, "test4j"); this.put(IColumn.f_address_id, 0); this.put(IColumn.f_last_name, "test4j"); this.put(IColumn.f_sarary, 0.0); } })); } public void testInsert_CheckFillData2() { new MockUp<ColumnMeta>() { @Mock public boolean isNullable() { return false; } }; db.table(ITable.t_tdd_user).clean().insert(new DataSet() { { this.data("{id:1,first_name:darui.wu}"); this.data("{id:2,first_name:data.iterator}"); } }).commit(); db.table(ITable.t_tdd_user).query().reflectionEqMap(2, new TddUserTable() { { this.put(IColumn.f_id, 1, 2); this.put(IColumn.f_first_name, "darui.wu", "data.iterator"); this.put(IColumn.f_post_code, "test4j"); this.put(IColumn.f_address_id, 0); this.put(IColumn.f_last_name, "test4j"); this.put(IColumn.f_sarary, 0.0); } }, EqMode.IGNORE_ORDER); } public void testInsert_MapDataIterator() { new MockUp<ColumnMeta>() { @Mock public boolean isNullable() { return false; } }; db.table(ITable.t_tdd_user).clean().insert(new DataSet() { { this.data(new TddUserTable() { { put(IColumn.f_id, "1"); put(IColumn.f_first_name, "darui.wu"); } }); this.data(new TddUserTable() { { put(IColumn.f_id, "2"); put(IColumn.f_first_name, "data.iterator"); } }); } }); db.commit().table(ITable.t_tdd_user).count().isEqualTo(2); } public void testInsert_MapDataAndJSON() { new MockUp<ColumnMeta>() { @Mock public boolean isNullable() { return false; } }; db.table(ITable.t_tdd_user).clean().insert(new DataSet() { { this.data(new TddUserTable() { { put(IColumn.f_id, "1"); put(IColumn.f_first_name, "darui.wu"); } }); this.data("{'id':2, 'first_name':'data.iterator'}"); } }).commit(); db.table(ITable.t_tdd_user).count().isEqualTo(2); } @Test public void testInsert_JSON() { db.table(ITable.t_tdd_user).clean().insert("{'id':1,'first_name':'wang','last_name':'json'}").commit(); db.table(ITable.t_tdd_user).query().reflectionEqMap(new TddUserTable() { { this.put(IColumn.f_id, 1); this.put(IColumn.f_first_name, "wang"); this.put(IColumn.f_last_name, "json"); } }); } @Test public void testCount_MySQL() { db.table(ITable.t_tdd_user).count().notNull(); } @Test(groups = "oracle") public void testCount_Oralce() { db.useDB("eve").table("MTN_ACTIVITY").count().notNull(); } @Test public void testQueryWhere_DataMap() { db.table(ITable.t_tdd_user).clean().insert(3, new TddUserTable() { { this.put(IColumn.f_id, new int[] { 100, 101, 102 }); this.put(IColumn.f_first_name, "name1", "name2", "name3"); this.put(IColumn.f_post_code, "310012", "310000"); } }); db.table(ITable.t_tdd_user).count().eq(3); db.table(ITable.t_tdd_user).queryWhere(new TddUserTable() { { this.put(IColumn.f_post_code, "310000"); } }).propertyEq(TddUserTable.IColumn.f_id, new int[] { 101, 102 }); } @Test public void testQueryWhere_String() { db.table(ITable.t_tdd_user).clean().insert(3, new TddUserTable() { { this.put(IColumn.f_id, new int[] { 100, 101, 102 }); this.put(IColumn.f_first_name, "name1", "name2", "name3"); this.put(IColumn.f_post_code, "310012", "310000"); } }); db.table(ITable.t_tdd_user).count().eq(3); db.table(ITable.t_tdd_user).queryWhere("post_code=310000").propertyEq("id", new int[] { 101, 102 }); } }