Skip to content

Commit fd6d79e

Browse files
wip
1 parent 024e16c commit fd6d79e

File tree

3 files changed

+212
-2
lines changed

3 files changed

+212
-2
lines changed

src/GoogleRecaptchaV3.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ private function getJsScriptUrl(Badge $badge): string
2626
{
2727
return Config::getBaseJsScriptUrl()
2828
->when($badge !== Badge::HIDDEN, fn (Uri $url) => (
29-
$url->withQuery(['badge' => $badge])
29+
$url->withQuery(['badge' => $badge->value])
3030
))
3131
->value();
3232
}

src/Support/Config.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@ public static function getBaseJsScriptUrl(): Uri
1616
public static function isEnabled(): bool
1717
{
1818
$enabled = config('google-recaptcha-v3.enabled') ?? null;
19-
$enabled = boolval($enabled);
19+
20+
// Handle string 'false' explicitly
21+
if ($enabled === 'false' || $enabled === '0') {
22+
$enabled = false;
23+
} else {
24+
$enabled = boolval($enabled);
25+
}
2026

2127
if (! $enabled) {
2228
return false;

tests/ConfigTest.php

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
<?php
2+
3+
use Maize\GoogleRecaptchaV3\Support\Config;
4+
5+
it('returns base js script url with render parameter', function () {
6+
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
7+
8+
$url = Config::getBaseJsScriptUrl();
9+
10+
expect($url->value())
11+
->toBe('https://www.google.com/recaptcha/api.js?render=test-site-key');
12+
});
13+
14+
it('returns true when recaptcha is enabled with valid keys', function () {
15+
config()->set('google-recaptcha-v3.enabled', true);
16+
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
17+
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
18+
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 () {
47+
config()->set('google-recaptcha-v3.enabled', true);
48+
config()->set('google-recaptcha-v3.site_key', '');
49+
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
50+
51+
expect(Config::isEnabled())->toBeFalse();
52+
});
53+
54+
it('returns false when secret key is missing', function () {
55+
config()->set('google-recaptcha-v3.enabled', true);
56+
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
57+
config()->set('google-recaptcha-v3.secret_key', null);
58+
59+
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+
});
69+
70+
it('returns site key when configured', function () {
71+
config()->set('google-recaptcha-v3.site_key', 'test-site-key');
72+
73+
expect(Config::getSiteKey())->toBe('test-site-key');
74+
});
75+
76+
it('returns null when site key is not configured', function () {
77+
config()->set('google-recaptcha-v3.site_key', null);
78+
79+
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+
});
87+
88+
it('returns secret key when configured', function () {
89+
config()->set('google-recaptcha-v3.secret_key', 'test-secret-key');
90+
91+
expect(Config::getSecretKey())->toBe('test-secret-key');
92+
});
93+
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', '');
102+
103+
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+
});

0 commit comments

Comments
 (0)