Passed
Branch master (47c941)
by Roberto
05:04
created

testDefaultRecaptchaApiDomainIsGoogleDotCom()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 5
rs 10
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-theme="light" data-size="normal" id="recaptcha-element"></div>', $html_snippet);
89
	}
90
91
	/**
92
	 * @test
93
	 * @expectedException     \Error
94
	 */
95
	public function testReCaptchaInvisibleHtmlFormSnippetShouldThrowError()
96
	{
97
98
		$this->recaptcha_invisible->htmlFormSnippet();
0 ignored issues
show
Bug introduced by Roberto
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)
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
161
		$this->recaptcha_v2->htmlFormButton();
0 ignored issues
show
Bug introduced by Roberto
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