View source
<?php
namespace Drupal\Tests\subrequests\Unit\Blueprint;
use Drupal\Core\Cache\CacheableResponse;
use Drupal\subrequests\Blueprint\BlueprintManager;
use Drupal\subrequests\Normalizer\JsonBlueprintDenormalizer;
use Drupal\subrequests\Normalizer\MultiresponseNormalizer;
use Drupal\subrequests\SubrequestsTree;
use Drupal\Tests\UnitTestCase;
use Prophecy\Argument;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Serializer\Encoder\JsonDecode;
use Symfony\Component\Serializer\Serializer;
class BlueprintManagerTest extends UnitTestCase {
protected $sut;
protected function setUp() {
parent::setUp();
$denormalizer = $this
->prophesize(JsonBlueprintDenormalizer::class);
$denormalizer
->denormalize(Argument::type('array'), SubrequestsTree::class, 'json', [])
->willReturn(new SubrequestsTree());
$denormalizer
->supportsDenormalization(Argument::type('array'), SubrequestsTree::class, 'json')
->willReturn([])
->willReturn(TRUE);
$denormalizer
->supportsDenormalization(Argument::type('array'), SubrequestsTree::class, 'json', Argument::type('array'))
->willReturn([])
->willReturn(TRUE);
$denormalizer
->setSerializer(Argument::any())
->willReturn(NULL);
$normalizer = $this
->prophesize(MultiresponseNormalizer::class);
$normalizer
->normalize(Argument::type('array'), 'multipart-related', Argument::type('array'))
->willReturn([
'content' => 'Booh!',
'headers' => [
'head' => 'Ha!',
],
]);
$normalizer
->supportsNormalization(Argument::type('array'), 'multipart-related')
->willReturn([])
->willReturn(TRUE);
$normalizer
->supportsNormalization(Argument::type('array'), 'multipart-related', Argument::type('array'))
->willReturn([])
->willReturn(TRUE);
$serializer = new Serializer([
$denormalizer
->reveal(),
$normalizer
->reveal(),
], [
new JsonDecode(),
]);
$this->sut = new BlueprintManager($serializer);
}
public function testParse() {
$parsed = $this->sut
->parse('[]', Request::create('foo'));
$this
->assertInstanceOf(SubrequestsTree::class, $parsed);
$this
->assertSame('/foo', $parsed
->getMasterRequest()
->getPathInfo());
}
public function testCombineResponses() {
$responses = [
Response::create('foo', 200, [
'lorem' => 'ipsum',
'Content-Type' => 'sparrow',
]),
Response::create('bar', 201, [
'dolor' => 'sid',
'Content-Type' => 'sparrow',
]),
];
$combined = $this->sut
->combineResponses($responses, 'multipart-related');
$this
->assertInstanceOf(CacheableResponse::class, $combined);
$this
->assertSame('Ha!', $combined->headers
->get('head'));
$this
->assertSame('Booh!', $combined
->getContent());
}
}