Completed
Push — master ( b09a2b...07a17e )
by Aydin
03:09
created

testSeedAddsRandomUsersToDatabaseAndStoresRandomIdAndName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 16
rs 9.4286
cc 1
eloc 11
nc 1
nop 0
1
<?php
2
3
namespace PhpSchool\LearnYouPhpTest\Exercise;
4
5
use Faker\Factory;
6
use Faker\Generator;
7
use PDO;
8
use PhpSchool\LearnYouPhp\Exercise\DatabaseRead;
9
use PHPUnit_Framework_TestCase;
10
11
/**
12
 * Class DatabaseReadTest
13
 * @package PhpSchool\LearnYouPhpTest\Exercise
14
 * @author Aydin Hassan <[email protected]>
15
 */
16
class DatabaseReadTest extends PHPUnit_Framework_TestCase
17
{
18
    /**
19
     * @var Generator
20
     */
21
    private $faker;
22
23
    public function setUp()
24
    {
25
        $this->faker = Factory::create();
26
    }
27
28
29
    public function testDatabaseExercise()
30
    {
31
        $e = new DatabaseRead($this->faker);
32
        $this->assertEquals('Database Read', $e->getName());
33
        $this->assertEquals('Read an SQL databases contents', $e->getDescription());
34
35
        $this->assertFileExists(realpath($e->getSolution()));
36
        $this->assertFileExists(realpath($e->getProblem()));
37
        $this->assertNull($e->tearDown());
38
    }
39
40
    public function testSeedAddsRandomUsersToDatabaseAndStoresRandomIdAndName()
41
    {
42
        $db = new PDO('sqlite::memory:');
43
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
44
        $e = new DatabaseRead($this->faker);
45
        
46
        $e->seed($db);
47
        
48
        $args = $e->getArgs();
49
        $stmt = $db->query('SELECT * FROM users;');
50
        
51
        $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
52
        $this->assertTrue(count($users) > 5);
53
        $this->assertInternalType('array', $users);
54
        $this->assertTrue(in_array($args[0], array_column($users, 'name')));
55
    }
56
57
    public function testVerifyReturnsTrueIfRecordExistsWithNameUsingStoredId()
58
    {
59
        $db = new PDO('sqlite::memory:');
60
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
61
        $e = new DatabaseRead($this->faker);
62
        
63
        $rp = new \ReflectionProperty(DatabaseRead::class, 'randomRecord');
64
        $rp->setAccessible(true);
65
        $rp->setValue($e, ['id' => 5]);
66
67
        $db
68
            ->exec('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER, gender TEXT)');
69
        $stmt = $db->prepare('INSERT INTO users (id, name, age, gender) VALUES (:id, :name, :age, :gender)');
70
        $stmt->execute([':id' => 5, ':name' => 'David Attenborough', ':age' => 50, ':gender' => 'Male']);
71
        
72
        $this->assertTrue($e->verify($db));
73
    }
74
}
75