2FAuth/tests/Unit/HelpersTest.php

222 lines
5.3 KiB
PHP

<?php
namespace Tests\Unit;
use App\Helpers\Helpers;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase;
/**
* HelpersTest test class
*/
#[CoversClass(Helpers::class)]
class HelpersTest extends TestCase
{
#[Test]
#[DataProvider('versionNumberProvider')]
public function test_cleanVersionNumber_returns_cleaned_version($dirtyVersion, $expected)
{
$cleanedVersion = Helpers::cleanVersionNumber($dirtyVersion);
$this->assertEquals($expected, $cleanedVersion);
}
/**
* Provide data for cleanVersionNumber() tests
*/
public static function versionNumberProvider()
{
return [
[
'v3.2.1',
'3.2.1',
],
[
'v3.2.1-beta',
'3.2.1-beta',
],
[
'v3.0.1-alpha+001',
'3.0.1-alpha+001',
],
[
'version03.0.1 alpha+001',
'3.0.1',
],
];
}
#[Test]
#[DataProvider('invalidVersionNumberProvider')]
public function test_cleanVersionNumber_returns_false_with_invalid_semver($dirtyVersion)
{
$cleanedVersion = Helpers::cleanVersionNumber($dirtyVersion);
$this->assertEquals(false, $cleanedVersion);
}
/**
* Provide data for cleanVersionNumber() tests
*/
public static function invalidVersionNumberProvider()
{
return [
[
'v3.2.',
],
[
'v3..1-beta',
],
[
'v.0.1-alpha+001',
],
[
'3.00.1 alpha+001',
],
[
'3.00.1 alpha+001',
],
];
}
#[Test]
#[DataProvider('toBase32PaddedStringProvider')]
public function test_toBase32Format_returns_base32_formated_string($str, $expected)
{
$base32str = Helpers::PadToBase32Format($str);
$this->assertEquals($expected, $base32str);
}
/**
* Provide data for cleanVersionNumber() tests
*/
public static function toBase32PaddedStringProvider()
{
return [
'SHORT_STRING' => [
'eeee',
'EEEE====',
],
'LONG_STRING' => [
'eeeezzzztt',
'EEEEZZZZTT======',
],
'EXACT_LENGTH_STRING' => [
'eeeezzzz',
'EEEEZZZZ',
],
'EXACT_LONG_LENGTH_STRING' => [
'eeeezzzzeeeezzzzeeeezzzz',
'EEEEZZZZEEEEZZZZEEEEZZZZ',
],
'NO_STRING' => [
'',
'',
],
'BOOL_STRING' => [
true,
'1=======',
],
'INT_STRING' => [
10,
'10======',
],
'FLOAT_STRING' => [
0.1,
'0.1=====',
],
];
}
#[Test]
#[DataProvider('commaSeparatedToArrayProvider')]
public function test_commaSeparatedToArray_returns_ids_in_array($str, $expected)
{
$array = Helpers::commaSeparatedToArray($str);
$this->assertEquals($expected, $array);
}
/**
* Provide data for cleanVersionNumber() tests
*/
public static function commaSeparatedToArrayProvider()
{
return [
'NOMINAL' => [
'1,2,3',
[1, 2, 3],
],
'DUPLICATE' => [
'1,2,2,3',
[1, 2, 2, 3],
],
];
}
#[Test]
#[DataProvider('invalidCommaSeparatedToArrayProvider')]
public function test_commaSeparatedToArray_returns_unchanged_ids($str, $expected)
{
$array = Helpers::commaSeparatedToArray($str);
$this->assertEquals($expected, $array);
}
/**
* Provide data for cleanVersionNumber() tests
*/
public static function invalidCommaSeparatedToArrayProvider()
{
return [
'INVALID_IDS_LEADING_SPACES' => [
'1, 2,3',
'1, 2,3',
],
'INVALID_IDS_TRAILING_SPACES' => [
'1,2 ,3',
'1,2 ,3',
],
'INVALID_IDS_BAD_SEPARATOR' => [
'1/2/3',
'1/2/3',
],
'INVALID_IDS_NOT_DIGIT' => [
'a,b,c',
'a,b,c',
],
'INVALID_IDS_MISSING_DIGIT' => [
'1,,3',
'1,,3',
],
'INVALID_IDS_LEADING_COMMA' => [
',2,3',
',2,3',
],
'INVALID_IDS_TRAILING_COMMA' => [
'1,2,',
'1,2,',
],
'NOT_STRING_BOOLEAN' => [
true,
true,
],
'NOT_STRING_INT' => [
1,
1,
],
'NOT_STRING_ARRAY' => [
[1],
[1],
],
'NOT_STRING_NULL' => [
null,
null,
],
];
}
}