Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update tests to use Orchestral Testbench #19

Draft
wants to merge 23 commits into
base: master
Choose a base branch
from
Draft
58 changes: 41 additions & 17 deletions .github/workflows/laravel-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,59 @@ on:
branches: [ master, develop ]

jobs:
laravel-tests:
misspell-linter:
name: Spelling
runs-on: ubuntu-latest
steps:
- name: Check out code.
uses: actions/checkout@v1
- name: misspell
uses: reviewdog/action-misspell@v1
with:
github_token: ${{ secrets.github_token }}
locale: "US"

phpcs-linter:
name: PHPCS
runs-on: ubuntu-latest
steps:
- name: Check out code into the workspace
uses: actions/checkout@v2
- uses: hrysd/[email protected]
with:
github_token: ${{ secrets.github_token }}
standard: PSR1,PSR2,PSR12
target_directory: src

phpmd-linter:
name: PHPMD
runs-on: ubuntu-latest
steps:
- name: Check out code into the workspace
uses: actions/checkout@v2
- name: Run php check code with reviewdog
uses: GeneaLabs/[email protected]

phpstan-linter:
name: PHPStan
runs-on: ubuntu-latest
steps:
- name: Check out code into the workspace
uses: actions/checkout@v2
- name: Run php check code with reviewdog
uses: GeneaLabs/[email protected]

tests:
runs-on: ubuntu-latest
strategy:
max-parallel: 6
fail-fast: false
matrix:
php: [7.3,7.4]

name: PHP ${{ matrix.php }}

steps:
- uses: actions/checkout@v2

- uses: reviewdog/action-setup@v1
with:
reviewdog_version: latest

- name: Cache dependencies
uses: actions/cache@v1
with:
Expand All @@ -39,11 +73,6 @@ jobs:
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, gd, pgsql, pdo_pgsql
coverage: xdebug

- uses: zhulik/[email protected]
with:
redis version: '5'
number of databases: 100

- name: Remove Nova on a pull request
if: github.event_name == 'pull_request'
run: composer remove laravel/nova --no-update --no-interaction --dev
Expand All @@ -56,11 +85,6 @@ jobs:
composer config "http-basic.nova.laravel.com" "${{ secrets.NOVA_USERNAME }}" "${{ secrets.NOVA_PASSWORD }}"
composer install --dev --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist

- name: Check Code
uses: lifulltechvn/laravel-app-reviewdog-action@v1
with:
github_token: ${{ secrets.github_token }}

