Skip to content

Commit baaff7a

Browse files
authored
Merge branch 'master' into master
2 parents dbe73b1 + 44920c7 commit baaff7a

File tree

10 files changed

+135
-40
lines changed

10 files changed

+135
-40
lines changed

.github/workflows/tests.yml

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,18 @@ jobs:
1111
strategy:
1212
fail-fast: true
1313
matrix:
14-
php: [7.4, 8.0, 8.1, 8.2]
15-
laravel: [8.*, 9.*, 10.*]
14+
php: [8.1, 8.2, 8.3]
15+
laravel: [10.*, 11.*]
1616
dependency-version: [prefer-stable]
1717
exclude:
18-
- php: 7.4
19-
laravel: 9.*
20-
- php: 7.4
21-
laravel: 10.*
22-
- php: 8.0
23-
laravel: 10.*
18+
- php: 8.1
19+
laravel: 11.*
2420

2521
name: PHP ${{ matrix.php }} - Laravel ${{ matrix.laravel }}
2622

2723
steps:
2824
- name: Checkout code
29-
uses: actions/checkout@v2
25+
uses: actions/checkout@v4
3026

3127
- name: Setup PHP
3228
uses: shivammathur/setup-php@v2
@@ -42,4 +38,4 @@ jobs:
4238
composer update --${{ matrix.dependency-version }} --prefer-dist --no-interaction
4339
4440
- name: Execute tests
45-
run: vendor/bin/phpunit --verbose
41+
run: vendor/bin/phpunit

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ use Artesaos\SEOTools\Facades\JsonLdMulti;
197197
// OR
198198
use Artesaos\SEOTools\Facades\SEOTools;
199199

