14
14
15
15
namespace MultiTheftAuto \Sdk ;
16
16
17
+ use GuzzleHttp \Psr7 \Request ;
18
+ use GuzzleHttp \Psr7 \Stream ;
19
+ use Http \Factory \Guzzle \RequestFactory ;
20
+ use Http \Factory \Guzzle \StreamFactory ;
17
21
use Http \Mock \Client ;
22
+ use MultiTheftAuto \Sdk \Exception \AccessDeniedException ;
18
23
use MultiTheftAuto \Sdk \Model \Authentication ;
19
24
use MultiTheftAuto \Sdk \Model \Element ;
20
25
use MultiTheftAuto \Sdk \Model \Resource ;
21
26
use MultiTheftAuto \Sdk \Model \Server ;
22
27
use PHPUnit \Framework \TestCase ;
28
+ use Prophecy \Argument ;
23
29
use Psr \Http \Message \ResponseInterface ;
24
30
25
31
class MtaTest extends TestCase
@@ -29,7 +35,7 @@ public function testItReturnsResponse(): void
29
35
$ response = $ this ->prophesize (ResponseInterface::class);
30
36
$ response
31
37
->getBody ()
32
- ->willReturn ('["^R^someResource","someString","^E^someElementId"] ' );
38
+ ->willReturn ('["^R^someResource","someString","^E^someElementId", [1,2,3] ] ' );
33
39
$ response
34
40
->getStatusCode ()
35
41
->willReturn (200 );
@@ -44,6 +50,7 @@ public function testItReturnsResponse(): void
44
50
$ mta = new Mta ($ server , $ credential , $ client );
45
51
$ return = $ mta ->getService ()->callFunction ('someCallableResource ' , 'someCallableFunction ' );
46
52
53
+ $ this ->assertIsArray ($ return );
47
54
$ this ->assertInstanceOf (Resource::class, $ return [0 ]);
48
55
$ this ->assertEquals ('someResource ' , $ return [0 ]->getName ());
49
56
$ this ->assertEquals ('someString ' , $ return [1 ]);
@@ -53,41 +60,118 @@ public function testItReturnsResponse(): void
53
60
54
61
public function testItReturnsResponseUsingDirectCall (): void
55
62
{
63
+ $ response = $ this ->prophesize (ResponseInterface::class);
64
+ $ response
65
+ ->getBody ()
66
+ ->willReturn ('["^R^someResource","someString","^E^someElementId"] ' );
67
+ $ response
68
+ ->getStatusCode ()
69
+ ->willReturn (200 );
70
+ $ response = $ response ->reveal ();
71
+
56
72
$ client = new Client ();
57
- $ response = $ this ->createMock (ResponseInterface::class);
58
- $ response ->method ('getBody ' )->willReturn ('["^R^someResource","someString","^E^someElementId"] ' );
59
- $ response ->method ('getStatusCode ' )->willReturn (200 );
60
73
$ client ->addResponse ($ response );
74
+
61
75
$ server = new Server ('127.0.0.1 ' , 22005 );
62
76
$ credential = new Authentication ('someUser ' , 'somePassword ' );
63
77
64
78
$ mta = new Mta ($ server , $ credential , $ client );
65
79
$ return = $ mta ->getResource ('someCallableResource ' )->call ->someCallableFunction ();
66
80
81
+ $ this ->assertIsArray ($ return );
67
82
$ this ->assertInstanceOf (Resource::class, $ return [0 ]);
68
83
$ this ->assertEquals ('someResource ' , $ return [0 ]->getName ());
69
84
$ this ->assertEquals ('someString ' , $ return [1 ]);
70
85
$ this ->assertInstanceOf (Element::class, $ return [2 ]);
71
86
$ this ->assertEquals ('someElementId ' , $ return [2 ]->getId ());
72
87
}
73
88
74
- public function testItPrintsSomeJson ()
89
+ public function testItPrintsSomeJson (): void
75
90
{
76
91
Mta::doReturn ('someValue1 ' , 'someValue2 ' );
77
92
$ this ->expectOutputString ('["someValue1","someValue2"] ' );
78
93
}
79
94
80
95
public function testItReturnResource ()
81
96
{
82
- $ server = $ this ->createMock (Server::class);
83
- $ credential = $ this ->createMock (Authentication::class);
97
+ $ server = $ this ->prophesize (Server::class);
98
+ $ credential = $ this ->prophesize (Authentication::class);
84
99
$ client = new Client ();
85
- $ mta = new Mta ($ server , $ credential , $ client );
100
+ $ mta = new Mta ($ server-> reveal () , $ credential-> reveal () , $ client );
86
101
87
102
$ resourceName = 'someResource ' ;
88
103
$ resource = $ mta ->getResource ($ resourceName );
89
104
90
105
$ this ->assertInstanceOf (Resource::class, $ resource );
91
106
$ this ->assertEquals ($ resourceName , $ resource ->getName ());
92
107
}
108
+
109
+ public function testItUsesRequestAndStreamFactoryParameter (): void
110
+ {
111
+ $ request = new Request ('POST ' , 'http://mtasa.com ' );
112
+ $ requestFactory = $ this ->prophesize (RequestFactory::class);
113
+ $ requestFactory
114
+ ->createRequest (Argument::type ('string ' ), Argument::type ('string ' ))
115
+ ->shouldBeCalled ()
116
+ ->willReturn ($ request );
117
+ $ requestFactory = $ requestFactory ->reveal ();
118
+
119
+ $ stream = $ this ->prophesize (Stream::class)->reveal ();
120
+ $ streamFactory = $ this ->prophesize (StreamFactory::class);
121
+ $ streamFactory
122
+ ->createStream (Argument::type ('string ' ))
123
+ ->shouldBeCalled ()
124
+ ->willReturn ($ stream );
125
+ $ streamFactory = $ streamFactory ->reveal ();
126
+
127
+ $ responseStream = (new StreamFactory ())->createStream ('["^R^someResource","someString","^E^someElementId"] ' );
128
+ $ response = $ this ->prophesize (ResponseInterface::class);
129
+ $ response
130
+ ->getBody ()
131
+ ->willReturn ($ responseStream );
132
+ $ response
133
+ ->getStatusCode ()
134
+ ->willReturn (200 );
135
+ $ response = $ response ->reveal ();
136
+
137
+ $ client = new Client ();
138
+ $ client ->addResponse ($ response );
139
+
140
+ $ server = new Server ('127.0.0.1 ' , 22005 );
141
+ $ credential = new Authentication ('someUser ' , 'somePassword ' );
142
+
143
+ $ mta = new Mta ($ server , $ credential , $ client , $ requestFactory , $ streamFactory );
144
+ $ mta ->getService ()->callFunction ('someCallableResource ' , 'someCallableFunction ' );
145
+ }
146
+
147
+ public function testItThrowsExceptionIfResponseCodeIsAccessDenied (): void
148
+ {
149
+ $ this ->expectException (AccessDeniedException::class);
150
+
151
+ $ response = $ this ->prophesize (ResponseInterface::class);
152
+ $ response
153
+ ->getStatusCode ()
154
+ ->willReturn (401 );
155
+ $ response = $ response ->reveal ();
156
+
157
+ $ client = new Client ();
158
+ $ client ->addResponse ($ response );
159
+
160
+ $ server = new Server ('127.0.0.1 ' , 22005 );
161
+ $ credential = new Authentication ('someUser ' , 'somePassword ' );
162
+
163
+ $ mta = new Mta ($ server , $ credential , $ client );
164
+ $ mta ->getService ()->callFunction ('someCallableResource ' , 'someCallableFunction ' );
165
+ }
166
+
167
+ public function testItAddsAResource (): void
168
+ {
169
+ $ client = new Client ();
170
+ $ server = new Server ('127.0.0.1 ' , 22005 );
171
+ $ credential = new Authentication ('someUser ' , 'somePassword ' );
172
+ $ mta = new Mta ($ server , $ credential , $ client );
173
+
174
+ $ mta ->getResource ('someName ' );
175
+ $ this ->assertCount (1 , $ mta ->getResourcesInstance ()->all ());
176
+ }
93
177
}
0 commit comments