/** @test */ public function itCanBeTraversed() { $requestParameter = $this->prophesize(Parameter::class); $requestParameter->getLocation()->willReturn('query'); $requestParameter->getName()->willReturn('foo'); $requestParameters = new Parameters([$requestParameter->reveal()]); assertThat($requestParameters, isInstanceOf(\Traversable::class)); assertThat($requestParameters, containsOnlyInstancesOf(Parameter::class)); }
/** @test */ public function itCanCreateRequestParameters() { $schemaFile = 'file://' . __DIR__ . '/../fixtures/petstore.json'; $factory = new SwaggerSchemaFactory(); $schema = $factory->createSchema($schemaFile); $requestParameters = $schema->getRequestDefinition('addPet')->getRequestParameters(); assertThat($requestParameters, isInstanceOf(Parameters::class)); assertThat($requestParameters->getBody(), isInstanceOf(Parameter::class)); assertThat($requestParameters->getBodySchema(), isType('object')); $requestParameters = $schema->getRequestDefinition('findPetById')->getRequestParameters(); assertThat($requestParameters->getPath(), containsOnlyInstancesOf(Parameter::class)); $requestParameters = $schema->getRequestDefinition('findPets')->getRequestParameters(); assertThat($requestParameters->getQuery(), containsOnlyInstancesOf(Parameter::class)); assertThat($requestParameters->getQueryParametersSchema(), isType('object')); $requestParameters = $schema->getRequestDefinition('updatePet')->getRequestParameters(); assertThat($requestParameters->getHeaders(), containsOnlyInstancesOf(Parameter::class)); assertThat($requestParameters->getHeadersSchema(), isType('object')); }
/** @test */ public function itValidateAResponse() { $expectedViolations = [new ConstraintViolation('id', 'String value found, but an integer is required', 'type', 'body'), new ConstraintViolation('X-Required-Header', 'The property X-Required-Header is required', 'required', 'header')]; $headersSchema = $this->toObject(['type' => 'object', 'required' => ['X-Required-Header'], 'properties' => ['X-Required-Header' => ['type' => 'string']]]); $bodySchema = $this->toObject(['type' => 'object', 'properties' => ['id' => ['type' => 'integer', 'format' => 'int32']]]); $response = $this->prophesize(ResponseInterface::class); $response->getStatusCode()->willReturn('200'); $response->getBody()->willReturn('{"id": "invalid"}'); $response->getHeaderLine('Content-Type')->willReturn('application/json'); $response->getHeaders()->willReturn([]); $responseDefinition = $this->prophesize(RequestDefinition::class); $responseDefinition->getContentTypes()->willReturn(['application/json']); $responseDefinition->hasBodySchema()->willReturn(true); $responseDefinition->getBodySchema()->willReturn($bodySchema); $responseDefinition->hasHeadersSchema()->willReturn(true); $responseDefinition->getHeadersSchema()->willReturn($headersSchema); $definition = $this->prophesize(RequestDefinition::class); $definition->getResponseDefinition('200')->willReturn($responseDefinition); $this->messageValidator->validateResponse($response->reveal(), $definition->reveal()); assertThat($this->messageValidator->hasViolations(), isTrue()); assertThat($this->messageValidator->getViolations(), containsOnlyInstancesOf(ConstraintViolation::class)); assertThat($this->messageValidator->getViolations(), equalTo($expectedViolations)); }