Add browser tests (#796)
* Add lmc/steward package and other dependencies
This commit is contained in:
@@ -12,3 +12,4 @@ monica.sublime-workspace
|
||||
/storage/oauth-public.key
|
||||
.DS_Store
|
||||
npm-debug.log.*
|
||||
/results
|
||||
|
||||
+28
-2
@@ -10,16 +10,42 @@ services:
|
||||
jdk:
|
||||
- oraclejdk8
|
||||
|
||||
addons:
|
||||
chrome: stable
|
||||
|
||||
before_script:
|
||||
- cp .env.travis .env
|
||||
- mysql -e 'create database monica;'
|
||||
- composer self-update
|
||||
- composer install --no-interaction
|
||||
- travis_retry composer install --no-interaction --prefer-dist --no-suggest
|
||||
|
||||
# Start Xvfb
|
||||
- "export DISPLAY=:99.0"
|
||||
- "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x24"
|
||||
|
||||
# Start selenium server
|
||||
- vendor/bin/selenium-server-standalone -role hub -log selenium-server.log -enablePassThrough false &
|
||||
- until $(echo | nc localhost 4444); do sleep 1; echo Waiting for selenium hub to start...; done;
|
||||
|
||||
# Start selenium node for headless Chrome
|
||||
- export PATH="$(pwd)/vendor/bin:$PATH"
|
||||
- vendor/bin/selenium-server-standalone -role node -port 8910 -log selenium-node.log -enablePassThrough false &
|
||||
- until $(echo | nc localhost 8910); do sleep 1; echo Waiting for selenium node to start...; done;
|
||||
|
||||
script:
|
||||
- php artisan migrate --env=testing --no-interaction -vvv
|
||||
- php artisan db:seed --env=testing --no-interaction -vvv
|
||||
- vendor/bin/phpunit --log-junit junit.xml --coverage-clover clover.xml
|
||||
- vendor/bin/phpunit
|
||||
|
||||
# Start http server
|
||||
- php artisan serve &
|
||||
- until $(echo | nc localhost 8000); do sleep 1; echo Waiting for laravel server to start...; done;
|
||||
- vendor/bin/steward run laravel chrome
|
||||
|
||||
after_script:
|
||||
- vendor/bin/steward results -vvv
|
||||
- cat selenium-server.log
|
||||
- cat selenium-node.log
|
||||
- ./travis-sonar.sh
|
||||
|
||||
cache:
|
||||
|
||||
Binary file not shown.
+10
-3
@@ -5,6 +5,10 @@
|
||||
"keywords": ["prm", "crm", "social"],
|
||||
"type": "project",
|
||||
"repositories": [
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/asbiin/steward"
|
||||
},
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/asbiin/google2fa-laravel"
|
||||
@@ -22,7 +26,7 @@
|
||||
"intervention/image": "^2.3",
|
||||
"jenssegers/date": "^3.2",
|
||||
"laravel/cashier": "~7.0",
|
||||
"laravel/dusk": "^1.1",
|
||||
"laravel/dusk": "^2.0",
|
||||
"laravel/framework": "5.5.*",
|
||||
"laravel/passport": "^4.0",
|
||||
"laravel/socialite": "^3.0",
|
||||
@@ -37,11 +41,14 @@
|
||||
"sentry/sentry-laravel": "^0.7.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"enm1989/chromedriver": "^2.35",
|
||||
"filp/whoops": "~2.0",
|
||||
"lmc/steward": "dev-update-dependencies",
|
||||
"mockery/mockery": "0.9.*",
|
||||
"phpunit/phpunit": "~6.0",
|
||||
"se/selenium-server-standalone": "^3.8",
|
||||
"symfony/css-selector": "2.8.*|3.0.*",
|
||||
"symfony/dom-crawler": "2.8.*|3.0.*",
|
||||
"filp/whoops": "~2.0"
|
||||
"symfony/dom-crawler": "2.8.*|3.0.*"
|
||||
},
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
|
||||
Generated
+1043
-38
File diff suppressed because it is too large
Load Diff
@@ -11,6 +11,7 @@
|
||||
* [Testing environment](#testing-environment)
|
||||
* [Setup](#setup)
|
||||
* [Run the test suite](#run-the-test-suite)
|
||||
* [Run browser tests](#run-browser-tests)
|
||||
* [Backend](#backend)
|
||||
* [Things to consider when adding new code](#things-to-consider-when-adding-new-code)
|
||||
* [Add a new table to the database schema](#add-a-new-table-to-the-database-schema)
|
||||
@@ -108,6 +109,36 @@ To run the test suite:
|
||||
|
||||
* `phpunit` or `./vendor/bin/phpunit` in the root of the folder containing Monica's code from GitHub.
|
||||
|
||||
### Run browser tests
|
||||
|
||||
To run browser tests, first you need to install some requirements
|
||||
|
||||
* Install java:
|
||||
```
|
||||
sudo add-apt-repository -y ppa:webupd8team/java
|
||||
sudo apt -y update
|
||||
sudo apt -y install oracle-java9-installer
|
||||
```
|
||||
* Install Google chrome:
|
||||
```
|
||||
curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add
|
||||
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list
|
||||
sudo apt -y update
|
||||
sudo apt -y -f install google-chrome-stable fonts-liberation libappindicator1
|
||||
```
|
||||
|
||||
To run the test suite, you need to launch selenium first, then steward :
|
||||
* Run selenium:
|
||||
```
|
||||
vendor/bin/selenium-server-standalone -role hub -log selenium-server.log -enablePassThrough false &
|
||||
export PATH="$(pwd)/vendor/bin:$PATH"
|
||||
xvfb-run -s "-ac -screen 0 1280x1024x24" vendor/bin/selenium-server-standalone -role node -port 8910 -log selenium-node.log -enablePassThrough false &
|
||||
```
|
||||
* Run the test suite:
|
||||
```
|
||||
./vendor/bin/steward -vvv run local chrome
|
||||
```
|
||||
|
||||
## Backend
|
||||
|
||||
The project follows strict [object calisthenics](http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php), as much as possible and more and more over time. We will soon implement those rules in the Linters and will block a pull request for the code that does not follow those guidelines.
|
||||
|
||||
@@ -46,4 +46,8 @@
|
||||
<env name="SESSION_DRIVER" value="array"/>
|
||||
<env name="QUEUE_DRIVER" value="sync"/>
|
||||
</php>
|
||||
<logging>
|
||||
<log type="coverage-clover" target="./results/clover.xml"/>
|
||||
<log type="junit" target="./results/junit.xml"/>
|
||||
</logging>
|
||||
</phpunit>
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
tests_dir: ./tests/BrowserSelenium
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\BrowserSelenium;
|
||||
|
||||
use Lmc\Steward\ConfigProvider;
|
||||
use Lmc\Steward\Test\AbstractTestCase;
|
||||
|
||||
/**
|
||||
* Abstract class for custom tests, could eg. define some properties or instantiate some common components in setUp().
|
||||
*/
|
||||
abstract class BaseTestCase extends AbstractTestCase
|
||||
{
|
||||
/** @var int Default width of browser window (Steward's default is 1280) */
|
||||
public static $browserWidth = 1280;
|
||||
/** @var int Default height of browser window (Steward's default is 1024) */
|
||||
public static $browserHeight = 1024;
|
||||
/** @var string */
|
||||
public static $baseUrl;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
// Set base url according to environment
|
||||
switch (ConfigProvider::getInstance()->env) {
|
||||
case 'dev':
|
||||
self::$baseUrl = env('APP_URL');
|
||||
break;
|
||||
case 'laravel':
|
||||
self::$baseUrl = 'http://127.0.0.1:8000/';
|
||||
break;
|
||||
case 'local':
|
||||
self::$baseUrl = 'http://127.0.0.1/';
|
||||
break;
|
||||
default:
|
||||
throw new \RuntimeException(sprintf('Unknown environment "%s"', ConfigProvider::getInstance()->env));
|
||||
}
|
||||
|
||||
$this->debug('Base URL set to "%s"', self::$baseUrl);
|
||||
|
||||
if (ConfigProvider::getInstance()->env == 'production') {
|
||||
$this->warn('The tests are run against production, so be careful!');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\BrowserSelenium;
|
||||
|
||||
class SimpleTest extends BaseTestCase
|
||||
{
|
||||
/**
|
||||
* init should be run with "before" phpunit annotation, but it doesn't work !
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
$this->wd->get(self::$baseUrl);
|
||||
}
|
||||
|
||||
/**
|
||||
* A basic browser test example.
|
||||
*/
|
||||
public function testBasicExample()
|
||||
{
|
||||
$this->init();
|
||||
$this->assertContains('Monica', $this->wd->getTitle());
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -31,8 +31,8 @@ function CommonParams {
|
||||
|
||||
echo -Dsonar.host.url=$SONAR_HOST_URL \
|
||||
-Dsonar.organization=monicahq \
|
||||
-Dsonar.php.tests.reportPath=junit.xml \
|
||||
-Dsonar.php.coverage.reportPaths=clover.xml \
|
||||
-Dsonar.php.tests.reportPath=./results/junit.xml \
|
||||
-Dsonar.php.coverage.reportPaths=./results/clover.xml \
|
||||
-Dsonar.projectVersion=$(php artisan monica:getversion) \
|
||||
$extra
|
||||
}
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user