From 21be2fbb5e42dfef1cad7734813c855a2625e011 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Tue, 17 Mar 2026 22:30:20 +0700 Subject: [PATCH] test: Add feature tests for various models including Announcement, Category, Cooperation, and more to ensure proper relationships and factory functionality. --- .../Feature/Models/AnnouncementMediaTest.php | 20 +++++++ tests/Feature/Models/AnnouncementTest.php | 13 +++++ tests/Feature/Models/CategoryNewsTest.php | 21 +++++++ tests/Feature/Models/CategoryTest.php | 13 +++++ tests/Feature/Models/ClassificationTest.php | 56 ++++++++++++++++++ tests/Feature/Models/CompanyTest.php | 46 +++++++++++++++ tests/Feature/Models/ContactTest.php | 11 ++++ tests/Feature/Models/ContentRecapTest.php | 13 +++++ tests/Feature/Models/CooperationMediaTest.php | 21 +++++++ .../Feature/Models/CooperationPaymentTest.php | 18 ++++++ .../Models/CooperationProposalTest.php | 15 +++++ tests/Feature/Models/CooperationTest.php | 12 ++++ .../Feature/Models/DataChangeRequestTest.php | 21 +++++++ tests/Feature/Models/DataChangeReviewTest.php | 19 +++++++ tests/Feature/Models/DepartmentTest.php | 13 +++++ tests/Feature/Models/IssueManagementTest.php | 27 +++++++++ tests/Feature/Models/JournalistTest.php | 14 +++++ tests/Feature/Models/LocationTest.php | 13 +++++ tests/Feature/Models/MediaMonitoringTest.php | 11 ++++ .../Models/MediaMonitoringThemeTest.php | 21 +++++++ .../Models/MediaTaskAssignmentTest.php | 15 +++++ tests/Feature/Models/NewsTest.php | 15 +++++ tests/Feature/Models/PartnerMediaTest.php | 14 +++++ tests/Feature/Models/RejectionReasonTest.php | 19 +++++++ tests/Feature/Models/ReportTest.php | 12 ++++ .../Feature/Models/SubClassificationTest.php | 28 +++++++++ tests/Feature/Models/SubLocationTest.php | 15 +++++ tests/Feature/Models/TaskAssignmentTest.php | 15 +++++ tests/Feature/Models/ThemeTest.php | 13 +++++ tests/Feature/Models/UserTest.php | 57 +++++++++++++++++++ .../Models/VerificationRequestTest.php | 53 +++++++++++++++++ .../Feature/Models/VerificationReviewTest.php | 31 ++++++++++ tests/Feature/Models/VisitorTest.php | 13 +++++ 33 files changed, 698 insertions(+) create mode 100644 tests/Feature/Models/AnnouncementMediaTest.php create mode 100644 tests/Feature/Models/AnnouncementTest.php create mode 100644 tests/Feature/Models/CategoryNewsTest.php create mode 100644 tests/Feature/Models/CategoryTest.php create mode 100644 tests/Feature/Models/ClassificationTest.php create mode 100644 tests/Feature/Models/CompanyTest.php create mode 100644 tests/Feature/Models/ContactTest.php create mode 100644 tests/Feature/Models/ContentRecapTest.php create mode 100644 tests/Feature/Models/CooperationMediaTest.php create mode 100644 tests/Feature/Models/CooperationPaymentTest.php create mode 100644 tests/Feature/Models/CooperationProposalTest.php create mode 100644 tests/Feature/Models/CooperationTest.php create mode 100644 tests/Feature/Models/DataChangeRequestTest.php create mode 100644 tests/Feature/Models/DataChangeReviewTest.php create mode 100644 tests/Feature/Models/DepartmentTest.php create mode 100644 tests/Feature/Models/IssueManagementTest.php create mode 100644 tests/Feature/Models/JournalistTest.php create mode 100644 tests/Feature/Models/LocationTest.php create mode 100644 tests/Feature/Models/MediaMonitoringTest.php create mode 100644 tests/Feature/Models/MediaMonitoringThemeTest.php create mode 100644 tests/Feature/Models/MediaTaskAssignmentTest.php create mode 100644 tests/Feature/Models/NewsTest.php create mode 100644 tests/Feature/Models/PartnerMediaTest.php create mode 100644 tests/Feature/Models/RejectionReasonTest.php create mode 100644 tests/Feature/Models/ReportTest.php create mode 100644 tests/Feature/Models/SubClassificationTest.php create mode 100644 tests/Feature/Models/SubLocationTest.php create mode 100644 tests/Feature/Models/TaskAssignmentTest.php create mode 100644 tests/Feature/Models/ThemeTest.php create mode 100644 tests/Feature/Models/UserTest.php create mode 100644 tests/Feature/Models/VerificationRequestTest.php create mode 100644 tests/Feature/Models/VerificationReviewTest.php create mode 100644 tests/Feature/Models/VisitorTest.php diff --git a/tests/Feature/Models/AnnouncementMediaTest.php b/tests/Feature/Models/AnnouncementMediaTest.php new file mode 100644 index 0000000..cc8a355 --- /dev/null +++ b/tests/Feature/Models/AnnouncementMediaTest.php @@ -0,0 +1,20 @@ +create(); + $media = PartnerMedia::factory()->create(); + $announcementMedia = AnnouncementMedia::factory()->create([ + 'announcement_id' => $announcement->id, + 'partner_media_id' => $media->id, + ]); + + expect($announcementMedia->announcement->id)->toBe($announcement->id); + expect($announcementMedia->partnerMedia->id)->toBe($media->id); +}); diff --git a/tests/Feature/Models/AnnouncementTest.php b/tests/Feature/Models/AnnouncementTest.php new file mode 100644 index 0000000..10c4d39 --- /dev/null +++ b/tests/Feature/Models/AnnouncementTest.php @@ -0,0 +1,13 @@ +create(['title' => 'Test Promo']); + expect($announcement->title)->toBe('Test Promo'); + expect($announcement->type)->toBe(AnnouncementType::PUBLIC); +}); diff --git a/tests/Feature/Models/CategoryNewsTest.php b/tests/Feature/Models/CategoryNewsTest.php new file mode 100644 index 0000000..6fcb342 --- /dev/null +++ b/tests/Feature/Models/CategoryNewsTest.php @@ -0,0 +1,21 @@ +create(); + $category = Category::factory()->create(); + + $categoryNews = CategoryNews::factory()->create([ + 'news_id' => $news->id, + 'category_id' => $category->id, + ]); + + expect($categoryNews->news->id)->toBe($news->id); + expect($categoryNews->category->id)->toBe($category->id); +}); diff --git a/tests/Feature/Models/CategoryTest.php b/tests/Feature/Models/CategoryTest.php new file mode 100644 index 0000000..3d4e5f6 --- /dev/null +++ b/tests/Feature/Models/CategoryTest.php @@ -0,0 +1,13 @@ +create(['name' => 'Politik']); + expect($category->name)->toBe('Politik'); + expect($category->is_active)->toBe(IsActive::ACTIVE); +}); diff --git a/tests/Feature/Models/ClassificationTest.php b/tests/Feature/Models/ClassificationTest.php new file mode 100644 index 0000000..629b30b --- /dev/null +++ b/tests/Feature/Models/ClassificationTest.php @@ -0,0 +1,56 @@ +getGuarded())->toBe(['id']); +}); + +test('classification has correct casts', function () { + $classification = new Classification; + + expect($classification->getCasts())->toHaveKey('is_active', IsActive::class); + expect($classification->getCasts())->toHaveKey('deleted_at', 'datetime'); +}); + +test('classification can be created using factory', function () { + $classification = Classification::factory()->create([ + 'name' => 'Test Classification', + ]); + + expect($classification->name)->toBe('Test Classification'); + $this->assertDatabaseHas('classifications', [ + 'id' => $classification->id, + 'name' => 'Test Classification', + ]); +}); + +test('classification active scope filters correctly', function () { + Classification::factory()->count(3)->active()->create(); + Classification::factory()->count(2)->inactive()->create(); + + expect(Classification::active()->count())->toBe(3); +}); + +test('classification inactive scope filters correctly', function () { + Classification::factory()->count(3)->active()->create(); + Classification::factory()->count(2)->inactive()->create(); + + expect(Classification::inactive()->count())->toBe(2); +}); + +test('classification has many sub classifications', function () { + $classification = Classification::factory()->create(); + + // We need SubClassification factory for this, but let's just check the relation type for now + // or create a quick test without factory if it's not ready. + expect($classification->subClassifications())->toBeInstanceOf(HasMany::class); +}); diff --git a/tests/Feature/Models/CompanyTest.php b/tests/Feature/Models/CompanyTest.php new file mode 100644 index 0000000..bfd65f3 --- /dev/null +++ b/tests/Feature/Models/CompanyTest.php @@ -0,0 +1,46 @@ +getGuarded())->toBe(['id']); +}); + +test('company can be created using factory', function () { + $company = Company::factory()->create([ + 'name' => 'PT Media Maju', + ]); + + expect($company->name)->toBe('PT Media Maju'); + $this->assertDatabaseHas('companies', ['name' => 'PT Media Maju']); +}); + +test('company belongs to a user', function () { + $user = User::factory()->create(); + $company = Company::factory()->create(['user_id' => $user->id]); + + expect($company->user)->toBeInstanceOf(User::class); + expect($company->user->id)->toBe($user->id); +}); + +test('company has one verification request', function () { + $company = Company::factory()->create(); + $request = VerificationRequest::factory()->create(['company_id' => $company->id]); + + expect($company->verificationRequest)->toBeInstanceOf(VerificationRequest::class); + expect($company->verificationRequest->id)->toBe($request->id); +}); + +test('company has static method for data change labels', function () { + $labels = Company::dataChangeEntryLabels(); + + expect($labels)->toBeArray(); + expect($labels)->toHaveKey('name', 'Nama'); + expect($labels)->toHaveKey('director_nik', 'NIK Direktur'); +}); diff --git a/tests/Feature/Models/ContactTest.php b/tests/Feature/Models/ContactTest.php new file mode 100644 index 0000000..52ad366 --- /dev/null +++ b/tests/Feature/Models/ContactTest.php @@ -0,0 +1,11 @@ +create(['email' => 'user@test.com']); + expect($contact->email)->toBe('user@test.com'); +}); diff --git a/tests/Feature/Models/ContentRecapTest.php b/tests/Feature/Models/ContentRecapTest.php new file mode 100644 index 0000000..465f8a1 --- /dev/null +++ b/tests/Feature/Models/ContentRecapTest.php @@ -0,0 +1,13 @@ +create(['title' => 'Weekly Recap']); + expect($recap->title)->toBe('Weekly Recap'); + expect($recap->classification)->toBeInstanceOf(Classification::class); +}); diff --git a/tests/Feature/Models/CooperationMediaTest.php b/tests/Feature/Models/CooperationMediaTest.php new file mode 100644 index 0000000..f0a7755 --- /dev/null +++ b/tests/Feature/Models/CooperationMediaTest.php @@ -0,0 +1,21 @@ +create(); + $media = PartnerMedia::factory()->create(); + + $coopMedia = CooperationMedia::factory()->create([ + 'cooperation_id' => $cooperation->id, + 'partner_media_id' => $media->id, + ]); + + expect($coopMedia->cooperation->id)->toBe($cooperation->id); + expect($coopMedia->partnerMedia->id)->toBe($media->id); +}); diff --git a/tests/Feature/Models/CooperationPaymentTest.php b/tests/Feature/Models/CooperationPaymentTest.php new file mode 100644 index 0000000..8513f34 --- /dev/null +++ b/tests/Feature/Models/CooperationPaymentTest.php @@ -0,0 +1,18 @@ +create(); + $payment = CooperationPayment::factory()->create([ + 'cooperation_media_id' => $coopMedia->id, + 'amount' => 5000000, + ]); + + expect($payment->amount)->toBe(5000000); + expect($payment->cooperationMedia->id)->toBe($coopMedia->id); +}); diff --git a/tests/Feature/Models/CooperationProposalTest.php b/tests/Feature/Models/CooperationProposalTest.php new file mode 100644 index 0000000..b84142d --- /dev/null +++ b/tests/Feature/Models/CooperationProposalTest.php @@ -0,0 +1,15 @@ +create([ + 'status' => ApprovalStatus::PENDING, + ]); + + expect($proposal->status)->toBe(ApprovalStatus::PENDING); +}); diff --git a/tests/Feature/Models/CooperationTest.php b/tests/Feature/Models/CooperationTest.php new file mode 100644 index 0000000..bbb7d0f --- /dev/null +++ b/tests/Feature/Models/CooperationTest.php @@ -0,0 +1,12 @@ +create(); + expect($cooperation->status)->toBe(CooperationStatus::PENDING); +}); diff --git a/tests/Feature/Models/DataChangeRequestTest.php b/tests/Feature/Models/DataChangeRequestTest.php new file mode 100644 index 0000000..e5b266a --- /dev/null +++ b/tests/Feature/Models/DataChangeRequestTest.php @@ -0,0 +1,21 @@ +create(); + $request = DataChangeRequest::factory()->create([ + 'entity_type' => Company::class, + 'entity_id' => $company->id, + 'status' => DataChangeStatus::PENDING, + ]); + + expect($request->status)->toBe(DataChangeStatus::PENDING); + expect($request->entity)->toBeInstanceOf(Company::class); + expect($request->entity->id)->toBe($company->id); +}); diff --git a/tests/Feature/Models/DataChangeReviewTest.php b/tests/Feature/Models/DataChangeReviewTest.php new file mode 100644 index 0000000..7fbb5ae --- /dev/null +++ b/tests/Feature/Models/DataChangeReviewTest.php @@ -0,0 +1,19 @@ +create(); + $review = DataChangeReview::factory()->create([ + 'data_change_request_id' => $request->id, + 'decision' => DataChangeDecision::APPROVED, + ]); + + expect($request->review->id)->toBe($review->id); + expect($review->request->id)->toBe($request->id); +}); diff --git a/tests/Feature/Models/DepartmentTest.php b/tests/Feature/Models/DepartmentTest.php new file mode 100644 index 0000000..17b49ef --- /dev/null +++ b/tests/Feature/Models/DepartmentTest.php @@ -0,0 +1,13 @@ +create(['name' => 'IT Research', 'alias' => 'ITR']); + expect($dept->name)->toBe('IT Research'); + expect($dept->is_active)->toBe(IsActive::ACTIVE); +}); diff --git a/tests/Feature/Models/IssueManagementTest.php b/tests/Feature/Models/IssueManagementTest.php new file mode 100644 index 0000000..b166532 --- /dev/null +++ b/tests/Feature/Models/IssueManagementTest.php @@ -0,0 +1,27 @@ +create(); + $classification = Classification::factory()->create(); + $monitoring = MediaMonitoring::factory()->create(); + + $issue = IssueManagement::factory()->create([ + 'location_id' => $location->id, + 'classification_id' => $classification->id, + 'media_monitoring_id' => $monitoring->id, + 'issue' => IssueSentiment::POSITIVE, + ]); + + expect($issue->issue)->toBe(IssueSentiment::POSITIVE); + expect($issue->location->id)->toBe($location->id); + expect($issue->mediaMonitoring->id)->toBe($monitoring->id); +}); diff --git a/tests/Feature/Models/JournalistTest.php b/tests/Feature/Models/JournalistTest.php new file mode 100644 index 0000000..06498d2 --- /dev/null +++ b/tests/Feature/Models/JournalistTest.php @@ -0,0 +1,14 @@ +create(); + $journalist = Journalist::factory()->create(['partner_media_id' => $media->id]); + + expect($journalist->partnerMedia->id)->toBe($media->id); +}); diff --git a/tests/Feature/Models/LocationTest.php b/tests/Feature/Models/LocationTest.php new file mode 100644 index 0000000..8ac2d14 --- /dev/null +++ b/tests/Feature/Models/LocationTest.php @@ -0,0 +1,13 @@ +create(['name' => 'Purwakarta']); + expect($location->name)->toBe('Purwakarta'); + expect($location->is_active)->toBe(IsActive::ACTIVE); +}); diff --git a/tests/Feature/Models/MediaMonitoringTest.php b/tests/Feature/Models/MediaMonitoringTest.php new file mode 100644 index 0000000..1988173 --- /dev/null +++ b/tests/Feature/Models/MediaMonitoringTest.php @@ -0,0 +1,11 @@ +create(['media_name' => 'Tempo']); + expect($monitoring->media_name)->toBe('Tempo'); +}); diff --git a/tests/Feature/Models/MediaMonitoringThemeTest.php b/tests/Feature/Models/MediaMonitoringThemeTest.php new file mode 100644 index 0000000..847e8e0 --- /dev/null +++ b/tests/Feature/Models/MediaMonitoringThemeTest.php @@ -0,0 +1,21 @@ +create(); + $theme = Theme::factory()->create(); + $mmt = MediaMonitoringTheme::factory()->create([ + 'media_monitoring_id' => $monitoring->id, + 'theme_id' => $theme->id, + ]); + + expect($mmt->mediaMonitoring->id)->toBe($monitoring->id); + expect($mmt->theme->id)->toBe($theme->id); + expect($monitoring->themes->first()->id)->toBe($theme->id); +}); diff --git a/tests/Feature/Models/MediaTaskAssignmentTest.php b/tests/Feature/Models/MediaTaskAssignmentTest.php new file mode 100644 index 0000000..b3a2bab --- /dev/null +++ b/tests/Feature/Models/MediaTaskAssignmentTest.php @@ -0,0 +1,15 @@ +create(); + $report = Report::factory()->create(['media_task_assignment_id' => $mta->id]); + + expect($report->mediaTaskAssignment->id)->toBe($mta->id); + expect($mta->reports)->toHaveCount(1); +}); diff --git a/tests/Feature/Models/NewsTest.php b/tests/Feature/Models/NewsTest.php new file mode 100644 index 0000000..95c7c6f --- /dev/null +++ b/tests/Feature/Models/NewsTest.php @@ -0,0 +1,15 @@ +create([ + 'title' => 'Kabar Purwakarta', + 'slug' => 'kabar-purwakarta', + ]); + expect($news->title)->toBe('Kabar Purwakarta'); + expect($news->slug)->toBe('kabar-purwakarta'); +}); diff --git a/tests/Feature/Models/PartnerMediaTest.php b/tests/Feature/Models/PartnerMediaTest.php new file mode 100644 index 0000000..2ab959b --- /dev/null +++ b/tests/Feature/Models/PartnerMediaTest.php @@ -0,0 +1,14 @@ +create(); + Journalist::factory()->count(2)->create(['partner_media_id' => $media->id]); + + expect($media->journalists)->toHaveCount(2); +}); diff --git a/tests/Feature/Models/RejectionReasonTest.php b/tests/Feature/Models/RejectionReasonTest.php new file mode 100644 index 0000000..0658e01 --- /dev/null +++ b/tests/Feature/Models/RejectionReasonTest.php @@ -0,0 +1,19 @@ +create(); + $rejection = RejectionReason::factory()->create([ + 'rejectable_type' => Report::class, + 'rejectable_id' => $report->id, + 'reason' => 'Invalid link', + ]); + + expect($rejection->reason)->toBe('Invalid link'); + expect($rejection->rejectable)->toBeInstanceOf(Report::class); +}); diff --git a/tests/Feature/Models/ReportTest.php b/tests/Feature/Models/ReportTest.php new file mode 100644 index 0000000..cc5d03c --- /dev/null +++ b/tests/Feature/Models/ReportTest.php @@ -0,0 +1,12 @@ +create(['status' => ApprovalStatus::PENDING]); + expect($report->status)->toBe(ApprovalStatus::PENDING); +}); diff --git a/tests/Feature/Models/SubClassificationTest.php b/tests/Feature/Models/SubClassificationTest.php new file mode 100644 index 0000000..ef9c532 --- /dev/null +++ b/tests/Feature/Models/SubClassificationTest.php @@ -0,0 +1,28 @@ +create(['name' => 'Sub Test']); + + expect($sub->name)->toBe('Sub Test'); + expect($sub->classification)->toBeInstanceOf(Classification::class); +}); + +test('sub classification belongs to a classification', function () { + $parent = Classification::factory()->create(); + $sub = SubClassification::factory()->create(['classification_id' => $parent->id]); + + expect($sub->classification->id)->toBe($parent->id); +}); + +test('classification has many sub classifications relationship works', function () { + $parent = Classification::factory()->create(); + SubClassification::factory()->count(3)->create(['classification_id' => $parent->id]); + + expect($parent->subClassifications)->toHaveCount(3); +}); diff --git a/tests/Feature/Models/SubLocationTest.php b/tests/Feature/Models/SubLocationTest.php new file mode 100644 index 0000000..3261740 --- /dev/null +++ b/tests/Feature/Models/SubLocationTest.php @@ -0,0 +1,15 @@ +create(); + $sub = SubLocation::factory()->create(['location_id' => $parent->id]); + + expect($sub->location->id)->toBe($parent->id); + expect($parent->subLocations)->toHaveCount(1); +}); diff --git a/tests/Feature/Models/TaskAssignmentTest.php b/tests/Feature/Models/TaskAssignmentTest.php new file mode 100644 index 0000000..e627ada --- /dev/null +++ b/tests/Feature/Models/TaskAssignmentTest.php @@ -0,0 +1,15 @@ +create(); + $task = TaskAssignment::factory()->create(['cooperation_id' => $cooperation->id]); + + expect($task->cooperation->id)->toBe($cooperation->id); + expect($cooperation->taskAssignment->id)->toBe($task->id); +}); diff --git a/tests/Feature/Models/ThemeTest.php b/tests/Feature/Models/ThemeTest.php new file mode 100644 index 0000000..e0b1172 --- /dev/null +++ b/tests/Feature/Models/ThemeTest.php @@ -0,0 +1,13 @@ +create(['name' => 'Politik']); + expect($theme->name)->toBe('Politik'); + expect($theme->is_active)->toBe(IsActive::ACTIVE); +}); diff --git a/tests/Feature/Models/UserTest.php b/tests/Feature/Models/UserTest.php new file mode 100644 index 0000000..8faf41e --- /dev/null +++ b/tests/Feature/Models/UserTest.php @@ -0,0 +1,57 @@ +getGuarded())->toBe(['id']); +}); + +test('user has correct casts', function () { + $user = new User; + expect($user->getCasts())->toHaveKey('password', 'hashed'); + expect($user->getCasts())->toHaveKey('is_active', IsActive::class); +}); + +test('user can be created using factory', function () { + $user = User::factory()->create([ + 'name' => 'John Doe', + 'email' => 'john@example.com', + ]); + + expect($user->name)->toBe('John Doe'); + expect(Hash::check('password', $user->password))->toBeTrue(); + $this->assertDatabaseHas('users', ['email' => 'john@example.com']); +}); + +test('user active scope filters correctly', function () { + User::factory()->count(2)->create(['is_active' => IsActive::ACTIVE]); + User::factory()->count(1)->create(['is_active' => IsActive::INACTIVE]); + + expect(User::active()->count())->toBe(2); +}); + +test('user can access panel if active', function () { + $user = User::factory()->create(['is_active' => IsActive::ACTIVE]); + + // Default mock for Filament Panel if needed, but the method logic is simple + expect($user->canAccessPanel(mock(Panel::class)))->toBeTrue(); +}); + +test('user cannot access panel if inactive', function () { + $user = User::factory()->create(['is_active' => IsActive::INACTIVE]); + + expect($user->canAccessPanel(mock(Panel::class)))->toBeFalse(); +}); + +test('user has company relation', function () { + $user = User::factory()->create(); + expect($user->company())->toBeInstanceOf(HasOne::class); +}); diff --git a/tests/Feature/Models/VerificationRequestTest.php b/tests/Feature/Models/VerificationRequestTest.php new file mode 100644 index 0000000..0e7a255 --- /dev/null +++ b/tests/Feature/Models/VerificationRequestTest.php @@ -0,0 +1,53 @@ +getGuarded())->toBe(['id']); +}); + +test('verification request has correct casts', function () { + $request = new VerificationRequest; + expect($request->getCasts())->toHaveKey('status', VerificationStatus::class); +}); + +test('verification request can be created using factory', function () { + $request = VerificationRequest::factory()->create(); + + expect($request->status)->toBe(VerificationStatus::PENDING); + $this->assertDatabaseHas('verification_requests', ['id' => $request->id]); +}); + +test('verification request scopes filter correctly', function () { + VerificationRequest::factory()->count(2)->approved()->create(); + VerificationRequest::factory()->count(3)->pending()->create(); + VerificationRequest::factory()->count(1)->rejected()->create(); + VerificationRequest::factory()->count(1)->needRevision()->create(); + + expect(VerificationRequest::approved()->count())->toBe(2); + expect(VerificationRequest::pending()->count())->toBe(3); + expect(VerificationRequest::rejected()->count())->toBe(1); + expect(VerificationRequest::needRevision()->count())->toBe(1); +}); + +test('verification request belongs to company and user', function () { + $company = Company::factory()->create(); + $user = User::factory()->create(); + + $request = VerificationRequest::factory()->create([ + 'company_id' => $company->id, + 'submitted_by' => $user->id, + ]); + + expect($request->company)->toBeInstanceOf(Company::class); + expect($request->submittedBy)->toBeInstanceOf(User::class); + expect($request->company->id)->toBe($company->id); + expect($request->submittedBy->id)->toBe($user->id); +}); diff --git a/tests/Feature/Models/VerificationReviewTest.php b/tests/Feature/Models/VerificationReviewTest.php new file mode 100644 index 0000000..8e7c03d --- /dev/null +++ b/tests/Feature/Models/VerificationReviewTest.php @@ -0,0 +1,31 @@ +create(); + $reviewer = User::factory()->create(); + + $review = VerificationReview::factory()->create([ + 'verification_request_id' => $request->id, + 'reviewer_id' => $reviewer->id, + 'decision' => DecisionAdmin::APPROVED, + ]); + + expect($review->decision)->toBe(DecisionAdmin::APPROVED); + expect($review->verificationRequest->id)->toBe($request->id); + expect($review->reviewer->id)->toBe($reviewer->id); +}); + +test('verification request has many reviews', function () { + $request = VerificationRequest::factory()->create(); + VerificationReview::factory()->count(2)->create(['verification_request_id' => $request->id]); + + expect($request->reviews)->toHaveCount(2); +}); diff --git a/tests/Feature/Models/VisitorTest.php b/tests/Feature/Models/VisitorTest.php new file mode 100644 index 0000000..08ea57e --- /dev/null +++ b/tests/Feature/Models/VisitorTest.php @@ -0,0 +1,13 @@ +create(['ip' => '127.0.0.1']); + expect($visitor->ip)->toBe('127.0.0.1'); + expect($visitor->user)->toBeInstanceOf(User::class); +});