flush
[m6w6/seekat] / tests / APITest.php
1 <?php
2
3 use AsyncInterop\Promise;
4 use seekat\API;
5
6 class APITest extends BaseTest
7 {
8 function provideHttpMethodAndAPI() {
9 $data = [];
10 $methods = [
11 "HEAD",
12 "GET",
13 "POST",
14 "PUT",
15 "DELETE",
16 "PATCH"
17 ];
18 foreach ($this->provideAPI() as $name => list($api)) {
19 foreach ($methods as $method) {
20 $data["$method $name"] = [$api, $method];
21 }
22 }
23 return $data;
24 }
25
26 /**
27 * @group testdox
28 * @dataProvider provideAPI
29 */
30 function testReturnsApiOnPropertyAccess($api) {
31 $this->assertInstanceOf(API::class, $api->foo);
32 }
33
34 /**
35 * @group testdox
36 * @dataProvider provideAPI
37 */
38 function testReturnsCloneOnPropertyAccess($api) {
39 $this->assertNotEquals($api, $api->bar);
40 }
41
42 /**
43 * @group testdox
44 * @dataProvider provideAPI
45 */
46 function testReturnsPromiseOnMethodCall($api) {
47 $this->assertInstanceOf(Promise::class, $api->baz());
48 }
49
50 /**
51 * @dataProvider provideHttpMethodAndAPI
52 */
53 function testProvidesMethodForStandardHttpMethod($api, $method) {
54 $this->assertTrue(method_exists($api, $method));
55 }
56
57 /**
58 * @dataProvider provideHttpMethodAndAPI
59 */
60 function testReturnsPromiseOnMethodCallForStandardHttpMethod($api, $method) {
61 $this->assertInstanceOf(Promise::class, $api->$method());
62 }
63
64 /**
65 * @group testdox
66 * @dataProvider provideAPI
67 * @depends testProvidesMethodForStandardHttpMethod
68 * @depends testReturnsPromiseOnMethodCallForStandardHttpMethod
69 */
70 function testProvidesMethodsForStandardHttpMethods($api) {
71 $this->assertTrue(true);
72 }
73 }