75 lines
2.6 KiB
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']);
|
|
}
|
|
}
|