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

DatabaseRead::verify()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 10
rs 9.4286
cc 1
eloc 6
nc 1
nop 1
1
<?php
2
3
namespace PhpSchool\LearnYouPhp\Exercise;
4
5
use Faker\Generator;
6
use PDO;
7
use PhpSchool\PhpWorkshop\Exercise\AbstractExercise;
8
use PhpSchool\PhpWorkshop\Exercise\ExerciseInterface;
9
use PhpSchool\PhpWorkshop\ExerciseCheck\DatabaseExerciseCheck;
10
use PhpSchool\PhpWorkshop\SubmissionPatch;
11
use Symfony\Component\Filesystem\Filesystem;
12
13
/**
14
 * Class DatabaseRead
15
 * @package PhpSchool\LearnYouPhp\Exercise
16
 * @author Michael Woodawrd <[email protected]>
17
 * @author Aydin Hassan <[email protected]>
18
 */
19
class DatabaseRead extends AbstractExercise implements ExerciseInterface, DatabaseExerciseCheck
20
{
21
22
    /**
23
     * @var Generator
24
     */
25
    private $faker;
26
27
    /**
28
     * @var array
29
     */
30
    private $randomRecord;
31
32
    /**
33
     * @param Generator $faker
34
     */
35
    public function __construct(Generator $faker)
36
    {
37
        $this->faker = $faker;
38
    }
39
40
    /**
41
     * @return string
42
     */
43
    public function getName()
44
    {
45
        return 'Database Read';
46
    }
47
48
    /**
49
     * @return string
50
     */
51
    public function getDescription()
52
    {
53
        return 'Read an SQL databases contents';
54
    }
55
56
    /**
57
     * @return array
58
     */
59
    public function getArgs()
60
    {
61
        return [$this->randomRecord['name']];
62
    }
63
    
64
    /**
65
     * @param PDO $db
66
     * @return void
67
     */
68
    public function seed(PDO $db)
69
    {
70
        $db
71
            ->exec('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER, gender TEXT)');
72
        $stmt = $db->prepare('INSERT INTO users (name, age, gender) VALUES (:name, :age, :gender)');
73
74
        $names = [];
75
        for ($i = 0; $i < $this->faker->numberBetween(5, 15); $i++) {
76
            $name   = $this->faker->name;
77
            $age    = rand(18, 90);
78
            $gender = rand(0, 100) % 2 ? 'male' : 'female';
79
80
            $stmt->execute([':name' => $name, ':age' => $age, ':gender' => $gender]);
81
            $id = $db->lastInsertId();
82
            $names[$id] = $name;
83
        }
84
85
        $randomId = array_rand($names);
86
        $this->randomRecord = ['id' => $randomId, 'name' => $names[$randomId]];
87
    }
88
89
    /**
90
     * @param PDO $db
91
     * @return bool
92
     */
93
    public function verify(PDO $db)
94
    {
95
        $sql = 'SELECT name FROM users WHERE id = :id';
96
        $stmt = $db->prepare($sql);
97
98
        $stmt->execute([':id' => $this->randomRecord['id']]);
99
        $result = $stmt->fetchColumn();
100
        
101
        return $result === 'David Attenborough';
102
    }
103
}
104