Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add French holidays #15

Merged
merged 10 commits into from
Jan 19, 2024
Merged
41 changes: 41 additions & 0 deletions src/Countries/France.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

namespace Spatie\Holidays\Countries;

use Carbon\CarbonImmutable;

class France extends Country
{
public function countryCode(): string
{
return 'fr';
}

/** @return array<string, CarbonImmutable> */
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this return type is wrong (but anyway, you should not need to specify it here. Inheriting it from the parent is better)

protected function allHolidays(int $year): array
{
return array_merge([
'Jour de l\'An' => '01-01',
'Fête du Travail' => '05-01',
'Victoire 1945' => '05-08',
'Fête Nationale' => '07-14',
'Assomption' => '08-15',
'Toussaint' => '11-01',
'Armistice 1918' => '11-11',
'Noël' => '12-25',
], $this->variableHolidays($year));
}

/** @return array<string, CarbonImmutable> */
protected function variableHolidays(int $year): array
{
$easter = CarbonImmutable::createFromTimestamp(easter_date($year))
->setTimezone('Europe/Paris');

return [
'Lundi de Pâques' => $easter->addDay(),
'Ascension' => $easter->addDays(39),
'Lundi de Pentecôte' => $easter->addDays(50),
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
[
{
"name": "Jour de l'An",
"date": "2024-01-01"
},
{
"name": "Lundi de P\u00e2ques",
"date": "2024-04-01"
},
{
"name": "F\u00eate du Travail",
"date": "2024-05-01"
},
{
"name": "Victoire 1945",
"date": "2024-05-08"
},
{
"name": "Ascension",
"date": "2024-05-09"
},
{
"name": "Lundi de Pentec\u00f4te",
"date": "2024-05-20"
},
{
"name": "F\u00eate Nationale",
"date": "2024-07-14"
},
{
"name": "Assomption",
"date": "2024-08-15"
},
{
"name": "Toussaint",
"date": "2024-11-01"
},
{
"name": "Armistice 1918",
"date": "2024-11-11"
},
{
"name": "No\u00ebl",
"date": "2024-12-25"
}
]
18 changes: 18 additions & 0 deletions tests/Countries/FranceTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Spatie\Holidays\Tests\Countries;

use Carbon\CarbonImmutable;
use Spatie\Holidays\Holidays;

it('can calculate french holidays', function () {
CarbonImmutable::setTestNowAndTimezone('2024-01-01');

$holidays = Holidays::for(country: 'fr')->get();

expect($holidays)
->toBeArray()
->not()->toBeEmpty();

expect(formatDates($holidays))->toMatchSnapshot();
});