<?php
use OtherCode\Rest\Exceptions\ConnectionException;
use OtherCode\Rest\Exceptions\RestException;
use OtherCode\Rest\Payloads\Headers;
use OtherCode\Rest\Payloads\Request;
use OtherCode\Rest\Payloads\Response;
use OtherCode\Rest\Rest;
use OtherCode\Rest\Core\Configuration;
use OtherCode\Rest\Core\Error;
use Tests\Rest\CoreTester;
test('instantiation and configuration', function () {
$api = new Rest();
expect($api)->toBeInstanceOf(Rest::class);
expect($api->configuration)->toBeInstanceOf(Configuration::class);
$api->configuration->url = "http://jsonplaceholder.typicode.com/";
$api->configuration->timeout = 10;
expect($api->configuration->toArray())->toBeArray();
/**
* There are 3 options configured by default, so if we configure
* two we have a total of 5
*/
expect($api->configuration->toArray())->toHaveCount(5);
return $api;
});
test('direct configuration', function (Rest $api) {
$api->addHeader('some_header', "some_value");
expect($api->configuration->httpheader)->toHaveCount(1);
$api->addHeaders(array(
'some_header_1' => 'some_value_1',
'some_header_2' => 'some_value_2',
));
expect($api->configuration->httpheader)->toHaveCount(3);
$api->removeHeader('some_header');
expect($api->configuration->httpheader)->toHaveCount(2);
$api->removeHeaders(array(
'some_header_1',
'some_header_2',
));
expect($api->configuration->httpheader)->toHaveCount(0);
})->depends('instantiation and configuration');
test('get method', function (Rest $api) {
$response = $api->get("posts/1");
expect($response)->toBeInstanceOf(Response::class);
expect($response->headers)->toBeInstanceOf(Headers::class);
expect($response->error)->toBeInstanceOf(Error::class);
expect($response->metadata)->toBeArray();
expect($response->code)->toBeInt();
expect($response->content_type)->toBeString();
expect($response->charset)->toBeString();
return $api;
})->depends('instantiation and configuration');
test('post method', function (Rest $api) {
$response = $api->post("posts", json_encode(array(
'title' => 'foo',
'body' => 'bar',
'userId' => 1
)));
expect($response)->toBeInstanceOf(Response::class);
expect($response->headers)->toBeInstanceOf(Headers::class);
expect($response->error)->toBeInstanceOf(Error::class);
expect($response->metadata)->toBeArray();
expect($response->code)->toBeInt();
expect($response->content_type)->toBeString();
expect($response->charset)->toBeString();
})->depends('instantiation and configuration');
test('put method', function (Rest $api) {
$response = $api->put("posts/1", json_encode(array(
'id' => 1,
'title' => 'foo',
'body' => 'bar',
'userId' => 1
)));
expect($response)->toBeInstanceOf(Response::class);
expect($response->headers)->toBeInstanceOf(Headers::class);
expect($response->error)->toBeInstanceOf(Error::class);
expect($response->metadata)->toBeArray();
expect($response->code)->toBeInt();
expect($response->content_type)->toBeString();
expect($response->charset)->toBeString();
})->depends('instantiation and configuration');
test('patch method', function (Rest $api) {
$response = $api->patch("posts/1", json_encode(array(
'body' => 'bar',
)));
expect($response)->toBeInstanceOf(Response::class);
expect($response->headers)->toBeInstanceOf(Headers::class);
expect($response->error)->toBeInstanceOf(Error::class);
expect($response->metadata)->toBeArray();
expect($response->code)->toBeInt();
expect($response->content_type)->toBeString();
expect($response->charset)->toBeString();
})->depends('instantiation and configuration');
test('delete method', function (Rest $api) {
$response = $api->delete("posts/1");
expect($response)->toBeInstanceOf(Response::class);
expect($response->headers)->toBeInstanceOf(Headers::class);
expect($response->error)->toBeInstanceOf(Error::class);
expect($response->metadata)->toBeArray();
expect($response->code)->toBeInt();
expect($response->content_type)->toBeString();
expect($response->charset)->toBeString();
})->depends('instantiation and configuration');
test('head method', function (Rest $api) {
$response = $api->head("posts");
expect($response)->toBeInstanceOf(Response::class);
expect($response->headers)->toBeInstanceOf(Headers::class);
expect($response->error)->toBeInstanceOf(Error::class);
expect($response->metadata)->toBeArray();
expect($response->code)->toBeInt();
expect($response->content_type)->toBeString();
expect($response->charset)->toBeString();
expect($response->body)->toBeNull();
})->depends('instantiation and configuration');
test('payloads', function (Rest $api) {
$payloads = $api->getPayloads();
expect($payloads['request'])->toBeInstanceOf(Request::class);
expect($payloads['response'])->toBeInstanceOf(Response::class);
})->depends('get method');
test('metadata', function (Rest $api) {
expect($api->getMetadata())->toBeArray();
})->depends('get method');
test('get error', function (Rest $api) {
expect($api->getError())->toBeInstanceOf(Error::class);
})->depends('instantiation and configuration');
test('exception', function (Rest $api) {
$api->configuration->url = "http://thisurlnotexists.com/";
$api->get("posts/1");
})->throws(ConnectionException::class)->depends('instantiation and configuration');
test('core call wrong verb', function () {
$core = new CoreTester();
$core->returnCall('wrong', 'http://jsonplaceholder.typicode.com/posts/1');
})->throws(RestException::class);
test('get raw core call', function () {
$core = new CoreTester();
$response = $core->returnCall('GET', 'http://jsonplaceholder.typicode.com/posts/1', 'param=value');
expect($response)->toBeInstanceOf(Response::class);
expect($response->headers)->toBeInstanceOf(Headers::class);
expect($response->error)->toBeInstanceOf(Error::class);
expect($response->metadata)->toBeArray();
expect($response->code)->toBeInt();
expect($response->content_type)->toBeString();
expect($response->charset)->toBeString();
});
|