1. Go to this page and download the library: Download ciareis/bypass library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
ciareis / bypass example snippets
//Open a new Bypass server
$bypass = Bypass::open();
//Open a new Bypass using port 8081
$bypass = Bypass::open(8081);
use Ciareis\Bypass\Bypass;
//Json body
$body = '{"username": "john", "name": "John Smith", "total": 1250}';
//Route retuning the JSON body with HTTP Status 200
$bypass->addRoute(method: 'GET', uri: '/v1/demo/john', status: 200, body: $body);
//Instantiates a DemoService class
$service = new DemoService();
//Configure your service to access Bypass URL
$response = $service->setBaseUrl($bypass->getBaseUrl())
->getTotalByUser('john');
//Your test assertions here...
use Ciareis\Bypass\Bypass;
//Reads a PDF file
$demoFile = \file_get_contents('storage/pdfs/demo.pdf');
//File Route returning a binary file with HTTP Status 200
$bypass->addFileRoute(method: 'GET', uri: '/v1/myfile', status: 200, file: $demoFile);
//Instantiates a DemoService class
$service = new DemoService();
//Configure your service to access Bypass URL
$response = $service->setBaseUrl($bypass->getBaseUrl())
->getPdf();
//Your test assertions here...
use Ciareis\Bypass\Bypass;
use Ciareis\Bypass\Route;
//Create and serve routes
$bypass = Bypass::serve(
Route::ok(uri: '/v1/demo/john', body: ['username' => 'john', 'name' => 'John Smith', 'total' => 1250]), //method GET, status 200
Route::notFound(uri: '/v1/demo/wally') //method GET, status 404
);
//Instantiates a DemoService class
$service = new DemoService();
$service->setBaseUrl($bypass->getBaseUrl());
//Consumes the "OK (200)" route
$responseOk = $service->getTotalByUser('john'); //200 - OK with total => 1250
//Consumes the "Not Found (404)" route
$responseNotFound = $service->getTotalByUser('wally'); //404 - Not found
//Your test assertions here...
use Ciareis\Bypass\Bypass;
use Ciareis\Bypass\Route;
Bypass::serve(
Route::badRequest(uri: '/v1/users?filter=foo', body: ['error' => 'Filter parameter foo is not allowed.'], method: 'GET')
);
//Json body
$body = '{"username": "john", "name": "John Smith", "total": 1250}';
//Defines a route which must be called two times
$bypass->addRoute(method: 'GET', uri: '/v1/demo/john', status: 200, body: $body, times: 2);
//Instantiates a DemoService class
$service = new DemoService();
//Consumes the service using the Bypass URL
$response = $service->setBaseUrl($bypass->getBaseUrl())
->getTotalByUser('john');
$bypass->assertRoutes();
//Your test assertions here...
use Ciareis\Bypass\RouteNotCalledException;
try {
$bypass->assertRoutes();
} catch (RouteNotCalledException $e) {
// Handle the exception
// Message format: "Bypass expected route '/path' with method 'GET' to be called X times(s). Found Y calls(s) instead."
}
use Ciareis\Bypass\Bypass;
//Opens a new Bypass server
$bypass = Bypass::open();
//Retrieves the Bypass URL
$bypassUrl = $bypass->getBaseUrl();
//Json body
$body = '{"games":[{"id":1, "name":"game 1","points":25},{"id":2, "name":"game 2","points":10}],"is_active":true}';
//Defines a route
$bypass->addRoute(method: 'GET', uri: '/v1/score/johndoe', status: 200, body: $body);
//Instantiates a TotalScoreService
$service = new TotalScoreService();
//Configure your service to access Bypass URL
$response = $service
->setBaseUrl($bypassUrl) // set the URL to the Bypass URL
->getTotalScoreByUsername('johndoe'); //returns 35
//Pest PHP verifies that response is 35
expect($response)->toBe(35);
//PHPUnit verifies that response is 35
$this->assertSame($response, 35);
use Ciareis\Bypass\Bypass;
it('properly returns the total score by username', function () {
//Opens a new Bypass server
$bypass = Bypass::open();
//Json body
$body = '{"games":[{"id":1, "name":"game 1","points":25},{"id":2, "name":"game 2","points":10}],"is_active":true}';
//Defines a route
$bypass->addRoute(method: 'GET', uri: '/v1/score/johndoe', status: 200, body: $body);
//Configure your service to access Bypass URL
$service = new TotalScoreService();
$response = $service
->setBaseUrl($bypass->getBaseUrl())
->getTotalScoreByUsername('johndoe');
//Verifies that response is 35
expect($response)->toBe(35);
});
it('properly gets the logo', function () {
//Opens a new Bypass server
$bypass = Bypass::open();
//Reads the file
$filePath = 'docs/img/logo.png';
$file = \file_get_contents($filePath);
//Defines a route
$bypass->addFileRoute(method: 'GET', uri: $filePath, status: 200, file: $file);
//Configure your service to access Bypass URL
$service = new LogoService();
$response = $service->setBaseUrl($bypass->getBaseUrl())
->getLogo();
// asserts
expect($response)->toEqual($file);
});
use Ciareis\Bypass\Bypass;
class BypassTest extends TestCase
{
public function test_total_score_by_username(): void
{
//Opens a new Bypass server
$bypass = Bypass::open();
//Json body
$body = '{"games":[{"id":1,"name":"game 1","points":25},{"id":2,"name":"game 2","points":10}],"is_active":true}';
//Defines a route
$bypass->addRoute(method: 'GET', uri: '/v1/score/johndoe', status: 200, body: $body);
//Configure your service to access Bypass URL
$service = new TotalScoreService();
$response = $service
->setBaseUrl($bypass->getBaseUrl())
->getTotalScoreByUsername('johndoe');
//Verifies that response is 35
$this->assertSame(35, $response);
}
public function test_gets_logo(): void
{
//Opens a new Bypass server
$bypass = Bypass::open();
//Reads the file
$filePath = 'docs/img/logo.png';
$file = \file_get_contents($filePath);
//Defines a route
$bypass->addFileRoute(method: 'GET', uri: $filePath, status: 200, file: $file);
//Configure your service to access Bypass URL
$service = new LogoService();
$response = $service->setBaseUrl($bypass->getBaseUrl())
->getLogo();
$this->assertSame($response, $file);
}
}
use Ciareis\Bypass\Bypass;
$bypass = Bypass::open();
// Route must be called exactly 3 times
$bypass->addRoute(
method: 'GET',
uri: '/v1/api/data',
status: 200,
body: ['data' => 'example'],
times: 3
);
$service = new ApiService();
$service->setBaseUrl($bypass->getBaseUrl());
// Call the route 3 times
$service->fetchData();
$service->fetchData();
$service->fetchData();
// This will pass
$bypass->assertRoutes();
use Ciareis\Bypass\Bypass;
use Ciareis\Bypass\RouteNotCalledException;
$bypass = Bypass::open();
$bypass->addRoute(method: 'GET', uri: '/v1/api/data', status: 200);
$service = new ApiService();
$service->setBaseUrl($bypass->getBaseUrl());
// Don't call the route
try {
$bypass->assertRoutes();
$this->fail('Expected RouteNotCalledException');
} catch (RouteNotCalledException $e) {
$this->assertStringContainsString("expected route '/v1/api/data'", $e->getMessage());
}
// Use random port (recommended)
$bypass = Bypass::open();
// Or specify a port and handle errors
try {
$bypass = Bypass::open(8080);
} catch (RuntimeException $e) {
// Port might be in use, try another
$bypass = Bypass::open(8081);
}