- name: Run Tests without Nova
if: github.event_name == 'pull_request'
run: vendor/bin/phpunit --configuration phpunit.xml --testsuite Integration,Feature --coverage-text --coverage-clover ./coverage.xml
Expand Down
26 changes: 13 additions & 13 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,23 +27,23 @@
"require-dev": {
"facade/ignition": "^2.3.6",
"fzaninotto/faker": "^1.9.1",
"laravel/browser-kit-testing": "^6.0",
"laravel/laravel": "^8.0",
"laravel/legacy-factories": "^1.0.4",
"laravel/ui": "^3.0",
"mockery/mockery": "^1.3.1",
"nunomaduro/collision": "^5.0",
"php-coveralls/php-coveralls" : "^2.2",
"phpmd/phpmd": "^2.8",
"phpunit/phpunit": "^9.0",
"sebastian/phpcpd": "^5.0",
"laravel/nova": "^3.12"
"laravel/nova": "^3.12",
"orchestra/testbench": "^6.2",
"orchestra/testbench-browser-kit": "^6.0",
"illuminate/database": "^8.9",
"laravel/ui": "^3.0"
},
"autoload": {
"classmap": [],
"psr-4": {
"GeneaLabs\\LaravelImpersonator\\": "src/",
"GeneaLabs\\LaravelImpersonator\\Tests\\": "tests/"
"GeneaLabs\\LaravelImpersonator\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"GeneaLabs\\LaravelImpersonator\\Tests\\": "tests/",
"GeneaLabs\\LaravelImpersonator\\Tests\\Fixtures\\App\\": "tests/Fixtures/app/",
"GeneaLabs\\LaravelImpersonator\\Tests\\Fixtures\\Database\\Factories\\": "tests/Fixtures/database/factories/"
}
},
"extra": {
Expand Down
11 changes: 11 additions & 0 deletions phpcs.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<ruleset xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" name="PHP_CodeSniffer" xsi:noNamespaceSchemaLocation="phpcs.xsd">
<description>GeneaLabs coding standards.</description>

<rule ref="PSR1"></rule>
<rule ref="PSR2"></rule>
<rule ref="PSR12">
<exclude name="PSR12.Classes.ClassInstantiation.MissingParentheses"/>
<exclude name="PSR12.Functions.ReturnTypeDeclaration.SpaceBeforeColon"/>
</rule>
</ruleset>
49 changes: 19 additions & 30 deletions phpunit.xml
Original file line number Diff line number Diff line change
@@ -1,36 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
>
<testsuites>
<phpunit xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" backupGlobals="false" backupStaticAttributes="false" bootstrap="vendor/autoload.php" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd">
<coverage processUncoveredFiles="true">
<include>
<directory suffix=".php">./src</directory>
</include>
</coverage>
<testsuites>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>

<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./src</directory>
</whitelist>
</filter>
<php>
<env name="APP_KEY" value="base64:Xgs1LQt1GdVHhD6qyYCXnyq61DE3UKqJ5k2SJc+Nw2g="/>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
</php>
</testsuites>
<php>
<env name="APP_KEY" value="base64:Xgs1LQt1GdVHhD6qyYCXnyq61DE3UKqJ5k2SJc+Nw2g="/>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
</php>
</phpunit>
72 changes: 46 additions & 26 deletions tests/CreatesApplication.php
Original file line number Diff line number Diff line change
@@ -1,39 +1,59 @@
<?php namespace GeneaLabs\LaravelImpersonator\Tests;

use Laravel\Ui\UiServiceProvider;
use GeneaLabs\LaravelImpersonator\Providers\Service as LaravelImpersonatorService;
use Illuminate\Contracts\Console\Kernel;
use Illuminate\Database\Eloquent\Factory;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Foundation\Testing\RefreshDatabase;
use GeneaLabs\LaravelImpersonator\Tests\Fixtures\App\Models\User;
use GeneaLabs\LaravelImpersonator\Providers\Service as LaravelImpersonatorService;
use GeneaLabs\LaravelImpersonator\Tests\Fixtures\App\Providers\RouteServiceProvider;

trait CreatesApplication
{
public function createApplication()
use RefreshDatabase;

public function setUp(): void
{
$this->copyFixtures([
__DIR__ . '/Fixtures/app/Http/Controllers/HomeController.php' => __DIR__ . '/../vendor/laravel/laravel/app/Http/Controllers/HomeController.php',
__DIR__ . '/Fixtures/resources/views/home.blade.php' => __DIR__ . '/../vendor/laravel/laravel/resources/views/home.blade.php',
__DIR__ . '/Fixtures/resources/views/layouts/app.blade.php' => __DIR__ . '/../vendor/laravel/laravel/resources/views/layouts/app.blade.php',
]);
$app = require __DIR__ . '/../vendor/laravel/laravel/bootstrap/app.php';
$app->register(UiServiceProvider::class);
$app->register(TestServiceProvider::class);
$app->register(LaravelImpersonatorService::class);
$app->make(Kernel::class)->bootstrap();

return $app;
parent::setUp();

$this->loadLaravelMigrations();
}

protected function copyFixtures(array $fixtures)
protected function resolveApplicationConfiguration($app)
{
$fixtures = collect($fixtures)
->each(function ($destination, $source) {
if (! file_exists(dirname($destination))) {
mkdir(dirname($destination), 0777, true);
}

$contents = file_get_contents($source);
file_put_contents($destination, $contents);
});
parent::resolveApplicationConfiguration($app);

$app['config']->set('genealabs-laravel-impersonator.layout', 'genealabs-laravel-impersonator-tests::layouts.app');
$app['config']->set('auth.providers.users.model', User::class);
}

protected function getPackageProviders($app)
{
return [
UiServiceProvider::class,
RouteServiceProvider::class,
LaravelImpersonatorService::class,
];
}

// public function createApplication()
// {
// $this->copyFixtures([
// __DIR__ . '/Fixtures/app/Http/Controllers/HomeController.php' => __DIR__ . '/../vendor/laravel/laravel/app/Http/Controllers/HomeController.php',
// __DIR__ . '/Fixtures/resources/views/home.blade.php' => __DIR__ . '/../vendor/laravel/laravel/resources/views/home.blade.php',
// __DIR__ . '/Fixtures/resources/views/layouts/app.blade.php' => __DIR__ . '/../vendor/laravel/laravel/resources/views/layouts/app.blade.php',
// ]);
// }

// protected function copyFixtures(array $fixtures)
// {
// $fixtures = collect($fixtures)
// ->each(function ($destination, $source) {
// if (! file_exists(dirname($destination))) {
// mkdir(dirname($destination), 0777, true);
// }

// $contents = file_get_contents($source);
// file_put_contents($destination, $contents);
// });
// }
}
21 changes: 12 additions & 9 deletions tests/Feature/ImpersonationTest.php
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
<?php namespace GeneaLabs\LaravelImpersonator\Tests\Feature;
<?php

namespace GeneaLabs\LaravelImpersonator\Tests\Feature;

use GeneaLabs\LaravelImpersonator\Tests\Fixtures\User;
use GeneaLabs\LaravelImpersonator\Tests\FeatureTestCase;
use Symfony\Component\Routing\Exception\RouteNotFoundException;
use GeneaLabs\LaravelImpersonator\Tests\Fixtures\App\Models\User;
use GeneaLabs\LaravelImpersonator\Tests\Fixtures\Database\Factories\UserFactory;

class ImpersonationTest extends FeatureTestCase
{
public function testImpersonatingPageLoads()
{
$user = factory(User::class)->create([
$user = (new UserFactory)->create([
'canImpersonate' => true,
'canBeImpersonated' => false,
]);
Expand All @@ -23,11 +26,11 @@ public function testImpersonatingPageLoads()
public function testImpersonatableUsersAreListed()
{
config(['genealabs-laravel-impersonator.user-model' => User::class]);
$user = factory(User::class)->create([
$user = (new UserFactory)->create([
'canImpersonate' => true,
'canBeImpersonated' => false,
]);
$users = factory(User::class, 10)->create();
$users = (new UserFactory)->count( 10)->create();

$response = $this
->actingAs($user)
Expand All @@ -42,11 +45,11 @@ public function testImpersonatableUsersAreListed()
public function testUserCanBeImpersonated()
{
config(['genealabs-laravel-impersonator.user-model' => User::class]);
$user = factory(User::class)->create([
$user = (new UserFactory)->create([
'canImpersonate' => true,
'canBeImpersonated' => false,
]);
$users = factory(User::class, 10)->create();
$users = (new UserFactory)->count( 10)->create();

$response = $this->actingAs($user)
->visit(route('impersonatees.index'))
Expand All @@ -61,11 +64,11 @@ public function testMiddlewareCanBeAdjusted()
config(['genealabs-laravel-impersonator.user-model' => User::class]);
config(['genealabs-laravel-impersonator.middleware' => ['web', 'auth', 'password.confirm' => ['except' => ['destroy']]]]);

$user = factory(User::class)->create([
$user = (new UserFactory)->create([
'canImpersonate' => true,
'canBeImpersonated' => false,
]);
$users = factory(User::class, 10)->create();
$users = (new UserFactory)->count(10) ->create();

$this->expectException(RouteNotFoundException::class);
$this->expectExceptionMessage('Route [password.confirm] not defined.');
Expand Down
10 changes: 7 additions & 3 deletions tests/FeatureTestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,15 @@
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Laravel\BrowserKitTesting\TestCase;
use Orchestra\Testbench\BrowserKit\TestCase;

abstract class FeatureTestCase extends TestCase
{
use CreatesApplication;
use DatabaseMigrations;
use DatabaseTransactions;
// use DatabaseMigrations;
// use DatabaseTransactions;
public function test()
{

}
}
4 changes: 2 additions & 2 deletions tests/Fixtures/app/Http/Controllers/HomeController.php
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<?php

namespace App\Http\Controllers;
namespace GeneaLabs\LaravelImpersonator\Tests\Fixtures\App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

class HomeController extends Controller
{
Expand Down
10 changes: 7 additions & 3 deletions tests/Fixtures/User.php → tests/Fixtures/app/Models/User.php
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
<?php namespace GeneaLabs\LaravelImpersonator\Tests\Fixtures;
<?php

use App\Models\User as OG;
namespace GeneaLabs\LaravelImpersonator\Tests\Fixtures\App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use GeneaLabs\LaravelImpersonator\Traits\Impersonatable;

class User extends OG
class User extends Authenticatable
{
use HasFactory;
use Impersonatable;

protected $canImpersonateFlag = false;
Expand Down
Loading