<?php

namespace Tests\Feature\API;


use App\Models\Asset;
use Tests\Feature\TestCase;

class AssetTest extends TestCase
{
    public function test_asset_list()
    {
        Asset::factory(30)->create();

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

        $response->assertStatus(200)
            ->assertJsonStructure([
                'data' => [
                    '*' => [
                        'id',
                        'name',
                        'code',
                        'description',
                        'status',
                        'created_by',
                        'owner',
                        'address',
                        'group_id',
                        'geo_address_code',
                        'acl',
                        'whitelist',
                        'latitude',
                        'longitude',
                    ]
                ]
            ]);
    }

    public function test_asset_create(): void
    {
        $form = Asset::factory()->make();
        $form->whitelist = [1];

        $response = $this->post(route('asset.store'), $form->toArray());

        $response->assertStatus(201);
    }

    public function test_asset_detail(): void
    {
        $asset = Asset::factory()->create();

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

        $response->assertStatus(200)->assertJsonStructure([
            'data' => [
                'id',
                'name',
                'code',
                'description',
                'status',
                'created_by',
                'owner',
                'address',
                'group_id',
                'geo_address_code',
                'acl',
                'whitelist',
                'latitude',
                'longitude',
            ]
        ]);
    }

    public function test_asset_update(): void
    {
        $asset = Asset::factory()->create();

        $form = Asset::factory()->make();
        $form->whitelist = [1];

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

        $response->assertStatus(204);

        $newAsset = Asset::find($asset->id);

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

    public function test_asset_delete(): void
    {
        $asset = Asset::factory()->create();

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

        $response->assertStatus(204);

        $this->assertNull(Asset::find($asset->id));
    }
}