the browser-facing portion of osu!
at master 2.2 kB view raw
1<?php 2 3// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 4// See the LICENCE file in the repository root for full licence text. 5 6namespace Tests; 7 8use Facebook\WebDriver\Chrome\ChromeOptions; 9use Facebook\WebDriver\Remote\DesiredCapabilities; 10use Facebook\WebDriver\Remote\RemoteWebDriver; 11use Facebook\WebDriver\WebDriverDimension; 12use Laravel\Dusk\Browser; 13use Laravel\Dusk\TestCase as BaseTestCase; 14 15abstract class DuskTestCase extends BaseTestCase 16{ 17 use CreatesApplication; 18 19 /** 20 * Prepare for Dusk test execution. 21 * 22 * @beforeClass 23 * @return void 24 */ 25 public static function prepare() 26 { 27 $chromeDriver = presence(env('DUSK_WEBDRIVER_BIN')); 28 if ($chromeDriver !== null) { 29 static::$chromeDriver = $chromeDriver; 30 } 31 32 if (!present(env('DUSK_WEBDRIVER_URL'))) { 33 static::startChromeDriver(['--port=9515']); 34 } 35 } 36 37 /** 38 * Resets passed browser session. 39 * Currently only clears existing cookies. 40 * 41 * @return void 42 */ 43 protected static function resetSession(Browser $browser): void 44 { 45 $browser->driver->manage()->deleteAllCookies(); 46 } 47 48 /** 49 * Create the RemoteWebDriver instance. 50 * 51 * @return \Facebook\WebDriver\Remote\RemoteWebDriver 52 */ 53 protected function driver() 54 { 55 $options = (new ChromeOptions())->addArguments([ 56 '--disable-gpu', 57 '--headless', 58 ]); 59 60 $driver = RemoteWebDriver::create( 61 presence(env('DUSK_WEBDRIVER_URL')) ?? 'http://localhost:9515', 62 DesiredCapabilities::chrome()->setCapability( 63 ChromeOptions::CAPABILITY, 64 $options 65 ) 66 ); 67 68 // TODO: move this out when/if adding additional tests for mobile layout? 69 $driver->manage()->window() 70 ->setSize(new WebDriverDimension(1920, 1080)); // ensure we get desktop layout 71 72 return $driver; 73 } 74 75 protected function setUp(): void 76 { 77 parent::setUp(); 78 79 foreach (static::$browsers as $browser) { 80 static::resetSession($browser); 81 } 82 } 83}