You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
3.4 KiB

2 days ago
<?php
namespace Tests\Unit\Http\Resources\Mobile;
use App\Http\Resources\Mobile\PublicCourseResource;
use App\Models\Course;
use App\Models\CourseForm;
use App\Models\CourseType;
use App\Models\Teacher;
use Illuminate\Support\Collection;
use Tests\TestCase;
class PublicCourseResourceTest extends TestCase
{
public function test_public_resource_returns_only_allowlisted_course_fields(): void
{
$course = new Course();
$course->setRawAttributes([
'id' => 150,
'name' => '公开课程',
'start_date' => '2026-08-01',
'end_date' => '2026-08-02',
'content' => '公开介绍',
'publicize_content' => '宣传介绍',
'status' => 1,
'course_status' => 20,
'sign_status' => 10,
'admin_id' => 9,
'department_id' => 10,
'teacher_id' => 11,
'show_mobile' => 1,
]);
$teacher = new Teacher();
$teacher->setRawAttributes([
'id' => 11,
'name' => '张老师',
'mobile' => '13800138000',
'remark' => '内部备注',
]);
$form = new CourseForm();
$form->setRawAttributes([
'id' => 1,
'name' => '姓名',
'field' => 'name',
'edit_input' => 'input',
'rule' => 'required',
'sort' => 1,
'help' => '请填写姓名',
'select_item' => null,
'need_fill' => 1,
'belong_user' => 1,
'admin_id' => 9,
'department_id' => 10,
]);
$type = new CourseType();
$type->setRawAttributes(['id' => 3, 'name' => '管理类', 'wait_tip' => '内部提示']);
$course->setRelation('teacher', $teacher);
$course->setRelation('courseForms', new Collection([$form]));
$course->setRelation('typeDetail', $type);
$payload = (new PublicCourseResource($course))->resolve();
$this->assertSame(150, $payload['id']);
$this->assertSame('公开课程', $payload['name']);
$this->assertSame('张老师', $payload['teacher']['name']);
$this->assertArrayNotHasKey('mobile', $payload['teacher']);
$this->assertArrayNotHasKey('remark', $payload['teacher']);
$this->assertArrayNotHasKey('admin_id', $payload);
$this->assertArrayNotHasKey('department_id', $payload);
$this->assertArrayNotHasKey('teacher_id', $payload);
$this->assertArrayNotHasKey('wait_tip', $payload['type_detail']);
$this->assertArrayNotHasKey('admin_id', $payload['course_forms'][0]);
$this->assertArrayNotHasKey('department_id', $payload['course_forms'][0]);
$this->assertArrayNotHasKey('deleted_at', $payload['course_forms'][0]);
}
public function test_public_resource_does_not_include_model_appends(): void
{
$course = new Course();
$course->setRawAttributes([
'id' => 1,
'name' => '公开课程',
'status' => 1,
'course_status' => 20,
'sign_status' => 10,
]);
$payload = (new PublicCourseResource($course))->resolve();
$this->assertArrayNotHasKey('teacher_detail', $payload);
$this->assertArrayNotHasKey('show_mobile_text', $payload);
$this->assertSame([], $payload['publicize']);
$this->assertArrayNotHasKey('qrcode', $payload);
}
}