200-
class CommomController extends Controller
200+
class CommonController extends Controller
201201
{
202202
public function index()
203203
{
@@ -432,7 +432,7 @@ namespace App\Http\Controllers;
432432

433433
use Artesaos\SEOTools\Traits\SEOTools as SEOToolsTrait;
434434

435-
class CommomController extends Controller
435+
class CommonController extends Controller
436436
{
437437
use SEOToolsTrait;
438438

@@ -552,6 +552,8 @@ SEOMeta::addKeyword($keyword);
552552
SEOMeta::addMeta($meta, $value = null, $name = 'name');
553553
SEOMeta::addAlternateLanguage($lang, $url);
554554
SEOMeta::addAlternateLanguages(array $languages);
555+
SEOMeta::setAlternateLanguage($lang, $url);
556+
SEOMeta::setAlternateLanguages(array $languages);
555557
SEOMeta::setTitleSeparator($separator);
556558
SEOMeta::setTitle($title);
557559
SEOMeta::setTitleDefault($default);

composer.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@
2323
}
2424
],
2525
"require": {
26-
"php": ">=7.1|^8.0",
26+
"php": "^8.1",
2727
"ext-json": "*",
28-
"illuminate/config": "5.8.* || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0",
29-
"illuminate/support": "5.8.* || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0"
28+
"illuminate/config": "^10.0 || ^11.0",
29+
"illuminate/support": "^10.0 || ^11.0"
3030
},
3131
"require-dev": {
32-
"orchestra/testbench": "~3.8.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0",
32+
"orchestra/testbench": "^8.0 || ^9.0",
3333
"phpspec/phpspec": "~5.1.1 || ^6.0 || ^7.0",
34-
"phpunit/phpunit": "^9.0"
34+
"phpunit/phpunit": "^9.0 || ^10.0"
3535
},
3636
"autoload": {
3737
"psr-4": {

phpunit.xml.dist

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,14 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<phpunit backupGlobals="false"
3-
backupStaticAttributes="false"
43
bootstrap="vendor/autoload.php"
54
colors="true"
6-
convertErrorsToExceptions="true"
7-
convertNoticesToExceptions="true"
8-
convertWarningsToExceptions="true"
95
processIsolation="false"
106
stopOnFailure="false"
11-
verbose="true"
127
>
138
<testsuites>
149
<testsuite name="SEOTools Test Suite">
15-
<directory suffix=".php">./tests</directory>
10+
<directory suffix="Test.php">tests</directory>
11+
<exclude>./tests/SEOTools/BaseTest.php</exclude>
1612
</testsuite>
1713
</testsuites>
18-
<filter>
19-
<whitelist>
20-
<directory suffix=".php">./src</directory>
21-
</whitelist>
22-
</filter>
23-
<logging>
24-
<log type="tap" target="build/report.tap"/>
25-
<log type="coverage-html" target="build/coverage" charset="UTF-8" yui="true" highlight="true"/>
26-
<log type="coverage-text" target="build/coverage.txt"/>
27-
<log type="coverage-clover" target="build/logs/clover.xml"/>
28-
<log type="coverage-php" target="build/coverage.serialized"/>
29-
</logging>
3014
</phpunit>

src/SEOTools/Contracts/MetaTags.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,25 @@ public function addAlternateLanguage($lang, $url);
187187
*/
188188
public function addAlternateLanguages(array $languages);
189189

190+
/**
191+
* Set an alternate language.
192+
*
193+
* @param string $lang language code in format ISO 639-1
194+
* @param string $url
195+
*
196+
* @return static
197+
*/
198+
public function setAlternateLanguage($lang, $url);
199+
200+
/**
201+
* Set alternate languages.
202+
*
203+
* @param array $languages
204+
*
205+
* @return static
206+
*/
207+
public function setAlternateLanguages(array $languages);
208+
190209
/**
191210
* Get the title formatted for display.
192211
*

src/SEOTools/Facades/SEOMeta.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
* @method static \Artesaos\SEOTools\Contracts\MetaTags setNext(string $url)
2424
* @method static \Artesaos\SEOTools\Contracts\MetaTags addAlternateLanguage(string $lang, string $url)
2525
* @method static \Artesaos\SEOTools\Contracts\MetaTags addAlternateLanguages(array $languages)
26+
* @method static \Artesaos\SEOTools\Contracts\MetaTags setAlternateLanguage(string $lang, string $url)
27+
* @method static \Artesaos\SEOTools\Contracts\MetaTags setAlternateLanguages(array $languages)
2628
* @method static string getTitle()
2729
* @method static string getTitleSession()
2830
* @method static string getTitleSeparator()

src/SEOTools/SEOMeta.php

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,9 @@ public function generate($minify = false)
198198
}
199199

200200
foreach ($languages as $lang) {
201-
$html[] = "<link rel=\"alternate\" hreflang=\"{$lang['lang']}\" href=\"{$lang['url']}\">";
201+
if (!empty($lang['lang'] && !empty($lang['url']))) {
202+
$html[] = "<link rel=\"alternate\" hreflang=\"{$lang['lang']}\" href=\"{$lang['url']}\">";
203+
}
202204
}
203205

204206
if ($robots) {
@@ -387,6 +389,32 @@ public function addAlternateLanguages(array $languages)
387389
return $this;
388390
}
389391

392+
/**
393+
* {@inheritdoc}
394+
*/
395+
public function setAlternateLanguage($lang, $url)
396+
{
397+
// Remove language if already existing
398+
$this->alternateLanguages = array_filter($this->alternateLanguages, function ($arr) use ($lang) {
399+
return $arr['lang'] !== $lang;
400+
});
401+
402+
// Append (updated) language
403+
$this->alternateLanguages[] = ['lang' => $lang, 'url' => $url];
404+
405+
return $this;
406+
}
407+
408+
/**
409+
* {@inheritdoc}
410+
*/
411+
public function setAlternateLanguages(array $languages)
412+
{
413+
$this->alternateLanguages = $languages;
414+
415+
return $this;
416+
}
417+
390418
/**
391419
* Sets the meta robots.
392420
*

tests/SEOTools/BaseTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
/**
1010
* Class BaseTest.
1111
*/
12-
abstract class BaseTest extends TestCase
12+
class BaseTest extends TestCase
1313
{
1414
/**
1515
* {@inheritdoc}

tests/SEOTools/SEOMetaTest.php

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ public function test_set_canonical()
168168
$this->assertEquals($canonical, $this->seoMeta->getCanonical());
169169
}
170170

171-
public function dataTestUrls()
171+
public static function dataTestUrls()
172172
{
173173
return [
174174
['http://localhost/hello/world', 'http://localhost/hello/world'],
@@ -251,7 +251,7 @@ public function test_set_prev()
251251
$this->assertEquals($prev, $this->seoMeta->getPrev());
252252
}
253253

254-
public function test_set_alternate_languages()
254+
public function test_add_alternate_languages()
255255
{
256256
$fullHeader = "<title>It's Over 9000!</title>";
257257
$fullHeader .= "<meta name=\"description\" content=\"For those who helped create the Genki Dama\">";
@@ -270,6 +270,70 @@ public function test_set_alternate_languages()
270270
$this->assertEquals(array_merge($expectedLangs, $expectedLangs), $this->seoMeta->getAlternateLanguages());
271271
}
272272

273+
public function test_set_alternate_languages()
274+
{
275+
$fullHeader = "<title>It's Over 9000!</title>";
276+
$fullHeader .= "<meta name=\"description\" content=\"For those who helped create the Genki Dama\">";
277+
$fullHeader .= "<link rel=\"alternate\" hreflang=\"en\" href=\"http://domain.com\">";
278+
$lang = 'en';
279+
$langUrl = 'http://domain.com';
280+
281+
$expectedLangs = [['lang' => $lang, 'url' => $langUrl]];
282+
$this->seoMeta->setAlternateLanguage($lang, $langUrl);
283+
284+
$this->setRightAssertion($fullHeader);
285+
$this->assertEquals($expectedLangs, $this->seoMeta->getAlternateLanguages());
286+
287+
$this->seoMeta->setAlternateLanguages($expectedLangs);
288+
289+
$this->assertEquals($expectedLangs, $this->seoMeta->getAlternateLanguages());
290+
}
291+
292+
public function test_set_override_alternate_language()
293+
{
294+
$fullHeader = "<title>It's Over 9000!</title>";
295+
$fullHeader .= "<meta name=\"description\" content=\"For those who helped create the Genki Dama\">";
296+
$fullHeader .= "<link rel=\"alternate\" hreflang=\"en\" href=\"http://domain.test\">";
297+
$lang = 'en';
298+
$langUrl = 'http://domain.com';
299+
$langUrlOverridden = 'http://domain.test';
300+
301+
$expectedLangs = [['lang' => $lang, 'url' => $langUrl]];
302+
$expectedLangsOverridden = [['lang' => $lang, 'url' => $langUrlOverridden]];
303+
304+
$this->seoMeta->setAlternateLanguage($lang, $langUrl);
305+
$this->assertEquals($expectedLangs, $this->seoMeta->getAlternateLanguages());
306+
307+
$this->seoMeta->setAlternateLanguage($lang, $langUrlOverridden);
308+
$this->setRightAssertion($fullHeader);
309+
$this->assertEquals($expectedLangsOverridden, $this->seoMeta->getAlternateLanguages());
310+
}
311+
312+
public function test_remove_alternate_language()
313+
{
314+
$fullHeader = "<title>It's Over 9000!</title>";
315+
$fullHeader .= "<meta name=\"description\" content=\"For those who helped create the Genki Dama\">";
316+
$lang = 'en';
317+
$langUrl = 'http://domain.com';
318+
319+
$expectedLangs = [['lang' => $lang, 'url' => false]];
320+
321+
$this->seoMeta->setAlternateLanguage($lang, $langUrl);
322+
$this->seoMeta->setAlternateLanguage($lang, false);
323+
$this->setRightAssertion($fullHeader);
324+
$this->assertEquals($expectedLangs, $this->seoMeta->getAlternateLanguages());
325+
}
326+
327+
public function test_remove_alternate_languages()
328+
{
329+
$fullHeader = "<title>It's Over 9000!</title>";
330+
$fullHeader .= "<meta name=\"description\" content=\"For those who helped create the Genki Dama\">";
331+
332+
$this->seoMeta->setAlternateLanguages([]);
333+
$this->setRightAssertion($fullHeader);
334+
$this->assertEquals([], $this->seoMeta->getAlternateLanguages());
335+
}
336+
273337
public function test_set_reset()
274338
{
275339
$expected = "<title>It's Over 9000!</title>";

tests/SEOTools/SEOToolsServiceProviderTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public function test_container_are_provided($contract, $concreteClass)
2626
/**
2727
* @return array
2828
*/
29-
public function bindsListProvider()
29+
public static function bindsListProvider()
3030
{
3131
return [
3232
[

0 commit comments

Comments
 (0)