Open Monograph Press  3.3.0
ResourceIteratorTest.php
1 <?php
2 
4 
7 
13 {
14  public function testDescribesEvents()
15  {
16  $this->assertInternalType('array', ResourceIterator::getAllEvents());
17  }
18 
20  {
21  $ri = $this->getMockForAbstractClass('Guzzle\\Service\\Resource\\ResourceIterator', array(
22  $this->getServiceBuilder()->get('mock')->getCommand('iterable_command'),
23  array(
24  'limit' => 10,
25  'page_size' => 3
26  )
27  ), 'MockIterator');
28 
29  $this->assertEquals(false, $ri->getNextToken());
30  $this->assertEquals(false, $ri->current());
31  }
32 
34  {
35  // Queue up an array of responses for iterating
36  $this->getServer()->flush();
37  $this->getServer()->enqueue(array(
38  "HTTP/1.1 200 OK\r\nContent-Length: 52\r\n\r\n{ \"next_token\": \"g\", \"resources\": [\"d\", \"e\", \"f\"] }",
39  "HTTP/1.1 200 OK\r\nContent-Length: 52\r\n\r\n{ \"next_token\": \"j\", \"resources\": [\"g\", \"h\", \"i\"] }",
40  "HTTP/1.1 200 OK\r\nContent-Length: 41\r\n\r\n{ \"next_token\": \"\", \"resources\": [\"j\"] }"
41  ));
42 
43  // Create a new resource iterator using the IterableCommand mock
44  $ri = new MockCommandIterator($this->getServiceBuilder()->get('mock')->getCommand('iterable_command'), array(
45  'page_size' => 3
46  ));
47 
48  // Ensure that no requests have been sent yet
49  $this->assertEquals(0, count($this->getServer()->getReceivedRequests(false)));
50 
51  //$this->assertEquals(array('d', 'e', 'f', 'g', 'h', 'i', 'j'), $ri->toArray());
52  $ri->toArray();
53  $requests = $this->getServer()->getReceivedRequests(true);
54  $this->assertEquals(3, count($requests));
55 
56  $this->assertEquals(3, $requests[0]->getQuery()->get('page_size'));
57  $this->assertEquals(3, $requests[1]->getQuery()->get('page_size'));
58  $this->assertEquals(3, $requests[2]->getQuery()->get('page_size'));
59 
60  // Reset and resend
61  $this->getServer()->flush();
62  $this->getServer()->enqueue(array(
63  "HTTP/1.1 200 OK\r\nContent-Length: 52\r\n\r\n{ \"next_token\": \"g\", \"resources\": [\"d\", \"e\", \"f\"] }",
64  "HTTP/1.1 200 OK\r\nContent-Length: 52\r\n\r\n{ \"next_token\": \"j\", \"resources\": [\"g\", \"h\", \"i\"] }",
65  "HTTP/1.1 200 OK\r\nContent-Length: 41\r\n\r\n{ \"next_token\": \"\", \"resources\": [\"j\"] }",
66  ));
67 
68  $d = array();
69  foreach ($ri as $data) {
70  $d[] = $data;
71  }
72  $this->assertEquals(array('d', 'e', 'f', 'g', 'h', 'i', 'j'), $d);
73  }
74 
75  public function testCalculatesPageSize()
76  {
77  $this->getServer()->flush();
78  $this->getServer()->enqueue(array(
79  "HTTP/1.1 200 OK\r\nContent-Length: 52\r\n\r\n{ \"next_token\": \"g\", \"resources\": [\"d\", \"e\", \"f\"] }",
80  "HTTP/1.1 200 OK\r\nContent-Length: 52\r\n\r\n{ \"next_token\": \"j\", \"resources\": [\"g\", \"h\", \"i\"] }",
81  "HTTP/1.1 200 OK\r\nContent-Length: 52\r\n\r\n{ \"next_token\": \"j\", \"resources\": [\"j\", \"k\"] }"
82  ));
83 
84  $ri = new MockCommandIterator($this->getServiceBuilder()->get('mock')->getCommand('iterable_command'), array(
85  'page_size' => 3,
86  'limit' => 7
87  ));
88 
89  $this->assertEquals(array('d', 'e', 'f', 'g', 'h', 'i', 'j'), $ri->toArray());
90  $requests = $this->getServer()->getReceivedRequests(true);
91  $this->assertEquals(3, count($requests));
92  $this->assertEquals(3, $requests[0]->getQuery()->get('page_size'));
93  $this->assertEquals(3, $requests[1]->getQuery()->get('page_size'));
94  $this->assertEquals(1, $requests[2]->getQuery()->get('page_size'));
95  }
96 
97  public function testUseAsArray()
98  {
99  $this->getServer()->flush();
100  $this->getServer()->enqueue(array(
101  "HTTP/1.1 200 OK\r\nContent-Length: 52\r\n\r\n{ \"next_token\": \"g\", \"resources\": [\"d\", \"e\", \"f\"] }",
102  "HTTP/1.1 200 OK\r\nContent-Length: 52\r\n\r\n{ \"next_token\": \"\", \"resources\": [\"g\", \"h\", \"i\"] }"
103  ));
104 
105  $ri = new MockCommandIterator($this->getServiceBuilder()->get('mock')->getCommand('iterable_command'));
106 
107  // Ensure that the key is never < 0
108  $this->assertEquals(0, $ri->key());
109  $this->assertEquals(0, count($ri));
110 
111  // Ensure that the iterator can be used as KVP array
112  $data = array();
113  foreach ($ri as $key => $value) {
114  $data[$key] = $value;
115  }
116 
117  // Ensure that the iterate is countable
118  $this->assertEquals(6, count($ri));
119  $this->assertEquals(array('d', 'e', 'f', 'g', 'h', 'i'), $data);
120  }
121 
123  {
124  $this->getServer()->flush();
125  $this->getServer()->enqueue(array(
126  "HTTP/1.1 200 OK\r\n\r\n{ \"next_token\": \"g\", \"resources\": [\"d\", \"e\", \"f\"] }",
127  "HTTP/1.1 200 OK\r\n\r\n{ \"next_token\": \"\", \"resources\": [] }"
128  ));
129 
130  $ri = new MockCommandIterator($this->getServiceBuilder()->get('mock')->getCommand('iterable_command'));
131 
132  // Ensure that the iterator can be used as KVP array
133  $data = $ri->toArray();
134 
135  // Ensure that the iterate is countable
136  $this->assertEquals(3, count($ri));
137  $this->assertEquals(array('d', 'e', 'f'), $data);
138 
139  $this->assertEquals(2, $ri->getRequestCount());
140  }
141 
142  public function testHoldsDataOptions()
143  {
144  $ri = new MockCommandIterator($this->getServiceBuilder()->get('mock')->getCommand('iterable_command'));
145  $this->assertNull($ri->get('foo'));
146  $this->assertSame($ri, $ri->set('foo', 'bar'));
147  $this->assertEquals('bar', $ri->get('foo'));
148  }
149 
151  {
152  $this->getServer()->flush();
153  $this->getServer()->enqueue(array(
154  "HTTP/1.1 200 OK\r\n\r\n{ \"next_token\": \"\", \"resources\": [\"d\", \"e\", \"f\"] }",
155  "HTTP/1.1 200 OK\r\n\r\n{ \"next_token\": \"\", \"resources\": [\"d\", \"e\", \"f\"] }",
156  "HTTP/1.1 200 OK\r\n\r\n{ \"next_token\": \"\", \"resources\": [\"d\", \"e\", \"f\"] }"
157  ));
158 
159  $ri = new MockCommandIterator($this->getServiceBuilder()->get('mock')->getCommand('iterable_command'));
160  $ri->toArray();
161  $this->assertNotEmpty($this->readAttribute($ri, 'resources'));
162 
163  $ri->setLimit(10);
164  $this->assertEmpty($this->readAttribute($ri, 'resources'));
165 
166  $ri->toArray();
167  $this->assertNotEmpty($this->readAttribute($ri, 'resources'));
168  $ri->setPageSize(10);
169  $this->assertEmpty($this->readAttribute($ri, 'resources'));
170  }
171 
173  {
174  $this->getServer()->flush();
175  $this->getServer()->enqueue(array(
176  "HTTP/1.1 200 OK\r\n\r\n{ \"next_token\": \"\", \"resources\": [\"d\", \"e\", \"f\"] }"
177  ));
178  $ri = new MockCommandIterator($this->getServiceBuilder()->get('mock')->getCommand('iterable_command'));
179  $a = new \Guzzle\Iterator\AppendIterator();
180  $a->append($ri);
181  $results = iterator_to_array($a, false);
182  $this->assertEquals(4, $ri->calledNext);
183  }
184 }
Guzzle\Tests\GuzzleTestCase\getServiceBuilder
static getServiceBuilder()
Definition: GuzzleTestCase.php:65
Guzzle\Service\Resource\ResourceIterator\getAllEvents
static getAllEvents()
Definition: ResourceIterator.php:76
Guzzle\Tests\Service\Resource\ResourceIteratorTest\testUseAsArray
testUseAsArray()
Definition: ResourceIteratorTest.php:97
Guzzle\Tests\GuzzleTestCase
Definition: GuzzleTestCase.php:22
Guzzle\Tests\Service\Resource\ResourceIteratorTest\testSettingLimitOrPageSizeClearsData
testSettingLimitOrPageSizeClearsData()
Definition: ResourceIteratorTest.php:150
Guzzle\Tests\Service\Resource\ResourceIteratorTest\testDescribesEvents
testDescribesEvents()
Definition: ResourceIteratorTest.php:14
Guzzle\Tests\Service\Resource
Definition: CompositeResourceIteratorFactoryTest.php:3
Guzzle\Tests\Service\Resource\ResourceIteratorTest\testCalculatesPageSize
testCalculatesPageSize()
Definition: ResourceIteratorTest.php:75
Guzzle\Service\Resource\ResourceIterator
Definition: ResourceIterator.php:8
Guzzle\Tests\Service\Resource\ResourceIteratorTest
Definition: ResourceIteratorTest.php:12
Guzzle\Tests\Service\Resource\ResourceIteratorTest\testWorksWithCustomAppendIterator
testWorksWithCustomAppendIterator()
Definition: ResourceIteratorTest.php:172
Guzzle\Tests\Service\Resource\ResourceIteratorTest\testConstructorConfiguresDefaults
testConstructorConfiguresDefaults()
Definition: ResourceIteratorTest.php:19
Guzzle\Tests\Service\Resource\ResourceIteratorTest\testSendsRequestsForNextSetOfResources
testSendsRequestsForNextSetOfResources()
Definition: ResourceIteratorTest.php:33
Guzzle\Tests\Service\Mock\Model\MockCommandIterator
Definition: MockCommandIterator.php:7
Guzzle\Tests\Service\Resource\ResourceIteratorTest\testBailsWhenSendReturnsNoResults
testBailsWhenSendReturnsNoResults()
Definition: ResourceIteratorTest.php:122
Guzzle\Tests\GuzzleTestCase\getServer
static getServer()
Definition: GuzzleTestCase.php:36
Guzzle\Tests\Service\Resource\ResourceIteratorTest\testHoldsDataOptions
testHoldsDataOptions()
Definition: ResourceIteratorTest.php:142