diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 79da4e7..3714233 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -1,32 +1,33 @@ -name: Tests +name: Run Tests on: [push, pull_request] jobs: test: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} strategy: fail-fast: true matrix: - php: [8.2, 8.1, '8.0'] - laravel: [10.*, 9.*, 8.*] - dependency-version: [prefer-lowest, prefer-stable] + os: [ubuntu-latest] + php: [8.1, 8.2, 8.3] + laravel: [9.*, 10.*, 11.*] + stability: [prefer-lowest, prefer-stable] include: - - laravel: 10.* - testbench: 8.* - - laravel: 9.* - testbench: 7.* - - laravel: 8.* - testbench: ^6.23 + - laravel: 9.* + testbench: ^7.40 + - laravel: 10.* + testbench: ^8.21 + - laravel: 11.* + testbench: ^9.0 exclude: - - laravel: 10.* - php: '8.0' + - php: 8.1 + laravel: 11.* - name: PHP${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.dependency-version }} + name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.stability }} - ${{ matrix.os }} steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -42,8 +43,8 @@ jobs: - name: Install dependencies run: | - composer require "laravel/framework:${{ matrix.laravel }}" "orchestra/testbench:${{ matrix.testbench }}" "nesbot/carbon:>=2.62.1" --no-interaction --no-update - composer update --${{ matrix.dependency-version }} --prefer-dist --no-interaction + composer require "laravel/framework:${{ matrix.laravel }}" "orchestra/testbench:${{ matrix.testbench }}" --no-interaction --no-update + composer update --${{ matrix.stability }} --prefer-dist --no-interaction - name: Execute tests - run: vendor/bin/phpunit + run: vendor/bin/pest diff --git a/.gitignore b/.gitignore index 612c601..8b7ef35 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ /vendor composer.lock -.phpunit.result.cache diff --git a/LICENSE b/LICENSE index bb6a2b2..39f6fdf 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Webnuvola +Copyright (c) 2024 Webnuvola Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 990de0d..8b948a5 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Laravel active [![Latest Version on Packagist](https://img.shields.io/packagist/v/webnuvola/laravel-active.svg?style=flat-square)](https://packagist.org/packages/webnuvola/laravel-active) -[![GitHub Tests Action Status](https://img.shields.io/github/workflow/status/webnuvola/laravel-active/Tests?label=tests)](https://github.com/webnuvola/laravel-active/actions?query=workflow%3ATests+branch%3Amain) +[![GitHub Tests Action Status](https://img.shields.io/github/actions/workflow/status/Webnuvola/laravel-active/run-tests.yml?branch=main)](https://github.com/Webnuvola/laravel-active/actions/workflows/run-tests.yml?query=branch%3Amain) [![Total Downloads](https://img.shields.io/packagist/dt/webnuvola/laravel-active.svg?style=flat-square)](https://packagist.org/packages/webnuvola/laravel-active) Helper class for Laravel applications to get active class based on current route. diff --git a/composer.json b/composer.json index 2edc9c1..efd4809 100644 --- a/composer.json +++ b/composer.json @@ -11,12 +11,13 @@ } ], "require": { - "php": "^8.0", - "illuminate/http": "^8.0|^9.0|^10.0" + "php": "^8.1", + "illuminate/http": "^9.0||^10.0||^11.0" }, "require-dev": { - "orchestra/testbench": "^6.23|^7.0|^8.0", - "phpunit/phpunit": "^9.5.27" + "orchestra/testbench": "^7.0||^8.0||^9.0", + "pestphp/pest": "^2.34", + "pestphp/pest-plugin-laravel": "^2.3" }, "autoload": { "files": ["src/helpers.php"] @@ -27,12 +28,15 @@ } }, "scripts": { - "test": "phpunit --testdox" + "test": "pest" }, "config": { "optimize-autoloader": true, "preferred-install": "dist", - "sort-packages": true + "sort-packages": true, + "allow-plugins": { + "pestphp/pest-plugin": true + } }, "minimum-stability": "dev", "prefer-stable": true diff --git a/phpunit.xml.dist b/phpunit.xml similarity index 55% rename from phpunit.xml.dist rename to phpunit.xml index 681388e..7d0904f 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml @@ -1,17 +1,18 @@ - - - ./src - - - - tests + + ./tests + + + ./app + ./src + + diff --git a/tests/ActiveTest.php b/tests/ActiveTest.php deleted file mode 100644 index beeada4..0000000 --- a/tests/ActiveTest.php +++ /dev/null @@ -1,138 +0,0 @@ -assertEquals('active', active_class(true)); - $this->assertEquals('', active_class(false)); - - $this->assertEquals('current', active_class(true, 'current')); - $this->assertEquals('', active_class(false, 'current')); - - $this->assertEquals('active-class', active_class(true, 'active-class', 'inactive-class')); - $this->assertEquals('inactive-class', active_class(false, 'active-class', 'inactive-class')); - - $this->assertEquals('active', active_class(new Request())); - $this->assertEquals('', active_class(null)); - - $this->assertEquals('active', active_class(['foo'])); - $this->assertEquals('', active_class([])); - - $this->assertEquals('active', active_class(1)); - $this->assertEquals('', active_class(0)); - } - - public function testIfUriFunction(): void - { - $this->app->instance('request', Request::create('/test-uri')); - - $this->assertTrue(if_uri('test-uri')); - $this->assertFalse(if_uri('another-uri')); - - $this->assertTrue(if_uri(['another-uri', 'test-uri'])); - $this->assertFalse(if_uri(['another-uri', 'test'])); - - $this->assertTrue(if_uri('another-uri', 'test-uri')); - $this->assertFalse(if_uri('another-uri', 'test')); - } - - public function testIfUriPatternFunction(): void - { - $this->app->instance('request', Request::create('/test-uri-pattern')); - - $this->assertTrue(if_uri_pattern('test-uri-pattern')); - $this->assertFalse(if_uri_pattern('another-uri-pattern')); - - $this->assertTrue(if_uri_pattern('test-uri*')); - $this->assertFalse(if_uri_pattern('another-uri*')); - - $this->assertTrue(if_uri_pattern(['another-uri-pattern', 'test-uri-pattern'])); - $this->assertFalse(if_uri_pattern(['another-uri-pattern', 'test-uri'])); - - $this->assertTrue(if_uri_pattern(['another-uri*', 'test-uri*'])); - $this->assertFalse(if_uri_pattern(['another-uri*', 'test-pattern*'])); - - $this->assertTrue(if_uri_pattern('another-uri-pattern', 'test-uri-pattern')); - $this->assertFalse(if_uri_pattern('another-uri-pattern', 'test-uri')); - - $this->assertTrue(if_uri_pattern('another-uri*', 'test-uri*')); - $this->assertFalse(if_uri_pattern('another-uri*', 'test-pattern*')); - } - - public function testIfRouteFunction(): void - { - $request = Request::create('/test-route'); - $request->setRouteResolver(function () use ($request) { - $route = new Route('GET', '/test-route', ['as' => 'test.route']); - $route->bind($request); - - return $route; - }); - - $this->app->instance('request', $request); - - $this->assertTrue(if_route('test.route')); - $this->assertFalse(if_route('another.route')); - - $this->assertTrue(if_route(['another.route', 'test.route'])); - $this->assertFalse(if_route(['another.route', 'test'])); - - $this->assertTrue(if_route('another.route', 'test.route')); - $this->assertFalse(if_route('another.route', 'test')); - } - - public function testIfRoutePatternFunction(): void - { - $request = Request::create('/test-route-pattern'); - $request->setRouteResolver(function () use ($request) { - $route = new Route('GET', '/test-route-pattern', ['as' => 'test.route.pattern']); - $route->bind($request); - - return $route; - }); - - $this->app->instance('request', $request); - - $this->assertTrue(if_route_pattern('test.route.pattern')); - $this->assertFalse(if_route_pattern('another.route.pattern')); - - $this->assertTrue(if_route_pattern('test.route*')); - $this->assertFalse(if_route_pattern('another.route*')); - - $this->assertTrue(if_route_pattern(['another.route.pattern', 'test.route.pattern'])); - $this->assertFalse(if_route_pattern(['another.route.pattern', 'test.route'])); - - $this->assertTrue(if_route_pattern(['another.route*', 'test.route*'])); - $this->assertFalse(if_route_pattern(['another.route*', 'test.pattern*'])); - - $this->assertTrue(if_route_pattern('another.route.pattern', 'test.route.pattern')); - $this->assertFalse(if_route_pattern('another.route.pattern', 'test.route')); - - $this->assertTrue(if_route_pattern('another.route*', 'test.route*')); - $this->assertFalse(if_route_pattern('another.route*', 'test.pattern*')); - } - - public function testIfRouteParamFunction(): void - { - $request = Request::create('/test-route-param'); - $request->setRouteResolver(function () use ($request) { - $route = new Route('GET', '/test-route-param', ['as' => 'test.route.param']); - $route->bind($request); - $route->setParameter('foo', 'bar'); - - return $route; - }); - - $this->app->instance('request', $request); - - $this->assertTrue(if_route_param('foo', 'bar')); - $this->assertFalse(if_route_param('foo', 'baz')); - } -} diff --git a/tests/Pest.php b/tests/Pest.php new file mode 100644 index 0000000..5095b83 --- /dev/null +++ b/tests/Pest.php @@ -0,0 +1,47 @@ +in('Unit'); + +/* +|-------------------------------------------------------------------------- +| Expectations +|-------------------------------------------------------------------------- +| +| When you're writing tests, you often need to check that values meet certain conditions. The +| "expect()" function gives you access to a set of "expectations" methods that you can use +| to assert different things. Of course, you may extend the Expectation API at any time. +| +*/ + +expect()->extend('toBeOne', function () { + return $this->toBe(1); +}); + +/* +|-------------------------------------------------------------------------- +| Functions +|-------------------------------------------------------------------------- +| +| While Pest is very powerful out-of-the-box, you may have some testing code specific to your +| project that you don't want to repeat in every file. Here you can also expose helpers as +| global functions to help you to reduce the number of lines of code in your test files. +| +*/ + +function something() +{ + // .. +} diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 0000000..4c65846 --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,10 @@ +toBe('active') + ->and(active_class(false))->toBe('') + + ->and(active_class(true, 'current'))->toBe('current') + ->and(active_class(false, 'current'))->toBe('') + + ->and(active_class(true, 'active-class', 'inactive-class'))->toBe('active-class') + ->and(active_class(false, 'active-class', 'inactive-class'))->toBe('inactive-class'); +}); + +test('if_uri function', function () { + $this->app->instance('request', Request::create('/test-uri')); + + expect(if_uri('test-uri'))->toBeTrue() + ->and(if_uri('another-uri'))->toBeFalse() + + ->and(if_uri(['another-uri', 'test-uri']))->toBeTrue() + ->and(if_uri(['another-uri', 'test']))->toBeFalse() + + ->and(if_uri('another-uri', 'test-uri'))->toBeTrue() + ->and(if_uri('another-uri', 'test'))->toBeFalse(); +}); + +test('if_uri_pattern function', function () { + $this->app->instance('request', Request::create('/test-uri-pattern')); + + expect(if_uri_pattern('test-uri-pattern'))->toBeTrue() + ->and(if_uri_pattern('another-uri-pattern'))->toBeFalse() + + ->and(if_uri_pattern('test-uri*'))->toBeTrue() + ->and(if_uri_pattern('another-uri*'))->toBeFalse() + + ->and(if_uri_pattern(['another-uri-pattern', 'test-uri-pattern']))->toBeTrue() + ->and(if_uri_pattern(['another-uri-pattern', 'test-uri']))->toBeFalse() + + ->and(if_uri_pattern(['another-uri*', 'test-uri*']))->toBeTrue() + ->and(if_uri_pattern(['another-uri*', 'test-pattern*']))->toBeFalse() + + ->and(if_uri_pattern('another-uri-pattern', 'test-uri-pattern'))->toBeTrue() + ->and(if_uri_pattern('another-uri-pattern', 'test-uri'))->toBeFalse() + + ->and(if_uri_pattern('another-uri*', 'test-uri*'))->toBeTrue() + ->and(if_uri_pattern('another-uri*', 'test-pattern*'))->toBeFalse(); +}); + +test('if_route function', function () { + $request = Request::create('/test-route'); + + $request->setRouteResolver(static function () use ($request): Route { + $route = new Route('GET', '/test-route', ['as' => 'test.route']); + $route->bind($request); + + return $route; + }); + + $this->app->instance('request', $request); + + expect(if_route('test.route'))->toBeTrue() + ->and(if_route('another.route'))->toBeFalse() + + ->and(if_route(['another.route', 'test.route']))->toBeTrue() + ->and(if_route(['another.route', 'test']))->toBeFalse() + + ->and(if_route('another.route', 'test.route'))->toBeTrue() + ->and(if_route('another.route', 'test'))->toBeFalse(); +}); + +test('if_route_pattern function', function () { + $request = Request::create('/test-route-pattern'); + + $request->setRouteResolver(static function () use ($request): Route { + $route = new Route('GET', '/test-route-pattern', ['as' => 'test.route.pattern']); + $route->bind($request); + + return $route; + }); + + $this->app->instance('request', $request); + + expect(if_route_pattern('test.route.pattern'))->toBeTrue() + ->and(if_route_pattern('another.route.pattern'))->toBeFalse() + + ->and(if_route_pattern('test.route*'))->toBeTrue() + ->and(if_route_pattern('another.route*'))->toBeFalse() + + ->and(if_route_pattern(['another.route.pattern', 'test.route.pattern']))->toBeTrue() + ->and(if_route_pattern(['another.route.pattern', 'test.route']))->toBeFalse() + + ->and(if_route_pattern(['another.route*', 'test.route*']))->toBeTrue() + ->and(if_route_pattern(['another.route*', 'test.pattern*']))->toBeFalse() + + ->and(if_route_pattern('another.route.pattern', 'test.route.pattern'))->toBeTrue() + ->and(if_route_pattern('another.route.pattern', 'test.route'))->toBeFalse() + + ->and(if_route_pattern('another.route*', 'test.route*'))->toBeTrue() + ->and(if_route_pattern('another.route*', 'test.pattern*'))->toBeFalse(); +}); + +test('if_route_param function', function () { + $request = Request::create('/test-route-param'); + + $request->setRouteResolver(static function () use ($request): Route { + $route = new Route('GET', '/test-route-param', ['as' => 'test.route.param']); + $route->bind($request); + $route->setParameter('foo', 'bar'); + + return $route; + }); + + $this->app->instance('request', $request); + + expect(if_route_param('foo', 'bar'))->toBeTrue() + ->and(if_route_param('foo', 'baz'))->toBeFalse(); +});