<?php

namespace Tests\Feature;

use App\Models\AdminUser;
use App\Models\JobSeekerSubscriptionFreeTrial; 
use App\Modules\Admin\Subscriptions\JobSeekerFreeTrialModule; 

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;

use Laravel\Sanctum\Sanctum;

use Tests\TestCase;

class SystemSubscriptionFreeTrialJobSeekerTest extends TestCase
{
    use RefreshDatabase;

    private JobSeekerSubscriptionFreeTrial $jobSeekerSubscriptionFreeTrial;

    /**
     * Set Up Test
     * 
     * @return void 
     */
    protected function setUp(): void
    {
        parent::setUp();

        $superAdmin = AdminUser::factory()->create();

        Sanctum::actingAs(
            $superAdmin,
            ['*']
        );

        $this->jobSeekerSubscriptionFreeTrial = JobSeekerSubscriptionFreeTrial::firstOrFail(); 
    }

    /**
     * Test View Item 
     * 
     * @return void 
     */
    public function test_view(): void
    {
        $response = (new JobSeekerFreeTrialModule())->getData($this->jobSeekerSubscriptionFreeTrial->id);

        $this->assertTrue($response->status() == 200, "HTTP Status Code is 200");

        $data = $response->getData(true);

        $this->assertTrue(count($data['data']) >= 1);

        $this->assertEquals(1, $data['data'][0]['id'], "Retrieved Item's ID must be 1");
        $this->assertEquals(15, $data['data'][0]['days'], "Retrieved Item's Days must be 15");

    }

    /**
     * Test Update Item
     * 
     * @return void 
     */
    public function test_update(): void
    {
        $response = (new JobSeekerFreeTrialModule())->updateData(
            [
                "days" => 30
            ],
            $this->jobSeekerSubscriptionFreeTrial->id
        );

        $this->assertTrue($response->status() == 200, "HTTP Status Code is 200");

        $this->assertDatabaseHas(
            JobSeekerSubscriptionFreeTrial::class,
            [
                'id'   => $this->jobSeekerSubscriptionFreeTrial->id,
                "days" => 30
            ]
        );
    }
}
