feat(e2e): add Playwright end-to-end tests for authentication, GRN, production, stock transfers, and adjustments
- Introduced Playwright configuration for e2e testing. - Implemented authentication tests to validate login functionality. - Created tests for GRN (Goods Receipt Note) to ensure proper stock handling. - Developed production run tests to verify lifecycle and stock posting. - Added stock transfer tests to check movement between warehouses. - Implemented stock adjustment tests for positive and negative adjustments. - Established API seeder for test data setup and verification. - Enhanced utility functions for UI interactions and response handling.
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
import { test, expect, APIRequestContext } from "@playwright/test"
|
||||
import { ApiSeeder, newApiContext, Warehouse, Item, Uom, Vendor } from "../support/api"
|
||||
import { StockAdjustmentNewPage } from "../pages/StockPages"
|
||||
|
||||
// Stock adjustment flow (Backend/ERPCore/Controllers/StockAdjustmentsController.cs,
|
||||
// Frontend app/dashboard/stock/adjustments/new): posts immediately, no draft state
|
||||
// (Backend/ERPCore/Dtos/Stock/AdjustmentDtos.cs - QtyDelta is a signed base-UOM delta).
|
||||
test.describe("Stock adjustments", () => {
|
||||
let api: APIRequestContext
|
||||
let seeder: ApiSeeder
|
||||
let warehouse: Warehouse
|
||||
let vendor: Vendor
|
||||
let uom: Uom
|
||||
let item: Item
|
||||
|
||||
test.beforeAll(async () => {
|
||||
api = await newApiContext()
|
||||
seeder = new ApiSeeder(api)
|
||||
warehouse = await seeder.firstWarehouse()
|
||||
uom = await seeder.firstUom()
|
||||
vendor = await seeder.createVendor()
|
||||
item = await seeder.createItem({ namePrefix: "Adjustment Test Item" })
|
||||
|
||||
await seeder.receiveStock({
|
||||
warehouseId: warehouse.warehouseId,
|
||||
vendorId: vendor.vendorId,
|
||||
itemId: item.itemId,
|
||||
uomId: uom.uomId,
|
||||
qty: 20,
|
||||
unitCost: 30,
|
||||
})
|
||||
})
|
||||
|
||||
test.afterAll(async () => {
|
||||
await api.dispose()
|
||||
})
|
||||
|
||||
test("positive adjustment increases on-hand and shows the posted doc number", async ({ page }) => {
|
||||
const before = await seeder.stockOnHand(item.itemId, warehouse.warehouseId)
|
||||
|
||||
const newPage = new StockAdjustmentNewPage(page)
|
||||
await newPage.goto()
|
||||
await newPage.fill({ warehouse: warehouse.name, reasonCode: "System Correction", item: item.name, qtyDelta: 5 })
|
||||
await newPage.submit()
|
||||
|
||||
await newPage.expectPosted()
|
||||
|
||||
const after = await seeder.stockOnHand(item.itemId, warehouse.warehouseId)
|
||||
expect(after.onHand).toBeCloseTo(before.onHand + 5, 4)
|
||||
})
|
||||
|
||||
test("negative adjustment decreases on-hand", async ({ page }) => {
|
||||
const before = await seeder.stockOnHand(item.itemId, warehouse.warehouseId)
|
||||
|
||||
const newPage = new StockAdjustmentNewPage(page)
|
||||
await newPage.goto()
|
||||
await newPage.fill({ warehouse: warehouse.name, reasonCode: "Damage", item: item.name, qtyDelta: -3 })
|
||||
await newPage.submit()
|
||||
|
||||
await newPage.expectPosted()
|
||||
|
||||
const after = await seeder.stockOnHand(item.itemId, warehouse.warehouseId)
|
||||
expect(after.onHand).toBeCloseTo(before.onHand - 3, 4)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user