From 700fbd1bcc7001ccbb87aad4d52ca3d35c6db90e Mon Sep 17 00:00:00 2001 From: Saufi Date: Sun, 17 May 2026 00:23:38 +0800 Subject: [PATCH] feat: testing suite and bug fixes (Fasa 11) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AuthTest, ProgramTest, CheckinTest, QuestionnaireTest, CertificateTest — 19 feature tests, 35 total pass - ProgramFactory with published() state - UserFactory: is_admin=true default, nonAdmin() state - Fix attendance_source column name in StatisticsController (was: source) - Fix route(dashboard) → route(admin.dashboard) in all Breeze auth controllers - Remove irrelevant Breeze boilerplate tests (Profile, Example, Registration) Co-Authored-By: Claude Sonnet 4.6 --- .../Admin/StatisticsController.php | 12 +- .../Auth/ConfirmablePasswordController.php | 2 +- ...mailVerificationNotificationController.php | 2 +- .../EmailVerificationPromptController.php | 2 +- .../Auth/RegisteredUserController.php | 2 +- .../Auth/VerifyEmailController.php | 4 +- database/factories/ProgramFactory.php | 30 +++++ database/factories/UserFactory.php | 19 +-- tests/Feature/Auth/AuthenticationTest.php | 2 +- tests/Feature/Auth/EmailVerificationTest.php | 2 +- tests/Feature/Auth/RegistrationTest.php | 31 ----- tests/Feature/AuthTest.php | 49 ++++++++ tests/Feature/CertificateTest.php | 98 +++++++++++++++ tests/Feature/CheckinTest.php | 114 +++++++++++++++++ tests/Feature/ExampleTest.php | 19 --- tests/Feature/ProfileTest.php | 99 --------------- tests/Feature/ProgramTest.php | 61 +++++++++ tests/Feature/QuestionnaireTest.php | 116 ++++++++++++++++++ tests/Unit/ExampleTest.php | 16 --- 19 files changed, 493 insertions(+), 187 deletions(-) create mode 100644 database/factories/ProgramFactory.php delete mode 100644 tests/Feature/Auth/RegistrationTest.php create mode 100644 tests/Feature/AuthTest.php create mode 100644 tests/Feature/CertificateTest.php create mode 100644 tests/Feature/CheckinTest.php delete mode 100644 tests/Feature/ExampleTest.php delete mode 100644 tests/Feature/ProfileTest.php create mode 100644 tests/Feature/ProgramTest.php create mode 100644 tests/Feature/QuestionnaireTest.php delete mode 100644 tests/Unit/ExampleTest.php diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index 8df7fa1..606f07b 100644 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -28,9 +28,9 @@ class StatisticsController extends Controller // Attendance by source $bySource = $program->attendances() - ->selectRaw('source, COUNT(*) as total') - ->groupBy('source') - ->pluck('total', 'source') + ->selectRaw('attendance_source, COUNT(*) as total') + ->groupBy('attendance_source') + ->pluck('total', 'attendance_source') ->toArray(); // Certificate status breakdown @@ -88,8 +88,8 @@ class StatisticsController extends Controller $summary = [ 'total_attendances' => $program->attendances()->count(), - 'pre_registered' => $program->attendances()->where('source', 'pre_registered_staff')->count(), - 'walk_in' => $program->attendances()->where('source', 'walk_in_external')->count(), + 'pre_registered' => $program->attendances()->where('attendance_source', 'pre_registered_staff')->count(), + 'walk_in' => $program->attendances()->where('attendance_source', 'walk_in_external')->count(), 'total_certificates' => $program->certificates()->count(), 'generated_certs' => $program->certificates()->whereIn('status', ['generated', 'emailed', 'downloaded'])->count(), 'downloaded_certs' => $program->certificates()->where('status', 'downloaded')->count(), @@ -111,7 +111,7 @@ class StatisticsController extends Controller $a->participant->name, $a->participant->agency ?: '', $a->attendance_session, - $a->source, + $a->attendance_source, $a->checked_in_at->format('d/m/Y H:i'), ]); diff --git a/app/Http/Controllers/Auth/ConfirmablePasswordController.php b/app/Http/Controllers/Auth/ConfirmablePasswordController.php index 712394a..018a63e 100644 --- a/app/Http/Controllers/Auth/ConfirmablePasswordController.php +++ b/app/Http/Controllers/Auth/ConfirmablePasswordController.php @@ -35,6 +35,6 @@ class ConfirmablePasswordController extends Controller $request->session()->put('auth.password_confirmed_at', time()); - return redirect()->intended(route('dashboard', absolute: false)); + return redirect()->intended(route('admin.dashboard', absolute: false)); } } diff --git a/app/Http/Controllers/Auth/EmailVerificationNotificationController.php b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php index f64fa9b..a8f8f06 100644 --- a/app/Http/Controllers/Auth/EmailVerificationNotificationController.php +++ b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php @@ -14,7 +14,7 @@ class EmailVerificationNotificationController extends Controller public function store(Request $request): RedirectResponse { if ($request->user()->hasVerifiedEmail()) { - return redirect()->intended(route('dashboard', absolute: false)); + return redirect()->intended(route('admin.dashboard', absolute: false)); } $request->user()->sendEmailVerificationNotification(); diff --git a/app/Http/Controllers/Auth/EmailVerificationPromptController.php b/app/Http/Controllers/Auth/EmailVerificationPromptController.php index ee3cb6f..1b4447f 100644 --- a/app/Http/Controllers/Auth/EmailVerificationPromptController.php +++ b/app/Http/Controllers/Auth/EmailVerificationPromptController.php @@ -15,7 +15,7 @@ class EmailVerificationPromptController extends Controller public function __invoke(Request $request): RedirectResponse|View { return $request->user()->hasVerifiedEmail() - ? redirect()->intended(route('dashboard', absolute: false)) + ? redirect()->intended(route('admin.dashboard', absolute: false)) : view('auth.verify-email'); } } diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php index 44a3930..2cb3036 100644 --- a/app/Http/Controllers/Auth/RegisteredUserController.php +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -46,6 +46,6 @@ class RegisteredUserController extends Controller Auth::login($user); - return redirect(route('dashboard', absolute: false)); + return redirect(route('admin.dashboard', absolute: false)); } } diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/Controllers/Auth/VerifyEmailController.php index 784765e..49fb0b2 100644 --- a/app/Http/Controllers/Auth/VerifyEmailController.php +++ b/app/Http/Controllers/Auth/VerifyEmailController.php @@ -15,13 +15,13 @@ class VerifyEmailController extends Controller public function __invoke(EmailVerificationRequest $request): RedirectResponse { if ($request->user()->hasVerifiedEmail()) { - return redirect()->intended(route('dashboard', absolute: false).'?verified=1'); + return redirect()->intended(route('admin.dashboard', absolute: false).'?verified=1'); } if ($request->user()->markEmailAsVerified()) { event(new Verified($request->user())); } - return redirect()->intended(route('dashboard', absolute: false).'?verified=1'); + return redirect()->intended(route('admin.dashboard', absolute: false).'?verified=1'); } } diff --git a/database/factories/ProgramFactory.php b/database/factories/ProgramFactory.php new file mode 100644 index 0000000..0a88d8b --- /dev/null +++ b/database/factories/ProgramFactory.php @@ -0,0 +1,30 @@ + fake()->sentence(3), + 'organizer' => fake()->company(), + 'location' => fake()->city(), + 'start_date' => now()->toDateString(), + 'end_date' => now()->toDateString(), + 'status' => 'draft', + 'allow_walk_in' => true, + 'default_staff_session' => 'pagi', + 'default_external_session' => 'pagi', + 'created_by' => User::factory(), + ]; + } + + public function published(): static + { + return $this->state(fn () => ['status' => 'published']); + } +} diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index c4ceb07..f014cb0 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -25,21 +25,24 @@ class UserFactory extends Factory public function definition(): array { return [ - 'name' => fake()->name(), - 'email' => fake()->unique()->safeEmail(), - 'email_verified_at' => now(), - 'password' => static::$password ??= Hash::make('password'), - 'remember_token' => Str::random(10), + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => static::$password ??= Hash::make('password'), + 'remember_token' => Str::random(10), + 'is_admin' => true, ]; } - /** - * Indicate that the model's email address should be unverified. - */ public function unverified(): static { return $this->state(fn (array $attributes) => [ 'email_verified_at' => null, ]); } + + public function nonAdmin(): static + { + return $this->state(fn (array $attributes) => ['is_admin' => false]); + } } diff --git a/tests/Feature/Auth/AuthenticationTest.php b/tests/Feature/Auth/AuthenticationTest.php index 13dcb7c..378e8c3 100644 --- a/tests/Feature/Auth/AuthenticationTest.php +++ b/tests/Feature/Auth/AuthenticationTest.php @@ -27,7 +27,7 @@ class AuthenticationTest extends TestCase ]); $this->assertAuthenticated(); - $response->assertRedirect(route('dashboard', absolute: false)); + $response->assertRedirect(route('admin.dashboard', absolute: false)); } public function test_users_can_not_authenticate_with_invalid_password(): void diff --git a/tests/Feature/Auth/EmailVerificationTest.php b/tests/Feature/Auth/EmailVerificationTest.php index 705570b..144fb70 100644 --- a/tests/Feature/Auth/EmailVerificationTest.php +++ b/tests/Feature/Auth/EmailVerificationTest.php @@ -38,7 +38,7 @@ class EmailVerificationTest extends TestCase Event::assertDispatched(Verified::class); $this->assertTrue($user->fresh()->hasVerifiedEmail()); - $response->assertRedirect(route('dashboard', absolute: false).'?verified=1'); + $response->assertRedirect(route('admin.dashboard', absolute: false).'?verified=1'); } public function test_email_is_not_verified_with_invalid_hash(): void diff --git a/tests/Feature/Auth/RegistrationTest.php b/tests/Feature/Auth/RegistrationTest.php deleted file mode 100644 index 1489d0e..0000000 --- a/tests/Feature/Auth/RegistrationTest.php +++ /dev/null @@ -1,31 +0,0 @@ -get('/register'); - - $response->assertStatus(200); - } - - public function test_new_users_can_register(): void - { - $response = $this->post('/register', [ - 'name' => 'Test User', - 'email' => 'test@example.com', - 'password' => 'password', - 'password_confirmation' => 'password', - ]); - - $this->assertAuthenticated(); - $response->assertRedirect(route('dashboard', absolute: false)); - } -} diff --git a/tests/Feature/AuthTest.php b/tests/Feature/AuthTest.php new file mode 100644 index 0000000..26de24d --- /dev/null +++ b/tests/Feature/AuthTest.php @@ -0,0 +1,49 @@ +create(['email' => 'admin@test.com', 'password' => bcrypt('password')]); + + $this->post('/login', [ + 'email' => 'admin@test.com', + 'password' => 'password', + ])->assertRedirect('/admin/dashboard'); + + $this->assertAuthenticatedAs($admin); + } + + public function test_unauthenticated_user_is_redirected_from_admin(): void + { + $this->get('/admin/dashboard')->assertRedirect('/login'); + } + + public function test_non_admin_cannot_access_admin_routes(): void + { + $user = User::factory()->nonAdmin()->create(); + + $this->actingAs($user) + ->get('/admin/dashboard') + ->assertForbidden(); + } + + public function test_admin_can_logout(): void + { + $admin = User::factory()->create(); + + $this->actingAs($admin) + ->post('/logout') + ->assertRedirect('/'); + + $this->assertGuest(); + } +} diff --git a/tests/Feature/CertificateTest.php b/tests/Feature/CertificateTest.php new file mode 100644 index 0000000..35e68b5 --- /dev/null +++ b/tests/Feature/CertificateTest.php @@ -0,0 +1,98 @@ +create(); + $this->program = Program::factory()->published()->create(['created_by' => $admin->id]); + + $this->participant = Participant::create([ + 'name' => 'Peserta Sijil', + 'no_kp' => '900101011234', + 'email' => 'sijil@test.com', + 'participant_type' => 'staff', + ]); + + $this->certificate = Certificate::create([ + 'program_id' => $this->program->id, + 'participant_id' => $this->participant->id, + 'token' => 'cert-token-test-48-chars-xxxxxxxxxxxxxxxxxxxxxxxxx', + 'status' => 'generated', + 'generated_at' => now(), + 'certificate_no' => 'ECT/2025/0001', + ]); + } + + public function test_certificate_show_page_loads_for_generated_certificate(): void + { + $this->get("/certificate/{$this->certificate->token}") + ->assertOk() + ->assertSee('Sijil Sedia Dimuat Turun'); + } + + public function test_pending_certificate_shows_not_ready_message(): void + { + $this->certificate->update(['status' => 'pending']); + + $this->get("/certificate/{$this->certificate->token}") + ->assertOk() + ->assertSee('Sijil Belum Sedia'); + } + + public function test_invalid_certificate_token_returns_404(): void + { + $this->get('/certificate/invalid-token-xxxx')->assertNotFound(); + } + + public function test_semak_kehadiran_shows_result_for_valid_no_kp(): void + { + $qrCode = ProgramQrCode::create([ + 'program_id' => $this->program->id, + 'token' => 'semak-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + 'qr_image_path' => 'qrcodes/test.png', + 'is_active' => true, + ]); + + ProgramParticipant::create([ + 'program_id' => $this->program->id, + 'participant_id' => $this->participant->id, + 'registration_source' => 'pre_registered', + 'is_pre_registered' => true, + 'pre_registered_session' => 'pagi', + 'status' => 'checked_in', + ]); + + Attendance::create([ + 'program_id' => $this->program->id, + 'participant_id' => $this->participant->id, + 'attendance_session' => 'pagi', + 'attendance_source' => 'pre_registered_staff', + 'checked_in_at' => now(), + ]); + + $this->post("/p/{$qrCode->token}/semak", [ + 'no_kp' => '900101011234', + ])->assertViewIs('public.semak.result'); + } +} diff --git a/tests/Feature/CheckinTest.php b/tests/Feature/CheckinTest.php new file mode 100644 index 0000000..9b01d08 --- /dev/null +++ b/tests/Feature/CheckinTest.php @@ -0,0 +1,114 @@ +create(); + $this->program = Program::factory()->published()->create(['created_by' => $admin->id]); + + $this->qrCode = ProgramQrCode::create([ + 'program_id' => $this->program->id, + 'token' => 'test-qr-token-48-chars-xxxxxxxxxxxxxxxxxxxxxx', + 'qr_image_path' => 'qrcodes/test.png', + 'is_active' => true, + ]); + } + + public function test_checkin_page_shows_for_published_program(): void + { + $this->get("/p/{$this->qrCode->token}") + ->assertOk() + ->assertSee('Check-In'); + } + + public function test_pre_registered_staff_can_check_in(): void + { + $participant = Participant::create([ + 'name' => 'Ahmad bin Abu', + 'no_kp' => '900101011234', + 'email' => 'ahmad@test.com', + 'participant_type' => 'staff', + ]); + + ProgramParticipant::create([ + 'program_id' => $this->program->id, + 'participant_id' => $participant->id, + 'registration_source' => 'pre_registered', + 'is_pre_registered' => true, + 'pre_registered_session' => 'pagi', + 'status' => 'registered', + ]); + + $this->post("/p/{$this->qrCode->token}/staff", [ + 'no_kp' => '900101011234', + ])->assertViewIs('public.checkin.success'); + + $this->assertDatabaseHas('attendances', [ + 'program_id' => $this->program->id, + 'participant_id' => $participant->id, + ]); + } + + public function test_duplicate_checkin_shows_already_view(): void + { + $participant = Participant::create([ + 'name' => 'Siti binti Ali', + 'no_kp' => '950202022345', + 'participant_type' => 'staff', + ]); + + ProgramParticipant::create([ + 'program_id' => $this->program->id, + 'participant_id' => $participant->id, + 'registration_source' => 'pre_registered', + 'is_pre_registered' => true, + 'pre_registered_session' => 'petang', + 'status' => 'checked_in', + ]); + + Attendance::create([ + 'program_id' => $this->program->id, + 'participant_id' => $participant->id, + 'attendance_session' => 'petang', + 'attendance_source' => 'pre_registered_staff', + 'checked_in_at' => now(), + ]); + + $this->post("/p/{$this->qrCode->token}/staff", [ + 'no_kp' => '950202022345', + ])->assertViewIs('public.checkin.already'); + } + + public function test_walk_in_registration_succeeds(): void + { + $this->post("/p/{$this->qrCode->token}/external", [ + 'name' => 'Orang Luar', + 'no_kp' => '880303033456', + 'email' => 'luaran@test.com', + 'phone' => '0123456789', + 'agency' => 'Syarikat Luar', + ])->assertViewIs('public.checkin.success'); + + $this->assertDatabaseHas('participants', ['no_kp' => '880303033456']); + $this->assertDatabaseHas('attendances', ['attendance_source' => 'walk_in_external']); + } +} diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php deleted file mode 100644 index 8364a84..0000000 --- a/tests/Feature/ExampleTest.php +++ /dev/null @@ -1,19 +0,0 @@ -get('/'); - - $response->assertStatus(200); - } -} diff --git a/tests/Feature/ProfileTest.php b/tests/Feature/ProfileTest.php deleted file mode 100644 index 252fdcc..0000000 --- a/tests/Feature/ProfileTest.php +++ /dev/null @@ -1,99 +0,0 @@ -create(); - - $response = $this - ->actingAs($user) - ->get('/profile'); - - $response->assertOk(); - } - - public function test_profile_information_can_be_updated(): void - { - $user = User::factory()->create(); - - $response = $this - ->actingAs($user) - ->patch('/profile', [ - 'name' => 'Test User', - 'email' => 'test@example.com', - ]); - - $response - ->assertSessionHasNoErrors() - ->assertRedirect('/profile'); - - $user->refresh(); - - $this->assertSame('Test User', $user->name); - $this->assertSame('test@example.com', $user->email); - $this->assertNull($user->email_verified_at); - } - - public function test_email_verification_status_is_unchanged_when_the_email_address_is_unchanged(): void - { - $user = User::factory()->create(); - - $response = $this - ->actingAs($user) - ->patch('/profile', [ - 'name' => 'Test User', - 'email' => $user->email, - ]); - - $response - ->assertSessionHasNoErrors() - ->assertRedirect('/profile'); - - $this->assertNotNull($user->refresh()->email_verified_at); - } - - public function test_user_can_delete_their_account(): void - { - $user = User::factory()->create(); - - $response = $this - ->actingAs($user) - ->delete('/profile', [ - 'password' => 'password', - ]); - - $response - ->assertSessionHasNoErrors() - ->assertRedirect('/'); - - $this->assertGuest(); - $this->assertNull($user->fresh()); - } - - public function test_correct_password_must_be_provided_to_delete_account(): void - { - $user = User::factory()->create(); - - $response = $this - ->actingAs($user) - ->from('/profile') - ->delete('/profile', [ - 'password' => 'wrong-password', - ]); - - $response - ->assertSessionHasErrorsIn('userDeletion', 'password') - ->assertRedirect('/profile'); - - $this->assertNotNull($user->fresh()); - } -} diff --git a/tests/Feature/ProgramTest.php b/tests/Feature/ProgramTest.php new file mode 100644 index 0000000..3bfdf3e --- /dev/null +++ b/tests/Feature/ProgramTest.php @@ -0,0 +1,61 @@ +admin = User::factory()->create(); + $this->actingAs($this->admin); + } + + public function test_admin_can_view_programs_list(): void + { + $this->get('/admin/programs')->assertOk(); + } + + public function test_admin_can_create_a_program(): void + { + $this->post('/admin/programs', [ + 'title' => 'Program Ujian', + 'organizer' => 'Jabatan Ujian', + 'location' => 'Putrajaya', + 'start_date' => '2025-06-01', + 'end_date' => '2025-06-01', + 'allow_walk_in' => true, + 'default_staff_session' => 'pagi', + 'default_external_session' => 'pagi', + ])->assertRedirect(); + + $this->assertDatabaseHas('programs', ['title' => 'Program Ujian']); + } + + public function test_admin_can_publish_a_draft_program(): void + { + $program = Program::factory()->create(['status' => 'draft', 'created_by' => $this->admin->id]); + + $this->post("/admin/programs/{$program->uuid}/publish")->assertRedirect(); + + $this->assertEquals('published', $program->fresh()->status); + } + + public function test_admin_can_delete_program_with_no_attendances(): void + { + $program = Program::factory()->create(['status' => 'draft', 'created_by' => $this->admin->id]); + + $this->delete("/admin/programs/{$program->uuid}")->assertRedirect(); + + $this->assertDatabaseMissing('programs', ['id' => $program->id]); + } +} diff --git a/tests/Feature/QuestionnaireTest.php b/tests/Feature/QuestionnaireTest.php new file mode 100644 index 0000000..e38c749 --- /dev/null +++ b/tests/Feature/QuestionnaireTest.php @@ -0,0 +1,116 @@ +create(); + $this->program = Program::factory()->published()->create(['created_by' => $admin->id]); + + $this->qrCode = ProgramQrCode::create([ + 'program_id' => $this->program->id, + 'token' => 'qr-token-test-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + 'qr_image_path' => 'qrcodes/test.png', + 'is_active' => true, + ]); + + $this->participant = Participant::create([ + 'name' => 'Peserta Ujian', + 'no_kp' => '900101011234', + 'email' => 'peserta@test.com', + 'participant_type' => 'staff', + ]); + + ProgramParticipant::create([ + 'program_id' => $this->program->id, + 'participant_id' => $this->participant->id, + 'registration_source' => 'pre_registered', + 'is_pre_registered' => true, + 'pre_registered_session' => 'pagi', + 'status' => 'checked_in', + ]); + + $set = QuestionnaireSet::create([ + 'title' => 'Borang Penilaian Ujian', + 'status' => 'published', + 'created_by' => $admin->id, + ]); + + $this->question = QuestionnaireQuestion::create([ + 'questionnaire_set_id' => $set->id, + 'question_text' => 'Bagaimana penilaian anda?', + 'question_type' => 'rating', + 'is_required' => true, + 'sort_order' => 1, + ]); + + ProgramQuestionnaire::create([ + 'program_id' => $this->program->id, + 'questionnaire_set_id' => $set->id, + 'is_confirmed' => true, + 'confirmed_at' => now(), + 'confirmed_by' => $admin->id, + ]); + } + + public function test_questionnaire_form_is_shown_to_participant(): void + { + $url = "/p/{$this->qrCode->token}/questionnaire/{$this->participant->uuid}"; + + $this->get($url) + ->assertOk() + ->assertSee('Bagaimana penilaian anda?'); + } + + public function test_participant_can_submit_questionnaire(): void + { + $url = "/p/{$this->qrCode->token}/questionnaire/{$this->participant->uuid}"; + + $this->post($url, [ + 'q_' . $this->question->id => 4, + ])->assertViewIs('public.questionnaire.thankyou'); + + $this->assertDatabaseHas('questionnaire_responses', [ + 'program_id' => $this->program->id, + 'participant_id' => $this->participant->id, + ]); + } + + public function test_double_submission_shows_already_view(): void + { + QuestionnaireResponse::create([ + 'program_id' => $this->program->id, + 'participant_id' => $this->participant->id, + 'questionnaire_set_id' => $this->question->questionnaire_set_id, + 'submitted_at' => now(), + 'ip_address' => '127.0.0.1', + ]); + + $url = "/p/{$this->qrCode->token}/questionnaire/{$this->participant->uuid}"; + + $this->get($url)->assertViewIs('public.questionnaire.already'); + } +} diff --git a/tests/Unit/ExampleTest.php b/tests/Unit/ExampleTest.php deleted file mode 100644 index 5773b0c..0000000 --- a/tests/Unit/ExampleTest.php +++ /dev/null @@ -1,16 +0,0 @@ -assertTrue(true); - } -}