Completed
Push — 1.4-new-behat ( e12fcf...33b548 )
by Kamil
27:34
created

ChannelContext::iChangeMyCurrentChannelTo()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
/*
4
 * This file is part of the Sylius package.
5
 *
6
 * (c) Paweł Jędrzejewski
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
declare(strict_types=1);
13
14
namespace Sylius\Behat\Context\Ui;
15
16
use Behat\Behat\Context\Context;
17
use Sylius\Behat\Page\Admin\Channel\CreatePageInterface;
18
use Sylius\Behat\Page\Shop\HomePageInterface;
19
use Sylius\Behat\Page\TestPlugin\MainPageInterface;
20
use Sylius\Behat\Service\Setter\ChannelContextSetterInterface;
21
use Sylius\Behat\Service\SharedStorageInterface;
22
use Sylius\Component\Channel\Repository\ChannelRepositoryInterface;
23
use Sylius\Component\Core\Model\ChannelInterface;
24
use Webmozart\Assert\Assert;
25
26
final class ChannelContext implements Context
27
{
28
    /** @var SharedStorageInterface */
29
    private $sharedStorage;
30
31
    /** @var ChannelContextSetterInterface */
32
    private $channelContextSetter;
33
34
    /** @var ChannelRepositoryInterface */
35
    private $channelRepository;
36
37
    /** @var CreatePageInterface */
38
    private $channelCreatePage;
39
40
    /** @var HomePageInterface */
41
    private $homePage;
42
43
    /** @var MainPageInterface */
44
    private $pluginMainPage;
45
46
    public function __construct(
47
        SharedStorageInterface $sharedStorage,
48
        ChannelContextSetterInterface $channelContextSetter,
49
        ChannelRepositoryInterface $channelRepository,
50
        CreatePageInterface $channelCreatePage,
51
        HomePageInterface $homePage,
52
        MainPageInterface $pluginMainPage
53
    ) {
54
        $this->sharedStorage = $sharedStorage;
55
        $this->channelContextSetter = $channelContextSetter;
56
        $this->channelRepository = $channelRepository;
57
        $this->channelCreatePage = $channelCreatePage;
58
        $this->homePage = $homePage;
59
        $this->pluginMainPage = $pluginMainPage;
60
    }
61
62
    /**
63
     * @Given /^I changed (?:|back )my current (channel to "([^"]+)")$/
64
     * @When /^I change (?:|back )my current (channel to "([^"]+)")$/
65
     */
66
    public function iChangeMyCurrentChannelTo(ChannelInterface $channel): void
67
    {
68
        $this->channelContextSetter->setChannel($channel);
69
    }
70
71
    /**
72
     * @When I create a new channel :channelName
73
     */
74
    public function iCreateNewChannel(string $channelName): void
75
    {
76
        $this->channelCreatePage->open();
77
        $this->channelCreatePage->nameIt($channelName);
78
        $this->channelCreatePage->specifyCode($channelName);
79
        $this->channelCreatePage->create();
80
81
        $channel = $this->channelRepository->findOneBy(['name' => $channelName]);
82
        $this->sharedStorage->set('channel', $channel);
83
    }
84
85
    /**
86
     * @When /^I visit (this channel)'s homepage$/
87
     * @When /^I (?:am browsing|start browsing|try to browse|browse) (that channel)$/
88
     * @When /^I (?:am browsing|start browsing|try to browse|browse) (?:|the )("[^"]+" channel)$/
89
     * @When /^I (?:am browsing|start browsing|try to browse|browse) (?:|the )(channel "[^"]+")$/
90
     */
91
    public function iVisitChannelHomepage(ChannelInterface $channel): void
92
    {
93
        $this->channelContextSetter->setChannel($channel);
94
95
        $defaultLocale = $channel->getDefaultLocale();
96
        $this->homePage->open(['_locale' => $defaultLocale->getCode()]);
97
    }
98
99
    /**
100
     * @When I visit plugin's main page
101
     */
102
    public function visitPluginMainPage(): void
103
    {
104
        $this->pluginMainPage->open();
105
    }
106
107
    /**
108
     * @Then I should see a plugin's main page with content :content
109
     */
110
    public function shouldSeePluginMainPageWithContent(string $content): void
111
    {
112
        Assert::same($this->pluginMainPage->getContent(), $content);
113
    }
114
}
115