<?php

namespace Tests\Unit\Models;

use App\Models\Setting;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tests\TestCase;

class SettingModelTest extends TestCase
{
    use DatabaseTransactions;

    public function test_set_and_get_return_expected_values_with_default_fallback(): void
    {
        Setting::set('unit_setting_key', 'nilai-awal', 'general', 'Unit Setting');

        $this->assertSame('nilai-awal', Setting::get('unit_setting_key'));
        $this->assertSame('fallback', Setting::get('setting_tidak_ada', 'fallback'));

        Setting::set('unit_setting_key', '', 'general', 'Unit Setting');
        $this->assertSame('fallback-empty', Setting::get('unit_setting_key', 'fallback-empty'));
    }

    public function test_cache_is_invalidated_when_setting_is_updated_or_deleted(): void
    {
        Setting::set('cache_test_key', 'nilai-pertama', 'general', 'Cache Test');
        $this->assertSame('nilai-pertama', Setting::get('cache_test_key'));

        Setting::where('key', 'cache_test_key')->firstOrFail()->update([
            'value' => 'nilai-kedua',
        ]);

        $this->assertSame('nilai-kedua', Setting::get('cache_test_key'));

        Setting::where('key', 'cache_test_key')->firstOrFail()->delete();
        $this->assertSame('default-setelah-hapus', Setting::get('cache_test_key', 'default-setelah-hapus'));
    }
}
