Skip to content

Commit 97a375b

Browse files
wip
1 parent fd6d79e commit 97a375b

File tree

2 files changed

+65
-180
lines changed

2 files changed

+65
-180
lines changed

tests/ConfigTest.php

Lines changed: 53 additions & 161 deletions
Original file line numberDiff line numberDiff line change
@@ -11,194 +11,86 @@
1111
->toBe('https://www.google.com/recaptcha/api.js?render=test-site-key');
1212
});
1313

14-
it('returns true when recaptcha is enabled with valid keys', function () {
15-
config()->set('google-recaptcha-v3.enabled', true);
14+
it('handles enabled config values correctly', function (mixed $value, bool $expected) {
15+
config()->set('google-recaptcha-v3.enabled', $value);
1616
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
1717
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
1818

19-
expect(Config::isEnabled())->toBeTrue();
20-
});
21-
22-
it('returns false when recaptcha is explicitly disabled', function () {
23-
config()->set('google-recaptcha-v3.enabled', false);
24-
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
25-
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
26-
27-
expect(Config::isEnabled())->toBeFalse();
28-
});
29-
30-
it('returns false when enabled is null', function () {
31-
config()->set('google-recaptcha-v3.enabled', null);
32-
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
33-
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
34-
35-
expect(Config::isEnabled())->toBeFalse();
36-
});
37-
38-
it('returns false when site key is missing', function () {
39-
config()->set('google-recaptcha-v3.enabled', true);
40-
config()->set('google-recaptcha-v3.site_key', null);
41-
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
42-
43-
expect(Config::isEnabled())->toBeFalse();
44-
});
45-
46-
it('returns false when site key is empty string', function () {
19+
expect(Config::isEnabled())->toBe($expected);
20+
})->with([
21+
'boolean true' => [true, true],
22+
'boolean false' => [false, false],
23+
'string true' => ['true', true],
24+
'string false' => ['false', false],
25+
'string 1' => ['1', true],
26+
'string 0' => ['0', false],
27+
'integer 1' => [1, true],
28+
'integer 0' => [0, false],
29+
'null' => [null, false],
30+
'empty string' => ['', false],
31+
]);
32+
33+
it('returns false when site key is missing', function (?string $siteKey) {
4734
config()->set('google-recaptcha-v3.enabled', true);
48-
config()->set('google-recaptcha-v3.site_key', '');
35+
config()->set('google-recaptcha-v3.site_key', $siteKey);
4936
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
5037

5138
expect(Config::isEnabled())->toBeFalse();
52-
});
39+
})->with([
40+
'null' => [null],
41+
'empty string' => [''],
42+
]);
5343

54-
it('returns false when secret key is missing', function () {
44+
it('returns false when secret key is missing', function (?string $secretKey) {
5545
config()->set('google-recaptcha-v3.enabled', true);
5646
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
57-
config()->set('google-recaptcha-v3.secret_key', null);
47+
config()->set('google-recaptcha-v3.secret_key', $secretKey);
5848

5949
expect(Config::isEnabled())->toBeFalse();
60-
});
61-
62-
it('returns false when secret key is empty string', function () {
63-
config()->set('google-recaptcha-v3.enabled', true);
64-
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
65-
config()->set('google-recaptcha-v3.secret_key', '');
66-
67-
expect(Config::isEnabled())->toBeFalse();
68-
});
50+
})->with([
51+
'null' => [null],
52+
'empty string' => [''],
53+
]);
6954

7055
it('returns site key when configured', function () {
7156
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
7257

7358
expect(Config::getSiteKey())->toBe('test-site-key');
7459
});
7560

76-
it('returns null when site key is not configured', function () {
77-
config()->set('google-recaptcha-v3.site_key', null);
61+
it('returns null when site key is blank', function (?string $value) {
62+
config()->set('google-recaptcha-v3.site_key', $value);
7863

7964
expect(Config::getSiteKey())->toBeNull();
80-
});
81-
82-
it('returns null when site key is empty string', function () {
83-
config()->set('google-recaptcha-v3.site_key', '');
84-
85-
expect(Config::getSiteKey())->toBeNull();
86-
});
65+
})->with([
66+
'null' => [null],
67+
'empty string' => [''],
68+
]);
8769

