Git Product home page Git Product logo

dusk-time-travel's Introduction



A dusk browser extension package for time traveling

Latest Version on Packagist Tests Total Downloads

This package feeds the hunger for Dusk test cases having time modified requests. All PR's are welcome since it's still not mature enough, and might not work as expected. But I think it's easy to understand what this package does.

Installation

You can install the package via composer:

composer require paksuco/dusk-time-travel

There is a crucial step to do after installing the package to let the browser have time travel methods, you need to extend your browser class from Paksuco/DuskTimeTravel/Browser class instead of the stock Laravel/Dusk/Browser. This class acts like a middle man between your test cases and the Laravel Dusk browser.

To do this, add this code to your DuskTestCase.php file:

    use \Paksuco\DuskTimeTravel\Browser as TimeTravelBrowser;

    class DuskTestCase extends BaseTestCase {

        protected function newBrowser($driver)
        {
            return new TimeTravelBrowser($driver);
        }

    }

Usage

Since you've changed your browser class, you've gained access to two new Dusk browser methods: travelTo($time) and travelBack. As you can easily understand from the names, first travels through time, uses a Illuminate/Support/Carbon instance as the time input, and second brings it back.

Note: As it's using cookies to deliver the modified time to the browser, only the next requests will be affected with the changed time, the current page won't be having the date modified.

For example:

// test case
$this->browse(function ($browser) {

    // on the homepage, you will see today's date as the current date.
    $browser->visit("home")
        ->travelTo(Carbon::tomorrow());

    // but, like this, you'll see tomorrows date as the current date
    $browser->travelTo(Carbon::tomorrow())
        ->visit("home");


    // an example use case, do something in yesterdays date and expect it to see today.
    $browser->travelTo(Carbon::yesterday())->visit($itemDetailsPage)
        ->doStuffInYesterdaysDate()
        ->travelBack()->visit($itemDetailsPage)
        ->assertSee(Carbon::yesterday());
});

Both of them will use tomorrows date as the next request (AJAX or Redirect, doesn't matter).

After you've recreated the instance, or manually reset the date back to current by using travelBack, the date server uses will revert to normal.

Testing

A test case is included, but since it's a Dusk extension, the tests are run on a Laravel instance having Dusk installed. You can test the plugin the same way .github/workflows/run-tests.yml workflow does.

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.

dusk-time-travel's People

Contributors

tpaksu avatar

Stargazers

 avatar

Watchers

 avatar

Forkers

eselt shane-smith

dusk-time-travel's Issues

Support for PHP 8.x

Currently this package is not installable via composer on a PHP 8.0 or 8.1 environment.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.