syncPairs() ); self::assertSame( 'warning', $settings->loggingLevel() ); self::assertTrue( $settings->automaticUrlReplacementEnabled() ); self::assertSame( 'last_write_wins', $settings->conflictStrategy() ); } public function test_it_sanitizes_scalar_settings(): void { $settings = Settings::fromArray( array( 'logging_level' => 'debug', 'conflict_strategy' => "manual_review\n", 'automatic_url_replacement' => false, ) ); self::assertSame( 'debug', $settings->loggingLevel() ); self::assertSame( 'manual_review', $settings->conflictStrategy() ); self::assertFalse( $settings->automaticUrlReplacementEnabled() ); } public function test_it_rejects_unknown_logging_level(): void { $settings = Settings::fromArray( array( 'logging_level' => 'verbose', ) ); self::assertSame( 'warning', $settings->loggingLevel() ); } public function test_it_normalizes_string_boolean_values(): void { $settings = Settings::fromArray( array( 'automatic_url_replacement' => 'false', ) ); self::assertFalse( $settings->automaticUrlReplacementEnabled() ); $settings = Settings::fromArray( array( 'automatic_url_replacement' => '1', ) ); self::assertTrue( $settings->automaticUrlReplacementEnabled() ); } public function test_it_serializes_to_array(): void { $settings = Settings::fromArray( array( 'sync_pairs' => array( array( 'name' => 'Staging', 'source_url' => 'https://example.test', 'destination_url' => 'https://staging.example.test', ), ), ) ); self::assertSame( array( 'sync_pairs' => array( array( 'name' => 'Staging', 'source_url' => 'https://example.test', 'destination_url' => 'https://staging.example.test', ), ), 'logging_level' => 'warning', 'automatic_url_replacement' => true, 'conflict_strategy' => 'last_write_wins', ), $settings->toArray() ); } }