8870
it('returns secret key when configured', function () {
8971
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
9072

9173
expect(Config::getSecretKey())->toBe('test-secret-key');
9274
});
9375

94-
it('returns null when secret key is not configured', function () {
95-
config()->set('google-recaptcha-v3.secret_key', null);
96-
97-
expect(Config::getSecretKey())->toBeNull();
98-
});
99-
100-
it('returns null when secret key is empty string', function () {
101-
config()->set('google-recaptcha-v3.secret_key', '');
76+
it('returns null when secret key is blank', function (?string $value) {
77+
config()->set('google-recaptcha-v3.secret_key', $value);
10278

10379
expect(Config::getSecretKey())->toBeNull();
104-
});
105-
106-
it('returns score threshold from config', function () {
107-
config()->set('google-recaptcha-v3.score_threshold', 0.7);
108-
109-
expect(Config::getScoreThreshold())->toBe(0.7);
110-
});
111-
112-
it('returns default score threshold when not configured', function () {
113-
config()->set('google-recaptcha-v3.score_threshold', null);
114-
115-
expect(Config::getScoreThreshold())->toBe(0.5);
116-
});
117-
118-
it('returns default score threshold when empty string', function () {
119-
config()->set('google-recaptcha-v3.score_threshold', '');
120-
121-
expect(Config::getScoreThreshold())->toBe(0.5);
122-
});
123-
124-
it('converts string score threshold to float', function () {
125-
config()->set('google-recaptcha-v3.score_threshold', '0.8');
126-
127-
expect(Config::getScoreThreshold())->toBe(0.8);
128-
});
129-
130-
it('returns score threshold of 1.0', function () {
131-
config()->set('google-recaptcha-v3.score_threshold', 1.0);
132-
133-
expect(Config::getScoreThreshold())->toBe(1.0);
134-
});
135-
136-
it('returns score threshold of 0.0', function () {
137-
config()->set('google-recaptcha-v3.score_threshold', 0.0);
138-
139-
expect(Config::getScoreThreshold())->toBe(0.0);
140-
});
141-
142-
it('handles enabled config as string value', function () {
143-
config()->set('google-recaptcha-v3.enabled', '1');
144-
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
145-
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
146-
147-
expect(Config::isEnabled())->toBeTrue();
148-
});
149-
150-
it('handles enabled config as empty string', function () {
151-
config()->set('google-recaptcha-v3.enabled', '');
152-
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
153-
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
154-
155-
expect(Config::isEnabled())->toBeFalse();
156-
});
157-
158-
it('handles enabled config as integer 1', function () {
159-
config()->set('google-recaptcha-v3.enabled', 1);
160-
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
161-
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
162-
163-
expect(Config::isEnabled())->toBeTrue();
164-
});
165-
166-
it('handles enabled config as integer 0', function () {
167-
config()->set('google-recaptcha-v3.enabled', 0);
168-
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
169-
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
170-
171-
expect(Config::isEnabled())->toBeFalse();
172-
});
173-
174-
it('handles enabled config as boolean true', function () {
175-
config()->set('google-recaptcha-v3.enabled', true);
176-
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
177-
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
178-
179-
expect(Config::isEnabled())->toBeTrue();
180-
});
181-
182-
it('handles enabled config as boolean false', function () {
183-
config()->set('google-recaptcha-v3.enabled', false);
184-
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
185-
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
186-
187-
expect(Config::isEnabled())->toBeFalse();
188-
});
189-
190-
it('handles enabled config as string true', function () {
191-
config()->set('google-recaptcha-v3.enabled', 'true');
192-
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
193-
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
194-
195-
expect(Config::isEnabled())->toBeTrue();
196-
});
197-
198-
it('handles enabled config as string false', function () {
199-
config()->set('google-recaptcha-v3.enabled', 'false');
200-
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
201-
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
202-
203-
expect(Config::isEnabled())->toBeFalse();
204-
});
80+
})->with([
81+
'null' => [null],
82+
'empty string' => [''],
83+
]);
84+
85+
it('returns score threshold correctly', function (mixed $value, float $expected) {
86+
config()->set('google-recaptcha-v3.score_threshold', $value);
87+
88+
expect(Config::getScoreThreshold())->toBe($expected);
89+
})->with([
90+
'float 0.7' => [0.7, 0.7],
91+
'float 1.0' => [1.0, 1.0],
92+
'float 0.0' => [0.0, 0.0],
93+
'string 0.8' => ['0.8', 0.8],
94+
'null defaults to 0.5' => [null, 0.5],
95+
'empty string defaults to 0.5' => ['', 0.5],
96+
]);

