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
100 lines
3.4 KiB
<?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);
|
|
}
|
|
}
|