Skip to content
Snippets Groups Projects
RetailerCreateTest.php 4.35 KiB
Newer Older
<?php

namespace Tests\Feature;

use Illuminate\Support\Str;
use Laravel\Sanctum\Sanctum;
use Tests\TestCase;
use App\Models\User;
use App\Models\Retailer;
use Hash;

class RetailerCreateTest extends TestCase
{
    public function test_success_create_category_by_admin()
    {
        $user = User::factory()->create([
            'role' => 'admin',
            'password' => Hash::make('123123123'),
        ]);
        Sanctum::actingAs(
            $user,
            ['*']
        );
        $response = $this->post('/nova-api/retailers?editing=true&editMode=create', [
            'name' => 'test_name',
        ]);
        $user->delete();
        Retailer::where('name', 'test_name')->delete();
        $response->assertStatus(201);
    }

    public function test_create_category_by_admin_without_name_of_category()
    {
        $user = User::factory()->create([
            'role' => 'admin',
            'password' => Hash::make('123123123'),
        ]);
        Sanctum::actingAs(
            $user,
            ['*']
        );
        $response = $this->post('/nova-api/retailers?editing=true&editMode=create', [
        ]);
        $user->delete();
        Retailer::where('name', 'test_name')->delete();
        $response->assertStatus(302)->assertSessionHasErrors(['name' => 'The Name field is required.']);
    }

    public function test_create_category_by_admin_with_already_exist_name()
    {
        $user = User::factory()->create([
            'role' => 'admin',
            'password' => Hash::make('123123123'),
        ]);
        Sanctum::actingAs(
            $user,
            ['*']
        );
        $category = Retailer::factory()->create();
        $response = $this->post('/nova-api/retailers?editing=true&editMode=create', [
            'name' => $category->name
        ]);
        $category->delete();
        $user->delete();
        Retailer::where('name', 'test_name')->delete();
        $response->assertStatus(302)->assertSessionHasErrors([
            'name' => 'The Name has already been taken.'
        ]);
    }

    public function test_success_create_category_by_analyst()
    {
        $user = User::factory()->create([
            'role' => 'analyst',
            'password' => Hash::make('123123123'),
        ]);
        Sanctum::actingAs(
            $user,
            ['*']
        );
        $response = $this->post('/nova-api/retailers?editing=true&editMode=create', [
            'name' => 'test_name',
        ]);
        $user->delete();
        Retailer::where('name', 'test_name')->delete();
        $response->assertStatus(201);
    }

    public function test_create_category_by_analyst_without_name_of_category()
    {
        $user = User::factory()->create([
            'role' => 'analyst',
            'password' => Hash::make('123123123'),
        ]);
        Sanctum::actingAs(
            $user,
            ['*']
        );
        $response = $this->post('/nova-api/retailers?editing=true&editMode=create', [
        ]);
        $user->delete();
        Retailer::where('name', 'test_name')->delete();
        $response->assertStatus(302)->assertSessionHasErrors(['name' => 'The Name field is required.']);
    }

    public function test_create_category_by_analyst_with_already_exist_name()
    {
        $user = User::factory()->create([
            'role' => 'analyst',
            'password' => Hash::make('123123123'),
        ]);
        Sanctum::actingAs(
            $user,
            ['*']
        );
        $category = Retailer::factory()->create();
        $response = $this->post('/nova-api/retailers?editing=true&editMode=create', [
            'name' => $category->name
        ]);
        $category->delete();
        $user->delete();
        Retailer::where('name', 'test_name')->delete();
        $response->assertStatus(302)->assertSessionHasErrors([
            'name' => 'The Name has already been taken.'
        ]);
    }

    public function test_create_category_by_common()
    {
        $user = User::factory()->create([
            'role' => 'common',
            'password' => Hash::make('123123123'),
        ]);
        Sanctum::actingAs(
            $user,
            ['*']
        );
        $response = $this->post('/nova-api/retailers?editing=true&editMode=create', [
            'name' => 'test_name',
        ]);
        $user->delete();
        Retailer::where('name', 'test_name')->delete();
        $response->assertStatus(403);
    }
}