tests/RecaptchaRuleTest.php

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
use Illuminate\Validation\Rule;
55

66
it('can validate token', function (bool $enabled, ?bool $success, ?float $score, ?float $threshold, bool $fails) {
7-
87
config()->set('google-recaptcha-v3.enabled', $enabled);
98
config()->set('google-recaptcha-v3.site_key', 'sitekey');
109
config()->set('google-recaptcha-v3.secret_key', 'secretkey');
@@ -23,29 +22,23 @@
2322
'*' => Http::response($body, 200),
2423
]);
2524

26-
Http::fake();
27-
2825
$validator = validator(
2926
['token' => 'value'],
3027
['token' => Rule::googleRecaptchaV3($threshold)]
3128
);
3229

3330
expect($validator->fails())->toBe($fails);
3431
})->with([
35-
['enabled' => true, 'success' => null, 'score' => null, 'threshold' => 0.5, 'fails' => true],
36-
['enabled' => true, 'success' => null, 'score' => 0.0, 'threshold' => 0.5, 'fails' => true],
37-
['enabled' => true, 'success' => true, 'score' => null, 'threshold' => 0.5, 'fails' => true],
38-
['enabled' => true, 'success' => true, 'score' => 0.0, 'threshold' => 0.5, 'fails' => true],
39-
['enabled' => true, 'success' => true, 'score' => 0.4, 'threshold' => 0.5, 'fails' => true],
40-
41-
['enabled' => true, 'success' => true, 'score' => 0.5, 'threshold' => 0.5, 'fails' => false],
42-
['enabled' => true, 'success' => true, 'score' => 1.0, 'threshold' => 0.5, 'fails' => false],
43-
44-
['enabled' => false, 'success' => null, 'score' => null, 'threshold' => 0.5, 'fails' => false],
45-
46-
['enabled' => true, 'success' => true, 'score' => 0.4, 'threshold' => null, 'fails' => true],
47-
['enabled' => true, 'success' => true, 'score' => 0.9, 'threshold' => null, 'fails' => false],
48-
49-
['enabled' => true, 'success' => true, 'score' => 0.4, 'threshold' => 1, 'fails' => true],
50-
['enabled' => true, 'success' => true, 'score' => 1, 'threshold' => 1, 'fails' => false],
32+
'missing success field fails' => [true, null, null, 0.5, true],
33+
'missing success with score fails' => [true, null, 0.0, 0.5, true],
34+
'success without score fails' => [true, true, null, 0.5, true],
35+
'success with zero score fails' => [true, true, 0.0, 0.5, true],
36+
'score below threshold fails' => [true, true, 0.4, 0.5, true],
37+
'score equal to threshold passes' => [true, true, 0.5, 0.5, false],
38+
'score above threshold passes' => [true, true, 1.0, 0.5, false],
39+
'disabled recaptcha always passes' => [false, null, null, 0.5, false],
40+
'default threshold 0.5 with low score fails' => [true, true, 0.4, null, true],
41+
'default threshold 0.5 with high score passes' => [true, true, 0.9, null, false],
42+
'custom threshold 1.0 with low score fails' => [true, true, 0.4, 1.0, true],
43+
'custom threshold 1.0 with perfect score passes' => [true, true, 1.0, 1.0, false],
5144
]);

0 commit comments

Comments
 (0)