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.
409 lines
13 KiB
409 lines
13 KiB
|
11 months ago
|
<?php
|
||
|
|
|
||
|
|
namespace Tests\Feature;
|
||
|
|
|
||
|
|
use Tests\TestCase;
|
||
|
|
use App\Models\Visit;
|
||
|
|
use App\Models\VisitLog;
|
||
|
|
use App\Models\Study;
|
||
|
|
use App\Models\StudyAsk;
|
||
|
|
use App\Models\Blacklist;
|
||
|
|
use App\Models\Admin;
|
||
|
|
use App\Models\Department;
|
||
|
|
use App\Models\VisitArea;
|
||
|
|
use App\Models\VisitTime;
|
||
|
|
use App\Models\Upload;
|
||
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||
|
|
use Illuminate\Foundation\Testing\WithFaker;
|
||
|
|
use Laravel\Sanctum\Sanctum;
|
||
|
|
|
||
|
|
class AdminControllerTest extends TestCase
|
||
|
|
{
|
||
|
|
use RefreshDatabase, WithFaker;
|
||
|
|
|
||
|
|
protected $admin;
|
||
|
|
protected $department;
|
||
|
|
protected $visitArea;
|
||
|
|
protected $visitTime;
|
||
|
|
|
||
|
|
protected function setUp(): void
|
||
|
|
{
|
||
|
|
parent::setUp();
|
||
|
|
|
||
|
|
// 创建测试数据
|
||
|
|
$this->department = Department::factory()->create();
|
||
|
|
$this->admin = Admin::factory()->create(['department_id' => $this->department->id]);
|
||
|
|
$this->visitArea = VisitArea::factory()->create();
|
||
|
|
$this->visitTime = VisitTime::factory()->create();
|
||
|
|
|
||
|
|
// 认证管理员
|
||
|
|
Sanctum::actingAs($this->admin, ['admin']);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @test */
|
||
|
|
public function it_can_get_visit_list()
|
||
|
|
{
|
||
|
|
// 创建测试拜访记录
|
||
|
|
$visit = Visit::factory()->create([
|
||
|
|
'accept_department_id' => $this->department->id,
|
||
|
|
'accept_admin_id' => $this->admin->id,
|
||
|
|
'visit_area_id' => $this->visitArea->id,
|
||
|
|
'visit_time_id' => $this->visitTime->id,
|
||
|
|
]);
|
||
|
|
|
||
|
|
$response = $this->getJson('/api/admin/visits/index?token=' . $this->admin->createToken('test')->plainTextToken);
|
||
|
|
|
||
|
|
$response->assertStatus(200)
|
||
|
|
->assertJsonStructure([
|
||
|
|
'code',
|
||
|
|
'message',
|
||
|
|
'data' => [
|
||
|
|
'current_page',
|
||
|
|
'data',
|
||
|
|
'total'
|
||
|
|
]
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @test */
|
||
|
|
public function it_can_get_visit_detail()
|
||
|
|
{
|
||
|
|
// 创建测试拜访记录
|
||
|
|
$visit = Visit::factory()->create([
|
||
|
|
'accept_department_id' => $this->department->id,
|
||
|
|
'accept_admin_id' => $this->admin->id,
|
||
|
|
'visit_area_id' => $this->visitArea->id,
|
||
|
|
'visit_time_id' => $this->visitTime->id,
|
||
|
|
]);
|
||
|
|
|
||
|
|
$response = $this->getJson("/api/admin/visits/show?id={$visit->id}&token=" . $this->admin->createToken('test')->plainTextToken);
|
||
|
|
|
||
|
|
$response->assertStatus(200)
|
||
|
|
->assertJsonStructure([
|
||
|
|
'code',
|
||
|
|
'message',
|
||
|
|
'data' => [
|
||
|
|
'id',
|
||
|
|
'name',
|
||
|
|
'mobile',
|
||
|
|
'type',
|
||
|
|
'audit_status',
|
||
|
|
'date',
|
||
|
|
'visit_area',
|
||
|
|
'visit_time',
|
||
|
|
'accept_department',
|
||
|
|
'accept_admin',
|
||
|
|
'accept_admin_sign',
|
||
|
|
'logs',
|
||
|
|
]
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @test */
|
||
|
|
public function it_can_save_visit()
|
||
|
|
{
|
||
|
|
$visitData = [
|
||
|
|
'name' => '测试访客',
|
||
|
|
'mobile' => '13800138000',
|
||
|
|
'type' => Visit::TYPE_VISITOR,
|
||
|
|
'date' => now()->format('Y-m-d'),
|
||
|
|
'start_date' => now()->format('Y-m-d'),
|
||
|
|
'end_date' => now()->format('Y-m-d'),
|
||
|
|
'accept_department_id' => $this->department->id,
|
||
|
|
'accept_admin_id' => $this->admin->id,
|
||
|
|
'visit_area_id' => $this->visitArea->id,
|
||
|
|
'visit_time_id' => $this->visitTime->id,
|
||
|
|
'audit_status' => Visit::AUDIT_STATUS_PENDING,
|
||
|
|
];
|
||
|
|
|
||
|
|
$response = $this->postJson('/api/admin/visits/save?token=' . $this->admin->createToken('test')->plainTextToken, $visitData);
|
||
|
|
|
||
|
|
$response->assertStatus(200)
|
||
|
|
->assertJson([
|
||
|
|
'code' => 200,
|
||
|
|
'message' => 'success'
|
||
|
|
]);
|
||
|
|
|
||
|
|
$this->assertDatabaseHas('visits', [
|
||
|
|
'name' => '测试访客',
|
||
|
|
'mobile' => '13800138000',
|
||
|
|
'type' => Visit::TYPE_VISITOR,
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @test */
|
||
|
|
public function it_can_update_visit()
|
||
|
|
{
|
||
|
|
// 创建测试拜访记录
|
||
|
|
$visit = Visit::factory()->create([
|
||
|
|
'accept_department_id' => $this->department->id,
|
||
|
|
'accept_admin_id' => $this->admin->id,
|
||
|
|
'visit_area_id' => $this->visitArea->id,
|
||
|
|
'visit_time_id' => $this->visitTime->id,
|
||
|
|
]);
|
||
|
|
|
||
|
|
$updateData = [
|
||
|
|
'id' => $visit->id,
|
||
|
|
'name' => '更新后的访客',
|
||
|
|
'mobile' => '13900139000',
|
||
|
|
'type' => Visit::TYPE_VISITOR,
|
||
|
|
'date' => now()->format('Y-m-d'),
|
||
|
|
'start_date' => now()->format('Y-m-d'),
|
||
|
|
'end_date' => now()->format('Y-m-d'),
|
||
|
|
'accept_department_id' => $this->department->id,
|
||
|
|
'accept_admin_id' => $this->admin->id,
|
||
|
|
'visit_area_id' => $this->visitArea->id,
|
||
|
|
'visit_time_id' => $this->visitTime->id,
|
||
|
|
'audit_status' => Visit::AUDIT_STATUS_APPROVED,
|
||
|
|
];
|
||
|
|
|
||
|
|
$response = $this->postJson('/api/admin/visits/save?token=' . $this->admin->createToken('test')->plainTextToken, $updateData);
|
||
|
|
|
||
|
|
$response->assertStatus(200)
|
||
|
|
->assertJson([
|
||
|
|
'code' => 200,
|
||
|
|
'message' => 'success'
|
||
|
|
]);
|
||
|
|
|
||
|
|
$visit->refresh();
|
||
|
|
$this->assertEquals('更新后的访客', $visit->name);
|
||
|
|
$this->assertEquals('13900139000', $visit->mobile);
|
||
|
|
$this->assertEquals(Visit::AUDIT_STATUS_APPROVED, $visit->audit_status);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @test */
|
||
|
|
public function it_can_delete_visit()
|
||
|
|
{
|
||
|
|
// 创建测试拜访记录
|
||
|
|
$visit = Visit::factory()->create([
|
||
|
|
'accept_department_id' => $this->department->id,
|
||
|
|
'accept_admin_id' => $this->admin->id,
|
||
|
|
'visit_area_id' => $this->visitArea->id,
|
||
|
|
'visit_time_id' => $this->visitTime->id,
|
||
|
|
]);
|
||
|
|
|
||
|
|
$response = $this->postJson("/api/admin/visits/destroy?id={$visit->id}&token=" . $this->admin->createToken('test')->plainTextToken);
|
||
|
|
|
||
|
|
$response->assertStatus(200)
|
||
|
|
->assertJson([
|
||
|
|
'code' => 200,
|
||
|
|
'message' => 'success'
|
||
|
|
]);
|
||
|
|
|
||
|
|
$this->assertSoftDeleted('visits', ['id' => $visit->id]);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @test */
|
||
|
|
public function it_can_get_visit_log_list()
|
||
|
|
{
|
||
|
|
// 创建测试拜访记录和日志
|
||
|
|
$visit = Visit::factory()->create([
|
||
|
|
'accept_department_id' => $this->department->id,
|
||
|
|
'accept_admin_id' => $this->admin->id,
|
||
|
|
'visit_area_id' => $this->visitArea->id,
|
||
|
|
'visit_time_id' => $this->visitTime->id,
|
||
|
|
]);
|
||
|
|
|
||
|
|
$log = VisitLog::factory()->create([
|
||
|
|
'visit_id' => $visit->id,
|
||
|
|
'admin_id' => $this->admin->id,
|
||
|
|
]);
|
||
|
|
|
||
|
|
$response = $this->getJson('/api/admin/visit-logs/index?token=' . $this->admin->createToken('test')->plainTextToken);
|
||
|
|
|
||
|
|
$response->assertStatus(200)
|
||
|
|
->assertJsonStructure([
|
||
|
|
'code',
|
||
|
|
'message',
|
||
|
|
'data' => [
|
||
|
|
'current_page',
|
||
|
|
'data',
|
||
|
|
'total'
|
||
|
|
]
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @test */
|
||
|
|
public function it_can_save_visit_log()
|
||
|
|
{
|
||
|
|
// 创建测试拜访记录
|
||
|
|
$visit = Visit::factory()->create([
|
||
|
|
'accept_department_id' => $this->department->id,
|
||
|
|
'accept_admin_id' => $this->admin->id,
|
||
|
|
'visit_area_id' => $this->visitArea->id,
|
||
|
|
'visit_time_id' => $this->visitTime->id,
|
||
|
|
]);
|
||
|
|
|
||
|
|
$logData = [
|
||
|
|
'visit_id' => $visit->id,
|
||
|
|
'type' => VisitLog::TYPE_ENTER,
|
||
|
|
'remark' => '测试日志',
|
||
|
|
];
|
||
|
|
|
||
|
|
$response = $this->postJson('/api/admin/visit-logs/save?token=' . $this->admin->createToken('test')->plainTextToken, $logData);
|
||
|
|
|
||
|
|
$response->assertStatus(200)
|
||
|
|
->assertJson([
|
||
|
|
'code' => 200,
|
||
|
|
'message' => 'success'
|
||
|
|
]);
|
||
|
|
|
||
|
|
$this->assertDatabaseHas('visit_logs', [
|
||
|
|
'visit_id' => $visit->id,
|
||
|
|
'type' => VisitLog::TYPE_ENTER,
|
||
|
|
'remark' => '测试日志',
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @test */
|
||
|
|
public function it_can_delete_visit_log()
|
||
|
|
{
|
||
|
|
// 创建测试拜访记录和日志
|
||
|
|
$visit = Visit::factory()->create([
|
||
|
|
'accept_department_id' => $this->department->id,
|
||
|
|
'accept_admin_id' => $this->admin->id,
|
||
|
|
'visit_area_id' => $this->visitArea->id,
|
||
|
|
'visit_time_id' => $this->visitTime->id,
|
||
|
|
]);
|
||
|
|
|
||
|
|
$log = VisitLog::factory()->create([
|
||
|
|
'visit_id' => $visit->id,
|
||
|
|
'admin_id' => $this->admin->id,
|
||
|
|
]);
|
||
|
|
|
||
|
|
$response = $this->postJson("/api/admin/visit-logs/destroy?id={$log->id}&token=" . $this->admin->createToken('test')->plainTextToken);
|
||
|
|
|
||
|
|
$response->assertStatus(200)
|
||
|
|
->assertJson([
|
||
|
|
'code' => 200,
|
||
|
|
'message' => 'success'
|
||
|
|
]);
|
||
|
|
|
||
|
|
$this->assertSoftDeleted('visit_logs', ['id' => $log->id]);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @test */
|
||
|
|
public function it_can_get_study_list()
|
||
|
|
{
|
||
|
|
// 创建测试学习记录
|
||
|
|
$study = Study::factory()->create();
|
||
|
|
|
||
|
|
$response = $this->getJson('/api/admin/studies/index?token=' . $this->admin->createToken('test')->plainTextToken);
|
||
|
|
|
||
|
|
$response->assertStatus(200)
|
||
|
|
->assertJsonStructure([
|
||
|
|
'code',
|
||
|
|
'message',
|
||
|
|
'data' => [
|
||
|
|
'current_page',
|
||
|
|
'data',
|
||
|
|
'total'
|
||
|
|
]
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @test */
|
||
|
|
public function it_can_save_study()
|
||
|
|
{
|
||
|
|
$studyData = [
|
||
|
|
'name' => '测试学习',
|
||
|
|
'content' => '学习内容',
|
||
|
|
'type' => Study::TYPE_VISITOR,
|
||
|
|
'expire_day' => 30,
|
||
|
|
'minute' => 60,
|
||
|
|
'rate' => 80.0,
|
||
|
|
];
|
||
|
|
|
||
|
|
$response = $this->postJson('/api/admin/studies/save?token=' . $this->admin->createToken('test')->plainTextToken, $studyData);
|
||
|
|
|
||
|
|
$response->assertStatus(200)
|
||
|
|
->assertJson([
|
||
|
|
'code' => 200,
|
||
|
|
'message' => 'success'
|
||
|
|
]);
|
||
|
|
|
||
|
|
$this->assertDatabaseHas('studies', [
|
||
|
|
'name' => '测试学习',
|
||
|
|
'content' => '学习内容',
|
||
|
|
'type' => Study::TYPE_VISITOR,
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @test */
|
||
|
|
public function it_can_get_blacklist()
|
||
|
|
{
|
||
|
|
// 创建测试黑名单记录
|
||
|
|
$blacklist = Blacklist::factory()->create();
|
||
|
|
|
||
|
|
$response = $this->getJson('/api/admin/blacklists/index?token=' . $this->admin->createToken('test')->plainTextToken);
|
||
|
|
|
||
|
|
$response->assertStatus(200)
|
||
|
|
->assertJsonStructure([
|
||
|
|
'code',
|
||
|
|
'message',
|
||
|
|
'data' => [
|
||
|
|
'current_page',
|
||
|
|
'data',
|
||
|
|
'total'
|
||
|
|
]
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @test */
|
||
|
|
public function it_can_save_blacklist()
|
||
|
|
{
|
||
|
|
$blacklistData = [
|
||
|
|
'name' => '测试黑名单',
|
||
|
|
'mobile' => '13800138000',
|
||
|
|
'idcard' => '110101199001011234',
|
||
|
|
'credent' => Blacklist::CREDENT_ID_CARD,
|
||
|
|
'status' => Blacklist::STATUS_ENABLED,
|
||
|
|
];
|
||
|
|
|
||
|
|
$response = $this->postJson('/api/admin/blacklists/save?token=' . $this->admin->createToken('test')->plainTextToken, $blacklistData);
|
||
|
|
|
||
|
|
$response->assertStatus(200)
|
||
|
|
->assertJson([
|
||
|
|
'code' => 200,
|
||
|
|
'message' => 'success'
|
||
|
|
]);
|
||
|
|
|
||
|
|
$this->assertDatabaseHas('blacklists', [
|
||
|
|
'name' => '测试黑名单',
|
||
|
|
'mobile' => '13800138000',
|
||
|
|
'idcard' => '110101199001011234',
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @test */
|
||
|
|
public function it_requires_authentication_for_admin_routes()
|
||
|
|
{
|
||
|
|
$response = $this->getJson('/api/admin/visits/index');
|
||
|
|
|
||
|
|
$response->assertStatus(401);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @test */
|
||
|
|
public function it_supports_multilingual_responses()
|
||
|
|
{
|
||
|
|
$visit = Visit::factory()->create([
|
||
|
|
'accept_department_id' => $this->department->id,
|
||
|
|
'accept_admin_id' => $this->admin->id,
|
||
|
|
'visit_area_id' => $this->visitArea->id,
|
||
|
|
'visit_time_id' => $this->visitTime->id,
|
||
|
|
]);
|
||
|
|
|
||
|
|
// 测试中文响应
|
||
|
|
$response = $this->withHeaders(['Accept-Language' => 'zh-CN'])
|
||
|
|
->getJson("/api/admin/visits/show?id={$visit->id}&token=" . $this->admin->createToken('test')->plainTextToken);
|
||
|
|
|
||
|
|
$response->assertStatus(200);
|
||
|
|
|
||
|
|
// 测试英文响应
|
||
|
|
$response = $this->withHeaders(['Accept-Language' => 'en'])
|
||
|
|
->getJson("/api/admin/visits/show?id={$visit->id}&token=" . $this->admin->createToken('test')->plainTextToken);
|
||
|
|
|
||
|
|
$response->assertStatus(200);
|
||
|
|
}
|
||
|
|
}
|