1
+ <?php
2
+ namespace bazilio \async \tests \unit ;
3
+
4
+ use bazilio \async \Exception ;
5
+ use bazilio \async \models \AsyncExecuteTask ;
6
+ use bazilio \async \models \AsyncTask ;
7
+
8
+ class TestTask extends AsyncTask
9
+ {
10
+ public $ id ;
11
+
12
+ public function execute ()
13
+ {
14
+ return $ this ->id ;
15
+ }
16
+ }
17
+
18
+ class TestException extends \Exception
19
+ {
20
+ }
21
+
22
+ class BlackHole
23
+ {
24
+ public static function run ($ param )
25
+ {
26
+ throw new TestException ($ param );
27
+ }
28
+ }
29
+
30
+ class BaseTestClass extends \yii \codeception \TestCase
31
+ {
32
+ public $ appConfig = '@tests/unit/_config.amqp.php ' ;
33
+ /**
34
+ * @var \bazilio\async\AsyncComponent
35
+ */
36
+ protected $ async ;
37
+
38
+ public function setUp ()
39
+ {
40
+ parent ::setUp ();
41
+
42
+ $ this ->async = \Yii::$ app ->async ;
43
+ }
44
+
45
+ public function testPurge ()
46
+ {
47
+ $ task = new TestTask ();
48
+ $ this ->async ->sendTask ($ task );
49
+
50
+ $ this ->assertEquals (TestTask::className (), get_class ($ this ->async ->receiveTask (TestTask::$ queueName )));
51
+
52
+ $ this ->assertTrue ($ this ->async ->purge (TestTask::$ queueName ));
53
+ $ this ->assertFalse ($ this ->async ->receiveTask (TestTask::$ queueName ));
54
+ }
55
+
56
+ public function testLifeCycle ()
57
+ {
58
+ $ task = new TestTask ();
59
+ $ task ->id = uniqid ();
60
+
61
+ $ this ->async ->sendTask ($ task );
62
+
63
+ /** @var TestTask $rTask */
64
+ $ rTask = $ this ->async ->receiveTask (TestTask::$ queueName );
65
+ $ this ->assertInstanceOf (TestTask::className (), $ rTask );
66
+
67
+ $ this ->assertEquals ($ task ->id , $ rTask ->execute ());
68
+
69
+ $ this ->assertTrue ($ this ->async ->acknowledgeTask ($ rTask ));
70
+
71
+ $ this ->assertFalse ($ this ->async ->receiveTask (TestTask::$ queueName ));
72
+ }
73
+
74
+ public function testAsyncExecuteTask ()
75
+ {
76
+ $ aTask = new AsyncExecuteTask ();
77
+ $ aTask ->setAttributes (
78
+ [
79
+ 'class ' => 'bazilio\async\tests\unit\BlackHole ' ,
80
+ 'method ' => 'run ' ,
81
+ 'arguments ' => ['param ' => 'through the space ' ]
82
+ ]
83
+ );
84
+
85
+ $ this ->async ->sendTask ($ aTask );
86
+
87
+ $ rTask = $ this ->async ->receiveTask ($ aTask ::$ queueName );
88
+ $ this ->assertInstanceOf ('bazilio\async\models\AsyncExecuteTask ' , $ rTask );
89
+
90
+ try {
91
+ $ rTask ->execute ();
92
+ } catch (TestException $ e ) {
93
+ $ this ->assertEquals ($ e ->getMessage (), 'through the space ' );
94
+ return true ;
95
+ }
96
+
97
+ $ this ->fail ('BlackHole method wasn \'t called. ' );
98
+ }
99
+
100
+ public function testArgumentsValidation ()
101
+ {
102
+ $ aTask = new AsyncExecuteTask ();
103
+ $ aTask ->setAttributes (
104
+ [
105
+ 'class ' => 'bazilio\async\tests\unit\BlackHole ' ,
106
+ 'method ' => 'run ' ,
107
+ 'arguments ' => ['fail ' => 'through the space ' ]
108
+ ]
109
+ );
110
+
111
+ $ this ->assertFalse ($ aTask ->validate ());
112
+
113
+ $ this ->assertEquals (
114
+ $ aTask ->errors ['arguments ' ][0 ],
115
+ "Method `run` missing required arguments: param "
116
+ );
117
+
118
+ try {
119
+ $ this ->async ->sendTask ($ aTask );
120
+ } catch (Exception $ e ) {
121
+ return ;
122
+ }
123
+
124
+ $ this ->fail ('Async doesn \'t reject invalid task. ' );
125
+ }
126
+ }
0 commit comments