Skip to content

Commit

Permalink
Merge pull request bcit-ci#1324 from toopay/db-tests
Browse files Browse the repository at this point in the history
Improved DB tests
  • Loading branch information
Phil Sturgeon committed May 14, 2012
2 parents fff6c2a + 82196b9 commit 212b047
Show file tree
Hide file tree
Showing 26 changed files with 856 additions and 63 deletions.
19 changes: 7 additions & 12 deletions system/database/drivers/pdo/pdo_result.php
Expand Up @@ -84,19 +84,14 @@ public function result_assoc()
// Define the output
$output = array('assoc', 'object');

// Initial value
$this->result_assoc = array() and $this->result_object = array();

// Fetch the result
foreach ($output as $type)
while ($row = $this->_fetch_assoc())
{
// Define the method and handler
$res_method = '_fetch_'.$type;
$res_handler = 'result_'.$type;

$this->$res_handler = array();

while ($row = $this->$res_method())
{
$this->{$res_handler}[] = $row;
}
$this->result_assoc[] = $row;
$this->result_object[] = (object) $row;
}

// Save this as buffer and marked the fetch flag
Expand Down Expand Up @@ -249,7 +244,7 @@ protected function _fetch_assoc()
*/
protected function _fetch_object()
{
return $this->result_id->fetchObject();
return $this->result_id->fetch(PDO::FETCH_OBJ);
}

}
Expand Down
6 changes: 0 additions & 6 deletions tests/README.md
Expand Up @@ -2,12 +2,6 @@

