hellsan631/LogosDB

View on GitHub
lib/Testing/Tests/User_Test.php

Summary

Maintainability
A
2 hrs
Test Coverage
<?php

abstract class User_Test extends Generic_DB_Test{

    public function testCheckObjectCreation(){
        $this->assertObjectHasAttribute('id', $this->user);
    }

    public function testDatabaseRowInitCount(){
        $this->assertEquals(
            $this->TableCount,
            $this->getConnection()->getRowCount(self::$db_table_name),
            "Pre-Condition"
        );
    }

    //------------Test Object Creation

    public function testDatabaseCreateNewObject(){

        $object = self::$db_table_name;

        $this->user = new $object(['username' => 'HellsAn631', 'email'=> 'hellsan631@email.com']);
        $this->assertTrue($this->user->id === null, "User has no ID when not in database");

        $this->assertTrue(
            is_object($this->user->createNew()),
            "Object returned on DB creation"
        );

        $this->assertEquals(
            ($this->TableCount+1),
            $this->getConnection()->getRowCount(self::$db_table_name),
            "User Created In Database"
        );

        $this->assertTrue($this->user->id !== null, "User ID loaded properly");

    }

    public function testDatabaseCreateSingleObject(){

        $object = self::$db_table_name;

        $this->user->id = $object::createSingle([
            'username' => 'HellsAn631',
            'email'=> 'hellsan631@email.com'
        ]);

        $this->assertTrue(
            $this->user->id !== null && $this->user->id !== false,
            "User ID was gotten from creation"
        );

        $this->assertEquals(
            $this->TableCount+1,
            $this->getConnection()->getRowCount(self::$db_table_name),
            "User Created In Database"
        );

    }

    public function testDatabaseCreateMultipleObjects(){

        $object = self::$db_table_name;

        $objects = [
            ['username' => 'HellsAn6', 'email'=> 'hellsan631@email.com'],
            ['username' => 'HellsAn3', 'email'=> 'hellsan631@email.com'],
            ['username' => 'HellsAn1', 'email'=> 'hellsan631@email.com']
        ];

        $this->users = $object::createMultiple($objects);
        $this->assertTrue($this->users !== false, "Create Multiple Worked and returned correctly");

        $this->assertEquals(
            $this->TableCount+3,
            $this->getConnection()->getRowCount(self::$db_table_name),
            "Users were created in database"
        );
    }

    //------------Test Object Loading

    public function testDatabaseCanLoadObject(){
        $object = self::$db_table_name;

        $this->user = $object::loadSingle(['username' => 'HellsAn631']);
        $this->assertTrue($this->user->id !== null);
    }

    public function testDatabaseCanLoadIntoObject(){

        $object = self::$db_table_name;

        $savedID = $object::createSingle(['username' => 'HellsAn631', 'email'=> 'hellsan631@email.com']);

        $this->assertEquals(
            $this->TableCount+1,
            $this->getConnection()->getRowCount(self::$db_table_name),
            "User Created In Database"
        );

        $this->user = new $object();
        $this->user->load($savedID);
        $this->assertTrue($this->user->id !== null);

        $this->user = new $object($savedID);
        $this->assertTrue($this->user->id !== null);

        $this->user = new $object();
        $this->user->load(['username' => 'HellsAn631']);
        $this->assertTrue($this->user->id !== null);

        $this->user = new $object();
        $this->assertTrue($this->user->load(['username' => 'HellsAn631']) !== false, "Can load a conditional array into an object");

        $this->user = new $object();
        $this->assertTrue($this->user->load(['username' => 'mchammer']) == false, "Load returns false if no object in database is found");

    }

    public function testDatabaseCanLoadMultipleObjects(){

        $object = self::$db_table_name;

        $list = $object::newInstance()->getList(['email' => 'hellsan631@email.com']);

        $this->assertTrue(count($list) > 0);
        $this->assertTrue(is_array($list));

        $list = $object::loadMultiple(['email' => 'hellsan631@email.com']);

        $this->assertTrue(count($list) > 0);
        $this->assertTrue(is_array($list));

    }

    //------------Test Object Load or New

    public function testDatabaseCanLoadFirstOrReturnNewInstanceOfObject(){

        $object = self::$db_table_name;

        $max = 10000;
        $random = mt_rand(0,$max*$max);

        $this->user = $object::firstOrNew(['username' => "$random"]);
        $this->assertTrue($this->user->id === null);

        $this->user = $object::firstOrNew(['email' => 'hellsan631@email.com']);
        $this->assertTrue($this->user->id !== null);

    }

    public function testDatabaseCanLoadFirstOrCreateObject(){

        $object = self::$db_table_name;

        $max = 10000;
        $random = mt_rand(0,$max*$max);

        $this->user = $object::firstOrCreate(['username' => "$random"]);
        $this->assertTrue($this->user->id !== null);

        $this->user = $object::loadSingle(['username' => $random]);
        $this->assertTrue($this->user->id !== null);

    }

