Files
SkinbaseNova/tests/Feature/Academy/AcademyCoursesSyncFoundationsCommandTest.php

53 lines
2.1 KiB
PHP

<?php
declare(strict_types=1);
use App\Models\AcademyCourse;
use App\Models\AcademyCourseLesson;
use App\Models\AcademyCourseSection;
use App\Models\AcademyLesson;
it('syncs the foundations course idempotently and skips missing lessons', function (): void {
AcademyLesson::query()->create([
'title' => 'What Is AI-Assisted Digital Art',
'slug' => 'what-is-ai-assisted-digital-art',
'content' => 'Intro lesson body',
'difficulty' => 'beginner',
'access_level' => 'free',
'lesson_type' => 'article',
'active' => true,
'published_at' => now()->subMinute(),
]);
AcademyLesson::query()->create([
'title' => 'Prompting Basics For Skinbase Creators',
'slug' => 'prompting-basics-for-skinbase-creators',
'content' => 'Prompt basics body',
'difficulty' => 'beginner',
'access_level' => 'free',
'lesson_type' => 'article',
'active' => true,
'published_at' => now()->subMinute(),
]);
$this->artisan('academy:courses:sync-foundations')
->expectsOutputToContain('Skipped missing lesson [ai-ethics-and-skinbase-upload-rules].')
->expectsOutput('AI-Assisted Digital Art Foundations course synced.')
->assertSuccessful();
$course = AcademyCourse::query()->where('slug', 'ai-assisted-digital-art-foundations')->first();
expect($course)->not->toBeNull()
->and($course?->status)->toBe('published')
->and($course?->is_featured)->toBeTrue();
expect(AcademyCourseSection::query()->where('course_id', $course->id)->count())->toBe(4);
expect(AcademyCourseLesson::query()->where('course_id', $course->id)->count())->toBe(2);
expect($course->fresh()->lessons_count_cache)->toBe(2);
$this->artisan('academy:courses:sync-foundations')->assertSuccessful();
expect(AcademyCourse::query()->where('slug', 'ai-assisted-digital-art-foundations')->count())->toBe(1);
expect(AcademyCourseSection::query()->where('course_id', $course->id)->count())->toBe(4);
expect(AcademyCourseLesson::query()->where('course_id', $course->id)->count())->toBe(2);
});