CaiWuXiTong/tests/Feature/Business/CourierSigningSubjectTest.php

75 lines
2.6 KiB
PHP

<?php
namespace Tests\Feature\Business;
use App\Models\Auth\Permission;
use App\Models\Business\CourierSigningSubject;
use Tests\Feature\FeatureTestCase;
class CourierSigningSubjectTest extends FeatureTestCase
{
protected function grantWorkspaceAccess(): void
{
$this->user->attachPermission(
Permission::where('name', 'read-admin-panel')->firstOrFail()
);
}
public function testAdminCanCreateUpdateAndSwitchSigningSubjects(): void
{
$this->grantWorkspaceAccess();
$first = $this->loginAs()->postJson(
route('business.courier-agreement-signatures.subjects.store'),
['name' => '甲公司', 'unified_social_credit_code' => '91320100MA1TEST001'],
);
$first->assertOk()
->assertJsonPath('subject.name', '甲公司')
->assertJsonPath('subject.is_default', true);
$firstSubject = CourierSigningSubject::query()->where('name', '甲公司')->firstOrFail();
$second = $this->postJson(
route('business.courier-agreement-signatures.subjects.store'),
['name' => '乙公司'],
);
$second->assertOk()->assertJsonPath('subject.is_default', false);
$secondSubject = CourierSigningSubject::query()->where('name', '乙公司')->firstOrFail();
$this->postJson(
route('business.courier-agreement-signatures.subjects.default', $secondSubject),
)->assertOk()->assertJsonPath('subject.is_default', true);
$this->assertFalse($firstSubject->fresh()->is_default);
$this->assertTrue($secondSubject->fresh()->is_default);
$this->postJson(
route('business.courier-agreement-signatures.subjects.update', $secondSubject),
['name' => '乙公司(新)', 'unified_social_credit_code' => '91320100MA1TEST002'],
)->assertOk()->assertJsonPath('subject.name', '乙公司(新)');
$this->assertDatabaseHas('business_courier_signing_subjects', [
'id' => $secondSubject->id,
'name' => '乙公司(新)',
'is_default' => 1,
]);
}
public function testDuplicateSubjectNameIsRejected(): void
{
$this->grantWorkspaceAccess();
$this->loginAs()->postJson(
route('business.courier-agreement-signatures.subjects.store'),
['name' => '甲公司'],
)->assertOk();
$this->withExceptionHandling()->postJson(
route('business.courier-agreement-signatures.subjects.store'),
['name' => '甲公司'],
)->assertStatus(422)
->assertJsonValidationErrors(['name']);
}
}