Testing usefulLinkController
This commit is contained in:
parent
d7a9e47d62
commit
5f6221e88a
4 changed files with 240 additions and 6 deletions
|
@ -1,6 +1,6 @@
|
|||
# Building the development environment
|
||||
|
||||
cd into the project directory and run the following command: `sudo sh bin/startdocker.sh`
|
||||
cd into the project directory and run the following command: `sh bin/startdocker.sh`
|
||||
This should start building the images and start the containers.
|
||||
|
||||
After that you need to go into the controlpanel_php container and run some commands:
|
||||
|
@ -24,9 +24,7 @@ Now you're ready to run the following commands which switches to the testing con
|
|||
After that you can switch back to your dev environment again. Clear the config from cache so changes will be instantly available.
|
||||
|
||||
```shell
|
||||
php artisan migrate --env=testing
|
||||
php artisan db:seed --env=testing
|
||||
php artisan config:cache --env=dev
|
||||
php artisan migrate:fresh --seed --env=testing
|
||||
php artisan config:clear
|
||||
```
|
||||
|
||||
|
|
|
@ -41,10 +41,11 @@ class UsefulLinkController extends Controller
|
|||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
|
||||
$request->validate([
|
||||
'icon' => 'required|string',
|
||||
'title' => 'required|string|max:60',
|
||||
'link' => 'required|string|max:191',
|
||||
'link' => 'required|url|string|max:191',
|
||||
'description' => 'required|string|max:2000',
|
||||
]);
|
||||
|
||||
|
@ -88,7 +89,7 @@ class UsefulLinkController extends Controller
|
|||
$request->validate([
|
||||
'icon' => 'required|string',
|
||||
'title' => 'required|string|max:60',
|
||||
'link' => 'required|string|max:191',
|
||||
'link' => 'required|url|string|max:191',
|
||||
'description' => 'required|string|max:2000',
|
||||
]);
|
||||
|
||||
|
|
31
database/factories/UsefulLinkFactory.php
Normal file
31
database/factories/UsefulLinkFactory.php
Normal file
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Factories;
|
||||
|
||||
use App\Models\UsefulLink;
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
|
||||
class UsefulLinkFactory extends Factory
|
||||
{
|
||||
/**
|
||||
* The name of the factory's corresponding model.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $model = UsefulLink::class;
|
||||
|
||||
/**
|
||||
* Define the model's default state.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function definition()
|
||||
{
|
||||
return [
|
||||
'icon' => 'fas fa-user',
|
||||
'title' => $this->faker->text(30),
|
||||
'link' => $this->faker->url,
|
||||
'description' => $this->faker->text,
|
||||
];
|
||||
}
|
||||
}
|
204
tests/Feature/TestUsefulLinksController.php
Normal file
204
tests/Feature/TestUsefulLinksController.php
Normal file
|
@ -0,0 +1,204 @@
|
|||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Models\UsefulLink;
|
||||
use App\Models\User;
|
||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||
use Illuminate\Support\Str;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* Class TestUsefulLinksController
|
||||
* @package Tests\Feature
|
||||
*/
|
||||
class TestUsefulLinksController extends TestCase
|
||||
{
|
||||
use DatabaseTransactions;
|
||||
|
||||
/**
|
||||
* @dataProvider accessibleRoutesDataProvider
|
||||
* @param string $method
|
||||
* @param string $route
|
||||
* @param int $expectedStatus
|
||||
*/
|
||||
function test_accessible_routes(string $method, string $route, int $expectedStatus)
|
||||
{
|
||||
UsefulLink::factory()->create([
|
||||
'id' => 1
|
||||
]);
|
||||
|
||||
$response = $this->actingAs(User::factory()->create([
|
||||
'role' => 'admin',
|
||||
'pterodactyl_id' => '1'
|
||||
]))->{$method}($route);
|
||||
|
||||
$response->assertStatus($expectedStatus);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider usefulLinkDataProvider
|
||||
* @param array $dataSet
|
||||
* @param int $expectedCount
|
||||
* @param bool $assertValidationErrors
|
||||
*/
|
||||
function test_creating_useful_link(array $dataSet, int $expectedCount, bool $assertValidationErrors)
|
||||
{
|
||||
$response = $this->actingAs($this->getTestUser())->post(route('admin.usefullinks.store'), $dataSet);
|
||||
|
||||
if ($assertValidationErrors) $response->assertSessionHasErrors();
|
||||
else $response->assertSessionHasNoErrors();
|
||||
|
||||
$response->assertRedirect();
|
||||
$this->assertDatabaseCount('useful_links', $expectedCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider usefulLinkDataProvider
|
||||
* @param array $dataSet
|
||||
* @param int $expectedCount
|
||||
* @param bool $assertValidationErrors
|
||||
*/
|
||||
function test_updating_useful_link(array $dataSet, int $expectedCount, bool $assertValidationErrors)
|
||||
{
|
||||
$link = UsefulLink::factory()->create([
|
||||
'id' => 1
|
||||
]);
|
||||
|
||||
$response = $this->actingAs($this->getTestUser())->patch(route('admin.usefullinks.update', $link->id), $dataSet);
|
||||
|
||||
if ($assertValidationErrors) $response->assertSessionHasErrors();
|
||||
else $response->assertSessionHasNoErrors();
|
||||
|
||||
$response->assertRedirect();
|
||||
$this->assertDatabaseCount('useful_links', 1);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
function test_deleting_useful_link()
|
||||
{
|
||||
$link = UsefulLink::factory()->create([
|
||||
'id' => 1
|
||||
]);
|
||||
|
||||
$response = $this->actingAs($this->getTestUser())->delete(route('admin.usefullinks.update', $link->id));
|
||||
|
||||
$response->assertRedirect();
|
||||
$this->assertDatabaseCount('useful_links', 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return User
|
||||
*/
|
||||
private function getTestUser(): User
|
||||
{
|
||||
return User::factory()->create([
|
||||
'role' => 'admin',
|
||||
'pterodactyl_id' => '1'
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
function usefulLinkDataProvider(): array
|
||||
{
|
||||
return [
|
||||
'Valid dataset 1' => [
|
||||
'dataSet' => [
|
||||
"icon" => "fas fa-user",
|
||||
"title" => "Bitsec.Dev Dashboard",
|
||||
"link" => "https://manage.bitsec.dev.com",
|
||||
"description" => Str::random(1500),
|
||||
],
|
||||
'expectedCount' => 1,
|
||||
'assertValidationErrors' => false
|
||||
],
|
||||
'Valid dataset 2' => [
|
||||
'dataSet' => [
|
||||
"icon" => "fas fa-user",
|
||||
"title" => Str::random(30),
|
||||
"link" => "https://somerandomsite.com",
|
||||
"description" => Str::random(1500),
|
||||
],
|
||||
'expectedCount' => 1,
|
||||
'assertValidationErrors' => false
|
||||
],
|
||||
'Invalid dataset (invalid link)' => [
|
||||
'dataSet' => [
|
||||
"icon" => "fas fa-user",
|
||||
"title" => "Some Random Title",
|
||||
"link" => "1221",
|
||||
"description" => "<p>Some Random HTML</p>",
|
||||
],
|
||||
'expectedCount' => 0,
|
||||
'assertValidationErrors' => true
|
||||
],
|
||||
'Invalid dataset (no title)' => [
|
||||
'dataSet' => [
|
||||
"icon" => "fas fa-user",
|
||||
"title" => "",
|
||||
"link" => "https://somerandomsite.com",
|
||||
"description" => "<p>Some Random HTML</p>",
|
||||
],
|
||||
'expectedCount' => 0,
|
||||
'assertValidationErrors' => true
|
||||
],
|
||||
'Invalid dataset (to long title)' => [
|
||||
'dataSet' => [
|
||||
"icon" => "fas fa-user",
|
||||
"title" => Str::random(200),
|
||||
"link" => "https://valid.com",
|
||||
"description" => "<p>Some Random HTML</p>",
|
||||
],
|
||||
'expectedCount' => 0,
|
||||
'assertValidationErrors' => true
|
||||
],
|
||||
'Invalid dataset (to long description)' => [
|
||||
'dataSet' => [
|
||||
"icon" => "fas fa-user",
|
||||
"title" => "Some Random Valid Title",
|
||||
"link" => "https://valid.com",
|
||||
"description" => Str::random(2100),
|
||||
],
|
||||
'expectedCount' => 0,
|
||||
'assertValidationErrors' => true
|
||||
],
|
||||
'Invalid dataset (no icon)' => [
|
||||
'dataSet' => [
|
||||
"title" => "Some Random Valid Title",
|
||||
"link" => "https://valid.com",
|
||||
"description" => Str::random(200),
|
||||
],
|
||||
'expectedCount' => 0,
|
||||
'assertValidationErrors' => true
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array[]
|
||||
*/
|
||||
public function accessibleRoutesDataProvider(): array
|
||||
{
|
||||
return [
|
||||
'index page' => [
|
||||
'method' => 'get',
|
||||
'route' => '/admin/usefullinks',
|
||||
'expectedStatus' => 200
|
||||
],
|
||||
'Create page' => [
|
||||
'method' => 'get',
|
||||
'route' => '/admin/usefullinks/create',
|
||||
'expectedStatus' => 200
|
||||
],
|
||||
'Edit page' => [
|
||||
'method' => 'get',
|
||||
'route' => '/admin/usefullinks/1/edit',
|
||||
'expectedStatus' => 200
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue