Skip to content

Commit ce96196

Browse files
authored
[Tests] Add tests (#3)
1 parent dd5603a commit ce96196

11 files changed

+518
-2
lines changed

.mr-linter.php

+2
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515
'Feature',
1616
'Bug',
1717
'Docs',
18+
'Tests',
1819
]),
1920
TitleStartsWithAnyPrefixRule::make([
2021
'[Feature]',
2122
'[Bug]',
2223
'[Docs]',
24+
'[Tests]',
2325
]),
2426
],
2527
'credentials' => [

src/Support/Timer.php

+6-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
class Timer
66
{
7-
protected float $finish;
7+
protected ?float $finish;
8+
9+
protected ?float $duration;
810

911
public function __construct(protected float $started)
1012
{
@@ -18,6 +20,8 @@ public static function start(): self
1820

1921
public function finish(): float
2022
{
21-
return $this->finish = microtime(true) - $this->started;
23+
$this->finish = microtime(true);
24+
25+
return $this->duration = $this->finish - $this->started;
2226
}
2327
}

tests/TestCase.php

+5
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,9 @@ protected function assertHasNotes(MergeRequest $request, Rule $rule, bool $expec
2929
{
3030
self::assertEquals($expected, count($rule->lint($request)) > 0);
3131
}
32+
33+
protected function getPropertyValue(object $obj, string $prop): mixed
34+
{
35+
return (fn ($prop) => $this->$prop)->call($obj, $prop);
36+
}
3237
}

tests/Unit/Ci/System/GithubActionsTest.php

+31
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
use ArtARTs36\MergeRequestLinter\Ci\System\GithubActions;
66
use ArtARTs36\MergeRequestLinter\Environment\MapEnvironment;
77
use ArtARTs36\MergeRequestLinter\Support\Map;
8+
use ArtARTs36\MergeRequestLinter\Tests\Mocks\EmptyCredentials;
9+
use ArtARTs36\MergeRequestLinter\Tests\Mocks\NullClient;
810
use ArtARTs36\MergeRequestLinter\Tests\TestCase;
911

1012
final class GithubActionsTest extends TestCase
@@ -25,9 +27,38 @@ public function providerForTestIs(): array
2527

2628
/**
2729
* @dataProvider providerForTestIs
30+
* @covers \ArtARTs36\MergeRequestLinter\Ci\System\GithubActions::is
2831
*/
2932
public function testIs(array $env, bool $expected): void
3033
{
3134
self::assertEquals($expected, GithubActions::is(new MapEnvironment(new Map($env))));
3235
}
36+
37+
public function providerForTestIsMergeRequest(): array
38+
{
39+
return [
40+
[
41+
[],
42+
false,
43+
],
44+
[
45+
['GITHUB_REF_NAME' => '1/merge'],
46+
true,
47+
],
48+
];
49+
}
50+
51+
/**
52+
* @dataProvider providerForTestIsMergeRequest
53+
* @covers \ArtARTs36\MergeRequestLinter\Ci\System\GithubActions::isMergeRequest
54+
*/
55+
public function testIsMergeRequest(array $env, bool $expected): void
56+
{
57+
self::assertEquals($expected, $this->makeCi($env)->isMergeRequest());
58+
}
59+
60+
private function makeCi(array $env): GithubActions
61+
{
62+
return new GithubActions(new EmptyCredentials(), new MapEnvironment(new Map($env)), new NullClient());
63+
}
3364
}

tests/Unit/Ci/System/GitlabCiTest.php

+24
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,30 @@ public function testIs(array $env, bool $expected): void
3232
self::assertEquals($expected, GitlabCi::is($this->makeEnvironment($env)));
3333
}
3434

