Skip to content

Commit 5c85bca

Browse files
authored
Add Code Coverage (#1)
* Add Code Coverage Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com> * wip Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com> * wip Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com> * wip Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com> * wip Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com> * wip Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com> * wip Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com> * wip Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com> * wip Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com> * wip Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com> * wip Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com> * wip Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com> * wip Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com> * wip Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com> --------- Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>
1 parent c7227d2 commit 5c85bca

File tree

9 files changed

+165
-9
lines changed

9 files changed

+165
-9
lines changed

.github/workflows/coveralls.yaml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
name: coveralls
2+
3+
on:
4+
push:
5+
pull_request:
6+
7+
jobs:
8+
tests:
9+
runs-on: "ubuntu-latest"
10+
continue-on-error: ${{ matrix.experimental }}
11+
strategy:
12+
matrix:
13+
php: ['8.0']
14+
experimental:
15+
- false
16+
17+
name: PHP:${{ matrix.php }} Code Coverage
18+
19+
steps:
20+
- name: Checkout code
21+
uses: actions/checkout@v4
22+
23+
- name: Setup PHP
24+
uses: shivammathur/setup-php@v2
25+
with:
26+
php-version: ${{ matrix.php }}
27+
extensions: dom, curl, libxml, mbstring, zip, pcntl, sqlite3, pdo_sqlite, bcmath, fileinfo
28+
coverage: xdebug
29+
30+
- name: Install dependencies
31+
uses: "ramsey/composer-install@v3"
32+
with:
33+
dependency-versions: "highest"
34+
composer-options: "--prefer-dist --prefer-stable"
35+
36+
- name: Installed dependencies
37+
run: |
38+
composer show -D
39+
40+
- name: Execute tests
41+
run: vendor/bin/pest --coverage --coverage-clover build/logs/clover.xml
42+
43+
- name: Upload coverage results to Coveralls
44+
env:
45+
COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
46+
run: |
47+
composer global require php-coveralls/php-coveralls
48+
php-coveralls --coverage_clover=build/logs/clover.xml -v

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
},
3737
"require-dev": {
3838
"laravel/pint": "^1.4",
39+
"mockery/mockery": "^1.5.1",
3940
"pestphp/pest": "^1.0|^2.0|^3.0",
4041
"phpstan/phpstan": "^2.1"
4142
},

