Issues (16)

tests/ReCaptchaTest.php (3 issues)

1
<?php
2
3
/**
4
 * Copyright (c) 2017 - present
5
 * LaravelGoogleRecaptcha - ReCaptchaTest.php
6
 * author: Roberto Belotti - [email protected]
7
 * web : robertobelotti.com, github.com/biscolab
8
 * Initial version created on: 12/9/2018
9
 * MIT license: https://github.com/biscolab/laravel-recaptcha/blob/master/LICENSE
10
 */
11
12
namespace Biscolab\ReCaptcha\Tests;
13
14
use Biscolab\ReCaptcha\Facades\ReCaptcha;
15
use Biscolab\ReCaptcha\ReCaptchaBuilder;
16
use Biscolab\ReCaptcha\ReCaptchaBuilderInvisible;
17
use Biscolab\ReCaptcha\ReCaptchaBuilderV2;
18
use Biscolab\ReCaptcha\ReCaptchaBuilderV3;
19
20
/**
21
 * Class ReCaptchaTest
22
 * @package Biscolab\ReCaptcha\Tests
23
 */
24
class ReCaptchaTest extends TestCase
25
{
26
27
	/**
28
	 * @var ReCaptchaBuilderInvisible
29
	 */
30
	protected $recaptcha_invisible = null;
31
32
	/**
33
	 * @var ReCaptchaBuilderV2
34
	 */
35
	protected $recaptcha_v2 = null;
36
37
	/**
38
	 * @var ReCaptchaBuilderV3
39
	 */
40
	protected $recaptcha_v3 = null;
41
42
	/**
43
	 * @tests
44
	 */
45
	public function testHtmlScriptTagJsApiGetHtmlScriptTag()
46
	{
47
48
		$r = ReCaptcha::htmlScriptTagJsApi();
49
		$this->assertEquals('<script src="https://www.google.com/recaptcha/api.js" async defer></script>', $r);
50
	}
51
52
	/**
53
	 * @test
54
	 */
55
	public function testReCaptchaInvisibleHtmlFormButtonDefault()
56
	{
57
58
		$recaptcha = $this->recaptcha_invisible;
59
		$html_button = $recaptcha->htmlFormButton();
60
		$this->assertEquals(
61
			'<button class="g-recaptcha" data-callback="biscolabLaravelReCaptcha" data-sitekey="api_site_key">Submit</button>',
62
			$html_button
63
		);
64
	}
65
66
	/**
67
	 * @test
68
	 */
69
	public function testReCaptchaInvisibleHtmlFormButtonCustom()
70
	{
71
72
		$recaptcha = $this->recaptcha_invisible;
73
		$html_button = $recaptcha->htmlFormButton('Custom Text');
74
		$this->assertEquals(
75
			'<button class="g-recaptcha" data-callback="biscolabLaravelReCaptcha" data-sitekey="api_site_key">Custom Text</button>',
76
			$html_button
77
		);
78
	}
79
80
	/**
81
	 * @test
82
	 */
83
	public function testReCaptchaV2HtmlFormSnippet()
84
	{
85
86
		$recaptcha = $this->recaptcha_v2;
87
		$html_snippet = $recaptcha->htmlFormSnippet();
88
		$this->assertEquals('<div class="g-recaptcha" data-sitekey="api_site_key" data-size="normal" data-theme="light" id="recaptcha-element"></div>', $html_snippet);
89
	}
90
91
	/**
92
	 * @test
93
	 * @expectedException     \Error
94
	 */
95
	public function testReCaptchaInvisibleHtmlFormSnippetShouldThrowError()
96
	{
97
		$this->expectException('\Error');
98
		$this->recaptcha_invisible->htmlFormSnippet();
0 ignored issues
show
The method htmlFormSnippet() does not exist on Biscolab\ReCaptcha\ReCaptchaBuilderInvisible. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

98
		$this->recaptcha_invisible->/** @scrutinizer ignore-call */ 
99
                              htmlFormSnippet();

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
99
	}
100
101
	/**
102
	 * @test
103
	 */
104
	public function testSkipByIpAndReturnArrayReturnsDefaultArray()
105
	{
106
107
		$mock = $this->getMockBuilder(ReCaptchaBuilder::class)
0 ignored issues
show
Deprecated Code introduced by
The function PHPUnit\Framework\MockOb...ckBuilder::setMethods() has been deprecated: https://github.com/sebastianbergmann/phpunit/pull/3687 ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

107
		$mock = /** @scrutinizer ignore-deprecated */ $this->getMockBuilder(ReCaptchaBuilder::class)

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
108
			->setConstructorArgs([
109
				"api_site_key",
110
				"api_secret_key"
111
			])
112
			->setMethods([
113
				'returnArray'
114
			])
115
			->getMock();
116
117
		$mock->method('returnArray')
118
			->willReturn(true);
119
120
		$this->setSkipByIp($this->recaptcha_v3, true);
121
122
		$validate = $this->recaptcha_v3->validate("");
123
124
		$this->assertEquals([
125
			"skip_by_ip" => true,
126
			"score"      => 0.9,
127
			"success"    => true
128
		], $validate);
129
	}
130
131
	/**
132
	 * @test
133
	 */
134
	public function testSlipByIpReturnsValidResponse()
135
	{
136
137
		$this->setSkipByIp($this->recaptcha_invisible, true);
138
		$validate = $this->recaptcha_invisible->validate("");
139
140
		$this->assertTrue($validate);
141
	}
142
143
	/**
144
	 * @test
145
	 */
146
	public function testDefaultCurlTimeout()
147
	{
148
149
		$this->assertEquals($this->recaptcha_invisible->getCurlTimeout(), ReCaptchaBuilder::DEFAULT_CURL_TIMEOUT);
150
		$this->assertEquals($this->recaptcha_v2->getCurlTimeout(), ReCaptchaBuilder::DEFAULT_CURL_TIMEOUT);
151
		$this->assertEquals($this->recaptcha_v3->getCurlTimeout(), ReCaptchaBuilder::DEFAULT_CURL_TIMEOUT);
152
	}
153
154
	/**
155
	 * @test
156
	 * @expectedException     \Error
157
	 */
158
	public function testReCaptchaV2htmlFormButtonShouldThrowError()
159
	{
160
		$this->expectException('\Error');
161
		$this->recaptcha_v2->htmlFormButton();
0 ignored issues
show
The method htmlFormButton() does not exist on Biscolab\ReCaptcha\ReCaptchaBuilderV2. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

161
		$this->recaptcha_v2->/** @scrutinizer ignore-call */ 
162
                       htmlFormButton();

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
162
	}
163
164
	/**
165
	 * @test
166
	 */
167
	public function testRecaptchaFieldNameHelperReturnsReCaptchaBuilderDefaultFieldName()
168
	{
169
		$this->assertEquals(ReCaptchaBuilder::DEFAULT_RECAPTCHA_FIELD_NAME, recaptchaFieldName());
170
	}
171
172
	/**
173
	 * @test
174
	 */
175
	public function testRecaptchaRuleNameHelperReturnsReCaptchaBuilderDefaultRuleName()
176
	{
177
		$this->assertEquals(ReCaptchaBuilder::DEFAULT_RECAPTCHA_RULE_NAME, recaptchaRuleName());
178
	}
179
180
	/**
181
	 * @test
182
	 */
183
	public function testDefaultRecaptchaApiDomainIsGoogleDotCom()
184
	{
185
		$this->assertEquals("www.google.com", $this->recaptcha_v2->getApiDomain());
186
		$this->assertEquals("www.google.com", $this->recaptcha_invisible->getApiDomain());
187
		$this->assertEquals("www.google.com", $this->recaptcha_v3->getApiDomain());
188
	}
189
190
	protected function setSkipByIp(ReCaptchaBuilder $builder, bool $value)
191
	{
192
193
		$reflection = new \ReflectionClass($builder);
194
		$reflection_property = $reflection->getProperty('skip_by_ip');
195
		$reflection_property->setAccessible(true);
196
		$reflection_property->setValue($builder, $value);
197
	}
198
199
	/**
200
	 * @inheritdoc
201
	 */
202
	protected function setUp(): void
203
	{
204
205
		parent::setUp(); // TODO: Change the autogenerated stub
206
207
		$this->recaptcha_invisible = new ReCaptchaBuilderInvisible('api_site_key', 'api_secret_key');
208
		$this->recaptcha_v2 = new ReCaptchaBuilderV2('api_site_key', 'api_secret_key');
209
		$this->recaptcha_v3 = new ReCaptchaBuilderV3('api_site_key', 'api_secret_key');
210
	}
211
}
212