Merge remote-tracking branch 'origin/#22-vacation-calendar' into #22-vacation-calendar

This commit is contained in:
Adrian Hopek 2022-02-15 09:03:14 +01:00
commit 09da5cacda
4 changed files with 80 additions and 12 deletions

View File

@ -37,7 +37,7 @@ class DoesNotExceedLimitRule implements VacationRequestRule
public function errorMessage(): string public function errorMessage(): string
{ {
return __("You have exceeded your vacation limit."); return __("Vacation limit has been exceeded.");
} }
protected function getUserVacationLimit(User $user, YearPeriod $yearPeriod): int protected function getUserVacationLimit(User $user, YearPeriod $yearPeriod): int

View File

@ -28,7 +28,7 @@
"accepted_by_administrative": "Zaakceptowany przez administracyjnego", "accepted_by_administrative": "Zaakceptowany przez administracyjnego",
"You have pending vacation request in this range.": "Masz oczekujący wniosek urlopowy w tym zakresie dat.", "You have pending vacation request in this range.": "Masz oczekujący wniosek urlopowy w tym zakresie dat.",
"You have approved vacation request in this range.": "Masz zaakceptowany wniosek urlopowy w tym zakresie dat.", "You have approved vacation request in this range.": "Masz zaakceptowany wniosek urlopowy w tym zakresie dat.",
"You have exceeded your vacation limit.": "Przekroczyłeś/aś limit urlopu.", "Vacation limit has been exceeded.": "Limit urlopu został przekroczony.",
"Vacation needs minimum one day.": "Urlop musi być co najmniej na jeden dzień.", "Vacation needs minimum one day.": "Urlop musi być co najmniej na jeden dzień.",
"The vacation request cannot be created at the turn of the year.": "Wniosek urlopowy nie może zostać złożony na przełomie roku." "The vacation request cannot be created at the turn of the year.": "Wniosek urlopowy nie może zostać złożony na przełomie roku."
} }

View File

