<?php

namespace Tests\Feature\API;

use App\Models\Folder;
use App\Models\Library;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\Feature\TestCase;

class FolderTest extends TestCase
{
    public function test_create_folder(): void
    {
        $response = $this->postJson(route('folder.store'), [
            'library_id' => Library::factory()->create()->id,
            'parent_id' => 0,
            'items' => [
                ['name' => fake()->name(), 'sequence' => 0],
                ['name' => fake()->name(), 'sequence' => 0],
            ]
        ]);

        $response->assertStatus(201);
    }

    protected function test_folder_list()
    {
        Folder::factory(30)->create();

        $response = $this->get(route('folder.index'));

        $response->assertStatus(200)
            ->assertJsonStructure([
                'data' => [
                    '*' => [
                        'id',
                        'name',
                        'global',
                        'status',
                        'company'
                    ]
                ]
            ]);
    }


    public function test_folder_show(): void
    {
        $folder = Folder::factory()->create();

        $response = $this->getJson(route('folder.show', ['folder' => $folder->id]));

        $response->assertStatus(200)
            ->assertJsonStructure([
                'data' => [
                    'library_id',
                    'name',
                    'parent_id',
                    'sequence',
                ]
            ]);
    }

    public function test_folder_update(): void
    {
        $folder = Folder::factory()->create();

        $form = Folder::factory()->make();

        $response = $this->patchJson(route('folder.update', ['folder' => $folder->id]), $form->toArray());

        $response->assertStatus(204);

        $newAsset = Folder::find($folder->id);

        $this->assertEquals($form->name, $newAsset->name);
    }

    public function test_folder_delete(): void
    {
        $folder = Folder::factory()->create();

        $response = $this->deleteJson(route('folder.destroy', ['folder' => $folder->id]));

        $response->assertStatus(204);

        $this->assertNull(Folder::find($folder->id));
    }
}