1+ <?php
2+
3+ use TRMS \Carousel \Server \API ;
4+ use TRMS \Carousel \Exceptions \CarouselAPIException ;
5+ use TRMS \Carousel \Models \User ;
6+ use TRMS \Carousel \Models \Bulletin ;
7+ use TRMS \Carousel \Models \Group ;
8+
9+ use CarouselTests \MockData \MockResponder ;
10+
11+ use GuzzleHttp \Handler \MockHandler ;
12+ use GuzzleHttp \HandlerStack ;
13+ use GuzzleHttp \Psr7 \Response ;
14+ use GuzzleHttp \Psr7 \Request ;
15+ use GuzzleHttp \Exception \RequestException ;
16+
17+ class APITest extends PHPUnit_Framework_TestCase
18+ {
19+
20+ function test_you_can_connect_to_a_server ()
21+ {
22+ $ mock = new MockHandler ([
23+ new Response (200 ),
24+ new Response (200 ),
25+ ]);
26+ $ handler = HandlerStack::create ($ mock );
27+
28+ $ server = new API ();
29+
30+ $ server ->connect ('foo ' ,'username ' ,'password ' );
31+ $ server ->client ->request ('GET ' ,'' ,['handler ' =>$ handler ]);
32+ $ this ->assertEquals ('foo/carouselapi/v1/ ' , (string ) $ mock ->getLastRequest ()->getUri ());
33+
34+ $ server ->connect ('bar ' ,'username ' ,'password ' );
35+ $ server ->client ->request ('GET ' ,'' ,['handler ' =>$ handler ]);
36+ $ this ->assertEquals ('bar/carouselapi/v1/ ' , (string ) $ mock ->getLastRequest ()->getUri ());
37+ }
38+
39+
40+ function test_the_server_will_throw_an_exception_if_the_endpoint_404s ()
41+ {
42+ $ mock = new MockHandler ([
43+ new Response (404 ),
44+ ]);
45+ $ handler = HandlerStack::create ($ mock );
46+
47+ $ server = new API ();
48+ $ server
49+ ->addMockHandler ($ handler )
50+ ->connect ('my_server ' ,'username ' ,'password ' );
51+
52+ try {
53+ $ server ->whoAmI ();
54+ } catch (CarouselAPIException $ e ) {
55+ return ;
56+ }
57+
58+ $ this ->fail ('the server did not throw an exception ' );
59+ }
60+
61+ function test_the_class_will_connect_to_a_carousel_server_and_get_the_current_user ()
62+ {
63+ $ mockResponder = new MockResponder ;
64+ $ mock = new MockHandler ([
65+ new Response (200 ,[],$ mockResponder ->whoAmI ()),
66+ ]);
67+ $ handler = HandlerStack::create ($ mock );
68+
69+ $ server = new API ();
70+ $ server
71+ ->addMockHandler ($ handler )
72+ ->connect ('my_server ' ,'username ' ,'password ' );
73+
74+ $ loggedInUser = $ server ->whoAmI ();
75+
76+ $ this ->assertInstanceOf (User::class, $ loggedInUser );
77+ $ this ->assertEquals ('admin ' , $ loggedInUser ->id );
78+ $ this ->assertArraySubset (['id ' =>'admin ' ],$ loggedInUser ->toArray ());
79+ }
80+
81+ function test_you_can_get_a_list_of_bulletins ()
82+ {
83+ $ mockResponder = new MockResponder ;
84+ $ mock = new MockHandler ([
85+ new Response (200 ,[],$ mockResponder ->bulletins ()),
86+ new Response (200 ,[],json_encode (['id ' =>'2 ' ])),
87+ ]);
88+ $ handler = HandlerStack::create ($ mock );
89+
90+ $ server = new API ();
91+ $ bulletins = $ server
92+ ->addMockHandler ($ handler )
93+ ->connect ('my_server ' ,'username ' ,'password ' )
94+ ->getBulletins ();
95+
96+ $ group = $ bulletins [0 ]->getGroup ();
97+
98+ $ this ->assertInstanceOf (Bulletin::class, $ bulletins [0 ]);
99+ $ this ->assertEquals (1 , $ bulletins [0 ]->id );
100+ $ this ->assertArraySubset (['id ' =>1 ],$ bulletins [0 ]->toArray ());
101+ $ this ->assertInstanceOf (Group::class, $ group );
102+ }
103+
104+ function test_you_can_get_a_single_bulletin_by_id ()
105+ {
106+ $ mockResponder = new MockResponder ;
107+ $ mock = new MockHandler ([
108+ new Response (200 ,[],$ mockResponder ->bulletin ()),
109+ new Response (200 ,[],json_encode (['id ' =>'2 ' ])),
110+ ]);
111+ $ handler = HandlerStack::create ($ mock );
112+
113+ $ server = new API ();
114+ $ bulletin = $ server
115+ ->addMockHandler ($ handler )
116+ ->connect ('my_server ' ,'username ' ,'password ' )
117+ ->getBulletin ('1 ' );
118+
119+ $ group = $ bulletin ->getGroup ();
120+
121+ $ this ->assertInstanceOf (Bulletin::class, $ bulletin );
122+ $ this ->assertEquals (1 , $ bulletin ->id );
123+ $ this ->assertArraySubset (['id ' =>1 ],$ bulletin ->toArray ());
124+ $ this ->assertInstanceOf (Group::class, $ group );
125+ }
126+
127+ function test_you_can_save_an_existing_bulletin ()
128+ {
129+ $ mockResponder = new MockResponder ;
130+ $ mock = new MockHandler ([
131+ new Response (200 ,[],$ mockResponder ->bulletin ()),
132+ ]);
133+ $ handler = HandlerStack::create ($ mock );
134+
135+ $ bulletin = new Bulletin (['id ' =>'1 ' ]);
136+ $ server = new API ();
137+
138+ $ response = $ server
139+ ->addMockHandler ($ handler )
140+ ->connect ('server ' ,'username ' ,'password ' )
141+ ->save ($ bulletin );
142+
143+ $ this ->assertEquals ('server/carouselapi/v1/bulletins/1 ' , (string ) $ mock ->getLastRequest ()->getUri ());
144+ $ this ->assertEquals ('PUT ' , (string ) $ mock ->getLastRequest ()->getMethod ());
145+ $ this ->assertInstanceOf (Bulletin::class, $ response );
146+ }
147+
148+ function test_you_can_save_a_new_bulletin ()
149+ {
150+ $ mockResponder = new MockResponder ;
151+ $ mock = new MockHandler ([
152+ new Response (200 ,[],$ mockResponder ->bulletin ()),
153+ ]);
154+ $ handler = HandlerStack::create ($ mock );
155+
156+ $ bulletin = new Bulletin ();
157+ $ server = new API ();
158+
159+ $ response = $ server
160+ ->addMockHandler ($ handler )
161+ ->connect ('server ' ,'username ' ,'password ' )
162+ ->save ($ bulletin );
163+
164+ $ this ->assertEquals ('server/carouselapi/v1/bulletins ' , (string ) $ mock ->getLastRequest ()->getUri ());
165+ $ this ->assertEquals ('POST ' , (string ) $ mock ->getLastRequest ()->getMethod ());
166+ $ this ->assertInstanceOf (Bulletin::class, $ response );
167+ }
168+
169+ function test_you_can_get_an_individual_group ()
170+ {
171+ $ mockResponder = new MockResponder ;
172+ $ mock = new MockHandler ([
173+ new Response (200 ,[],json_encode (['id ' =>'1 ' ])),
174+ ]);
175+ $ handler = HandlerStack::create ($ mock );
176+
177+ $ server = new API ();
178+ $ group = $ server
179+ ->addMockHandler ($ handler )
180+ ->connect ('my_server ' ,'username ' ,'password ' )
181+ ->getGroup ('1 ' );
182+
183+ $ this ->assertInstanceOf (Group::class, $ group );
184+ $ this ->assertEquals (1 , $ group ->id );
185+ $ this ->assertArraySubset (['id ' =>1 ],$ group ->toArray ());
186+ }
187+ }
0 commit comments