Browse Source

Passed ManageProjectTest suite with database migration and sqlite in memory test

pull/1/head
Nafies Luthfi 9 years ago
parent
commit
c4f2241647
  1. 15
      app/Providers/AuthServiceProvider.php
  2. 2
      config/database.php
  3. 11
      database/factories/ModelFactory.php
  4. 3
      phpunit.xml
  5. 2
      tests/TestCase.php
  6. 13
      tests/functional/ManageProjectsTest.php

15
app/Providers/AuthServiceProvider.php

@ -28,8 +28,8 @@ class AuthServiceProvider extends ServiceProvider
// Dynamically register permissions with Laravel's Gate. // Dynamically register permissions with Laravel's Gate.
foreach ($this->getPermissions() as $permission) { foreach ($this->getPermissions() as $permission) {
Gate::define($permission->name, function ($user) use ($permission) {
return $user->hasPermission($permission);
Gate::define($permission, function ($user) {
return $user->hasRole('admin');
}); });
} }
@ -57,6 +57,15 @@ class AuthServiceProvider extends ServiceProvider
*/ */
protected function getPermissions() protected function getPermissions()
{ {
return Permission::with('roles')->get();
return [
'manage_users',
'manage_role_permissions',
'manage_backups',
'manage_options',
'manage_projects',
'manage_payments',
'manage_subscriptions',
'see_reports',
];
} }
} }

2
config/database.php

@ -48,7 +48,7 @@ return [
'sqlite' => [ 'sqlite' => [
'driver' => 'sqlite', 'driver' => 'sqlite',
'database' => database_path('database.sqlite'),
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '', 'prefix' => '',
], ],

11
database/factories/ModelFactory.php

@ -6,6 +6,7 @@ use App\Entities\Projects\Project;
use App\Entities\Projects\Task; use App\Entities\Projects\Task;
use App\Entities\Subscriptions\Subscription; use App\Entities\Subscriptions\Subscription;
use App\Entities\Users\Event; use App\Entities\Users\Event;
use App\Entities\Users\Role;
use App\Entities\Users\User; use App\Entities\Users\User;
$factory->define(User::class, function (Faker\Generator $faker) { $factory->define(User::class, function (Faker\Generator $faker) {
@ -15,7 +16,15 @@ $factory->define(User::class, function (Faker\Generator $faker) {
'email' => $email = $faker->unique()->email, 'email' => $email = $faker->unique()->email,
'password' => 'member', 'password' => 'member',
'remember_token' => str_random(10), 'remember_token' => str_random(10),
'api_token' => bcrypt($email),
'api_token' => str_random(40),
];
});
$factory->define(Role::class, function (Faker\Generator $faker) {
return [
'type' => 0,
'name' => $faker->word,
'label' => $faker->sentence,
]; ];
}); });

3
phpunit.xml

@ -23,7 +23,8 @@
<env name="CACHE_DRIVER" value="array"/> <env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/> <env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/> <env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_DATABASE" value="test_lv_myproject"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
</php> </php>
<listeners> <listeners>
<listener class="JohnKary\PHPUnit\Listener\SpeedTrapListener"> <listener class="JohnKary\PHPUnit\Listener\SpeedTrapListener">

2
tests/TestCase.php

@ -1,5 +1,6 @@
<?php <?php
use App\Entities\Users\Role;
use App\Entities\Users\User; use App\Entities\Users\User;
class TestCase extends Illuminate\Foundation\Testing\TestCase class TestCase extends Illuminate\Foundation\Testing\TestCase
@ -28,6 +29,7 @@ class TestCase extends Illuminate\Foundation\Testing\TestCase
protected function adminUserSigningIn() protected function adminUserSigningIn()
{ {
factory(Role::class)->create(['name' => 'admin']);
$user = factory(User::class)->create(); $user = factory(User::class)->create();
$user->assignRole('admin'); $user->assignRole('admin');
$this->actingAs($user); $this->actingAs($user);

13
tests/functional/ManageProjectsTest.php

@ -4,6 +4,7 @@ use App\Entities\Payments\Payment;
use App\Entities\Projects\Feature; use App\Entities\Projects\Feature;
use App\Entities\Projects\Project; use App\Entities\Projects\Project;
use App\Entities\Projects\Task; use App\Entities\Projects\Task;
use App\Entities\Users\Role;
use App\Entities\Users\User; use App\Entities\Users\User;
use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\DatabaseTransactions;
@ -11,11 +12,14 @@ use Illuminate\Foundation\Testing\WithoutMiddleware;
class ManageProjectsTest extends TestCase class ManageProjectsTest extends TestCase
{ {
use DatabaseTransactions;
use DatabaseMigrations;
/** @test */ /** @test */
public function admin_can_input_new_project_with_existing_customer() public function admin_can_input_new_project_with_existing_customer()
{ {
$adminRole = factory(Role::class)->create(['name' => 'admin']);
$customerRole = factory(Role::class)->create(['name' => 'customer']);
$users = factory(User::class, 2)->create(); $users = factory(User::class, 2)->create();
$users[0]->assignRole('admin'); $users[0]->assignRole('admin');
$this->actingAs($users[0]); $this->actingAs($users[0]);
@ -42,6 +46,7 @@ class ManageProjectsTest extends TestCase
public function admin_can_input_new_project_with_new_customer() public function admin_can_input_new_project_with_new_customer()
{ {
$this->adminUserSigningIn(); $this->adminUserSigningIn();
$customerRole = factory(Role::class)->create(['name' => 'customer']);
$this->visit(route('projects.index')); $this->visit(route('projects.index'));
$this->seePageIs(route('projects.index')); $this->seePageIs(route('projects.index'));
@ -107,6 +112,9 @@ class ManageProjectsTest extends TestCase
/** @test */ /** @test */
public function admin_can_edit_a_project() public function admin_can_edit_a_project()
{ {
$adminRole = factory(Role::class)->create(['name' => 'admin']);
$customerRole = factory(Role::class)->create(['name' => 'customer']);
$users = factory(User::class, 2)->create(); $users = factory(User::class, 2)->create();
$users[0]->assignRole('admin'); $users[0]->assignRole('admin');
$this->actingAs($users[0]); $this->actingAs($users[0]);
@ -142,6 +150,9 @@ class ManageProjectsTest extends TestCase
/** @test */ /** @test */
public function form_is_validated_on_invalid_project_entry() public function form_is_validated_on_invalid_project_entry()
{ {
$adminRole = factory(Role::class)->create(['name' => 'admin']);
$customerRole = factory(Role::class)->create(['name' => 'customer']);
$users = factory(User::class, 2)->create(); $users = factory(User::class, 2)->create();
$users[0]->assignRole('admin'); $users[0]->assignRole('admin');
$this->actingAs($users[0]); $this->actingAs($users[0]);

Loading…
Cancel
Save