    //------------Test Object Saving

    public function testDatabaseCanSaveObject(){

        $object = self::$db_table_name;

        $max = 10000;
        $random = mt_rand(0,$max*$max);

        $this->user = $object::loadSingle(['email' => 'hellsan631@email.com']);
        $this->assertTrue($this->user->id !== null);

        $this->assertTrue(
            $this->user->save(['email' => "$random@email.com"])->email !== 'hellsan631@email.com',
            'Check to see that save returns the updated user'
        );

        $this->assertTrue($this->user->email !== 'hellsan631@email.com');

        $this->user = $object::loadSingle(['email' => "$random@email.com"]);
        $this->assertTrue($this->user->id !== null);

    }

    public function testDatabaseCanSaveMultipleObjects(){

        $object = self::$db_table_name;

        $max = 10000;
        $random =  mt_rand(0,$max*$max);

        $list = $object::loadMultiple(['email' => 'hellsan631@email.com']);
        $temp = [];

        $this->assertTrue(count($list) > 0, "Tests to make sure data is loaded");
        $this->assertTrue(is_array($list));

        $count = 3;

        foreach($list as $value){
            array_push($temp, $value);
            $count--;

            if($count <= 0)
                break;
        }

        foreach($temp as $value){
            $object::saveMultiple(["username" => $random], ["id" =>  $value->id]);
        }

        $list = $object::loadMultiple(['username' => $random]);

        $this->assertTrue(count($list) > 0, "Tests to make sure saveMultiple works");
        $this->assertTrue(is_array($list));

        $random2 =  mt_rand(0,$max*$max);

        $count = 3;

        foreach($list as $value){
            array_push($temp, $value);
            $count--;

            if($count <= 0)
                break;
        }

        $object::saveMultiple(['email' => $random2], ['username' => $random]);

        $list = $object::loadMultiple(['email' => $random2]);

        $this->assertTrue(count($list) > 1, "Tests to make save multiple saves more then 1");
        $this->assertTrue(is_array($list));

        $random2 =  mt_rand(0,$max*$max);

        foreach($temp as $value){
            $object::saveMultiple(['email' => $random2], ['username' => $random, "id" =>  $value->id]);
        }

        $list = $object::loadMultiple(['email' => $random2]);

        $this->assertTrue(count($list) > 0, "Tests to make saveMultiple's condition array can support more then 1 argument");
        $this->assertTrue(is_array($list));

    }

    //------------Test Object Removal

    public function testDatabaseCanRemoveObject(){

        $object = self::$db_table_name;

        $this->user = $object::loadSingle(['username' => 'HellsAn631']);
        $this->assertTrue($this->user->id !== null);

        $savedID = $this->user->id;

        $this->user = new $object($savedID);
        $this->assertTrue($this->user->id !== null, "There exists an object to be deleted");

        $this->user->remove();

        $list = $object::newInstance()->getList(['id' => $savedID]);

        $this->assertTrue(count($list) === 0, "Number of objects in db that have the deleted ID are 0");
        $this->assertTrue(is_array($list));

    }

    public function testDatabaseCanDeleteSingleObject(){

        $object = self::$db_table_name;

        $this->user = $object::loadSingle(['username' => 'HellsAn631']);
        $this->assertTrue($this->user->id !== null);

        $savedID = $this->user->id;

        $this->user = new $object($savedID);
        $this->assertTrue($this->user->id !== null, "There exists an object to be deleted");

        $object::destroy($savedID);

        $list = $object::newInstance()->getList(['id' => $savedID]);

        $this->assertTrue(count($list) === 0, "Number of objects in db that have the deleted ID are 0");
        $this->assertTrue(is_array($list));

    }

    public function testDatabaseCanDeleteMultipleObjects(){

        $object = self::$db_table_name;

        $objects = [
            ['username' => 'HellsAn6', 'email'=> 'todelete@email.com'],
            ['username' => 'HellsAn3', 'email'=> 'todelete@email.com'],
            ['username' => 'HellsAn1', 'email'=> 'todelete@email.com']
        ];

        $this->users = $object::createMultiple($objects);
        $this->assertTrue($this->users !== false, "Create Multiple Worked and returned correctly");
        $this->assertEquals(
            $this->TableCount+3,
            $this->getConnection()->getRowCount(self::$db_table_name),
            "Users were created in database"
        );

        $object::removeMultiple(['email'=> 'todelete@email.com']);

        $this->assertEquals(
            $this->TableCount,
            $this->getConnection()->getRowCount(self::$db_table_name),
            "Users were deleted from database"
        );

    }

    //------------Test Object Misc Functions

    public function testCanReturnJsonObject(){
        $object = self::$db_table_name;

        $json = json_encode(['id' => 1, 'username' => 'HellsAn631', 'email'=> 'hellsan631@email.com']);
        $this->user = new $object($json);
        $this->assertJsonStringEqualsJsonString($json,$this->user->toJson());
    }


}