f1ca648672
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
490 lines
14 KiB
PHP
490 lines
14 KiB
PHP
<?php
|
||
|
||
use App\Models\Post;
|
||
|
||
test('home page is accessible', function () {
|
||
$this->get('/')
|
||
->assertOk();
|
||
});
|
||
|
||
test('home page displays English tagline when locale is English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Committed to Justice – Grounded in Dignity – Driven to Advocate');
|
||
});
|
||
|
||
test('home page displays Arabic tagline when locale is Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('ملتزمون بالعدالة – متجذرون بالكرامة – مدفوعون للدفاع');
|
||
});
|
||
|
||
test('home page displays English intro text when locale is English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Libra for Rights is a legal institution woven from the fabric of society');
|
||
});
|
||
|
||
test('home page displays Arabic intro text when locale is Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('ليبرا للحقوق مؤسسة قانونية منسوجة من نسيج المجتمع');
|
||
});
|
||
|
||
test('home page displays Book a Consultation button in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Book a Consultation');
|
||
});
|
||
|
||
test('home page displays Book a Consultation button in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('احجز استشارة');
|
||
});
|
||
|
||
test('home page displays Our Services button in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Our Services');
|
||
});
|
||
|
||
test('home page displays Our Services button in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('خدماتنا');
|
||
});
|
||
|
||
test('home page contains link to booking page', function () {
|
||
$this->get('/')
|
||
->assertOk()
|
||
->assertSee('href="'.route('booking').'"', false);
|
||
});
|
||
|
||
test('home page contains link to services section', function () {
|
||
$this->get('/')
|
||
->assertOk()
|
||
->assertSee('href="#services"', false);
|
||
});
|
||
|
||
test('home page contains services section with id', function () {
|
||
$this->get('/')
|
||
->assertOk()
|
||
->assertSee('id="services"', false);
|
||
});
|
||
|
||
// About Section Tests
|
||
|
||
test('home page displays about section title in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Meet the Founder');
|
||
});
|
||
|
||
test('home page displays about section title in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('تعرف على المؤسِّسة');
|
||
});
|
||
|
||
test('home page displays lawyer name in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Huda Armouche');
|
||
});
|
||
|
||
test('home page displays lawyer name in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('هدى عرموش');
|
||
});
|
||
|
||
test('home page displays lawyer title in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Attorney at Law');
|
||
});
|
||
|
||
test('home page displays lawyer title in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('محامية');
|
||
});
|
||
|
||
test('home page displays lawyer bio in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Huda Armouche founded Libra for Rights');
|
||
});
|
||
|
||
test('home page displays lawyer bio in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('أسست هدى عرموش ليبرا للحقوق');
|
||
});
|
||
|
||
test('home page displays lawyer photo', function () {
|
||
$this->get('/')
|
||
->assertOk()
|
||
->assertSee('images/huda-armouche.jpg', false);
|
||
});
|
||
|
||
test('home page lawyer photo has alt text for accessibility', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('alt="Huda Armouche"', false);
|
||
});
|
||
|
||
// Services Section Tests
|
||
|
||
test('home page displays services section title in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Our Services');
|
||
});
|
||
|
||
test('home page displays services section title in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('خدماتنا');
|
||
});
|
||
|
||
test('home page displays services section subtitle in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Comprehensive legal solutions for individuals and businesses');
|
||
});
|
||
|
||
test('home page displays services section subtitle in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('حلول قانونية شاملة للأفراد والشركات');
|
||
});
|
||
|
||
// Values Section Tests
|
||
|
||
test('home page contains values section with id', function () {
|
||
$this->get('/')
|
||
->assertOk()
|
||
->assertSee('id="values"', false);
|
||
});
|
||
|
||
test('home page displays values section title in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Our Values');
|
||
});
|
||
|
||
test('home page displays values section title in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('قيمنا');
|
||
});
|
||
|
||
test('home page displays values section subtitle in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('These start in the field and return to the people');
|
||
});
|
||
|
||
test('home page displays values section subtitle in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('تبدأ من الميدان وتعود إلى الناس');
|
||
});
|
||
|
||
test('home page displays integrity value in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Integrity');
|
||
});
|
||
|
||
test('home page displays integrity value in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('النزاهة');
|
||
});
|
||
|
||
test('home page displays justice value in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Justice');
|
||
});
|
||
|
||
test('home page displays justice value in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('العدالة');
|
||
});
|
||
|
||
test('home page displays knowledge value in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Knowledge');
|
||
});
|
||
|
||
test('home page displays knowledge value in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('المعرفة');
|
||
});
|
||
|
||
test('home page displays womens empowerment value in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Women's Empowerment', false);
|
||
});
|
||
|
||
test('home page displays womens empowerment value in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('تمكين المرأة');
|
||
});
|
||
|
||
test('home page displays professionalism value in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Professionalism');
|
||
});
|
||
|
||
test('home page displays professionalism value in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('الاحترافية');
|
||
});
|
||
|
||
test('home page displays social innovation value in English', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Social Innovation');
|
||
});
|
||
|
||
test('home page displays social innovation value in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('الابتكار الاجتماعي');
|
||
});
|
||
|
||
// Latest Posts Section Tests
|
||
|
||
test('home page displays posts section when published posts exist', function () {
|
||
Post::factory()->published()->count(3)->create();
|
||
|
||
$this->get('/')
|
||
->assertOk()
|
||
->assertSee('id="posts"', false);
|
||
});
|
||
|
||
test('home page displays posts section title in English', function () {
|
||
Post::factory()->published()->create();
|
||
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Latest Articles');
|
||
});
|
||
|
||
test('home page displays posts section title in Arabic', function () {
|
||
Post::factory()->published()->create();
|
||
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('أحدث المقالات');
|
||
});
|
||
|
||
test('home page displays post titles', function () {
|
||
$post = Post::factory()->published()->create([
|
||
'title' => ['en' => 'Test English Title', 'ar' => 'عنوان اختبار'],
|
||
]);
|
||
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Test English Title');
|
||
});
|
||
|
||
test('home page displays post titles in Arabic', function () {
|
||
$post = Post::factory()->published()->create([
|
||
'title' => ['en' => 'Test English Title', 'ar' => 'عنوان اختبار عربي'],
|
||
]);
|
||
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('عنوان اختبار عربي');
|
||
});
|
||
|
||
test('home page displays post excerpt', function () {
|
||
$post = Post::factory()->published()->create([
|
||
'body' => ['en' => 'This is a test body content for the post that should be truncated.', 'ar' => 'هذا محتوى اختبار'],
|
||
]);
|
||
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('This is a test body content');
|
||
});
|
||
|
||
test('home page displays read more link in English', function () {
|
||
Post::factory()->published()->create();
|
||
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Read More');
|
||
});
|
||
|
||
test('home page displays read more link in Arabic', function () {
|
||
Post::factory()->published()->create();
|
||
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('اقرأ المزيد');
|
||
});
|
||
|
||
test('home page displays view all posts link in English', function () {
|
||
Post::factory()->published()->create();
|
||
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('View All Articles');
|
||
});
|
||
|
||
test('home page displays view all posts link in Arabic', function () {
|
||
Post::factory()->published()->create();
|
||
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('عرض جميع المقالات');
|
||
});
|
||
|
||
test('home page view all posts links to posts index', function () {
|
||
Post::factory()->published()->create();
|
||
|
||
$this->get('/')
|
||
->assertOk()
|
||
->assertSee('href="'.route('posts.index').'"', false);
|
||
});
|
||
|
||
test('home page post title links to post show page', function () {
|
||
$post = Post::factory()->published()->create();
|
||
|
||
$this->get('/')
|
||
->assertOk()
|
||
->assertSee('href="'.route('posts.show', $post).'"', false);
|
||
});
|
||
|
||
test('home page only shows published posts not drafts', function () {
|
||
$publishedPost = Post::factory()->published()->create([
|
||
'title' => ['en' => 'Published Post Title', 'ar' => 'منشور'],
|
||
]);
|
||
|
||
$draftPost = Post::factory()->draft()->create([
|
||
'title' => ['en' => 'Draft Post Title', 'ar' => 'مسودة'],
|
||
]);
|
||
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('Published Post Title')
|
||
->assertDontSee('Draft Post Title');
|
||
});
|
||
|
||
test('home page displays posts in order of latest published first', function () {
|
||
$oldPost = Post::factory()->published()->create([
|
||
'title' => ['en' => 'Old Post', 'ar' => 'قديم'],
|
||
'published_at' => now()->subDays(10),
|
||
]);
|
||
|
||
$newPost = Post::factory()->published()->create([
|
||
'title' => ['en' => 'New Post', 'ar' => 'جديد'],
|
||
'published_at' => now()->subDay(),
|
||
]);
|
||
|
||
$response = $this->withSession(['locale' => 'en'])->get('/');
|
||
$response->assertOk();
|
||
|
||
$content = $response->getContent();
|
||
$newPostPosition = strpos($content, 'New Post');
|
||
$oldPostPosition = strpos($content, 'Old Post');
|
||
|
||
// New post should appear before old post
|
||
expect($newPostPosition)->toBeLessThan($oldPostPosition);
|
||
});
|
||
|
||
test('home page displays post publication date', function () {
|
||
$post = Post::factory()->published()->create([
|
||
'published_at' => now()->setDate(2026, 1, 15),
|
||
]);
|
||
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('15 January 2026');
|
||
});
|
||
|
||
// Footer Section Tests
|
||
|
||
test('home page displays footer address with street name in Arabic', function () {
|
||
$this->withSession(['locale' => 'ar'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee('شارع يافا - بجانب الشني - العمارة الأمريكية - الطابق الرابع');
|
||
});
|
||
|
||
test('home page shows the empty articles message when no posts are published', function () {
|
||
$this->withSession(['locale' => 'en'])
|
||
->get('/')
|
||
->assertOk()
|
||
->assertSee(__('home.posts_empty', [], 'en'));
|
||
});
|
||
|
||
test('home page displays maximum 3 latest posts', function () {
|
||
Post::factory()->published()->count(5)->create();
|
||
|
||
$html = $this->get('/')->assertOk()->getContent();
|
||
|
||
expect(substr_count($html, 'class="post"'))->toBe(3);
|
||
});
|