@ -12,6 +12,7 @@ use Toby\Domain\Enums\VacationRequestState;
use Toby\Domain\Enums\VacationType; use Toby\Domain\Enums\VacationType;
use Toby\Domain\PolishHolidaysRetriever; use Toby\Domain\PolishHolidaysRetriever;
use Toby\Eloquent\Models\User; use Toby\Eloquent\Models\User;
use Toby\Eloquent\Models\VacationLimit;
use Toby\Eloquent\Models\VacationRequest; use Toby\Eloquent\Models\VacationRequest;
use Toby\Eloquent\Models\YearPeriod; use Toby\Eloquent\Models\YearPeriod;
@ -55,6 +56,13 @@ class VacationRequestTest extends FeatureTestCase
$currentYearPeriod = YearPeriod::current(); $currentYearPeriod = YearPeriod::current();
VacationLimit::factory([
"days" => 20,
])
->for($user)
->for($currentYearPeriod)
->create();
$this->actingAs($user) $this->actingAs($user)
->post("/vacation-requests", [ ->post("/vacation-requests", [
"type" => VacationType::VACATION->value, "type" => VacationType::VACATION->value,
@ -128,6 +136,13 @@ class VacationRequestTest extends FeatureTestCase
$technicalApprover = User::factory()->createQuietly(); $technicalApprover = User::factory()->createQuietly();
$currentYearPeriod = YearPeriod::current(); $currentYearPeriod = YearPeriod::current();
$vacationLimit = VacationLimit::factory([
"days" => 20,
])
->for($user)
->for($currentYearPeriod)
->create();
$vacationRequest = VacationRequest::factory([ $vacationRequest = VacationRequest::factory([
"state" => VacationRequestState::WAITING_FOR_TECHNICAL, "state" => VacationRequestState::WAITING_FOR_TECHNICAL,
"type" => VacationType::VACATION, "type" => VacationType::VACATION,
@ -145,11 +160,42 @@ class VacationRequestTest extends FeatureTestCase
]); ]);
} }
public function testUserCannotCreateVacationRequestIfHeExceedsHisVacationLimit(): void
{
$user = User::factory()->createQuietly();
$currentYearPeriod = YearPeriod::current();
VacationLimit::factory([
"days" => 3,
])
->for($user)
->for($currentYearPeriod)
->create();
$this->actingAs($user)
->post("/vacation-requests", [
"type" => VacationType::VACATION->value,
"from" => Carbon::create($currentYearPeriod->year, 2, 7)->toDateString(),
"to" => Carbon::create($currentYearPeriod->year, 2, 11)->toDateString(),
"comment" => "Comment for the vacation request.",
])
->assertSessionHasErrors([
"vacationRequest" => __("Vacation limit has been exceeded."),
]);
}
public function testUserCannotCreateVacationRequestAtWeekend(): void public function testUserCannotCreateVacationRequestAtWeekend(): void
{ {
$user = User::factory()->createQuietly(); $user = User::factory()->createQuietly();
$currentYearPeriod = YearPeriod::current(); $currentYearPeriod = YearPeriod::current();
VacationLimit::factory([
"days" => 20,
])
->for($user)
->for($currentYearPeriod)
->create();
$this->actingAs($user) $this->actingAs($user)
->post("/vacation-requests", [ ->post("/vacation-requests", [
"type" => VacationType::VACATION->value, "type" => VacationType::VACATION->value,
@ -158,7 +204,7 @@ class VacationRequestTest extends FeatureTestCase
"comment" => "Vacation at weekend.", "comment" => "Vacation at weekend.",
]) ])
->assertSessionHasErrors([ ->assertSessionHasErrors([
"vacationRequest" => trans("Vacation needs minimum one day."), "vacationRequest" => __("Vacation needs minimum one day."),
]); ]);
} }
@ -167,6 +213,13 @@ class VacationRequestTest extends FeatureTestCase
$user = User::factory()->createQuietly(); $user = User::factory()->createQuietly();
$currentYearPeriod = YearPeriod::current(); $currentYearPeriod = YearPeriod::current();
VacationLimit::factory([
"days" => 20,
])
->for($user)
->for($currentYearPeriod)
->create();
foreach ($this->polishHolidaysRetriever->getForYearPeriod($currentYearPeriod) as $holiday) { foreach ($this->polishHolidaysRetriever->getForYearPeriod($currentYearPeriod) as $holiday) {
$currentYearPeriod->holidays()->create([ $currentYearPeriod->holidays()->create([
"name" => $holiday["name"], "name" => $holiday["name"],
@ -182,7 +235,7 @@ class VacationRequestTest extends FeatureTestCase
"comment" => "Vacation at holiday.", "comment" => "Vacation at holiday.",
]) ])
->assertSessionHasErrors([ ->assertSessionHasErrors([
"vacationRequest" => trans("Vacation needs minimum one day."), "vacationRequest" => __("Vacation needs minimum one day."),
]); ]);
} }
@ -191,6 +244,13 @@ class VacationRequestTest extends FeatureTestCase
$user = User::factory()->createQuietly(); $user = User::factory()->createQuietly();
$currentYearPeriod = YearPeriod::current(); $currentYearPeriod = YearPeriod::current();
VacationLimit::factory([
"days" => 20,
])
->for($user)
->for($currentYearPeriod)
->create();
VacationRequest::factory([ VacationRequest::factory([
"type" => VacationType::VACATION->value, "type" => VacationType::VACATION->value,
"state" => VacationRequestState::WAITING_FOR_TECHNICAL, "state" => VacationRequestState::WAITING_FOR_TECHNICAL,
@ -210,8 +270,9 @@ class VacationRequestTest extends FeatureTestCase
"comment" => "Another comment for the another vacation request.", "comment" => "Another comment for the another vacation request.",
]) ])
->assertSessionHasErrors([ ->assertSessionHasErrors([
"vacationRequest" => trans("You have pending vacation request in this range."), "vacationRequest" => __("You have pending vacation request in this range."),
]); ])
;
} }
public function testUserCannotCreateVacationRequestIfHeHasApprovedVacationRequestInThisRange(): void public function testUserCannotCreateVacationRequestIfHeHasApprovedVacationRequestInThisRange(): void
@ -219,6 +280,13 @@ class VacationRequestTest extends FeatureTestCase
$user = User::factory()->createQuietly(); $user = User::factory()->createQuietly();
$currentYearPeriod = YearPeriod::current(); $currentYearPeriod = YearPeriod::current();
$vacationLimit = VacationLimit::factory([
"days" => 20,
])
->for($user)
->for($currentYearPeriod)
->create();
VacationRequest::factory([ VacationRequest::factory([
"type" => VacationType::VACATION->value, "type" => VacationType::VACATION->value,
"state" => VacationRequestState::APPROVED, "state" => VacationRequestState::APPROVED,
@ -238,7 +306,7 @@ class VacationRequestTest extends FeatureTestCase
"comment" => "Another comment for the another vacation request.", "comment" => "Another comment for the another vacation request.",
]) ])
->assertSessionHasErrors([ ->assertSessionHasErrors([
"vacationRequest" => trans("You have approved vacation request in this range."), "vacationRequest" => __("You have approved vacation request in this range."),
]); ]);
} }
@ -254,7 +322,7 @@ class VacationRequestTest extends FeatureTestCase
"comment" => "Comment for the vacation request.", "comment" => "Comment for the vacation request.",
]) ])
->assertSessionHasErrors([ ->assertSessionHasErrors([
"vacationRequest" => trans("Vacation needs minimum one day."), "vacationRequest" => __("Vacation needs minimum one day."),
]); ]);
} }
@ -271,7 +339,7 @@ class VacationRequestTest extends FeatureTestCase
"comment" => "Comment for the vacation request.", "comment" => "Comment for the vacation request.",
]) ])
->assertSessionHasErrors([ ->assertSessionHasErrors([
"vacationRequest" => trans("The vacation request cannot be created at the turn of the year."), "vacationRequest" => __("The vacation request cannot be created at the turn of the year."),
]); ]);
} }
} }