forked from rollerworks/split-token
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFakeSplitTokenFactoryTest.php
More file actions
138 lines (109 loc) · 4.8 KB
/
FakeSplitTokenFactoryTest.php
File metadata and controls
138 lines (109 loc) · 4.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?php
declare(strict_types=1);
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
namespace Rollerworks\Component\SplitToken\Tests;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\TestCase;
use Rollerworks\Component\SplitToken\FakeSplitTokenFactory;
use Rollerworks\Component\SplitToken\SplitToken;
use Symfony\Component\Clock\Test\ClockSensitiveTrait;
/**
* @internal
*/
final class FakeSplitTokenFactoryTest extends TestCase
{
use ClockSensitiveTrait;
#[Test]
public function it_generates_a_same_token_on_every_call(): void
{
$factory = new FakeSplitTokenFactory();
$splitToken1 = $factory->generate();
$splitToken2 = $factory->generate();
self::assertEquals($splitToken1->selector(), $splitToken2->selector());
self::assertEquals($splitToken1, $splitToken2);
$factory2 = new FakeSplitTokenFactory();
$splitToken1 = $factory->generate();
$splitToken2 = $factory2->generate();
self::assertEquals($splitToken1->selector(), $splitToken2->selector());
self::assertEquals($splitToken1, $splitToken2);
}
#[Test]
public function it_generates_a_new_token_when_passed(): void
{
$splitToken1 = FakeSplitTokenFactory::randomInstance()->generate();
$splitToken2 = FakeSplitTokenFactory::randomInstance()->generate();
self::assertNotEquals($splitToken1->selector(), $splitToken2->selector());
self::assertNotEquals($splitToken1, $splitToken2);
}
#[Test]
public function it_generates_with_default_expiration_date(): void
{
$factory = new FakeSplitTokenFactory(defaultLifeTime: new \DateInterval('P1D'));
$factory->setClock(self::mockTime('2023-10-05T20:00:00+02:00'));
self::assertExpirationEquals('2023-10-06T20:00:00', $factory->generate());
self::assertExpirationEquals('2023-10-07T20:00:00', $factory->generate(new \DateInterval('P2D')));
self::assertExpirationEquals('2019-10-05T20:00:00', $factory->generate(new \DateTimeImmutable('2019-10-05T20:00:00+02:00')));
$factory = new FakeSplitTokenFactory();
$factory->setClock(self::mockTime('2023-10-05T20:00:00+02:00'));
self::assertNull($factory->generate()->getExpirationTime());
self::assertExpirationEquals('2023-10-07T20:00:00', $factory->generate(new \DateInterval('P2D')));
}
private static function assertExpirationEquals(string $expected, SplitToken $actual): void
{
self::assertNotNull($actual->getExpirationTime());
self::assertSame($expected, $actual->getExpirationTime()->format('Y-m-d\TH:i:s'));
}
#[Test]
public function it_creates_from_string(): void
{
$factory = new FakeSplitTokenFactory();
$splitToken = $factory->generate();
$fullToken = $splitToken->token()->getString();
$splitTokenFromString = $factory->fromString($fullToken);
self::assertTrue($splitTokenFromString->matches($splitToken->toValueHolder()));
}
#[Test]
public function it_creates_from_string_with_mock_provided_selector(): void
{
$factory = new FakeSplitTokenFactory();
$splitToken = $factory->generate();
$fullToken = FakeSplitTokenFactory::FULL_TOKEN;
$fullTokenStr = $splitToken->token()->getString();
$splitTokenFromString = $factory->fromString($fullToken);
$splitTokenFromString2 = $factory->fromString($fullTokenStr);
self::assertEquals($fullTokenStr, $fullToken);
self::assertTrue($splitTokenFromString->matches($splitToken->toValueHolder()));
self::assertTrue($splitTokenFromString2->matches($splitToken->toValueHolder()));
}
#[Test]
public function it_creates_from_hidden_string(): void
{
$factory = new FakeSplitTokenFactory();
$splitToken = $factory->generate();
$splitTokenFromString = $factory->fromString($splitToken->token());
self::assertTrue($splitTokenFromString->matches($splitToken->toValueHolder()));
}
#[Test]
public function it_creates_from_stringable_object(): void
{
$factory = new FakeSplitTokenFactory();
$splitToken = $factory->generate();
$stringObj = new class($splitToken->token()->getString()) implements \Stringable {
public function __construct(
#[\SensitiveParameter]
private string $value,
) {
}
public function __toString(): string
{
return $this->value;
}
};
$splitTokenFromString = $factory->fromString($stringObj);
self::assertTrue($splitTokenFromString->matches($splitToken->toValueHolder()));
}
}