Add the admin Acquisition form and history, calculated cost-basis display, API client, and deterministic authenticated browser coverage.
This commit is contained in:
@@ -14,21 +14,33 @@ test('signs in and publishes a listing after adding an inventory image', async (
|
||||
await page.getByRole('button', { name: 'Sign in' }).click();
|
||||
await expect(page).toHaveURL(/\/admin$/);
|
||||
await expect(page.getByRole('heading', { name: 'Collector workspace' })).toBeVisible();
|
||||
await expect(page.getByRole('status', { name: 'Loading inventory...' })).toHaveCount(0);
|
||||
|
||||
const category = page.locator('#product-category option').nth(1);
|
||||
await expect(category).toBeAttached();
|
||||
await page.getByLabel('Name').fill(`Browser test collectible ${Date.now()}`);
|
||||
const productName = `Browser test collectible ${Date.now()}`;
|
||||
await page.getByLabel('Name').fill(productName);
|
||||
await page.getByLabel('Category').selectOption({ index: 1 });
|
||||
await page.getByRole('button', { name: 'Create product' }).click();
|
||||
|
||||
await expect(page.locator('#inventory-product option').nth(1)).toBeAttached();
|
||||
await page.getByLabel('Product', { exact: true }).selectOption({ index: 1 });
|
||||
const createdProductId = await page.getByLabel('Product', { exact: true }).locator('option', { hasText: productName }).getAttribute('value');
|
||||
await page.getByLabel('Product', { exact: true }).selectOption(createdProductId);
|
||||
await page.getByLabel('Condition', { exact: true }).selectOption({ index: 1 });
|
||||
await page.getByRole('button', { name: 'Create copy' }).click();
|
||||
|
||||
const inventoryLink = page.locator('section[aria-labelledby="inventory-title"]').getByRole('link', { name: 'Manage images' }).last();
|
||||
const createdInventoryRow = page.locator(`section[aria-labelledby="inventory-title"] li[data-product-id="${createdProductId}"]`).last();
|
||||
const createdInventoryId = await createdInventoryRow.locator('a').getAttribute('href').then((href) => href.split('/').at(-2));
|
||||
const inventoryLink = page.locator(`a[href="/admin/inventory/${createdInventoryId}/images"]`);
|
||||
await expect(inventoryLink).toBeVisible();
|
||||
const createdInventoryId = await page.getByLabel('Inventory copy').locator('option').last().getAttribute('value');
|
||||
await page.locator('#acquisition-inventory').selectOption(createdInventoryId);
|
||||
await page.getByLabel('Method').fill('PURCHASE');
|
||||
await page.getByLabel('Acquisition date').fill('2026-09-09');
|
||||
await page.getByLabel('Cost (cents)').fill('1000');
|
||||
await page.getByLabel('Shipping (cents)').fill('100');
|
||||
await page.getByLabel('Tax (cents)').fill('50');
|
||||
await page.getByRole('button', { name: 'Record acquisition' }).click();
|
||||
await expect(page.locator('section[aria-labelledby="acquisitions-title"] li').first()).toContainText('Basis $11.50');
|
||||
await inventoryLink.click();
|
||||
await expect(page).toHaveURL(/\/admin\/inventory\/[^/]+\/images$/);
|
||||
await expect(page.getByRole('heading', { name: 'Manage images' })).toBeVisible();
|
||||
@@ -44,11 +56,12 @@ test('signs in and publishes a listing after adding an inventory image', async (
|
||||
await page.getByLabel('Inventory copy', { exact: true }).first().selectOption(createdInventoryId);
|
||||
await page.getByLabel('Asking price (cents)').fill('2499');
|
||||
await page.getByRole('button', { name: 'Create listing' }).click();
|
||||
await expect(page.getByText('Add at least one image before publishing.')).toHaveCount(0);
|
||||
await page.getByRole('button', { name: 'Publish' }).last().click();
|
||||
await expect(page.getByText('AVAILABLE').last()).toBeVisible();
|
||||
const createdListing = page.locator('section[aria-labelledby="listings-title"] article').filter({ hasText: productName }).last();
|
||||
await expect(createdListing.getByText('Add at least one image before publishing.')).toHaveCount(0);
|
||||
await createdListing.getByRole('button', { name: 'Publish' }).click();
|
||||
await expect(createdListing).toContainText('AVAILABLE');
|
||||
|
||||
await page.getByLabel('Inventory copy', { exact: true }).last().selectOption(createdInventoryId);
|
||||
await page.locator('#sale-inventory').selectOption(createdInventoryId);
|
||||
await page.getByLabel('Sale date').fill('2026-09-09');
|
||||
await page.getByLabel('Sold price (cents)').fill('2499');
|
||||
await page.getByLabel('Cost basis (cents)').fill('1200');
|
||||
|
||||
Reference in New Issue
Block a user