utilikit-1.0.0/tests/src/Unit/UtilikitConstantsTest.php

tests/src/Unit/UtilikitConstantsTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\utilikit\Unit;

use Drupal\Tests\UnitTestCase;
use Drupal\utilikit\Service\UtilikitConstants;

/**
 * Tests UtilikitConstants service class.
 *
 * @group utilikit
 * @coversDefaultClass \Drupal\utilikit\Service\UtilikitConstants
 */
class UtilikitConstantsTest extends UnitTestCase {

  /**
   * Tests that all expected constants are defined.
   *
   * @covers ::__construct
   */
  public function testConstantsAreDefined() {
    // Rate limiting constants.
    $this->assertTrue(defined('Drupal\utilikit\Service\UtilikitConstants::RATE_LIMIT_REQUESTS_PER_MINUTE'));
    $this->assertTrue(defined('Drupal\utilikit\Service\UtilikitConstants::RATE_LIMIT_WINDOW_SECONDS'));
    $this->assertTrue(defined('Drupal\utilikit\Service\UtilikitConstants::MAX_CLASSES_PER_REQUEST'));

    // Batch processing constants.
    $this->assertTrue(defined('Drupal\utilikit\Service\UtilikitConstants::BATCH_SIZE_DEFAULT'));
    $this->assertTrue(defined('Drupal\utilikit\Service\UtilikitConstants::QUEUE_PROCESSING_LIMIT'));

    // Cache tags.
    $this->assertTrue(defined('Drupal\utilikit\Service\UtilikitConstants::CACHE_TAG_CONFIG'));
    $this->assertTrue(defined('Drupal\utilikit\Service\UtilikitConstants::CACHE_TAG_CSS'));
    $this->assertTrue(defined('Drupal\utilikit\Service\UtilikitConstants::CACHE_TAG_INLINE_MODE'));
    $this->assertTrue(defined('Drupal\utilikit\Service\UtilikitConstants::CACHE_TAG_STATIC_MODE'));

    // State keys.
    $this->assertTrue(defined('Drupal\utilikit\Service\UtilikitConstants::STATE_KNOWN_CLASSES'));
    $this->assertTrue(defined('Drupal\utilikit\Service\UtilikitConstants::STATE_GENERATED_CSS'));
    $this->assertTrue(defined('Drupal\utilikit\Service\UtilikitConstants::STATE_CSS_TIMESTAMP'));
    $this->assertTrue(defined('Drupal\utilikit\Service\UtilikitConstants::STATE_LAST_CLEANUP'));

    // File paths.
    $this->assertTrue(defined('Drupal\utilikit\Service\UtilikitConstants::CSS_DIRECTORY'));
    $this->assertTrue(defined('Drupal\utilikit\Service\UtilikitConstants::CSS_FILENAME'));
  }

  /**
   * Tests rate limiting constants have reasonable values.
   */
  public function testRateLimitingConstants() {
    $this->assertEquals(60, UtilikitConstants::RATE_LIMIT_REQUESTS_PER_MINUTE);
    $this->assertEquals(60, UtilikitConstants::RATE_LIMIT_WINDOW_SECONDS);
    $this->assertEquals(5000, UtilikitConstants::MAX_CLASSES_PER_REQUEST);
    $this->assertGreaterThan(0, UtilikitConstants::RATE_LIMIT_REQUESTS_PER_MINUTE);
    $this->assertGreaterThan(0, UtilikitConstants::RATE_LIMIT_WINDOW_SECONDS);
  }

  /**
   * Tests batch processing constants have reasonable values.
   */
  public function testBatchProcessingConstants() {
    $this->assertEquals(50, UtilikitConstants::BATCH_SIZE_DEFAULT);
    $this->assertEquals(5, UtilikitConstants::QUEUE_PROCESSING_LIMIT);
    $this->assertGreaterThan(0, UtilikitConstants::BATCH_SIZE_DEFAULT);
    $this->assertGreaterThan(0, UtilikitConstants::QUEUE_PROCESSING_LIMIT);
  }

  /**
   * Tests cache tag constants are properly formatted.
   */
  public function testCacheTagConstants() {
    $this->assertEquals('config:utilikit.settings', UtilikitConstants::CACHE_TAG_CONFIG);
    $this->assertEquals('utilikit:css', UtilikitConstants::CACHE_TAG_CSS);
    $this->assertEquals('utilikit:mode:inline', UtilikitConstants::CACHE_TAG_INLINE_MODE);
    $this->assertEquals('utilikit:mode:static', UtilikitConstants::CACHE_TAG_STATIC_MODE);

    // Verify cache tags follow expected pattern.
    $this->assertStringStartsWith('config:', UtilikitConstants::CACHE_TAG_CONFIG);
    $this->assertStringStartsWith('utilikit:', UtilikitConstants::CACHE_TAG_CSS);
    $this->assertStringStartsWith('utilikit:', UtilikitConstants::CACHE_TAG_INLINE_MODE);
    $this->assertStringStartsWith('utilikit:', UtilikitConstants::CACHE_TAG_STATIC_MODE);
  }

