createApp(); $this->prepareForE2E(); $this->driver = RemoteWebDriver::create('http://localhost:4444/wd/hub', DesiredCapabilities::chrome()); $this->driver->manage()->window()->setSize(new WebDriverDimension(1440, 900)); $this->driver->manage()->window()->setPosition(new WebDriverPoint(0, 0)); } /** * @return Application */ protected function createApp() { $this->app = require __DIR__.'/../../bootstrap/app.php'; $this->app->make(Kernel::class)->bootstrap(); return $this->app; } private function prepareForE2E() { // Make sure we have a fresh database. @unlink(__DIR__.'/../../database/e2e.sqlite'); touch(__DIR__.'/../../database/e2e.sqlite'); Artisan::call('migrate'); Artisan::call('db:seed'); Artisan::call('db:seed', ['--class' => 'E2EDataSeeder']); if (!file_exists($this->coverPath)) { @mkdir($this->coverPath, 0777, true); } } /** * Log into Koel. * * @param string $username * @param string $password * * @return $this */ protected function login($username = 'koel@example.com', $password = 'SoSecureK0el') { $this->typeIn("#app > div.login-wrapper > form > [type='email']", $username); $this->typeIn("#app > div.login-wrapper > form > [type='password']", $password); $this->enter(); return $this; } protected function loginAndWait() { $this->login(); $this->seeText('Koel Admin', '#userBadge > a.view-profile.control > span'); return $this; } /** * A helper to allow going to a specific screen. * * @param $screen * * @return $this * * @throws \Exception */ protected function goto($screen) { $this->wrapperId = "#{$screen}Wrapper"; if ($screen === 'favorites') { $this->click('#sidebar .favorites a'); } else { $this->click("#sidebar a.$screen"); } $this->see($this->wrapperId); return $this; } protected function loginAndGoTo($screen) { return $this->loginAndWait()->goto($screen); } protected function waitForUserInput() { if (trim(fgets(fopen('php://stdin', 'rb'))) !== chr(13)) { return; } } protected function focusIntoApp() { $this->click('#app'); } public function setUp() { $this->driver->get($this->url); } public function tearDown() { $this->driver->quit(); } }