You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
2.6 KiB
103 lines
2.6 KiB
<?php
|
|
/**
|
|
* Created by PhpStorm.
|
|
* User: x
|
|
* Date: 2018/12/10
|
|
* Time: 12:35 AM
|
|
*/
|
|
|
|
namespace Tests\Feature;
|
|
|
|
|
|
use GuzzleHttp\Handler\MockHandler;
|
|
use GuzzleHttp\Psr7\Response;
|
|
use QL\QueryList;
|
|
use Tests\TestCaseBase;
|
|
|
|
class HttpTest extends TestCaseBase
|
|
{
|
|
protected $urls;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$this->urls = [
|
|
'http://httpbin.org/get?name=php',
|
|
'http://httpbin.org/get?name=golang',
|
|
'http://httpbin.org/get?name=c++',
|
|
'http://httpbin.org/get?name=java'
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
*/
|
|
public function can_post_json_data()
|
|
{
|
|
$mock = new MockHandler([new Response()]);
|
|
$data = [
|
|
'name' => 'foo'
|
|
];
|
|
QueryList::postJson('http://foo.com',$data,[
|
|
'handler' => $mock
|
|
]);
|
|
$this->assertEquals((string)$mock->getLastRequest()->getBody(),json_encode($data));
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
*/
|
|
public function concurrent_requests_base_use()
|
|
{
|
|
$urls = $this->urls;
|
|
QueryList::getInstance()
|
|
->multiGet($urls)
|
|
->success(function(QueryList $ql,Response $response, $index) use($urls){
|
|
$body = json_decode((string)$response->getBody(),true);
|
|
$this->assertEquals($urls[$index],$body['url']);
|
|
})->send();
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
*/
|
|
public function concurrent_requests_advanced_use()
|
|
{
|
|
$ua = 'QueryList/4.0';
|
|
|
|
$errorUrl = 'http://web-site-not-exist.com';
|
|
$urls = array_merge($this->urls,[$errorUrl]);
|
|
|
|
QueryList::rules([])
|
|
->multiGet($urls)
|
|
->concurrency(2)
|
|
->withOptions([
|
|
'timeout' => 60
|
|
])
|
|
->withHeaders([
|
|
'User-Agent' => $ua
|
|
])
|
|
->success(function (QueryList $ql, Response $response, $index) use($ua){
|
|
$body = json_decode((string)$response->getBody(),true);
|
|
$this->assertEquals($ua,$body['headers']['User-Agent']);
|
|
})
|
|
->error(function (QueryList $ql, $reason, $index) use($urls,$errorUrl){
|
|
$this->assertEquals($urls[$index],$errorUrl);
|
|
})
|
|
->send();
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
*/
|
|
public function request_with_cache()
|
|
{
|
|
$url = $this->urls[0];
|
|
$data = QueryList::get($url,null,[
|
|
'cache' => sys_get_temp_dir(),
|
|
'cache_ttl' => 600
|
|
])->getHtml();
|
|
$data = json_decode($data,true);
|
|
$this->assertEquals($url,$data['url']);
|
|
|
|
}
|
|
}
|