getJson('/api/v1/settings'); $response->assertStatus(200) ->assertJsonStructure([ 'success', 'data' => [ 'article_processing_enabled', 'publishing_approvals_enabled', 'article_publishing_interval', ], '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, ]); $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', ]); $response->assertStatus(422) ->assertJsonValidationErrors([ 'article_processing_enabled', 'publishing_approvals_enabled' ]); } 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 $response->assertJsonStructure([ 'data' => [ 'article_processing_enabled', 'publishing_approvals_enabled', 'article_publishing_interval', ] ]); } 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']); } }