MoviesContext::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
c 1
b 0
f 0
nc 1
nop 3
dl 0
loc 5
rs 10
1
<?php
2
3
/**
4
 * Donut Social Network - Yet another experimental social network.
5
 * Copyright (C) 2016-2017, Dejan Angelov <[email protected]>
6
 *
7
 * This file is part of Donut Social Network.
8
 *
9
 * Donut Social Network is free software: you can redistribute it and/or modify
10
 * it under the terms of the GNU General Public License as published by
11
 * the Free Software Foundation, either version 3 of the License, or
12
 * (at your option) any later version.
13
 *
14
 * Donut Social Network is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 * GNU General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU General Public License
20
 * along with Donut Social Network.  If not, see <http://www.gnu.org/licenses/>.
21
 *
22
 * @package Donut Social Network
23
 * @copyright Copyright (C) 2016-2017, Dejan Angelov <[email protected]>
24
 * @license https://github.com/angelov/donut/blob/master/LICENSE
25
 * @author Dejan Angelov <[email protected]>
26
 */
27
28
namespace AppBundle\FeatureContexts\Setup;
29
30
use Behat\Behat\Context\Context;
31
use Behat\Gherkin\Node\TableNode;
32
use Doctrine\ORM\EntityManagerInterface;
33
use Angelov\Donut\Behat\Service\Storage\StorageInterface;
34
use Angelov\Donut\Core\UuidGenerator\UuidGeneratorInterface;
35
use Angelov\Donut\Movies\Genre;
36
use Angelov\Donut\Movies\Movie;
37
38
class MoviesContext implements Context
39
{
40
    private $em;
41
    private $storage;
42
    private $uuidGenerator;
43
44
    public function __construct(EntityManagerInterface $entityManager, StorageInterface $storage, UuidGeneratorInterface $uuidGenerator)
45
    {
46
        $this->em = $entityManager;
47
        $this->storage = $storage;
48
        $this->uuidGenerator = $uuidGenerator;
49
    }
50
51
    /**
52
     * @Given there is a movie titled :title
53
     */
54
    public function thereIsAMovieTitled(string $title) : void
55
    {
56
        $id = $this->uuidGenerator->generate();
57
        $movie = new Movie($id, $title, 2017, 'Example plot');
58
59
        $this->em->persist($movie);
60
        $this->em->flush();
61
    }
62
63
    /**
64
     * @Given there are the following movies
65
     */
66
    public function thereAreTheFollowingMovies(TableNode $table) : void
67
    {
68
        foreach ($table as $movie) {
69
70
            $genres = explode(', ', $movie['Genres']);
71
            $genres = array_map(function($genre) : Genre {
72
                return $this->storage->get('created_genres')[$genre];
73
            }, $genres);
74
            $id = $this->uuidGenerator->generate();
75
76
            $movie = new Movie(
77
                $id,
78
                $movie['Title'],
79
                $movie['Year'],
80
                '',
81
                $genres
82
            );
83
84
            $this->em->persist($movie);
85
        }
86
87
        $this->em->flush();
88
    }
89
90
    /**
91
     * @Given there are :count movies from the :genre genre released in :year
92
     * @Given there are :count movies from the :genre genre
93
     * @Given there are :count movies
94
     */
95
    public function thereAreMoviesFromTheActionGenreReleasedIn(int $count, string $genre = '', int $year = 2017) : void
96
    {
97
        $genres = $this->storage->get('created_genres');
98
99
        /** @var Genre $genre */
100
        $genre = ($genre !== '') ? $genres[$genre] : $genres[array_rand($genres)];
0 ignored issues
show
introduced by
The condition $genre !== '' is always true.
Loading history...
101
102
        for ($i=0; $i<$count; $i++) {
103
104
            $id = $this->uuidGenerator->generate();
105
            $movie = new Movie(
106
                $id,
107
                sprintf('%s movie #%d', $genre->getTitle(), $i),
108
                $year,
109
                '',
110
                [$genre]
111
            );
112
113
            $this->em->persist($movie);
114
        }
115
116
        $this->em->flush();
117
    }
118
}
119