summaryrefslogtreecommitdiff
path: root/devel-utf8/tests/it_dbi.t
diff options
context:
space:
mode:
authorNathan Gass2012-03-22 18:18:42 +0000
committerNathan Gass2012-03-22 18:18:42 +0000
commitd59a4921188753dbe4c0161081755a28112c3ef6 (patch)
tree81496414d988f37f1db9d92c9750d888ffa13746 /devel-utf8/tests/it_dbi.t
parentca11771e8fad5fef96615df4c44e04b8fb60ac31 (diff)
downloaditools-d59a4921188753dbe4c0161081755a28112c3ef6.tar.gz
itools-d59a4921188753dbe4c0161081755a28112c3ef6.tar.bz2
itools-d59a4921188753dbe4c0161081755a28112c3ef6.zip
Branch itools/devel-utf8 created
Diffstat (limited to 'devel-utf8/tests/it_dbi.t')
-rwxr-xr-xdevel-utf8/tests/it_dbi.t254
1 files changed, 254 insertions, 0 deletions
diff --git a/devel-utf8/tests/it_dbi.t b/devel-utf8/tests/it_dbi.t
new file mode 100755
index 0000000..4a58188
--- /dev/null
+++ b/devel-utf8/tests/it_dbi.t
@@ -0,0 +1,254 @@
+#!/www/server/bin/php -qC
+<?php
+
+# Tests for it_dbi.class
+
+# Initialize DB
+$db = array('db' => "lib_search_ch", 'safety' => 0);
+$dbi = new it_dbi($db);
+$dbi->query('create temporary table it_dbi_test (
+ ID int not null auto_increment,
+ x int,
+ foo varchar(42),
+ primary key(ID)
+);');
+
+$record = new it_dbi($db + array('table' => "it_dbi_test"));
+
+$record->insert(array('x' => 42, 'foo' => null));
+$record->insert(array('foo' => "bar"));
+$record->insert(array('x' => 64738, 'foo' => "q'uux"));
+
+is(
+ $record->ID,
+ 3,
+ "auto_increment"
+);
+
+$record->read(1);
+is(
+ array($record->_key, $record->x, $record->foo),
+ array(1, 42, null),
+ "read"
+);
+
+is(
+ $record->select(),
+ 3,
+ "select without parameters select all"
+);
+
+is(
+ $record->select(array('foo <>' => ""), "LIMIT 1"),
+ 1,
+ "select with multiple parameters (LIMIT part)"
+);
+is(
+ $record->foo,
+ "bar",
+ "select with multiple parameters (foo part)"
+);
+is(
+ $record->select(array('ID IN' => array(2,3))),
+ 2,
+ "select with IN"
+);
+is(
+ $record->select(array('ID NI' => array(2,3))),
+ 2,
+ "select with NI"
+);
+is(
+ $record->select(array('ID NOT IN' => array(2,3))),
+ 1,
+ "select with NOT IN"
+);
+is(
+ $record->select(array('ID IN' => array())),
+ 0,
+ "select with empty IN"
+);
+is(
+ $record->select(array('ID NOT IN' => array())),
+ 3,
+ "select with empty NOT IN"
+);
+
+it_dbi::createclass(array('table' => "it_dbi_test", 'forcecreate' => true));
+
+$record = new it_dbi_test;
+is(
+ $record->x,
+ null,
+ "constructor of created class without argument"
+);
+
+$record = new it_dbi_test(2);
+is(
+ $record->ID,
+ 2,
+ "constructor of created class with id parameter"
+);
+
+$record = new it_dbi_test(array('x >' => 0), "ORDER BY x DESC");
+is(
+ $record->x,
+ 64738,
+ "constructor of created class with multiple select parameters"
+);
+
+$record = new it_dbi_test(array('foo' => 'bar'));
+is(
+ $record->ID,
+ 2,
+ "constructor of created class with single array parameter"
+);
+
+$record = new it_dbi($db + array('table' => "it_dbi_test"));
+is(
+ $record->x,
+ null,
+ "constructor without parameters"
+);
+
+$record = new it_dbi($db + array('table' => "it_dbi_test"), array('x >' => 0), "ORDER BY x DESC");
+is(
+ $record->x,
+ 64738,
+ "constructor with multiple select parameters"
+);
+
+$record->select(array('x' => 64738));
+is(
+ array($record->_key, $record->x, $record->foo),
+ array(3, 64738, "q'uux"),
+ "select"
+);
+
+$record->update(array('x' => 17));
+is(
+ array($record->_key, $record->x, $record->foo),
+ array(3, 17, "q'uux"),
+ "update"
+);
+
+is(
+ $record->update(array('x' => 18), array('x' => 17)),
+ 1,
+ "return affected rows",
+);
+
+is(
+ $record->update(array('x' => 18), array('x' => 17)),
+ 0,
+ "return zero affected rows",
+);
+
+$record->update(array('-x' => 'RAND() * 10'));
+isnt(
+ array($record->_key, $record->x, $record->foo),
+ array(3, 17, "q'uux"),
+ "update with function"
+);
+
+$rand = $record->x;
+is (
+ $record->_set(array('x' => $rand, 'foo' => "bar")),
+ "SET `foo`='bar'",
+ 'update: _set optimization'
+);
+
+$record->update(array('foo' => "bar"));
+$record->select(array('foo' => "bar"));
+$record->iterate();
+is(
+ array($record->_key, $record->x, $record->foo),
+ array(2, null, "bar"),
+ "iterate record 2"
+);
+$record->update(array('foo' => "qux"));
+$record->iterate();
+is(
+ array($record->_key, $record->x, $record->foo),
+ array(3, $rand, "bar"),
+ "iterate record 3"
+);
+$record->update(array('foo' => "quux"));
+
+$record->read(2);
+is(
+ array($record->_key, isset($record->x), $record->foo),
+ array(2, false, "qux"),
+ "iterate update record 2"
+);
+
+$record->read(3);
+is(
+ array($record->_key, $record->x, $record->foo),
+ array(3, $rand, "quux"),
+ "iterate update record 3"
+);
+
+is(
+ gettype($record->_key) . "/" . gettype($record->x) . "/" . gettype($record->_data['x']) . "/" . gettype($record->foo),
+ "integer/integer/integer/string",
+ "automatic type detection"
+);
+
+$count = 0;
+foreach (new it_dbi_test as $id => $record)
+{
+ $count++;
+ is($record->_key, $id, "Iterator id $id");
+}
+is($count, 3, "Iterator without select");
+
+$count = 0;
+foreach (new it_dbi_test(array('foo <>' => "")) as $id => $record)
+{
+ $count++;
+ is($record->_key, $id, "Iterator id $id");
+}
+is($count, 2, "Iterator with select");
+
+$count = 0;
+foreach ($record as $dummy_rec)
+ $count++;
+is($count, 2, "Iterator reused");
+
+# Test field localization feature
+
+$dbi->query('create temporary table it_dbi_testlocalized (
+ ID int not null auto_increment,
+ foobar_de varchar(42),
+ foobar_fr varchar(42),
+ primary key(ID)
+);');
+
+$record = new it_dbi($db + array('table' => "it_dbi_testlocalized"));
+$record->insert(array('foobar_de' => "deutsch", 'foobar_fr' => "franz"));
+$record->insert(array('foobar_de' => "deutsch2", 'foobar_fr' => "franz2"));
+
+T_set_language('de');
+$record->select(array());
+$record->iterate();
+is(
+ array($record->_key, $record->foobar),
+ array(1, "deutsch"),
+ "localized field foobar_de"
+);
+$record->iterate();
+is(
+ array($record->_key, $record->foobar),
+ array(2, "deutsch2"),
+ "localized field foobar_de iterate"
+);
+
+T_set_language('fr');
+$record->read(1);
+is(
+ array($record->_key, $record->foobar),
+ array(1, "franz"),
+ "localized field foobar_fr"
+);
+