src/ChromeVersionFinder.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ public function latestVersion(): string
9191
* Detect the installed Chrome/Chromium version.
9292
*
9393
* @return array<string, mixed>
94+
*
95+
* @codeCoverageIgnore
9496
*/
9597
public function installedChromeVersion(string $operatingSystem, ?string $directory = null): array
9698
{
@@ -138,6 +140,8 @@ public function installedChromeVersion(string $operatingSystem, ?string $directo
138140
* Detect the installed ChromeDriver version.
139141
*
140142
* @return array<string, mixed>|null
143+
*
144+
* @codeCoverageIgnore
141145
*/
142146
public function installedChromeDriverVersion(string $operatingSystem, string $directory): ?array
143147
{

src/OperatingSystem.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,7 @@ public static function onWindows(): bool
150150
*/
151151
public static function onMac(): bool
152152
{
153-
if (\defined('PHP_OS_FAMILY')) {
154-
return PHP_OS_FAMILY === 'Darwin';
155-
}
156-
157-
return PHP_OS === 'Darwin';
153+
return \defined('PHP_OS_FAMILY') ? PHP_OS_FAMILY === 'Darwin' : PHP_OS === 'Darwin';
158154
}
159155

160156
/**
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
3+
use GuzzleHttp\Client;
4+
use GuzzleHttp\Psr7\Response;
5+
use Mockery as m;
6+
use Orchestra\DuskUpdaterApi\ChromeVersionFinder;
7+
use Orchestra\DuskUpdaterApi\HttpClient;
8+
9+
use function Orchestra\DuskUpdaterApi\join_paths;
10+
11+
beforeEach(function () {
12+
$client = m::mock(Client::class);
13+
14+
HttpClient::$instance = $client;
15+
16+
$client->shouldReceive('get')
17+
->with('https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json', ['verify' => true])
18+
->andReturn(new Response(body: file_get_contents(join_paths(__DIR__, 'snapshots', 'last-known-good-versions-with-downloads.json'))));
19+
$client->shouldReceive('get')
20+
->with('https://googlechromelabs.github.io/chrome-for-testing/latest-versions-per-milestone-with-downloads.json', ['verify' => true])
21+
->andReturn(new Response(body: file_get_contents(join_paths(__DIR__, 'snapshots', 'latest-versions-per-milestone-with-downloads.json'))));
22+
});
23+
24+
afterEach(function () {
25+
HttpClient::flushState();
26+
});
27+
28+
it('can get version', function (?string $given, string $version) {
29+
$finder = new ChromeVersionFinder;
30+
31+
expect($finder->findVersionUrl($given))->toBe($version);
32+
})->with([
33+
[null, '133.0.6943.98'],
34+
['133', '133.0.6943.98'],
35+
]);
36+
37+
it('can get version when given version is not a valid `ctype_digit()`', function (?string $given, string $version) {
38+
$finder = new ChromeVersionFinder;
39+
40+
expect($finder->findVersionUrl($given))->toBe($version);
41+
})->with([
42+
['133a', '133a'],
43+
]);
44+
45+
it('can get legacy version (43-69)', function (int $given, string $version) {
46+
$finder = new ChromeVersionFinder;
47+
48+
expect($finder->findVersionUrl($given))->toBe($version);
49+
})->with([
50+
[43, '2.20'],
51+
[50, '2.22'],
52+
[60, '2.33'],
53+
[69, '2.44'],
54+
]);
55+
56+
it('can get previous version (70-114)', function (int $given, string $version) {
57+
HttpClient::$instance->shouldReceive('get')
58+
->once()
59+
->with(\sprintf('https://chromedriver.storage.googleapis.com/LATEST_RELEASE_%d', $given), ['verify' => true])
60+
->andReturn(new Response(body: (string) $given));
61+
62+
$finder = new ChromeVersionFinder;
63+
64+
expect($finder->findVersionUrl($given))->toBe($version);
65+
})->with([
66+
[70, '70'],
67+
[80, '80'],
68+
[90, '90'],
69+
[100, '100'],
70+
[114, '114'],
71+
]);
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
use GuzzleHttp\Client;
4+
use GuzzleHttp\Psr7\Response;
5+
use Mockery as m;
6+
use Orchestra\DuskUpdaterApi\ChromeVersionFinder;
7+
use Orchestra\DuskUpdaterApi\HttpClient;
8+
9+
use function Orchestra\DuskUpdaterApi\join_paths;
10+
11+
beforeEach(function () {
12+
$client = m::mock(Client::class);
13+
14+
HttpClient::$instance = $client;
15+
16+
$client->shouldReceive('get')
17+
->with('https://googlechromelabs.github.io/chrome-for-testing/latest-versions-per-milestone-with-downloads.json', ['verify' => true])
18+
->andReturn(new Response(body: file_get_contents(join_paths(__DIR__, 'snapshots', 'latest-versions-per-milestone-with-downloads.json'))));
19+
});
20+
21+
afterEach(function () {
22+
HttpClient::flushState();
23+
});
24+
25+
it('can resolve legacy download url', function (string|int $version, string $url) {
26+
$finder = new ChromeVersionFinder;
27+
28+
expect($finder->resolveChromeDriverDownloadUrl($version, 'linux'))->toBe($url);
29+
})->with([
30+
['2.44', 'https://chromedriver.storage.googleapis.com/2.44/chromedriver_linux64.zip'],
31+
['114', 'https://chromedriver.storage.googleapis.com/114/chromedriver_linux64.zip'],
32+
['133.0.6943.98', 'https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/linux64/chromedriver-linux64.zip'],
33+
]);
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"timestamp":"2025-02-15T10:09:36.234Z","channels":{"Stable":{"channel":"Stable","version":"133.0.6943.98","revision":"1402768","downloads":{"chrome":[{"platform":"linux64","url":"https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/linux64/chrome-linux64.zip"},{"platform":"mac-arm64","url":"https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/mac-arm64/chrome-mac-arm64.zip"},{"platform":"mac-x64","url":"https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/mac-x64/chrome-mac-x64.zip"},{"platform":"win32","url":"https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/win32/chrome-win32.zip"},{"platform":"win64","url":"https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/win64/chrome-win64.zip"}],"chromedriver":[{"platform":"linux64","url":"https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/linux64/chromedriver-linux64.zip"},{"platform":"mac-arm64","url":"https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/mac-arm64/chromedriver-mac-arm64.zip"},{"platform":"mac-x64","url":"https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/mac-x64/chromedriver-mac-x64.zip"},{"platform":"win32","url":"https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/win32/chromedriver-win32.zip"},{"platform":"win64","url":"https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/win64/chromedriver-win64.zip"}],"chrome-headless-shell":[{"platform":"linux64","url":"https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/linux64/chrome-headless-shell-linux64.zip"},{"platform":"mac-arm64","url":"https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/mac-arm64/chrome-headless-shell-mac-arm64.zip"},{"platform":"mac-x64","url":"https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/mac-x64/chrome-headless-shell-mac-x64.zip"},{"platform":"win32","url":"https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/win32/chrome-headless-shell-win32.zip"},{"platform":"win64","url":"https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.98/win64/chrome-headless-shell-win64.zip"}]}},"Beta":{"channel":"Beta","version":"134.0.6998.15","revision":"1415337","downloads":{"chrome":[{"platform":"linux64","url":"https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.15/linux64/chrome-linux64.zip"},{"platform":"mac-arm64","url":"https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.15/mac-arm64/chrome-mac-arm64.zip"},{"platform":"mac-x64","url":"https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.15/mac-x64/chrome-mac-x64.zip"},{"platform":"win32","url":"https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.15/win32/chrome-win32.zip"},{"platform":"win64","url":"https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.15/win64/chrome-win64.zip"}],"chromedriver":[{"platform":"linux64","url":"https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.15/linux64/chromedriver-linux64.zip"},{"platform":"mac-arm64","url":"https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.15/mac-arm64/chromedriver-mac-arm64.zip"},{"platform":"mac-x64","url":"https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.15/mac-x64/chromedriver-mac-x64.zip"},{"platform":"win32","url":"https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.15/win32/chromedriver-win32.zip"},{"platform":"win64","url":"https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.15/win64/chromedriver-win64.zip"}],"chrome-headless-shell":[{"platform":"linux64","url":"https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.15/linux64/chrome-headless-shell-linux64.zip"},{"platform":"mac-arm64","url":"https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.15/mac-arm64/chrome-headless-shell-mac-arm64.zip"},{"platform":"mac-x64","url":"https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.15/mac-x64/chrome-headless-shell-mac-x64.zip"},{"platform":"win32","url":"https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.15/win32/chrome-headless-shell-win32.zip"},{"platform":"win64","url":"https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.15/win64/chrome-headless-shell-win64.zip"}]}},"Dev":{"channel":"Dev","version":"135.0.6999.2","revision":"1415814","downloads":{"chrome":[{"platform":"linux64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.6999.2/linux64/chrome-linux64.zip"},{"platform":"mac-arm64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.6999.2/mac-arm64/chrome-mac-arm64.zip"},{"platform":"mac-x64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.6999.2/mac-x64/chrome-mac-x64.zip"},{"platform":"win32","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.6999.2/win32/chrome-win32.zip"},{"platform":"win64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.6999.2/win64/chrome-win64.zip"}],"chromedriver":[{"platform":"linux64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.6999.2/linux64/chromedriver-linux64.zip"},{"platform":"mac-arm64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.6999.2/mac-arm64/chromedriver-mac-arm64.zip"},{"platform":"mac-x64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.6999.2/mac-x64/chromedriver-mac-x64.zip"},{"platform":"win32","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.6999.2/win32/chromedriver-win32.zip"},{"platform":"win64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.6999.2/win64/chromedriver-win64.zip"}],"chrome-headless-shell":[{"platform":"linux64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.6999.2/linux64/chrome-headless-shell-linux64.zip"},{"platform":"mac-arm64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.6999.2/mac-arm64/chrome-headless-shell-mac-arm64.zip"},{"platform":"mac-x64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.6999.2/mac-x64/chrome-headless-shell-mac-x64.zip"},{"platform":"win32","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.6999.2/win32/chrome-headless-shell-win32.zip"},{"platform":"win64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.6999.2/win64/chrome-headless-shell-win64.zip"}]}},"Canary":{"channel":"Canary","version":"135.0.7019.0","revision":"1420774","downloads":{"chrome":[{"platform":"linux64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.7019.0/linux64/chrome-linux64.zip"},{"platform":"mac-arm64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.7019.0/mac-arm64/chrome-mac-arm64.zip"},{"platform":"mac-x64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.7019.0/mac-x64/chrome-mac-x64.zip"},{"platform":"win32","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.7019.0/win32/chrome-win32.zip"},{"platform":"win64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.7019.0/win64/chrome-win64.zip"}],"chromedriver":[{"platform":"linux64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.7019.0/linux64/chromedriver-linux64.zip"},{"platform":"mac-arm64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.7019.0/mac-arm64/chromedriver-mac-arm64.zip"},{"platform":"mac-x64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.7019.0/mac-x64/chromedriver-mac-x64.zip"},{"platform":"win32","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.7019.0/win32/chromedriver-win32.zip"},{"platform":"win64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.7019.0/win64/chromedriver-win64.zip"}],"chrome-headless-shell":[{"platform":"linux64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.7019.0/linux64/chrome-headless-shell-linux64.zip"},{"platform":"mac-arm64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.7019.0/mac-arm64/chrome-headless-shell-mac-arm64.zip"},{"platform":"mac-x64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.7019.0/mac-x64/chrome-headless-shell-mac-x64.zip"},{"platform":"win32","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.7019.0/win32/chrome-headless-shell-win32.zip"},{"platform":"win64","url":"https://storage.googleapis.com/chrome-for-testing-public/135.0.7019.0/win64/chrome-headless-shell-win64.zip"}]}}}}

tests/Unit/ChromeVersionFinder/snapshots/latest-versions-per-milestone-with-downloads.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

tests/Unit/FunctionsTest.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
use function Orchestra\DuskUpdaterApi\join_paths;
44

55
it('can resolve path using `join_paths()`', function () {
6-
$this->assertSame(
7-
realpath(__DIR__.'/FunctionsTest.php'),
8-
join_paths(__DIR__, 'FunctionsTest.php'),
9-
);
6+
expect(realpath(__DIR__.'/FunctionsTest.php'))
7+
->toBe(join_paths(__DIR__, 'FunctionsTest.php'));
8+
9+
expect(realpath(__DIR__.'/FunctionsTest.php'))
10+
->toBe(join_paths(__DIR__, '', 'FunctionsTest.php'));
1011
});

0 commit comments

Comments
 (0)