92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
<?php
 | 
						|
namespace GuzzleHttp\Tests\Command\Guzzle\RequestLocation;
 | 
						|
 | 
						|
use GuzzleHttp\Command\Command;
 | 
						|
use GuzzleHttp\Command\Guzzle\Operation;
 | 
						|
use GuzzleHttp\Command\Guzzle\Parameter;
 | 
						|
use GuzzleHttp\Command\Guzzle\RequestLocation\JsonLocation;
 | 
						|
use GuzzleHttp\Psr7\Request;
 | 
						|
 | 
						|
/**
 | 
						|
 * @covers \GuzzleHttp\Command\Guzzle\RequestLocation\JsonLocation
 | 
						|
 * @covers \GuzzleHttp\Command\Guzzle\RequestLocation\AbstractLocation
 | 
						|
 */
 | 
						|
class JsonLocationTest extends \PHPUnit_Framework_TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @group RequestLocation
 | 
						|
     */
 | 
						|
    public function testVisitsLocation()
 | 
						|
    {
 | 
						|
        $location = new JsonLocation('json');
 | 
						|
        $command = new Command('foo', ['foo' => 'bar']);
 | 
						|
        $request = new Request('POST', 'http://httbin.org');
 | 
						|
        $param = new Parameter(['name' => 'foo']);
 | 
						|
        $location->visit($command, $request, $param);
 | 
						|
        $operation = new Operation();
 | 
						|
        $request = $location->after($command, $request, $operation);
 | 
						|
        $this->assertEquals('{"foo":"bar"}', $request->getBody()->getContents());
 | 
						|
        $this->assertArraySubset([0 => 'application/json'], $request->getHeader('Content-Type'));
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @group RequestLocation
 | 
						|
     */
 | 
						|
    public function testVisitsAdditionalProperties()
 | 
						|
    {
 | 
						|
        $location = new JsonLocation('json', 'foo');
 | 
						|
        $command = new Command('foo', ['foo' => 'bar']);
 | 
						|
        $command['baz'] = ['bam' => [1]];
 | 
						|
        $request = new Request('POST', 'http://httbin.org');
 | 
						|
        $param = new Parameter(['name' => 'foo']);
 | 
						|
        $location->visit($command, $request, $param);
 | 
						|
        $operation = new Operation([
 | 
						|
            'additionalParameters' => [
 | 
						|
                'location' => 'json'
 | 
						|
            ]
 | 
						|
        ]);
 | 
						|
        $request = $location->after($command, $request, $operation);
 | 
						|
        $this->assertEquals('{"foo":"bar","baz":{"bam":[1]}}', $request->getBody()->getContents());
 | 
						|
        $this->assertEquals([0 => 'foo'], $request->getHeader('Content-Type'));
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @group RequestLocation
 | 
						|
     */
 | 
						|
    public function testVisitsNestedLocation()
 | 
						|
    {
 | 
						|
        $location = new JsonLocation('json');
 | 
						|
        $command = new Command('foo', ['foo' => 'bar']);
 | 
						|
        $request = new Request('POST', 'http://httbin.org');
 | 
						|
        $param = new Parameter([
 | 
						|
            'name' => 'foo',
 | 
						|
            'type' => 'object',
 | 
						|
            'properties' => [
 | 
						|
                'baz' => [
 | 
						|
                    'type' => 'array',
 | 
						|
                    'items' => [
 | 
						|
                        'type' => 'string',
 | 
						|
                        'filters' => ['strtoupper']
 | 
						|
                    ]
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            'additionalProperties' => [
 | 
						|
                'type' => 'array',
 | 
						|
                'items' => [
 | 
						|
                    'type' => 'string',
 | 
						|
                    'filters' => ['strtolower']
 | 
						|
                ]
 | 
						|
            ]
 | 
						|
        ]);
 | 
						|
        $command['foo'] = [
 | 
						|
            'baz' => ['a', 'b'],
 | 
						|
            'bam' => ['A', 'B'],
 | 
						|
        ];
 | 
						|
        $location->visit($command, $request, $param);
 | 
						|
        $operation = new Operation();
 | 
						|
        $request = $location->after($command, $request, $operation);
 | 
						|
        $this->assertEquals('{"foo":{"baz":["A","B"],"bam":["a","b"]}}', (string) $request->getBody()->getContents());
 | 
						|
        $this->assertEquals([0 => 'application/json'], $request->getHeader('Content-Type'));
 | 
						|
    }
 | 
						|
}
 |