lthn.io/app/Core/Tests/Feature/ValidationRulesTest.php
Claude 41a90cbff8
feat: lthn.io API serving live chain data
Fixed: basePath self→static binding, namespace detection, event wiring,
SQLite cache, file cache driver. All Mod Boot classes converted to
$listens pattern for lifecycle event discovery.

Working endpoints:
- /v1/explorer/info — live chain height, difficulty, aliases
- /v1/explorer/stats — formatted chain statistics
- /v1/names/directory — alias directory grouped by type
- /v1/names/available/{name} — name availability check
- /v1/names/lookup/{name} — name details

Co-Authored-By: Charon <charon@lethean.io>
2026-04-03 17:17:42 +01:00

178 lines
5 KiB
PHP

<?php
/*
* Core PHP Framework
*
* Licensed under the European Union Public Licence (EUPL) v1.2.
* See LICENSE file for details.
*/
declare(strict_types=1);
use Core\Helpers\Rules\HexRule;
use Core\Mod\Social\Enums\ResourceStatus;
use Core\Tenant\Models\User;
use Core\Tenant\Rules\CheckUserPasswordRule;
use Core\Tenant\Rules\ResourceStatusRule;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
uses(RefreshDatabase::class);
describe('CheckUserPasswordRule', function () {
it('passes validation when password matches', function () {
$user = new User;
$user->password = Hash::make('correct-password');
$rule = new CheckUserPasswordRule($user);
$validator = Validator::make(
['password' => 'correct-password'],
['password' => $rule]
);
expect($validator->passes())->toBeTrue();
});
it('fails validation when password does not match', function () {
$user = new User;
$user->password = Hash::make('correct-password');
$rule = new CheckUserPasswordRule($user);
$validator = Validator::make(
['password' => 'wrong-password'],
['password' => $rule]
);
expect($validator->fails())->toBeTrue();
});
it('uses custom error message when provided', function () {
$user = new User;
$user->password = Hash::make('correct-password');
$customMessage = 'Your current password is incorrect';
$rule = new CheckUserPasswordRule($user, $customMessage);
$validator = Validator::make(
['password' => 'wrong-password'],
['password' => $rule]
);
expect($validator->fails())->toBeTrue();
expect($validator->errors()->first('password'))->toBe($customMessage);
});
});
describe('HexRule', function () {
it('passes validation for 6-digit hex codes', function () {
$rule = new HexRule;
$validator = Validator::make(
['colour' => '#ffffff'],
['colour' => $rule]
);
expect($validator->passes())->toBeTrue();
});
it('passes validation for 3-digit hex codes', function () {
$rule = new HexRule;
$validator = Validator::make(
['colour' => '#fff'],
['colour' => $rule]
);
expect($validator->passes())->toBeTrue();
});
it('passes validation for uppercase hex codes', function () {
$rule = new HexRule;
$validator = Validator::make(
['colour' => '#ABCDEF'],
['colour' => $rule]
);
expect($validator->passes())->toBeTrue();
});
it('fails validation for invalid hex codes', function () {
$rule = new HexRule;
$validator = Validator::make(
['colour' => '#gggggg'],
['colour' => $rule]
);
expect($validator->fails())->toBeTrue();
});
it('fails validation when hash symbol is missing', function () {
$rule = new HexRule;
$validator = Validator::make(
['colour' => 'ffffff'],
['colour' => $rule]
);
expect($validator->fails())->toBeTrue();
});
it('rejects 3-digit codes when forceFull is true', function () {
$rule = new HexRule(forceFull: true);
$validator = Validator::make(
['colour' => '#fff'],
['colour' => $rule]
);
expect($validator->fails())->toBeTrue();
});
it('accepts 6-digit codes when forceFull is true', function () {
$rule = new HexRule(forceFull: true);
$validator = Validator::make(
['colour' => '#ffffff'],
['colour' => $rule]
);
expect($validator->passes())->toBeTrue();
});
});
describe('ResourceStatusRule', function () {
it('passes validation for enabled status', function () {
$rule = new ResourceStatusRule;
$validator = Validator::make(
['status' => ResourceStatus::ENABLED->value],
['status' => $rule]
);
expect($validator->passes())->toBeTrue();
});
it('passes validation for disabled status', function () {
$rule = new ResourceStatusRule;
$validator = Validator::make(
['status' => ResourceStatus::DISABLED->value],
['status' => $rule]
);
expect($validator->passes())->toBeTrue();
});
it('fails validation for invalid status values', function () {
$rule = new ResourceStatusRule;
$validator = Validator::make(
['status' => 999],
['status' => $rule]
);
expect($validator->fails())->toBeTrue();
});
it('fails validation for string values', function () {
$rule = new ResourceStatusRule;
$validator = Validator::make(
['status' => 'enabled'],
['status' => $rule]
);
expect($validator->fails())->toBeTrue();
});
});