fedi-feed-router/tests/Feature/Http/Controllers/Api/V1/SettingsControllerTest.php

149 lines
4.4 KiB
PHP
Raw Normal View History

2025-08-03 20:59:09 +02:00
<?php
namespace Tests\Feature\Http\Controllers\Api\V1;
use App\Models\Setting;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class SettingsControllerTest extends TestCase
{
use RefreshDatabase;
public function test_index_returns_current_settings(): void
{
$response = $this->getJson('/api/v1/settings');
$response->assertStatus(200)
->assertJsonStructure([
'success',
'data' => [
'article_processing_enabled',
'publishing_approvals_enabled',
'article_publishing_interval',
2025-08-03 20:59:09 +02:00
],
'message'
])
->assertJson([
'success' => true,
'message' => 'Settings retrieved successfully.'
]);
}
public function test_update_modifies_article_processing_setting(): void
{
$response = $this->putJson('/api/v1/settings', [
'article_processing_enabled' => false,
]);
$response->assertStatus(200)
->assertJson([
'success' => true,
'message' => 'Settings updated successfully.',
'data' => [
'article_processing_enabled' => false,
]
]);
}
public function test_update_modifies_publishing_approvals_setting(): void
{
$response = $this->putJson('/api/v1/settings', [
'publishing_approvals_enabled' => true,
2025-08-03 20:59:09 +02:00
]);
$response->assertStatus(200)
->assertJson([
'success' => true,
'message' => 'Settings updated successfully.',
'data' => [
'publishing_approvals_enabled' => true,
]
]);
}
public function test_update_validates_boolean_values(): void
{
$response = $this->putJson('/api/v1/settings', [
'article_processing_enabled' => 'not-a-boolean',
'publishing_approvals_enabled' => 'also-not-boolean',
2025-08-03 20:59:09 +02:00
]);
$response->assertStatus(422)
->assertJsonValidationErrors([
'article_processing_enabled',
'publishing_approvals_enabled'
2025-08-03 20:59:09 +02:00
]);
}
public function test_update_accepts_partial_updates(): void
{
// Update only one setting
$response = $this->putJson('/api/v1/settings', [
'article_processing_enabled' => true,
]);
$response->assertStatus(200)
->assertJson([
'success' => true,
'data' => [
'article_processing_enabled' => true,
]
]);
// Should still have structure for all settings
2025-08-03 20:59:09 +02:00
$response->assertJsonStructure([
'data' => [
'article_processing_enabled',
'publishing_approvals_enabled',
'article_publishing_interval',
2025-08-03 20:59:09 +02:00
]
]);
}
public function test_index_returns_article_publishing_interval(): void
{
$response = $this->getJson('/api/v1/settings');
$response->assertStatus(200)
->assertJsonStructure([
'data' => [
'article_publishing_interval',
],
])
->assertJsonPath('data.article_publishing_interval', 5);
}
public function test_update_accepts_valid_article_publishing_interval(): void
{
$response = $this->putJson('/api/v1/settings', [
'article_publishing_interval' => 15,
]);
$response->assertStatus(200)
->assertJsonPath('data.article_publishing_interval', 15);
$this->assertSame(15, Setting::getArticlePublishingInterval());
}
public function test_update_rejects_negative_article_publishing_interval(): void
{
$response = $this->putJson('/api/v1/settings', [
'article_publishing_interval' => -5,
]);
$response->assertStatus(422)
->assertJsonValidationErrors(['article_publishing_interval']);
}
public function test_update_rejects_non_integer_article_publishing_interval(): void
{
$response = $this->putJson('/api/v1/settings', [
'article_publishing_interval' => 'abc',
]);
$response->assertStatus(422)
->assertJsonValidationErrors(['article_publishing_interval']);
}
}