Status : [![Build Status](https://secure.travis-ci.org/EllisLab/CodeIgniter.png?branch=feature/unit-tests)](http://travis-ci.org/EllisLab/CodeIgniter)

*Do not merge to default until these issues have been addressed*

- Clean up naming conventions
- Figure out config stuff
- Figure out database testing

### Introduction:

This is the preliminary CodeIgniter testing documentation. It
Expand Down
10 changes: 5 additions & 5 deletions tests/codeigniter/Setup_test.php
Expand Up @@ -2,12 +2,12 @@

class Setup_test extends PHPUnit_Framework_TestCase {

function test_nonsense()
function test_bootstrap_constants()
{
$this->markTestIncomplete('not implemented');
// ensure that our bootstrapped test environment
// is a good representation of an isolated CI install
//die('here');
$this->assertTrue(defined('PROJECT_BASE'));
$this->assertTrue(defined('BASEPATH'));
$this->assertTrue(defined('APPPATH'));
$this->assertTrue(defined('VIEWPATH'));
}

}
44 changes: 44 additions & 0 deletions tests/codeigniter/database/query_builder/count_test.php
@@ -0,0 +1,44 @@
<?php

class Count_test extends CI_TestCase {

/**
* @var object Database/Query Builder holder
*/
protected $db;

public function set_up()
{
$this->db = Mock_Database_Schema_Skeleton::init(DB_DRIVER);

Mock_Database_Schema_Skeleton::create_tables();
Mock_Database_Schema_Skeleton::create_data();
}

// ------------------------------------------------------------------------

/**
* @see ./mocks/schema/skeleton.php
*/
public function test_count_all()
{
$job_count = $this->db->count_all('job');

// Check the result
$this->assertEquals(4, $job_count);
}

// ------------------------------------------------------------------------

/**
* @see ./mocks/schema/skeleton.php
*/
public function test_count_all_results()
{
$job_count = $this->db->like('name', 'ian')
->count_all_results('job');

// Check the result
$this->assertEquals(2, $job_count);
}
}
72 changes: 72 additions & 0 deletions tests/codeigniter/database/query_builder/delete_test.php
@@ -0,0 +1,72 @@
<?php

class Delete_test extends CI_TestCase {

/**
* @var object Database/Query Builder holder
*/
protected $db;

public function set_up()
{
$this->db = Mock_Database_Schema_Skeleton::init(DB_DRIVER);

Mock_Database_Schema_Skeleton::create_tables();
Mock_Database_Schema_Skeleton::create_data();
}

// ------------------------------------------------------------------------

/**
* @see ./mocks/schema/skeleton.php
*/
public function test_delete()
{
// Check initial record
$job1 = $this->db->where('id', 1)
->get('job')
->row();

$this->assertEquals('Developer', $job1->name);

// Do the delete
$this->db->delete('job', array('id' => 1));

// Check the record
$job1 = $this->db->where('id', 1)
->get('job');

$this->assertEmpty($job1->result_array());
}

// ------------------------------------------------------------------------

/**
* @see ./mocks/schema/skeleton.php
*/
public function test_delete_several_tables()
{
// Check initial record
$user4 = $this->db->where('id', 4)
->get('user')
->row();

$job4 = $this->db->where('id', 4)
->get('job')
->row();

$this->assertEquals('Musician', $job4->name);
$this->assertEquals('Chris Martin', $user4->name);

// Do the delete
$this->db->delete(array('job', 'user'), array('id' => 4));

// Check the record
$job4 = $this->db->where('id', 4)->get('job');
$user4 = $this->db->where('id', 4)->get('user');

$this->assertEmpty($job4->result_array());
$this->assertEmpty($user4->result_array());
}

}
34 changes: 34 additions & 0 deletions tests/codeigniter/database/query_builder/distinct_test.php
@@ -0,0 +1,34 @@
<?php

class Distinct_test extends CI_TestCase {

/**
* @var object Database/Query Builder holder
*/
protected $db;

public function set_up()
{
$this->db = Mock_Database_Schema_Skeleton::init(DB_DRIVER);

Mock_Database_Schema_Skeleton::create_tables();
Mock_Database_Schema_Skeleton::create_data();
}

// ------------------------------------------------------------------------

/**
* @see ./mocks/schema/skeleton.php
*/
public function test_distinct()
{
$users = $this->db->select('country')
->distinct()
->get('user')
->result_array();

// Check the result
$this->assertEquals(3, count($users));
}

}
39 changes: 39 additions & 0 deletions tests/codeigniter/database/query_builder/empty_test.php
@@ -0,0 +1,39 @@
<?php

class Empty_test extends CI_TestCase {

/**
* @var object Database/Query Builder holder
*/
protected $db;

public function set_up()
{
$this->db = Mock_Database_Schema_Skeleton::init(DB_DRIVER);

Mock_Database_Schema_Skeleton::create_tables();
Mock_Database_Schema_Skeleton::create_data();
}

// ------------------------------------------------------------------------

/**
* @see ./mocks/schema/skeleton.php
*/
public function test_empty_table()
{
// Check initial record
$jobs = $this->db->get('job')->result_array();

$this->assertEquals(4, count($jobs));

// Do the empty
$this->db->empty_table('job');

// Check the record
$jobs = $this->db->get('job');

$this->assertEmpty($jobs->result_array());
}

}
51 changes: 51 additions & 0 deletions tests/codeigniter/database/query_builder/from_test.php
@@ -0,0 +1,51 @@
<?php

class From_test extends CI_TestCase {

/**
* @var object Database/Query Builder holder
*/
protected $db;

public function set_up()
{
$this->db = Mock_Database_Schema_Skeleton::init(DB_DRIVER);

Mock_Database_Schema_Skeleton::create_tables();
Mock_Database_Schema_Skeleton::create_data();
}

// ------------------------------------------------------------------------

/**
* @see ./mocks/schema/skeleton.php
*/
public function test_from_simple()
{
$jobs = $this->db->from('job')
->get()
->result_array();

// Check items
$this->assertEquals(4, count($jobs));
}

// ------------------------------------------------------------------------

/**
* @see ./mocks/schema/skeleton.php
*/
public function test_from_with_where()
{
$job1 = $this->db->from('job')
->where('id', 1)
->get()
->row();

// Check the result
$this->assertEquals('1', $job1->id);
$this->assertEquals('Developer', $job1->name);
$this->assertEquals('Awesome job, but sometimes makes you bored', $job1->description);
}

}
53 changes: 53 additions & 0 deletions tests/codeigniter/database/query_builder/group_test.php
@@ -0,0 +1,53 @@
<?php

class Group_test extends CI_TestCase {

/**
* @var object Database/Query Builder holder
*/
protected $db;

public function set_up()
{
$this->db = Mock_Database_Schema_Skeleton::init(DB_DRIVER);

Mock_Database_Schema_Skeleton::create_tables();
Mock_Database_Schema_Skeleton::create_data();
}

// ------------------------------------------------------------------------

/**
* @see ./mocks/schema/skeleton.php
*/
public function test_group_by()
{
$jobs = $this->db->select('name')
->from('job')
->group_by('name')
->get()
->result_array();

// Check the result
$this->assertEquals(4, count($jobs));
}

// ------------------------------------------------------------------------

/**
* @see ./mocks/schema/skeleton.php
*/
public function test_having_by()
{
$jobs = $this->db->select('name')
->from('job')
->group_by('name')
->having('SUM(id) > 2')
->get()
->result_array();

// Check the result
$this->assertEquals(2, count($jobs));
}

}
5 changes: 2 additions & 3 deletions tests/codeigniter/database/query_builder/insert_test.php
Expand Up @@ -30,11 +30,10 @@ public function test_insert()
// Do normal insert
$this->assertTrue($this->db->insert('job', $job_data));

$jobs = $this->db->get('job')->result_array();
$job1 = $jobs[0];
$job1 = $this->db->get('job')->row();

// Check the result
$this->assertEquals('Grocery Sales', $job1['name']);
$this->assertEquals('Grocery Sales', $job1->name);

}

Expand Down

0 comments on commit 212b047

Please sign in to comment.