  /**
   * Tests state key constants are properly formatted.
   */
  public function testStateKeyConstants() {
    $this->assertEquals('utilikit.known_classes', UtilikitConstants::STATE_KNOWN_CLASSES);
    $this->assertEquals('utilikit.generated_css', UtilikitConstants::STATE_GENERATED_CSS);
    $this->assertEquals('utilikit.css_timestamp', UtilikitConstants::STATE_CSS_TIMESTAMP);
    $this->assertEquals('utilikit.last_cleanup', UtilikitConstants::STATE_LAST_CLEANUP);

    // Verify state keys follow expected pattern.
    $this->assertStringStartsWith('utilikit.', UtilikitConstants::STATE_KNOWN_CLASSES);
    $this->assertStringStartsWith('utilikit.', UtilikitConstants::STATE_GENERATED_CSS);
    $this->assertStringStartsWith('utilikit.', UtilikitConstants::STATE_CSS_TIMESTAMP);
    $this->assertStringStartsWith('utilikit.', UtilikitConstants::STATE_LAST_CLEANUP);
  }

  /**
   * Tests file system path constants.
   */
  public function testFileSystemConstants() {
    $this->assertEquals('public://css/utilikit', UtilikitConstants::CSS_DIRECTORY);
    $this->assertEquals('generated.css', UtilikitConstants::CSS_FILENAME);
    $this->assertStringStartsWith('public://', UtilikitConstants::CSS_DIRECTORY);
    $this->assertStringEndsWith('.css', UtilikitConstants::CSS_FILENAME);
  }

  /**
   * Tests breakpoint configuration constants.
   */
  public function testBreakpointConstants() {
    $breakpoints = UtilikitConstants::DEFAULT_BREAKPOINTS;
    $this->assertIsArray($breakpoints);
    $this->assertArrayHasKey('sm', $breakpoints);
    $this->assertArrayHasKey('md', $breakpoints);
    $this->assertArrayHasKey('lg', $breakpoints);
    $this->assertArrayHasKey('xl', $breakpoints);
    $this->assertArrayHasKey('xxl', $breakpoints);

    $values = UtilikitConstants::BREAKPOINT_VALUES;
    $this->assertIsArray($values);
    $this->assertEquals(576, $values['sm']);
    $this->assertEquals(768, $values['md']);
    $this->assertEquals(992, $values['lg']);
    $this->assertEquals(1200, $values['xl']);
    $this->assertEquals(1400, $values['xxl']);
  }

  /**
   * Tests entity auto-update configuration constants.
   */
  public function testEntityAutoUpdateConstants() {
    $entities = UtilikitConstants::AUTO_UPDATE_ENTITY_TYPES;
    $this->assertIsArray($entities);
    $this->assertArrayHasKey('node', $entities);
    $this->assertArrayHasKey('block_content', $entities);
    $this->assertArrayHasKey('paragraph', $entities);

    $this->assertEquals('update_on_node_save', $entities['node']);
    $this->assertEquals('update_on_block_save', $entities['block_content']);
    $this->assertEquals('update_on_paragraph_save', $entities['paragraph']);
  }

  /**
   * Tests queue and lock identifier constants.
   */
  public function testQueueAndLockConstants() {
    $this->assertEquals('utilikit_css_processor', UtilikitConstants::QUEUE_CSS_PROCESSOR);
    $this->assertEquals('utilikit_css_update', UtilikitConstants::LOCK_CSS_UPDATE);
    $this->assertIsString(UtilikitConstants::QUEUE_CSS_PROCESSOR);
    $this->assertIsString(UtilikitConstants::LOCK_CSS_UPDATE);
  }

  /**
   * Tests validation pattern constants.
   */
  public function testValidationPatterns() {
    $pattern = UtilikitConstants::CLASS_VALIDATION_PATTERN;
    $this->assertIsString($pattern);
    $this->assertStringStartsWith('/', $pattern);
    $this->assertStringEndsWith('/', $pattern);

    // Test valid class names match the pattern.
    $this->assertMatchesRegularExpression($pattern, 'uk-pd--20');
    $this->assertMatchesRegularExpression($pattern, 'uk-sm-mg--auto');
    $this->assertMatchesRegularExpression($pattern, 'uk-lg-bg--ff0000');

    // Test invalid class names don't match.
    $this->assertDoesNotMatchRegularExpression($pattern, 'invalid-class');
    $this->assertDoesNotMatchRegularExpression($pattern, 'uk-pd');
    $this->assertDoesNotMatchRegularExpression($pattern, 'pd--20');
  }

  /**
   * Tests timing and CSS configuration constants.
   */
  public function testTimingConstants() {
    $this->assertEquals(3600, UtilikitConstants::CSS_CACHE_TTL);
    $this->assertEquals(8, UtilikitConstants::CSS_HASH_LENGTH);
    $this->assertEquals(50, UtilikitConstants::DEBOUNCE_DEFAULT);
    $this->assertEquals(0, UtilikitConstants::DEBOUNCE_MIN);
    $this->assertEquals(500, UtilikitConstants::DEBOUNCE_MAX);
    $this->assertEquals(10, UtilikitConstants::DEBOUNCE_STEP);

    $this->assertGreaterThan(0, UtilikitConstants::CSS_CACHE_TTL);
    $this->assertGreaterThan(0, UtilikitConstants::CSS_HASH_LENGTH);
    $this->assertGreaterThanOrEqual(UtilikitConstants::DEBOUNCE_MIN, UtilikitConstants::DEBOUNCE_DEFAULT);
    $this->assertLessThanOrEqual(UtilikitConstants::DEBOUNCE_MAX, UtilikitConstants::DEBOUNCE_DEFAULT);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc