Files
monolog-gdpr-filter/tests/TestConstants.php
Ismo Vuorinen 00c6f76c97 feat: performance, integrations, advanced features (#2)
* feat: performance, integrations, advanced features

* chore: fix linting problems

* chore: suppressions and linting

* chore(lint): pre-commit linting, fixes

* feat: comprehensive input validation, security hardening, and regression testing

- Add extensive input validation throughout codebase with proper error handling
- Implement comprehensive security hardening with ReDoS protection and bounds checking
- Add 3 new regression test suites covering critical bugs, security, and validation scenarios
- Enhance rate limiting with memory management and configurable cleanup intervals
- Update configuration security settings and improve Laravel integration
- Fix TODO.md timestamps to reflect actual development timeline
- Strengthen static analysis configuration and improve code quality standards

* feat: configure static analysis tools and enhance development workflow

- Complete configuration of Psalm, PHPStan, and Rector for harmonious static analysis.
- Fix invalid configurations and tool conflicts that prevented proper code quality analysis.
- Add comprehensive safe analysis script with interactive workflow, backup/restore
  capabilities, and dry-run modes. Update documentation with linting policy
  requiring issue resolution over suppression.
- Clean completed items from TODO to focus on actionable improvements.
- All static analysis tools now work together seamlessly to provide
  code quality insights without breaking existing functionality.

* fix(test): update Invalid regex pattern expectation

* chore: phpstan, psalm fixes

* chore: phpstan, psalm fixes, more tests

* chore: tooling tweaks, cleanup

* chore: tweaks to get the tests pass

* fix(lint): rector config tweaks and successful run

* feat: refactoring, more tests, fixes, cleanup

* chore: deduplication, use constants

* chore: psalm fixes

* chore: ignore phpstan deliberate errors in tests

* chore: improve codebase, deduplicate code

* fix: lint

* chore: deduplication, codebase simplification, sonarqube fixes

* fix: resolve SonarQube reliability rating issues

Fix useless object instantiation warnings in test files by assigning
instantiated objects to variables. This resolves the SonarQube reliability
rating issue (was C, now targeting A).

Changes:
- tests/Strategies/MaskingStrategiesTest.php: Fix 3 instances
- tests/Strategies/FieldPathMaskingStrategyTest.php: Fix 1 instance

The tests use expectException() to verify that constructors throw
exceptions for invalid input. SonarQube flagged standalone `new`
statements as useless. Fixed by assigning to variables with explicit
unset() and fail() calls.

All tests pass (623/623) and static analysis tools pass.

* fix: resolve more SonarQube detected issues

* fix: resolve psalm detected issues

* fix: resolve more SonarQube detected issues

* fix: resolve psalm detected issues

* fix: duplications

* fix: resolve SonarQube reliability rating issues

* fix: resolve psalm and phpstan detected issues
2025-10-31 13:59:01 +02:00

170 lines
6.0 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests;
/**
* Constants for test data values.
*
* This class provides standardized test data to avoid duplication
* and ensure consistency across test files.
*/
final class TestConstants
{
// Email addresses
public const EMAIL_JOHN_DOE = 'john.doe@example.com';
public const EMAIL_USER = 'user@example.com';
public const EMAIL_TEST = 'test@example.com';
public const EMAIL_ADMIN = 'admin@example.com';
public const EMAIL_JANE_DOE = 'jane.doe@example.com';
// Social Security Numbers
public const SSN_US = '123-45-6789';
public const SSN_US_ALT = '987-65-4321';
// Credit Card Numbers
public const CC_VISA = '4532-1234-5678-9012';
public const CC_VISA_FORMATTED = '4532 1234 5678 9012';
public const CC_MASTERCARD = '5425-2334-3010-9903';
public const CC_AMEX = '3782-822463-10005';
// Phone Numbers
public const PHONE_US = '+1-555-123-4567';
public const PHONE_US_ALT = '+1-555-987-6543';
public const PHONE_GENERIC = '+1234567890';
// IP Addresses
public const IP_ADDRESS = '192.168.1.100';
public const IP_ADDRESS_ALT = '192.168.1.1';
public const IP_ADDRESS_PUBLIC = '8.8.8.8';
// Names
public const NAME_FIRST = 'John';
public const NAME_LAST = 'Doe';
public const NAME_FULL = 'John Doe';
// Finnish Personal Identity Code (HETU)
public const HETU = '010190-123A';
public const HETU_ALT = '311299-999J';
// IBAN Numbers
public const IBAN_FI = 'FI21 1234 5600 0007 85';
public const IBAN_DE = 'DE89 3704 0044 0532 0130 00';
// MAC Addresses
public const MAC_ADDRESS = '00:1B:44:11:3A:B7';
public const MAC_ADDRESS_ALT = 'A1:B2:C3:D4:E5:F6';
// URLs and Domains
public const DOMAIN = 'example.com';
public const URL_HTTP = 'http://example.com';
public const URL_HTTPS = 'https://example.com';
// User IDs and Numbers
public const USER_ID = 12345;
public const USER_ID_ALT = 67890;
public const SESSION_ID = 'sess_abc123def456';
// Passwords and Secrets (for testing masking)
public const PASSWORD = 'secret_password_123';
public const PASSWORD_ALT = 'p@ssw0rd!';
public const API_KEY = 'sk_live_1234567890abcdef';
public const SECRET_TOKEN = 'bearer_secret_token';
// Amounts and Numbers
public const AMOUNT_CURRENCY = 99.99;
public const AMOUNT_LARGE = 1234.56;
public const CVV = 123;
// Messages
public const MESSAGE_DEFAULT = 'Test message';
public const MESSAGE_SENSITIVE = 'Sensitive data detected';
public const MESSAGE_ERROR = 'Error occurred';
public const MESSAGE_BASE = 'Base message';
public const MESSAGE_WITH_EMAIL = 'Message with test@example.com';
public const MESSAGE_WITH_EMAIL_PREFIX = 'Message with ';
public const MESSAGE_INFO_EMAIL = 'Info with test@example.com';
public const MESSAGE_USER_ACTION_EMAIL = 'User action with test@example.com';
public const MESSAGE_SECURITY_ERROR_EMAIL = 'Security error with test@example.com';
// Message Templates
public const TEMPLATE_USER_EMAIL = 'user%d@example.com';
public const TEMPLATE_MESSAGE_EMAIL = 'Message %d with test@example.com';
// Error Messages
public const ERROR_REPLACE_TYPE_EMPTY = 'Cannot be null or empty for REPLACE type';
public const ERROR_EXCEPTION_NOT_THROWN = 'Expected exception was not thrown';
public const ERROR_RATE_LIMIT_KEY_EMPTY = 'Rate limiting key cannot be empty';
public const ERROR_TRUNCATED_SECURITY = '(truncated for security)';
// Test Messages and Data
public const MESSAGE_TEST_LOWERCASE = 'test message';
public const MESSAGE_USER_ID = 'User ID: 12345';
public const MESSAGE_TEST_WITH_DIGITS = 'Test with 123';
public const MESSAGE_SECRET_DATA = 'secret data';
public const MESSAGE_TEST_STRING = 'test string';
public const DATA_PUBLIC = 'public data';
public const DATA_NUMBER_STRING = '12345';
public const JSON_KEY_VALUE = '{"key":"value"}';
public const PATH_TEST = '/test';
public const CONTENT_TYPE_JSON = 'application/json';
public const STRATEGY_TEST = 'Test Strategy';
// Template Messages
public const TEMPLATE_ENV_VALUE_RESULT = "Environment value '%s' should result in ";
public const TEMPLATE_ENV_VALUE_RESULT_FULL = "Environment value '%s' should result in %s";
// Channels
public const CHANNEL_TEST = 'test';
public const CHANNEL_APPLICATION = 'application';
public const CHANNEL_SECURITY = 'security';
public const CHANNEL_AUDIT = 'audit';
// Context Keys
public const CONTEXT_USER_ID = 'user_id';
public const CONTEXT_EMAIL = 'email';
public const CONTEXT_PASSWORD = 'password';
public const CONTEXT_SENSITIVE_DATA = 'sensitive_data';
// Regex Patterns
public const PATTERN_EMAIL_TEST = '/test@example\.com/';
public const PATTERN_INVALID_UNCLOSED_BRACKET = '/invalid[/';
public const PATTERN_TEST = '/test/';
public const PATTERN_DIGITS = '/\d+/';
public const PATTERN_SECRET = '/secret/';
public const PATTERN_EMAIL_FULL = '/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/';
public const PATTERN_RECURSIVE = '/(?R)/';
public const PATTERN_NAMED_RECURSION = '/(?P>name)/';
public const PATTERN_SSN_FORMAT = '/\d{3}-\d{2}-\d{4}/';
// Field Paths
public const FIELD_MESSAGE = 'message';
public const FIELD_GENERIC = 'field';
public const FIELD_USER_EMAIL = 'user.email';
public const FIELD_USER_NAME = 'user.name';
public const FIELD_USER_PUBLIC = 'user.public';
public const FIELD_USER_PASSWORD = 'user.password';
public const FIELD_SYSTEM_LOG = 'system.log';
// Path Patterns
public const PATH_USER_WILDCARD = 'user.*';
// Test Data
public const DATA_TEST = 'test';
public const DATA_TEST_DATA = 'test data';
public const DATA_MASKED = 'masked';
// Replacement Values
public const REPLACEMENT_TEST = '[TEST]';
/**
* Prevent instantiation.
*
* @psalm-suppress UnusedConstructor
*/
private function __construct()
{
}
}