complete story 1.3 with qa test (please not that the previous commit msg was wrong the previous commit was story 1.2
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
|
||||
use App\Helpers\DateHelper;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Facades\App;
|
||||
|
||||
describe('Language Toggle Route', function () {
|
||||
test('language toggle stores preference in session for guests', function () {
|
||||
$this->get(route('language.switch', 'en'))
|
||||
->assertRedirect();
|
||||
|
||||
expect(session('locale'))->toBe('en');
|
||||
|
||||
$this->get(route('language.switch', 'ar'))
|
||||
->assertRedirect();
|
||||
|
||||
expect(session('locale'))->toBe('ar');
|
||||
});
|
||||
|
||||
test('language toggle stores preference in database for authenticated users', function () {
|
||||
$user = User::factory()->create(['preferred_language' => 'ar']);
|
||||
|
||||
$this->actingAs($user)
|
||||
->get(route('language.switch', 'en'))
|
||||
->assertRedirect();
|
||||
|
||||
expect(session('locale'))->toBe('en');
|
||||
expect($user->fresh()->preferred_language)->toBe('en');
|
||||
});
|
||||
|
||||
test('language toggle rejects invalid locales', function () {
|
||||
$this->get(route('language.switch', 'fr'))
|
||||
->assertStatus(400);
|
||||
|
||||
$this->get(route('language.switch', 'invalid'))
|
||||
->assertStatus(400);
|
||||
});
|
||||
|
||||
test('language switch redirects back to same page', function () {
|
||||
$this->from('/login')
|
||||
->get(route('language.switch', 'en'))
|
||||
->assertRedirect('/login');
|
||||
});
|
||||
});
|
||||
|
||||
describe('SetLocale Middleware', function () {
|
||||
test('middleware sets correct locale from user preference', function () {
|
||||
$user = User::factory()->create(['preferred_language' => 'en']);
|
||||
|
||||
$this->actingAs($user)
|
||||
->get(route('home'));
|
||||
|
||||
expect(App::getLocale())->toBe('en');
|
||||
});
|
||||
|
||||
test('middleware falls back to session for guests', function () {
|
||||
session(['locale' => 'en']);
|
||||
|
||||
$this->get(route('home'));
|
||||
|
||||
expect(App::getLocale())->toBe('en');
|
||||
});
|
||||
|
||||
test('middleware defaults to Arabic when no preference set', function () {
|
||||
$this->get(route('home'));
|
||||
|
||||
expect(App::getLocale())->toBe('ar');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Date Formatting Helper', function () {
|
||||
test('date formatting helper returns DD/MM/YYYY for Arabic locale', function () {
|
||||
$date = '2024-12-25';
|
||||
|
||||
$formatted = DateHelper::formatDate($date, 'ar');
|
||||
|
||||
expect($formatted)->toBe('25/12/2024');
|
||||
});
|
||||
|
||||
test('date formatting helper returns MM/DD/YYYY for English locale', function () {
|
||||
$date = '2024-12-25';
|
||||
|
||||
$formatted = DateHelper::formatDate($date, 'en');
|
||||
|
||||
expect($formatted)->toBe('12/25/2024');
|
||||
});
|
||||
|
||||
test('date formatting helper handles null values', function () {
|
||||
expect(DateHelper::formatDate(null))->toBe('');
|
||||
expect(DateHelper::formatTime(null))->toBe('');
|
||||
expect(DateHelper::formatDateTime(null))->toBe('');
|
||||
});
|
||||
|
||||
test('date formatting helper uses current locale by default', function () {
|
||||
App::setLocale('ar');
|
||||
expect(DateHelper::formatDate('2024-12-25'))->toBe('25/12/2024');
|
||||
|
||||
App::setLocale('en');
|
||||
expect(DateHelper::formatDate('2024-12-25'))->toBe('12/25/2024');
|
||||
});
|
||||
|
||||
test('time formatting helper returns 12-hour format', function () {
|
||||
expect(DateHelper::formatTime('14:30:00'))->toBe('2:30 PM');
|
||||
expect(DateHelper::formatTime('08:15:00'))->toBe('8:15 AM');
|
||||
});
|
||||
|
||||
test('datetime formatting helper combines date and time correctly', function () {
|
||||
$datetime = '2024-12-25 14:30:00';
|
||||
|
||||
expect(DateHelper::formatDateTime($datetime, 'ar'))->toBe('25/12/2024 2:30 PM');
|
||||
expect(DateHelper::formatDateTime($datetime, 'en'))->toBe('12/25/2024 2:30 PM');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Translation Files', function () {
|
||||
test('Arabic translation files exist and have content', function () {
|
||||
expect(__('auth.failed', [], 'ar'))->not->toBe('auth.failed');
|
||||
expect(__('validation.required', [], 'ar'))->not->toBe('validation.required');
|
||||
expect(__('navigation.dashboard', [], 'ar'))->not->toBe('navigation.dashboard');
|
||||
expect(__('pagination.previous', [], 'ar'))->not->toBe('pagination.previous');
|
||||
});
|
||||
|
||||
test('English translation files exist and have content', function () {
|
||||
expect(__('auth.failed', [], 'en'))->not->toBe('auth.failed');
|
||||
expect(__('validation.required', [], 'en'))->not->toBe('validation.required');
|
||||
expect(__('navigation.dashboard', [], 'en'))->not->toBe('navigation.dashboard');
|
||||
expect(__('pagination.previous', [], 'en'))->not->toBe('pagination.previous');
|
||||
});
|
||||
|
||||
test('validation attribute translations work', function () {
|
||||
expect(__('validation.attributes.email', [], 'ar'))->toBe('البريد الإلكتروني');
|
||||
expect(__('validation.attributes.email', [], 'en'))->toBe('email');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user