35+
public function providerForTestIsMergeRequest(): array
36+
{
37+
return [
38+
[
39+
[],
40+
false,
41+
],
42+
[
43+
['CI_MERGE_REQUEST_IID' => 1],
44+
true,
45+
],
46+
];
47+
}
48+
49+
/**
50+
* @dataProvider providerForTestIsMergeRequest
51+
* @covers \ArtARTs36\MergeRequestLinter\Ci\System\GitlabCi::isMergeRequest
52+
* @covers \ArtARTs36\MergeRequestLinter\Ci\System\GitlabCi::__construct
53+
*/
54+
public function testIsMergeRequest(array $env, bool $expected): void
55+
{
56+
self::assertEquals($expected, $this->makeCi($env)->isMergeRequest());
57+
}
58+
3559
private function makeCi(array $env): GitlabCi
3660
{
3761
return new GitlabCi(new EmptyCredentials(), $this->makeEnvironment($env), new NullClient());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<?php
2+
3+
namespace ArtARTs36\MergeRequestLinter\Tests\Unit\Environment;
4+
5+
use ArtARTs36\MergeRequestLinter\Environment\LocalEnvironment;
6+
use ArtARTs36\MergeRequestLinter\Exception\EnvironmentDataKeyNotFound;
7+
use ArtARTs36\MergeRequestLinter\Tests\TestCase;
8+
9+
final class LocalEnvironmentTest extends TestCase
10+
{
11+
public function providerForTestGetString(): array
12+
{
13+
return [
14+
[
15+
'local_environment_test_var_1=123',
16+
'local_environment_test_var_1',
17+
'123',
18+
],
19+
];
20+
}
21+
22+
/**
23+
* @dataProvider providerForTestGetString
24+
* @covers \ArtARTs36\MergeRequestLinter\Environment\LocalEnvironment::getString
25+
* @covers \ArtARTs36\MergeRequestLinter\Environment\LocalEnvironment::get
26+
* @covers \ArtARTs36\MergeRequestLinter\Environment\LocalEnvironment::doGet
27+
*/
28+
public function testGetString(string $assigment, string $key, string $expected): void
29+
{
30+
putenv($assigment);
31+
32+
self::assertEquals($expected, (new LocalEnvironment())->getString($key));
33+
}
34+
35+
/**
36+
* @covers \ArtARTs36\MergeRequestLinter\Environment\LocalEnvironment::getString
37+
* @covers \ArtARTs36\MergeRequestLinter\Environment\LocalEnvironment::get
38+
* @covers \ArtARTs36\MergeRequestLinter\Environment\LocalEnvironment::doGet
39+
*/
40+
public function testGetStringOnNotFound(): void
41+
{
42+
self::expectException(EnvironmentDataKeyNotFound::class);
43+
44+
(new LocalEnvironment())->getString('local_environment_test_var_not_found');
45+
}
46+
47+
public function providerForTestGetInt(): array
48+
{
49+
return [
50+
[
51+
'local_environment_test_var_2=123',
52+
'local_environment_test_var_2',
53+
123,
54+
],
55+
];
56+
}
57+
58+
/**
59+
* @dataProvider providerForTestGetInt
60+
* @covers \ArtARTs36\MergeRequestLinter\Environment\LocalEnvironment::getInt
61+
* @covers \ArtARTs36\MergeRequestLinter\Environment\LocalEnvironment::get
62+
* @covers \ArtARTs36\MergeRequestLinter\Environment\LocalEnvironment::doGet
63+
*/
64+
public function testGetInt(string $assigment, string $key, int $expected): void
65+
{
66+
putenv($assigment);
67+
68+
self::assertEquals($expected, (new LocalEnvironment())->getInt($key));
69+
}
70+
71+
public function providerForTestHas(): array
72+
{
73+
return [
74+
[
75+
"local_environment_test_var_3=123\nlocal_environment_test_var_4=str",
76+
'local_environment_test_var_3',
77+
true,
78+
],
79+
[
80+
"local_environment_test_var_3=123\nlocal_environment_test_var_4=str",
81+
'local_environment_test_var_not_exists',
82+
false,
83+
],
84+
];
85+
}
86+
87+
/**
88+
* @dataProvider providerForTestHas
89+
* @covers \ArtARTs36\MergeRequestLinter\Environment\LocalEnvironment::has
90+
*/
91+
public function testHas(string $assigment, string $key, bool $expected): void
92+
{
93+
putenv($assigment);
94+
95+
self::assertEquals($expected, (new LocalEnvironment())->has($key));
96+
}
97+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<?php
2+
3+
namespace ArtARTs36\MergeRequestLinter\Tests\Unit\Environment;
4+
5+
use ArtARTs36\MergeRequestLinter\Environment\MapEnvironment;
6+
use ArtARTs36\MergeRequestLinter\Exception\EnvironmentDataKeyNotFound;
7+
use ArtARTs36\MergeRequestLinter\Support\Map;
8+
use ArtARTs36\MergeRequestLinter\Tests\TestCase;
9+
10+
final class MapEnvironmentTest extends TestCase
11+
{
12+
public function providerForTestGetString(): array
13+
{
14+
return [
15+
[
16+
['var_1' => 123],
17+
'var_1',
18+
'123',
19+
],
20+
];
21+
}
22+
23+
/**
24+
* @dataProvider providerForTestGetString
25+
* @covers \ArtARTs36\MergeRequestLinter\Environment\MapEnvironment::getString
26+
* @covers \ArtARTs36\MergeRequestLinter\Environment\MapEnvironment::get
27+
* @covers \ArtARTs36\MergeRequestLinter\Environment\MapEnvironment::doGet
28+
* @covers \ArtARTs36\MergeRequestLinter\Environment\MapEnvironment::__construct
29+
*/
30+
public function testGetString(array $assigment, string $key, string $expected): void
31+
{
32+
self::assertEquals($expected, (new MapEnvironment(new Map($assigment)))->getString($key));
33+
}
34+
35+
/**
36+
* @covers \ArtARTs36\MergeRequestLinter\Environment\MapEnvironment::getString
37+
* @covers \ArtARTs36\MergeRequestLinter\Environment\MapEnvironment::get
38+
* @covers \ArtARTs36\MergeRequestLinter\Environment\MapEnvironment::doGet
39+
* @covers \ArtARTs36\MergeRequestLinter\Environment\MapEnvironment::__construct
40+
*/
41+
public function testGetStringOnNotFound(): void
42+
{
43+
self::expectException(EnvironmentDataKeyNotFound::class);
44+
45+
(new MapEnvironment(new Map([])))->getString('local_environment_test_var_not_found');
46+
}
47+
48+
public function providerForTestGetInt(): array
49+
{
50+
return [
51+
[
52+
['var_2' => 123],
53+
'var_2',
54+
123,
55+
],
56+
];
57+
}
58+
59+
/**
60+
* @dataProvider providerForTestGetInt
61+
* @covers \ArtARTs36\MergeRequestLinter\Environment\MapEnvironment::getInt
62+
* @covers \ArtARTs36\MergeRequestLinter\Environment\MapEnvironment::get
63+
* @covers \ArtARTs36\MergeRequestLinter\Environment\MapEnvironment::doGet
64+
* @covers \ArtARTs36\MergeRequestLinter\Environment\MapEnvironment::__construct
65+
*/
66+
public function testGetInt(array $assigment, string $key, int $expected): void
67+
{
68+
self::assertEquals($expected, (new MapEnvironment(new Map($assigment)))->getInt($key));
69+
}
70+
71+
public function providerForTestHas(): array
72+
{
73+
return [
74+
[
75+
['var_3' => 123, 'var_4' => 'str'],
76+
'var_3',
77+
true,
78+
],
79+
[
80+
['var_3' => 123, 'var_4' => 'str'],
81+
'var_not_exists',
82+
false,
83+
],
84+
];
85+
}
86+
87+
/**
88+
* @dataProvider providerForTestHas
89+
* @covers \ArtARTs36\MergeRequestLinter\Environment\MapEnvironment::has
90+
* @covers \ArtARTs36\MergeRequestLinter\Environment\MapEnvironment::get
91+
* @covers \ArtARTs36\MergeRequestLinter\Environment\MapEnvironment::__construct
92+
*/
93+
public function testHas(array $assigment, string $key, bool $expected): void
94+
{
95+
self::assertEquals($expected, (new MapEnvironment(new Map($assigment)))->has($key));
96+
}
97+
}
+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace ArtARTs36\MergeRequestLinter\Tests\Unit\Note;
4+
5+
use ArtARTs36\MergeRequestLinter\Note\DefinitionNote;
6+
use ArtARTs36\MergeRequestLinter\Rule\Definition;
7+
use ArtARTs36\MergeRequestLinter\Tests\TestCase;
8+
9+
final class DefinitionNoteTest extends TestCase
10+
{
11+
/**
12+
* @covers \ArtARTs36\MergeRequestLinter\Note\DefinitionNote::__toString
13+
* @covers \ArtARTs36\MergeRequestLinter\Note\DefinitionNote::getDescription
14+
* @covers \ArtARTs36\MergeRequestLinter\Note\DefinitionNote::__construct
15+
*/
16+
public function testGetDescription(): void
17+
{
18+
self::assertEquals('desc', new DefinitionNote(new Definition('desc')));
19+
}
20+
}

0 commit comments

Comments
 (0)