1
+ <?php
2
+ namespace Gt \Promise \Test ;
3
+
4
+ use Closure ;
5
+ use Exception ;
6
+ use Gt \Promise \FulfilledPromise ;
7
+ use Gt \Promise \FulfilledValueNotConcreteException ;
8
+ use Gt \Promise \Promise ;
9
+ use Http \Promise \Promise as HttpPromiseInterface ;
10
+ use PHPUnit \Framework \TestCase ;
11
+ use TypeError ;
12
+
13
+ class FulfilledPromiseTest extends TestCase {
14
+ public function testCanNotResolveWithPromise () {
15
+ $ callback = fn ()=>true ;
16
+ $ promise = new Promise ($ callback );
17
+ self ::expectException (FulfilledValueNotConcreteException::class);
18
+ new FulfilledPromise ($ promise );
19
+ }
20
+
21
+ public function testDoNothingWithNullComplete () {
22
+ $ message = "Test message " ;
23
+ $ sut = new FulfilledPromise ($ message );
24
+ $ exception = null ;
25
+ try {
26
+ $ sut ->complete ();
27
+ }
28
+ catch (Exception $ exception ) {}
29
+
30
+ self ::assertNull ($ exception );
31
+ }
32
+
33
+ public function testCompleteWithPromise () {
34
+ $ message = "Test message " ;
35
+
36
+ $ promise = self ::createMock (Promise::class);
37
+ $ promise ->expects (self ::once ())
38
+ ->method ("complete " );
39
+ $ callback = fn () => $ promise ;
40
+
41
+ $ sut = new FulfilledPromise ($ message );
42
+ $ sut ->complete ($ callback );
43
+ }
44
+
45
+ public function testCatch () {
46
+ // Catch does nothing because a FulfilledPromise is already resolved.
47
+ $ callCount = 0 ;
48
+ $ callback = function () use (&$ callCount ) {
49
+ $ callCount ++;
50
+ };
51
+ $ sut = new FulfilledPromise (true );
52
+ self ::assertSame ($ sut , $ sut ->catch ($ callback ));
53
+ self ::assertEquals (0 , $ callCount );
54
+ }
55
+
56
+ public function testFinally () {
57
+ $ callCount = 0 ;
58
+ $ callback = function () use (&$ callCount ) {
59
+ $ callCount ++;
60
+ };
61
+
62
+ $ message = "Test message " ;
63
+ $ sut = new FulfilledPromise ($ message );
64
+ $ sut ->finally ($ callback );
65
+ self ::assertEquals (1 , $ callCount );
66
+ }
67
+
68
+ public function testCompleteWithInvalidCallback () {
69
+ $ callback = function (string $ requiredStringParameter ) {};
70
+
71
+ $ sut = new FulfilledPromise ("Callback should not have a required string parameter! " );
72
+ $ reasonArray = [];
73
+ $ sut ->finally ($ callback )->catch (function (\Throwable $ reason ) use (&$ reasonArray ) {
74
+ array_push ($ reasonArray , $ reason );
75
+ });
76
+ self ::assertCount (1 , $ reasonArray );
77
+ self ::assertInstanceOf (TypeError::class, $ reasonArray [0 ]);
78
+ }
79
+
80
+ public function testGetState () {
81
+ $ sut = new FulfilledPromise ();
82
+ self ::assertEquals (
83
+ HttpPromiseInterface::FULFILLED ,
84
+ $ sut ->getState ()
85
+ );
86
+ }
87
+ }
0 commit comments