Files
libra/tests/Feature/Public/HomePageTest.php
T

490 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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&#039;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);
});