DashboardsTest updated and Widget factory added.

This commit is contained in:
Enes Sacid Buker 2021-06-21 19:03:08 +03:00
parent a0a776350c
commit c0df9c930e
3 changed files with 133 additions and 9 deletions

View File

@ -4,10 +4,11 @@ namespace App\Models\Common;
use App\Abstracts\Model; use App\Abstracts\Model;
use Bkwld\Cloner\Cloneable; use Bkwld\Cloner\Cloneable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Widget extends Model class Widget extends Model
{ {
use Cloneable; use Cloneable, HasFactory;
protected $table = 'widgets'; protected $table = 'widgets';
@ -36,4 +37,14 @@ class Widget extends Model
{ {
return $this->hasManyThrough('App\Models\Auth\User', 'App\Models\Common\Dashboard'); return $this->hasManyThrough('App\Models\Auth\User', 'App\Models\Common\Dashboard');
} }
/**
* Create a new factory instance for the model.
*
* @return \Illuminate\Database\Eloquent\Factories\Factory
*/
protected static function newFactory()
{
return \Database\Factories\Widget::new();
}
} }

View File

@ -0,0 +1,47 @@
<?php
namespace Database\Factories;
use App\Abstracts\Factory;
use App\Models\Common\Dashboard;
use App\Models\Common\Widget as Model;
class Widget extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Model::class;
public $classes = [
'App\Widgets\TotalIncome',
'App\Widgets\TotalExpenses',
'App\Widgets\TotalProfit',
'App\Widgets\CashFlow',
'App\Widgets\IncomeByCategory',
'App\Widgets\ExpensesByCategory',
'App\Widgets\AccountBalance',
'App\Widgets\LatestIncome',
'App\Widgets\LatestExpenses',
'App\Widgets\Currencies',
];
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
$dashboard = Dashboard::first();
return [
'company_id' => $this->company->id,
'dashboard_id' => $dashboard->id,
'name' => $this->faker->text(15),
'class' => $this->faker->randomElement($this->classes),
];
}
}

View File

@ -2,9 +2,10 @@
namespace Tests\Feature\Common; namespace Tests\Feature\Common;
use App\Jobs\Common\CreateDashboard; use App\Models\Common\Widget;
use App\Models\Common\Dashboard; use App\Models\Common\Dashboard;
use Tests\Feature\FeatureTestCase; use Tests\Feature\FeatureTestCase;
use App\Jobs\Common\CreateDashboard;
class DashboardsTest extends FeatureTestCase class DashboardsTest extends FeatureTestCase
{ {
@ -12,7 +13,7 @@ class DashboardsTest extends FeatureTestCase
{ {
$this->loginAs() $this->loginAs()
->get(route('dashboard')) ->get(route('dashboard'))
->assertStatus(200) ->assertOk()
->assertSeeText(trans_choice('general.dashboards', 1)); ->assertSeeText(trans_choice('general.dashboards', 1));
} }
@ -20,7 +21,7 @@ class DashboardsTest extends FeatureTestCase
{ {
$this->loginAs() $this->loginAs()
->get(route('dashboards.index')) ->get(route('dashboards.index'))
->assertStatus(200) ->assertOk()
->assertSeeText(trans_choice('general.dashboards', 2)); ->assertSeeText(trans_choice('general.dashboards', 2));
} }
@ -28,7 +29,7 @@ class DashboardsTest extends FeatureTestCase
{ {
$this->loginAs() $this->loginAs()
->get(route('dashboards.create')) ->get(route('dashboards.create'))
->assertStatus(200) ->assertOk()
->assertSeeText(trans('general.title.new', ['type' => trans_choice('general.dashboards', 1)])); ->assertSeeText(trans('general.title.new', ['type' => trans_choice('general.dashboards', 1)]));
} }
@ -38,7 +39,7 @@ class DashboardsTest extends FeatureTestCase
$this->loginAs() $this->loginAs()
->post(route('dashboards.store'), $request) ->post(route('dashboards.store'), $request)
->assertStatus(200); ->assertOk();
$this->assertFlashLevel('success'); $this->assertFlashLevel('success');
@ -53,7 +54,7 @@ class DashboardsTest extends FeatureTestCase
$this->loginAs() $this->loginAs()
->get(route('dashboards.edit', $dashboard->id)) ->get(route('dashboards.edit', $dashboard->id))
->assertStatus(200) ->assertOk()
->assertSee($dashboard->name); ->assertSee($dashboard->name);
} }
@ -67,7 +68,7 @@ class DashboardsTest extends FeatureTestCase
$this->loginAs() $this->loginAs()
->patch(route('dashboards.update', $dashboard->id), $request) ->patch(route('dashboards.update', $dashboard->id), $request)
->assertStatus(200) ->assertOk()
->assertSee($request['name']); ->assertSee($request['name']);
$this->assertFlashLevel('success'); $this->assertFlashLevel('success');
@ -84,18 +85,83 @@ class DashboardsTest extends FeatureTestCase
$this->loginAs() $this->loginAs()
->delete(route('dashboards.destroy', $dashboard->id)) ->delete(route('dashboards.destroy', $dashboard->id))
->assertStatus(200); ->assertOk();
$this->assertFlashLevel('success'); $this->assertFlashLevel('success');
$this->assertSoftDeleted('dashboards', $this->getAssertRequest($request)); $this->assertSoftDeleted('dashboards', $this->getAssertRequest($request));
} }
public function testItShouldSeeWidgetCreate()
{
$classes = Widget::factory()->classes;
$class = $classes[rand(0, 9)];
$this->loginAs()
->get(route('widgets.index'))
->assertOk()
->assertSeeText((new $class())->getDefaultName());
}
public function testItShouldSeeWidgetEdit()
{
$widget = Widget::create($this->getWidget());
$this->loginAs()
->get(route('widgets.edit', $widget->id))
->assertOk()
->assertSee($widget->name);
}
public function testItShouldCreateWidget()
{
$request = $this->getWidget();
$this->loginAs()
->post(route('widgets.store'), $request)
->assertOk();
$this->assertDatabaseHas('widgets', $this->getAssertRequest($request));
}
public function testItShouldUpdateWidget()
{
$request = $this->getWidget();
$widget = Widget::create($request);
$request['name'] = $this->faker->name;
$this->loginAs()
->patch(route('widgets.update', $widget->id), $request)
->assertOk();
$this->assertDatabaseHas('widgets', $this->getAssertRequest($request));
}
public function testItShouldDeleteWidget()
{
$request = $this->getWidget();
$widget = Widget::create($request);
$this->loginAs()
->delete(route('widgets.destroy', $widget->id))
->assertOk();
$this->assertSoftDeleted('widgets', $this->getAssertRequest($request));
}
public function getRequest() public function getRequest()
{ {
return Dashboard::factory()->enabled()->users()->raw(); return Dashboard::factory()->enabled()->users()->raw();
} }
public function getWidget()
{
return Widget::factory()->raw();
}
public function getAssertRequest($request) public function getAssertRequest($request)
{ {
unset($request['users']); unset($request['users']);