Files
portal-api/tests/Feature/Api/Client/OrderInvoicesTest.php
T

70 lines
2.7 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Feature\Api\Client;
use App\Enums\Invoice\InvoiceStatus;
use App\Models\Customer;
use App\Models\Invoice;
use App\Models\Order;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class OrderInvoicesTest extends TestCase
{
use RefreshDatabase;
private Customer $customer;
private Order $order;
protected function setUp(): void
{
parent::setUp();
$this->customer = Customer::factory()->create(['status' => 1]);
$this->order = Order::create(['order_num' => 'ORD-TEST', 'customer_id' => $this->customer->id, 'total' => 100_000, 'status' => 1]);
foreach ([['INV-FIRST', 1, InvoiceStatus::PAID], ['INV-RENEW', 2, InvoiceStatus::UNPAID]] as [$number, $type, $status]) {
Invoice::create([
'invoice_number' => $number, 'customer_id' => $this->customer->id, 'order_id' => $this->order->id,
'invoice_type' => $type, 'sub_total' => 100_000, 'tax' => 0, 'total' => 100_000, 'status' => $status->value,
]);
}
}
private function as(): static
{
return $this->actingAs($this->customer, 'client')->withHeaders(['x-access-token' => $this->buildClientAccessToken()]);
}
public function test_order_detail_lists_every_invoice_with_payable_flag_and_pay_url(): void
{
$response = $this->as()->getJson('/v1/client/orders/num/ORD-TEST')->assertOk();
$response->assertJsonCount(2, 'data.invoices')
->assertJsonPath('data.invoices.0.invoice_number', 'INV-RENEW')
->assertJsonPath('data.invoices.0.payable', true)
->assertJsonPath('data.invoices.0.type_text', 'Gia hạn')
->assertJsonPath('data.invoices.0.payment_url', '/hoa-don/ORD-TEST?invoice=INV-RENEW')
->assertJsonPath('data.invoices.1.payable', false)
->assertJsonPath('data.invoices.1.payment_url', '/hoa-don/ORD-TEST');
}
public function test_invoice_page_can_target_a_renewal_invoice_of_the_order(): void
{
$this->as()->getJson('/v1/client/invoices/order/ORD-TEST')
->assertOk()
->assertJsonPath('data.invoice_number', 'INV-FIRST')
->assertJsonPath('data.order.order_num', 'ORD-TEST')
->assertJsonPath('data.order.status', 1)
->assertJsonPath('data.order.status_text', 'Đã kích hoạt')
->assertJsonPath('data.order.total', 100_000);
$this->as()->getJson('/v1/client/invoices/order/ORD-TEST?invoice=INV-RENEW')
->assertOk()->assertJsonPath('data.invoice_number', 'INV-RENEW');
$this->as()->getJson('/v1/client/invoices/order/ORD-TEST?invoice=INV-OTHER')->assertNotFound();
}
}