Skip to content

Various tools and accessories for your PHP VCR.

License

Notifications You must be signed in to change notification settings

Justintime50/vcr-accessories-php

VCR Accessories

Build Status Coverage Status Version Licence

Various tools and accessories for your PHP VCR.

When working with VCR solutions, I'm often finding I need a few extra "accessories" to get them working the way I want. This package includes the following:

  • Cassette scrubbing (eg: sensitive data)
  • Expire and warn or error on stale cassettes
  • Setup a cassette directory
  • Setup and teardown VCR tests

Install

# Install in your project
composer require --dev justintime50/vcr-accessories

# Install locally
composer install

Usage

bootstrap.php

use allejo\VCR\VCRCleaner;
use VCR\VCR;
use VCRAccessories\CassetteScrubber;
use VCRAccessories\CassetteSetup;

const CASSETTE_DIR = 'tests/cassettes';
CassetteSetup::setupCassetteDirectory(CASSETTE_DIR);

VCR::configure()->setCassettePath(CASSETTE_DIR)
    ->setStorage('yaml')
    ->setMode('once')
    ->setWhiteList(['vendor/guzzle']);

const REDACTED_STRING = '<REDACTED>';

// SCRUBBERS must be a multidimensional array where the first index of each nested array is the key
// you want to scrub and the second index is what you want it to be replaced with before persisting to disk
define('SCRUBBERS', [
    ['origin', REDACTED_STRING],
]);

VCRCleaner::enable([
    'response' => [
        'bodyScrubbers' => [
            function ($responseBody) {
                $responseBodyJson = json_decode($responseBody, true);
                $responseBodyEncoded = CassetteScrubber::scrubCassette(SCRUBBERS, $responseBodyJson);

                // Re-encode the data so we can properly store it in the cassette
                return json_encode($responseBodyEncoded);
            }
        ],
    ],
]);

Test File

use VCRAccessories\CassetteSetup;

public static function setUpBeforeClass(): void
{
    CassetteSetup::setupVcrTests();
}

public static function tearDownAfterClass(): void
{
    CassetteSetup::teardownVcrTests();
}

public function myTest()
{
    CassetteSetup::setupCassette(
        cassetteName: 'nameOfCassette.yaml', 
        expirationDays: 180, 
        expirationError: true
    );

    // Your test here
}

Development

# Install dependencies
composer install

# Lint
composer lint
composer fix
composer phpstan

# Test
composer test
composer coverage

About

Various tools and accessories for your PHP VCR.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

 

Contributors

Languages