diff --git a/src/api/LocationService.ts b/src/api/LocationService.ts index fab15646..374d4b7b 100644 --- a/src/api/LocationService.ts +++ b/src/api/LocationService.ts @@ -1,5 +1,6 @@ import BaseServiceModel from '@/api/BaseServiceModel'; import { + INTERNAL_LOCATIONS_SEARCH, LOCATION_API, LOCATION_BY_ID, LOCATION_TYPES, @@ -37,6 +38,47 @@ class LocationService extends BaseServiceModel { } } + async searchInternalLocations( + searchTerm: string, + parentLocationId: string, + includeInactive = true + ): Promise> { + try { + const apiResponse = await this.request.get(INTERNAL_LOCATIONS_SEARCH, { + params: { + searchTerm, + 'parentLocation.id': parentLocationId, + includeInactive, + }, + }); + return await parseRequestToJSON(apiResponse); + } catch (error) { + throw new Error( + `Problem searching internal locations by term: ${searchTerm}` + ); + } + } + + async deleteLocation(id: string): Promise { + const apiResponse = await this.request.delete(LOCATION_BY_ID(id)); + return apiResponse.ok(); + } + + async updateLocation(id: string, payload: Partial) { + try { + const apiResponse = await this.request.post(LOCATION_BY_ID(id), { + data: payload, + }); + return await parseRequestToJSON(apiResponse); + } catch (error) { + throw new Error(`Problem updating location with id: ${id}`); + } + } + + async deactivateLocation(id: string) { + return this.updateLocation(id, { active: false }); + } + async getLocationTypes(): Promise> { try { const apiResponse = await this.request.get(LOCATION_TYPES); diff --git a/src/api/TransactionService.ts b/src/api/TransactionService.ts new file mode 100644 index 00000000..00b7dd60 --- /dev/null +++ b/src/api/TransactionService.ts @@ -0,0 +1,61 @@ +import BaseServiceModel from '@/api/BaseServiceModel'; +import { INVENTORY_URL } from '@/constants/applicationUrls'; + +/** + OpenBoxes has no REST endpoints for inventory transactions, so this service + goes through the same session-authenticated Grails controller actions as + the transaction list UI (plain GET requests). +*/ +class TransactionService extends BaseServiceModel { + /** + Returns ids of the most recent transactions in the current location + (newest first, the same order as the transaction list page), scraped + from the delete links on the list page. + */ + async getRecentTransactionIds(count: number): Promise { + const response = await this.request.get( + INVENTORY_URL.listTransactions({ max: count }) + ); + if (!response.ok()) { + throw new Error( + `Problem fetching transaction list: ${response.status()}` + ); + } + const html = await response.text(); + return [...html.matchAll(/deleteTransaction\/(\w+)/g)].map( + (match) => match[1] + ); + } + + /** + Deletes a single transaction. A successful delete redirects back to the + transaction list, a failed one to the edit transaction page. + */ + async deleteTransaction(id: string): Promise { + const response = await this.request.get( + INVENTORY_URL.deleteTransaction(id) + ); + if (!response.ok() || !response.url().includes('listTransactions')) { + throw new Error(`Problem deleting transaction with id: ${id}`); + } + } + + /** + Deletes the given number of most recent transactions in the current + location — the API counterpart of deleting the top rows on the + transaction list page one by one. + */ + async deleteRecentTransactions(count: number): Promise { + const transactionIds = await this.getRecentTransactionIds(count); + if (transactionIds.length < count) { + throw new Error( + `Expected at least ${count} transactions to delete, found ${transactionIds.length}` + ); + } + for (const transactionId of transactionIds) { + await this.deleteTransaction(transactionId); + } + } +} + +export default TransactionService; diff --git a/src/constants/apiUrls.ts b/src/constants/apiUrls.ts index 0b0d6dab..dcf42f00 100644 --- a/src/constants/apiUrls.ts +++ b/src/constants/apiUrls.ts @@ -22,6 +22,9 @@ export const LOCATION_API = `${API}/locations`; export const LOCATION_BY_ID = (id: string) => `${LOCATION_API}/${id}`; export const LOCATION_TYPES = `${LOCATION_API}/locationTypes`; +// INTERNAL LOCATIONS +export const INTERNAL_LOCATIONS_SEARCH = `${API}/internalLocations/search`; + // STOCK MOVEMENT export const STOCK_MOVEMENT_API = `${API}/stockMovements`; export const STOCK_MOVEMENT_API_PATTERN = `${STOCK_MOVEMENT_API}?**`; diff --git a/src/constants/applicationUrls.ts b/src/constants/applicationUrls.ts index 24ad4587..0fdd656e 100644 --- a/src/constants/applicationUrls.ts +++ b/src/constants/applicationUrls.ts @@ -31,6 +31,14 @@ const PRODUCT_URL = { edit: (id: string) => `${PRODUCT_URL.base}/edit/${id}`, }; +const INVENTORY_URL = { + base: './inventory', + listTransactions: (params: { max: number }) => + `${INVENTORY_URL.base}/listTransactions?max=${params.max}`, + deleteTransaction: (id: string) => + `${INVENTORY_URL.base}/deleteTransaction/${id}`, +}; + const INVENTORY_ITEM_URL = { base: './inventoryItem', showStockCard: (id: string) => `${INVENTORY_ITEM_URL.base}/showStockCard/${id}`, @@ -85,6 +93,7 @@ export { AUTH_URL, DASHBOARD_URL, INVENTORY_ITEM_URL, + INVENTORY_URL, INVOICE_URL, LOCATION_GROUP_URL, LOCATION_URL, diff --git a/src/fixtures/fixtures.ts b/src/fixtures/fixtures.ts index 8adb1d64..090aebdd 100644 --- a/src/fixtures/fixtures.ts +++ b/src/fixtures/fixtures.ts @@ -6,6 +6,7 @@ import LocationService from '@/api/LocationService'; import PutawayService from '@/api/PutawayService'; import ReceivingService from '@/api/ReceivingService'; import StockMovementService from '@/api/StockMovementService'; +import TransactionService from '@/api/TransactionService'; import ImpersonateBanner from '@/components/ImpersonateBanner'; import LocationChooser from '@/components/LocationChooser'; import Navbar from '@/components/Navbar'; @@ -87,6 +88,7 @@ type Fixtures = { stockMovementService: StockMovementService; receivingService: ReceivingService; putawayService: PutawayService; + transactionService: TransactionService; // LOCATIONS DATA mainLocationService: LocationData; noManageInventoryDepotService: LocationData; @@ -173,6 +175,8 @@ export const test = baseTest.extend({ use(new ReceivingService(page.request)), putawayService: async ({ page }, use) => use(new PutawayService(page.request)), + transactionService: async ({ page }, use) => + use(new TransactionService(page.request)), // LOCATIONS mainLocationService: async ({ page }, use) => use(new LocationData(LOCATION_KEY.MAIN, page.request)), diff --git a/src/pages/BasePageModel.ts b/src/pages/BasePageModel.ts index 9934f5ec..38a7db14 100644 --- a/src/pages/BasePageModel.ts +++ b/src/pages/BasePageModel.ts @@ -1,4 +1,4 @@ -import { Page } from '@playwright/test'; +import { expect, Locator, Page } from '@playwright/test'; abstract class BasePageModel { protected page: Page; @@ -6,6 +6,23 @@ abstract class BasePageModel { constructor(page: Page) { this.page = page; } + + // tab content is fetched once per page load, so when it fails to render, + // re-clicking the tab never refetches it — only a reload does + protected async openTab( + tab: Locator, + tabContent: { isLoaded: () => Promise } + ) { + let reloadOnRetry = false; + await expect(async () => { + if (reloadOnRetry) { + await this.page.reload(); + } + reloadOnRetry = true; + await tab.click(); + await tabContent.isLoaded(); + }).toPass({ timeout: 45000, intervals: [500, 1000, 2000] }); + } } export default BasePageModel; diff --git a/src/pages/putaway/putawayDetails/PutawayDetailsPage.ts b/src/pages/putaway/putawayDetails/PutawayDetailsPage.ts index 0fd56a84..73f05380 100644 --- a/src/pages/putaway/putawayDetails/PutawayDetailsPage.ts +++ b/src/pages/putaway/putawayDetails/PutawayDetailsPage.ts @@ -135,14 +135,8 @@ class PutawayDetailsPage extends BasePageModel { return this.page.locator('li.tab-badge'); } - get spinner() { - return this.page.locator('.loading'); - } - - async waitUntilSpinnerHides() { - await this.spinner.waitFor({ - state: 'hidden', - }); + async openCommentsTab() { + await this.openTab(this.commentsTab, this.commentsTable); } } diff --git a/src/pages/putaway/putawayDetails/components/CommentsTable.ts b/src/pages/putaway/putawayDetails/components/CommentsTable.ts index ffca7ad6..22366d7d 100644 --- a/src/pages/putaway/putawayDetails/components/CommentsTable.ts +++ b/src/pages/putaway/putawayDetails/components/CommentsTable.ts @@ -11,6 +11,7 @@ class CommentsTable extends BasePageModel { await expect( this.page.getByRole('heading').getByText('Comments') ).toBeVisible(); + await expect(this.table.or(this.emptyCommentTable).first()).toBeVisible(); } get table() { diff --git a/src/pages/stockMovementShow/StockMovementShowPage.ts b/src/pages/stockMovementShow/StockMovementShowPage.ts index 82b995b6..f84aba23 100644 --- a/src/pages/stockMovementShow/StockMovementShowPage.ts +++ b/src/pages/stockMovementShow/StockMovementShowPage.ts @@ -1,4 +1,4 @@ -import { expect, Locator, Page } from '@playwright/test'; +import { expect, Page } from '@playwright/test'; import { STOCK_MOVEMENT_URL } from '@/constants/applicationUrls'; import BasePageModel from '@/pages/BasePageModel'; @@ -112,23 +112,6 @@ class StockMovementShowPage extends BasePageModel { await this.deleteButton.click(); } - // tab content is fetched once per page load, so when it fails to render, - // re-clicking the tab never refetches it — only a reload does - private async openTab( - tab: Locator, - tabContent: { isLoaded: () => Promise } - ) { - let reloadOnRetry = false; - await expect(async () => { - if (reloadOnRetry) { - await this.page.reload(); - } - reloadOnRetry = true; - await tab.click(); - await tabContent.isLoaded(); - }).toPass({ timeout: 45000, intervals: [500, 1000, 2000] }); - } - async openReceiptsTab() { await this.openTab(this.receiptTab, this.receiptListTable); } diff --git a/src/pages/transactions/TransactionListPage.ts b/src/pages/transactions/TransactionListPage.ts index 2ae42e02..8d2ce5c9 100644 --- a/src/pages/transactions/TransactionListPage.ts +++ b/src/pages/transactions/TransactionListPage.ts @@ -1,4 +1,4 @@ -import { expect, Page } from '@playwright/test'; +import { Page } from '@playwright/test'; import BasePageModel from '@/pages/BasePageModel'; @@ -10,16 +10,6 @@ class TransactionListPage extends BasePageModel { super(page); this.table = new TransactionTable(page); } - - get successMessage() { - return this.page.locator('.message'); - } - - async deleteTransaction(n: number) { - await this.table.row(n).actionsButton.click(); - await this.table.deleteButton.click(); - await expect(this.page.locator('.message')).toBeVisible(); - } } export default TransactionListPage; diff --git a/src/pages/transactions/components/TransactionTable.ts b/src/pages/transactions/components/TransactionTable.ts index 57a77bbe..fdc96ea1 100644 --- a/src/pages/transactions/components/TransactionTable.ts +++ b/src/pages/transactions/components/TransactionTable.ts @@ -19,12 +19,6 @@ class TransactionTable extends BasePageModel { return new Row(this.page, this.rows.nth(index)); } - get deleteButton() { - return this.page - .locator('.action-menu-item') - .getByRole('link', { name: 'Delete' }); - } - get editButton() { return this.page .locator('.action-menu-item') diff --git a/src/tests/putaway/addCommentToPutaway.test.ts b/src/tests/putaway/addCommentToPutaway.test.ts index bca3f5da..c8777b08 100644 --- a/src/tests/putaway/addCommentToPutaway.test.ts +++ b/src/tests/putaway/addCommentToPutaway.test.ts @@ -3,6 +3,7 @@ import { ShipmentType } from '@/constants/ShipmentType'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; import RefreshCachesUtils from '@/utils/RefreshCaches'; import { @@ -61,7 +62,13 @@ test.describe('Add comment to Putaway', () => { test.afterEach( async ( - { stockMovementService, navbar, transactionListPage, putawayService }, + { + stockMovementService, + transactionService, + locationService, + mainLocationService, + putawayService, + }, testInfo ) => { const { allPutawaysCompleted } = await cleanupPendingPutaways({ @@ -71,17 +78,18 @@ test.describe('Add comment to Putaway', () => { }); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); + await transactionService.deleteRecentTransactions(2); } await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); } ); @@ -166,9 +174,7 @@ test.describe('Add comment to Putaway', () => { await test.step('Assert comment is indicated on putaway details page', async () => { await putawayDetailsPage.isLoaded(); - await putawayDetailsPage.commentsTab.click(); - await putawayDetailsPage.waitUntilSpinnerHides(); - await putawayDetailsPage.commentsTable.isLoaded(); + await putawayDetailsPage.openCommentsTab(); await expect(putawayDetailsPage.badgeCount).toBeVisible(); await expect(putawayDetailsPage.badgeCount).toHaveAttribute( 'data-count', @@ -212,9 +218,7 @@ test.describe('Add comment to Putaway', () => { await test.step('Assert comment is indicated on putaway details page', async () => { await putawayDetailsPage.isLoaded(); - await putawayDetailsPage.commentsTab.click(); - await putawayDetailsPage.waitUntilSpinnerHides(); - await putawayDetailsPage.commentsTable.isLoaded(); + await putawayDetailsPage.openCommentsTab(); await expect(putawayDetailsPage.badgeCount).toBeVisible(); await expect(putawayDetailsPage.badgeCount).toHaveAttribute( 'data-count', @@ -239,15 +243,12 @@ test.describe('Add comment to Putaway', () => { await test.step('Assert comment is indicated on putaway details page', async () => { await putawayDetailsPage.isLoaded(); - await putawayDetailsPage.commentsTab.click(); - await putawayDetailsPage.waitUntilSpinnerHides(); - await putawayDetailsPage.commentsTable.isLoaded(); + await putawayDetailsPage.openCommentsTab(); await expect(putawayDetailsPage.badgeCount).toBeVisible(); await expect(putawayDetailsPage.badgeCount).toHaveAttribute( 'data-count', '2' ); - await putawayDetailsPage.commentsTable.isLoaded(); await expect(putawayDetailsPage.commentsTable.rows).toHaveCount(4); }); @@ -258,9 +259,7 @@ test.describe('Add comment to Putaway', () => { await test.step('Assert delete comment is indicated on putaway details page', async () => { await putawayDetailsPage.isLoaded(); - await putawayDetailsPage.commentsTab.click(); - await putawayDetailsPage.waitUntilSpinnerHides(); - await putawayDetailsPage.commentsTable.isLoaded(); + await putawayDetailsPage.openCommentsTab(); await expect(putawayDetailsPage.badgeCount).toBeVisible(); await expect(putawayDetailsPage.badgeCount).toHaveAttribute( 'data-count', @@ -272,9 +271,7 @@ test.describe('Add comment to Putaway', () => { await test.step('Assert delete added comments', async () => { await putawayDetailsPage.commentsTable.clickDeleteCommentButton(2); await putawayDetailsPage.isLoaded(); - await putawayDetailsPage.commentsTab.click(); - await putawayDetailsPage.waitUntilSpinnerHides(); - await putawayDetailsPage.commentsTable.isLoaded(); + await putawayDetailsPage.openCommentsTab(); await expect( putawayDetailsPage.commentsTable.emptyCommentTable ).toBeVisible(); @@ -314,9 +311,7 @@ test.describe('Add comment to Putaway', () => { await test.step('Assert comment is indicated on putaway details page', async () => { await putawayDetailsPage.isLoaded(); - await putawayDetailsPage.commentsTab.click(); - await putawayDetailsPage.waitUntilSpinnerHides(); - await putawayDetailsPage.commentsTable.isLoaded(); + await putawayDetailsPage.openCommentsTab(); await expect(putawayDetailsPage.badgeCount).toBeVisible(); await expect(putawayDetailsPage.badgeCount).toHaveAttribute( 'data-count', diff --git a/src/tests/putaway/assertAttemptToEditCompletedPutaway.test.ts b/src/tests/putaway/assertAttemptToEditCompletedPutaway.test.ts index 87447b7a..882427d4 100644 --- a/src/tests/putaway/assertAttemptToEditCompletedPutaway.test.ts +++ b/src/tests/putaway/assertAttemptToEditCompletedPutaway.test.ts @@ -3,6 +3,7 @@ import { ShipmentType } from '@/constants/ShipmentType'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; import RefreshCachesUtils from '@/utils/RefreshCaches'; import { @@ -61,7 +62,13 @@ test.describe('Assert attempt to edit completed putaway', () => { test.afterEach( async ( - { stockMovementService, navbar, transactionListPage, putawayService }, + { + stockMovementService, + transactionService, + locationService, + mainLocationService, + putawayService, + }, testInfo ) => { const { allPutawaysCompleted } = await cleanupPendingPutaways({ @@ -71,17 +78,18 @@ test.describe('Assert attempt to edit completed putaway', () => { }); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); + await transactionService.deleteRecentTransactions(2); } await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); } ); diff --git a/src/tests/putaway/assertPutawayDetailsPage.test.ts b/src/tests/putaway/assertPutawayDetailsPage.test.ts index 934cc0d2..4bcc9d66 100644 --- a/src/tests/putaway/assertPutawayDetailsPage.test.ts +++ b/src/tests/putaway/assertPutawayDetailsPage.test.ts @@ -6,6 +6,7 @@ import { ShipmentType } from '@/constants/ShipmentType'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { deleteFile, writeBufferToFile } from '@/utils/FileIOUtils'; import { pdfContainsValues } from '@/utils/pdfUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; @@ -69,7 +70,13 @@ test.describe('Assert putaway details page', () => { test.afterEach( async ( - { stockMovementService, navbar, transactionListPage, putawayService }, + { + stockMovementService, + transactionService, + locationService, + mainLocationService, + putawayService, + }, testInfo ) => { const { allPutawaysCompleted } = await cleanupPendingPutaways({ @@ -79,14 +86,7 @@ test.describe('Assert putaway details page', () => { }); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); + await transactionService.deleteRecentTransactions(2); } await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); @@ -94,6 +94,14 @@ test.describe('Assert putaway details page', () => { while (downloadedFilePaths.length) { deleteFile(downloadedFilePaths.pop() as string); } + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); } ); diff --git a/src/tests/putaway/assertReceivingBinsOnCreatePutawayPage.test.ts b/src/tests/putaway/assertReceivingBinsOnCreatePutawayPage.test.ts index 3a79b1c2..1ba61d7a 100644 --- a/src/tests/putaway/assertReceivingBinsOnCreatePutawayPage.test.ts +++ b/src/tests/putaway/assertReceivingBinsOnCreatePutawayPage.test.ts @@ -3,6 +3,7 @@ import { ShipmentType } from '@/constants/ShipmentType'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { formatDate, getDateByOffset } from '@/utils/DateUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; import RefreshCachesUtils from '@/utils/RefreshCaches'; @@ -127,7 +128,13 @@ test.describe('Assert receiving bin on create putaway page', () => { test.afterEach( async ( - { stockMovementService, navbar, transactionListPage, putawayService }, + { + stockMovementService, + transactionService, + locationService, + mainLocationService, + putawayService, + }, testInfo ) => { const { allPutawaysCompleted } = await cleanupPendingPutaways({ @@ -137,11 +144,7 @@ test.describe('Assert receiving bin on create putaway page', () => { }); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - for (let n = 1; n < 4; n++) { - await transactionListPage.deleteTransaction(1); - } + await transactionService.deleteRecentTransactions(5); } await deleteShipment({ @@ -153,6 +156,22 @@ test.describe('Assert receiving bin on create putaway page', () => { stockMovementService, STOCK_MOVEMENT: SECONDARY_STOCK_MOVEMENT, }); + + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin: + AppConfig.instance.receivingBinPrefix + + PRIMARY_STOCK_MOVEMENT.identifier, + }); + + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin: + AppConfig.instance.receivingBinPrefix + + SECONDARY_STOCK_MOVEMENT.identifier, + }); } ); diff --git a/src/tests/putaway/assertZonesInPutaways.test.ts b/src/tests/putaway/assertZonesInPutaways.test.ts index b6fa8dbd..1c70ead8 100644 --- a/src/tests/putaway/assertZonesInPutaways.test.ts +++ b/src/tests/putaway/assertZonesInPutaways.test.ts @@ -6,6 +6,7 @@ import { ShipmentType } from '@/constants/ShipmentType'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { ProductResponse, StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { deleteFile, writeBufferToFile } from '@/utils/FileIOUtils'; import { extractPdfColumnValues } from '@/utils/pdfUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; @@ -151,8 +152,8 @@ test.describe('Assert zones on putaway pages', () => { async ( { stockMovementService, - navbar, - transactionListPage, + transactionService, + locationService, productService, productShowPage, productEditPage, @@ -172,13 +173,10 @@ test.describe('Assert zones on putaway pages', () => { }); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - for (let n = 1; n < 4; n++) { - await transactionListPage.deleteTransaction(1); - } + await transactionService.deleteRecentTransactions(5); } await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); + const product = await productService.getProduct(Product.FOUR); await test.step('Delete inventory level', async () => { @@ -241,6 +239,14 @@ test.describe('Assert zones on putaway pages', () => { while (downloadedFilePaths.length) { deleteFile(downloadedFilePaths.pop() as string); } + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); } ); diff --git a/src/tests/putaway/changeLocationOnCreatePutawayPage.test.ts b/src/tests/putaway/changeLocationOnCreatePutawayPage.test.ts index 599595b0..2d8357ea 100644 --- a/src/tests/putaway/changeLocationOnCreatePutawayPage.test.ts +++ b/src/tests/putaway/changeLocationOnCreatePutawayPage.test.ts @@ -3,6 +3,7 @@ import { ShipmentType } from '@/constants/ShipmentType'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; import RefreshCachesUtils from '@/utils/RefreshCaches'; import { @@ -59,15 +60,33 @@ test.describe('Change location on putaway create page and list pages', () => { } ); - test.afterEach(async ({ stockMovementService, putawayService }, testInfo) => { - await cleanupPendingPutaways({ - putawayService, - putawayOrderIds: PUTAWAY_ORDER_IDS, - testInfo, - }); + test.afterEach( + async ( + { + stockMovementService, + locationService, + mainLocationService, + putawayService, + }, + testInfo + ) => { + await cleanupPendingPutaways({ + putawayService, + putawayOrderIds: PUTAWAY_ORDER_IDS, + testInfo, + }); - await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); - }); + await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deleteReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); + } + ); test('Change location on putaway create page and list page', async ({ stockMovementShowPage, diff --git a/src/tests/putaway/createMoreThan1PutawayForTheSameItem.test.ts b/src/tests/putaway/createMoreThan1PutawayForTheSameItem.test.ts index d56177cd..1e59d26c 100644 --- a/src/tests/putaway/createMoreThan1PutawayForTheSameItem.test.ts +++ b/src/tests/putaway/createMoreThan1PutawayForTheSameItem.test.ts @@ -6,6 +6,7 @@ import { ShipmentType } from '@/constants/ShipmentType'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { deleteFile, writeBufferToFile } from '@/utils/FileIOUtils'; import { extractPdfColumnValues } from '@/utils/pdfUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; @@ -67,7 +68,13 @@ test.describe('Create more than 1 putaway from the same item', () => { test.afterEach( async ( - { stockMovementService, navbar, transactionListPage, putawayService }, + { + stockMovementService, + transactionService, + locationService, + mainLocationService, + putawayService, + }, testInfo ) => { const { allPutawaysCompleted } = await cleanupPendingPutaways({ @@ -77,14 +84,7 @@ test.describe('Create more than 1 putaway from the same item', () => { }); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); + await transactionService.deleteRecentTransactions(4); } await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); @@ -92,6 +92,14 @@ test.describe('Create more than 1 putaway from the same item', () => { while (downloadedFilePaths.length) { deleteFile(downloadedFilePaths.pop() as string); } + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); } ); diff --git a/src/tests/putaway/createPutaway.test.ts b/src/tests/putaway/createPutaway.test.ts index 51500cb3..4e072055 100644 --- a/src/tests/putaway/createPutaway.test.ts +++ b/src/tests/putaway/createPutaway.test.ts @@ -6,6 +6,7 @@ import { ShipmentType } from '@/constants/ShipmentType'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { deleteFile, writeBufferToFile } from '@/utils/FileIOUtils'; import { extractPdfColumnValues } from '@/utils/pdfUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; @@ -67,7 +68,13 @@ test.describe('Putaway received inbound shipment', () => { test.afterEach( async ( - { stockMovementService, navbar, transactionListPage, putawayService }, + { + stockMovementService, + transactionService, + locationService, + mainLocationService, + putawayService, + }, testInfo ) => { const { allPutawaysCompleted } = await cleanupPendingPutaways({ @@ -77,14 +84,7 @@ test.describe('Putaway received inbound shipment', () => { }); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); + await transactionService.deleteRecentTransactions(2); } await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); @@ -92,6 +92,14 @@ test.describe('Putaway received inbound shipment', () => { while (downloadedFilePaths.length) { deleteFile(downloadedFilePaths.pop() as string); } + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); } ); diff --git a/src/tests/putaway/deleteItemsFromPutaway.test.ts b/src/tests/putaway/deleteItemsFromPutaway.test.ts index e511a569..e31e2770 100644 --- a/src/tests/putaway/deleteItemsFromPutaway.test.ts +++ b/src/tests/putaway/deleteItemsFromPutaway.test.ts @@ -3,6 +3,7 @@ import { ShipmentType } from '@/constants/ShipmentType'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { ProductResponse, StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; import RefreshCachesUtils from '@/utils/RefreshCaches'; import { @@ -75,7 +76,13 @@ test.describe('Delete items from putaway', () => { test.afterEach( async ( - { stockMovementService, navbar, transactionListPage, putawayService }, + { + stockMovementService, + transactionService, + locationService, + mainLocationService, + putawayService, + }, testInfo ) => { const { allPutawaysCompleted } = await cleanupPendingPutaways({ @@ -85,13 +92,17 @@ test.describe('Delete items from putaway', () => { }); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - for (let n = 1; n < 3; n++) { - await transactionListPage.deleteTransaction(1); - } + await transactionService.deleteRecentTransactions(4); } await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); } ); diff --git a/src/tests/putaway/deletePendingPutaway.test.ts b/src/tests/putaway/deletePendingPutaway.test.ts index 917a4b85..6555afd0 100644 --- a/src/tests/putaway/deletePendingPutaway.test.ts +++ b/src/tests/putaway/deletePendingPutaway.test.ts @@ -8,6 +8,7 @@ import PutawayListPage from '@/pages/putaway/list/PutawayListPage'; import PutawayDetailsPage from '@/pages/putaway/putawayDetails/PutawayDetailsPage'; import StockMovementShowPage from '@/pages/stockMovementShow/StockMovementShowPage'; import { StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; import RefreshCachesUtils from '@/utils/RefreshCaches'; import { @@ -64,15 +65,33 @@ test.describe('Delete pending putaways', () => { } ); - test.afterEach(async ({ stockMovementService, putawayService }, testInfo) => { - await cleanupPendingPutaways({ - putawayService, - putawayOrderIds: PUTAWAY_ORDER_IDS, - testInfo, - }); + test.afterEach( + async ( + { + stockMovementService, + locationService, + mainLocationService, + putawayService, + }, + testInfo + ) => { + await cleanupPendingPutaways({ + putawayService, + putawayOrderIds: PUTAWAY_ORDER_IDS, + testInfo, + }); - await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); - }); + await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deleteReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); + } + ); test('Delete pending putaway as superuser from list page', async ({ stockMovementShowPage, diff --git a/src/tests/putaway/performPutawayAsManagerUser.test.ts b/src/tests/putaway/performPutawayAsManagerUser.test.ts index 857ee761..1403ed47 100644 --- a/src/tests/putaway/performPutawayAsManagerUser.test.ts +++ b/src/tests/putaway/performPutawayAsManagerUser.test.ts @@ -7,6 +7,7 @@ import CreatePutawayPage from '@/pages/putaway/CreatePutawayPage'; import PutawayDetailsPage from '@/pages/putaway/putawayDetails/PutawayDetailsPage'; import StockMovementShowPage from '@/pages/stockMovementShow/StockMovementShowPage'; import { ProductResponse, StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; import RefreshCachesUtils from '@/utils/RefreshCaches'; import { @@ -82,8 +83,9 @@ test.describe('Perform putaway as manager user', () => { { stockMovementShowPage, stockMovementService, - navbar, - transactionListPage, + transactionService, + locationService, + mainLocationService, putawayService, }, testInfo @@ -96,12 +98,17 @@ test.describe('Perform putaway as manager user', () => { await stockMovementShowPage.goToPage(STOCK_MOVEMENT.id); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - await transactionListPage.deleteTransaction(1); - await transactionListPage.deleteTransaction(1); + await transactionService.deleteRecentTransactions(3); } await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); } ); diff --git a/src/tests/putaway/putawayImtemWithEmptyLot.test.ts b/src/tests/putaway/putawayImtemWithEmptyLot.test.ts index 051b491c..41ace206 100644 --- a/src/tests/putaway/putawayImtemWithEmptyLot.test.ts +++ b/src/tests/putaway/putawayImtemWithEmptyLot.test.ts @@ -3,6 +3,7 @@ import { ShipmentType } from '@/constants/ShipmentType'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; import RefreshCachesUtils from '@/utils/RefreshCaches'; import { @@ -61,7 +62,14 @@ test.describe('Putaway item with empty lot', () => { test.afterEach( async ( - { stockMovementService, navbar, transactionListPage, putawayService }, + { + stockMovementService, + navbar, + transactionService, + locationService, + mainLocationService, + putawayService, + }, testInfo ) => { const { allPutawaysCompleted } = await cleanupPendingPutaways({ @@ -71,16 +79,21 @@ test.describe('Putaway item with empty lot', () => { }); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - for (let n = 1; n < 5; n++) { - await transactionListPage.deleteTransaction(1); - } + await transactionService.deleteRecentTransactions(6); } await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); + await RefreshCachesUtils.refreshCaches({ navbar, }); + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); } ); diff --git a/src/tests/putaway/putawayMoreThan1Item.test.ts b/src/tests/putaway/putawayMoreThan1Item.test.ts index f8c756c3..66148957 100644 --- a/src/tests/putaway/putawayMoreThan1Item.test.ts +++ b/src/tests/putaway/putawayMoreThan1Item.test.ts @@ -3,6 +3,7 @@ import { ShipmentType } from '@/constants/ShipmentType'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { ProductResponse, StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; import RefreshCachesUtils from '@/utils/RefreshCaches'; import { @@ -75,7 +76,13 @@ test.describe('Create putaway for more than 1 item, separate putaways', () => { test.afterEach( async ( - { stockMovementService, navbar, transactionListPage, putawayService }, + { + stockMovementService, + transactionService, + locationService, + mainLocationService, + putawayService, + }, testInfo ) => { const { allPutawaysCompleted } = await cleanupPendingPutaways({ @@ -85,13 +92,17 @@ test.describe('Create putaway for more than 1 item, separate putaways', () => { }); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - for (let n = 1; n < 4; n++) { - await transactionListPage.deleteTransaction(1); - } + await transactionService.deleteRecentTransactions(3); } await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); } ); @@ -326,8 +337,9 @@ test.describe('Putaway 2 items in the same putaway', () => { { stockMovementShowPage, stockMovementService, - navbar, - transactionListPage, + transactionService, + locationService, + mainLocationService, oldViewShipmentPage, putawayService, }, @@ -340,10 +352,7 @@ test.describe('Putaway 2 items in the same putaway', () => { }); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - await transactionListPage.deleteTransaction(1); - await transactionListPage.deleteTransaction(1); + await transactionService.deleteRecentTransactions(2); } await stockMovementShowPage.goToPage(STOCK_MOVEMENT.id); await stockMovementShowPage.detailsListTable.oldViewShipmentPage.click(); @@ -352,6 +361,14 @@ test.describe('Putaway 2 items in the same putaway', () => { await stockMovementShowPage.rollbackButton.click(); await stockMovementService.deleteStockMovement(STOCK_MOVEMENT.id); + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); } ); diff --git a/src/tests/putaway/putawayToHoldBin.test.ts b/src/tests/putaway/putawayToHoldBin.test.ts index a7ab3a8e..c2ab572e 100644 --- a/src/tests/putaway/putawayToHoldBin.test.ts +++ b/src/tests/putaway/putawayToHoldBin.test.ts @@ -82,9 +82,9 @@ test.describe('Putaway item into hold bin', () => { test.afterEach( async ( { - navbar, - transactionListPage, + transactionService, stockMovementService, + locationService, page, locationListPage, mainLocationService, @@ -102,14 +102,7 @@ test.describe('Putaway item into hold bin', () => { const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); + await transactionService.deleteRecentTransactions(2); } await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); @@ -125,10 +118,8 @@ test.describe('Putaway item into hold bin', () => { }); await BinLocationUtils.deactivateReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/putaway/putawayToPreferredBin.test.ts b/src/tests/putaway/putawayToPreferredBin.test.ts index f42ee494..5cec4c78 100644 --- a/src/tests/putaway/putawayToPreferredBin.test.ts +++ b/src/tests/putaway/putawayToPreferredBin.test.ts @@ -6,6 +6,7 @@ import { ShipmentType } from '@/constants/ShipmentType'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { ProductResponse, StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { deleteFile, writeBufferToFile } from '@/utils/FileIOUtils'; import { extractPdfColumnValues } from '@/utils/pdfUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; @@ -98,8 +99,9 @@ test.describe('Putaway to preferred bin and default bin', () => { async ( { stockMovementService, - navbar, - transactionListPage, + transactionService, + locationService, + mainLocationService, productService, productShowPage, productEditPage, @@ -114,12 +116,10 @@ test.describe('Putaway to preferred bin and default bin', () => { }); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - await transactionListPage.deleteTransaction(1); - await transactionListPage.deleteTransaction(1); + await transactionService.deleteRecentTransactions(2); } await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); + const product2 = await productService.getProduct(Product.FOUR); await productShowPage.goToPage(product2.id); await productShowPage.editProductButton.click(); @@ -135,6 +135,14 @@ test.describe('Putaway to preferred bin and default bin', () => { while (downloadedFilePaths.length) { deleteFile(downloadedFilePaths.pop() as string); } + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); } ); diff --git a/src/tests/putaway/qtyValidationsInPutaways.test.ts b/src/tests/putaway/qtyValidationsInPutaways.test.ts index 3885479a..b2d54845 100644 --- a/src/tests/putaway/qtyValidationsInPutaways.test.ts +++ b/src/tests/putaway/qtyValidationsInPutaways.test.ts @@ -3,6 +3,7 @@ import { ShipmentType } from '@/constants/ShipmentType'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; import RefreshCachesUtils from '@/utils/RefreshCaches'; import { @@ -59,15 +60,33 @@ test.describe('Assert qty validations in putaways', () => { } ); - test.afterEach(async ({ stockMovementService, putawayService }, testInfo) => { - await cleanupPendingPutaways({ - putawayService, - putawayOrderIds: PUTAWAY_ORDER_IDS, - testInfo, - }); + test.afterEach( + async ( + { + stockMovementService, + locationService, + mainLocationService, + putawayService, + }, + testInfo + ) => { + await cleanupPendingPutaways({ + putawayService, + putawayOrderIds: PUTAWAY_ORDER_IDS, + testInfo, + }); - await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); - }); + await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deleteReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); + } + ); test('Assert qty validations in putaways', async ({ stockMovementShowPage, diff --git a/src/tests/putaway/rollbackLastReceiptWhenPutawayCreated.test.ts b/src/tests/putaway/rollbackLastReceiptWhenPutawayCreated.test.ts index feb9ba0d..d456c9c9 100644 --- a/src/tests/putaway/rollbackLastReceiptWhenPutawayCreated.test.ts +++ b/src/tests/putaway/rollbackLastReceiptWhenPutawayCreated.test.ts @@ -3,6 +3,7 @@ import { ShipmentType } from '@/constants/ShipmentType'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; import RefreshCachesUtils from '@/utils/RefreshCaches'; import { @@ -61,7 +62,13 @@ test.describe('Rollback last receipt behavior when putaway created', () => { test.afterEach( async ( - { stockMovementService, navbar, transactionListPage, putawayService }, + { + stockMovementService, + transactionService, + locationService, + mainLocationService, + putawayService, + }, testInfo ) => { const { allPutawaysCompleted } = await cleanupPendingPutaways({ @@ -71,16 +78,17 @@ test.describe('Rollback last receipt behavior when putaway created', () => { }); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); + await transactionService.deleteRecentTransactions(2); } await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); } ); diff --git a/src/tests/putaway/sortPutawayByCurrentPreferredAndOriginalOrder.test.ts b/src/tests/putaway/sortPutawayByCurrentPreferredAndOriginalOrder.test.ts index b29a7e3b..7d8b5427 100644 --- a/src/tests/putaway/sortPutawayByCurrentPreferredAndOriginalOrder.test.ts +++ b/src/tests/putaway/sortPutawayByCurrentPreferredAndOriginalOrder.test.ts @@ -1,3 +1,4 @@ +import AppConfig from '@/config/AppConfig'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { @@ -5,6 +6,7 @@ import { ProductResponse, StockMovementResponse, } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { assignPreferredBin } from '@/utils/productUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; import RefreshCachesUtils from '@/utils/RefreshCaches'; @@ -91,8 +93,9 @@ test.describe('Sort putaway by current bin, preferred bin and original order', ( async ( { stockMovementService, - navbar, - transactionListPage, + transactionService, + locationService, + mainLocationService, putawayService, productShowPage, productEditPage, @@ -106,11 +109,7 @@ test.describe('Sort putaway by current bin, preferred bin and original order', ( }); if (anyPutawayCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - for (let i = 0; i < 3; i++) { - await transactionListPage.deleteTransaction(1); - } + await transactionService.deleteRecentTransactions(3); } if (inboundTwo) { @@ -137,6 +136,21 @@ test.describe('Sort putaway by current bin, preferred bin and original order', ( ).toBeVisible(); await productEditPage.inventoryLevelsTabSection.createStockLevelModal.clickDeleteInventoryLevel(); } + + if (inboundTwo) { + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin: + AppConfig.instance.receivingBinPrefix + inboundTwo.identifier, + }); + } + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin: + AppConfig.instance.receivingBinPrefix + inboundOne.identifier, + }); } ); diff --git a/src/tests/putaway/splitLineInPutaway.test.ts b/src/tests/putaway/splitLineInPutaway.test.ts index 70dae1ef..f8ed97a8 100644 --- a/src/tests/putaway/splitLineInPutaway.test.ts +++ b/src/tests/putaway/splitLineInPutaway.test.ts @@ -3,6 +3,7 @@ import { ShipmentType } from '@/constants/ShipmentType'; import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import { StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; import RefreshCachesUtils from '@/utils/RefreshCaches'; import { @@ -61,7 +62,13 @@ test.describe('Split line in Putaway', () => { test.afterEach( async ( - { stockMovementService, navbar, transactionListPage, putawayService }, + { + stockMovementService, + transactionService, + locationService, + mainLocationService, + putawayService, + }, testInfo ) => { const { allPutawaysCompleted } = await cleanupPendingPutaways({ @@ -71,20 +78,18 @@ test.describe('Split line in Putaway', () => { }); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); - await transactionListPage.table.row(1).actionsButton.click(); - await transactionListPage.table.deleteButton.click(); - await expect(transactionListPage.successMessage).toBeVisible(); + await transactionService.deleteRecentTransactions(5); } await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); } ); diff --git a/src/tests/putaway/validationOnQtyRemovedFromReceivingBin.test.ts b/src/tests/putaway/validationOnQtyRemovedFromReceivingBin.test.ts index 0586e5a0..b91ce016 100644 --- a/src/tests/putaway/validationOnQtyRemovedFromReceivingBin.test.ts +++ b/src/tests/putaway/validationOnQtyRemovedFromReceivingBin.test.ts @@ -6,6 +6,7 @@ import { expect, test } from '@/fixtures/fixtures'; import { Product } from '@/generated/ProductCodes.generated'; import ProductShowPage from '@/pages/product/productShow/ProductShowPage'; import { ProductResponse, StockMovementResponse } from '@/types'; +import BinLocationUtils from '@/utils/BinLocationUtils'; import { cleanupPendingPutaways } from '@/utils/putawayUtils'; import RefreshCachesUtils from '@/utils/RefreshCaches'; import { @@ -78,7 +79,13 @@ test.describe('Assert validation on qty removed from receiving bin', () => { test.afterEach( async ( - { stockMovementService, navbar, transactionListPage, putawayService }, + { + stockMovementService, + transactionService, + locationService, + mainLocationService, + putawayService, + }, testInfo ) => { const { allPutawaysCompleted } = await cleanupPendingPutaways({ @@ -88,13 +95,17 @@ test.describe('Assert validation on qty removed from receiving bin', () => { }); if (allPutawaysCompleted) { - await navbar.configurationButton.click(); - await navbar.transactions.click(); - for (let n = 1; n < 6; n++) { - await transactionListPage.deleteTransaction(1); - } + await transactionService.deleteRecentTransactions(6); } await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); + + const receivingBin = + AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; + await BinLocationUtils.deactivateReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); } ); diff --git a/src/tests/receiving/assertBinLocationField.test.ts b/src/tests/receiving/assertBinLocationField.test.ts index 532ad622..a0557ed9 100644 --- a/src/tests/receiving/assertBinLocationField.test.ts +++ b/src/tests/receiving/assertBinLocationField.test.ts @@ -41,19 +41,15 @@ test.describe('Assert bin location not clearable', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/assertCreationOfGoodsReceiptNote.test.ts b/src/tests/receiving/assertCreationOfGoodsReceiptNote.test.ts index 8df70188..36ce756c 100644 --- a/src/tests/receiving/assertCreationOfGoodsReceiptNote.test.ts +++ b/src/tests/receiving/assertCreationOfGoodsReceiptNote.test.ts @@ -42,19 +42,15 @@ test.describe('Assert Goods Receipt Note is created and opened', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/assertCreationOfReceivingBin.test.ts b/src/tests/receiving/assertCreationOfReceivingBin.test.ts index f24c006f..d77bb3a5 100644 --- a/src/tests/receiving/assertCreationOfReceivingBin.test.ts +++ b/src/tests/receiving/assertCreationOfReceivingBin.test.ts @@ -48,20 +48,16 @@ test.describe('Assert creation of receiving bin', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/assertQtyInputs.test.ts b/src/tests/receiving/assertQtyInputs.test.ts index 612c320f..7e4d89c7 100644 --- a/src/tests/receiving/assertQtyInputs.test.ts +++ b/src/tests/receiving/assertQtyInputs.test.ts @@ -46,20 +46,16 @@ test.describe('Assert if quantity inputs remain when split lines', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/assertRecipientField.test.ts b/src/tests/receiving/assertRecipientField.test.ts index 270e0ac9..547299b7 100644 --- a/src/tests/receiving/assertRecipientField.test.ts +++ b/src/tests/receiving/assertRecipientField.test.ts @@ -49,20 +49,16 @@ test.describe('Assert recipient field when receive', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/cancelRemainingQty.test.ts b/src/tests/receiving/cancelRemainingQty.test.ts index 913c87ce..513606b6 100644 --- a/src/tests/receiving/cancelRemainingQty.test.ts +++ b/src/tests/receiving/cancelRemainingQty.test.ts @@ -43,19 +43,15 @@ test.describe('Cancel qty in the middle of receipt', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/editBinLocationWhenReceive.test.ts b/src/tests/receiving/editBinLocationWhenReceive.test.ts index ab2ad963..f59a31c5 100644 --- a/src/tests/receiving/editBinLocationWhenReceive.test.ts +++ b/src/tests/receiving/editBinLocationWhenReceive.test.ts @@ -70,6 +70,7 @@ test.describe('Edit Bin Location when receive inbound stock movement', () => { test.afterEach( async ({ stockMovementService, + locationService, page, locationListPage, mainLocationService, @@ -105,11 +106,9 @@ test.describe('Edit Bin Location when receive inbound stock movement', () => { await createLocationPage.locationConfigurationTabSection.saveButton.click(); }); - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } @@ -258,6 +257,7 @@ test.describe('Edit Bin Location to bin with zone when receive inbound stock mov test.afterEach( async ({ stockMovementService, + locationService, page, locationListPage, mainLocationService, @@ -309,11 +309,9 @@ test.describe('Edit Bin Location to bin with zone when receive inbound stock mov await createLocationPage.locationConfigurationTabSection.saveButton.click(); }); - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } @@ -448,6 +446,7 @@ test.describe('Edit Bin Location when receive for all lines', () => { test.afterEach( async ({ stockMovementService, + locationService, page, locationListPage, mainLocationService, @@ -483,11 +482,9 @@ test.describe('Edit Bin Location when receive for all lines', () => { await createLocationPage.locationConfigurationTabSection.saveButton.click(); }); - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/editOriginalLineQtyTo0.test.ts b/src/tests/receiving/editOriginalLineQtyTo0.test.ts index 64d598d0..0a8891e5 100644 --- a/src/tests/receiving/editOriginalLineQtyTo0.test.ts +++ b/src/tests/receiving/editOriginalLineQtyTo0.test.ts @@ -59,20 +59,16 @@ test.describe('Edit qty of original line to 0', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } @@ -245,19 +241,15 @@ test.describe('Edit original line to other product in the middle of receipt', () test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/editsInReceiving.test.ts b/src/tests/receiving/editsInReceiving.test.ts index 4995352d..0167f2cf 100644 --- a/src/tests/receiving/editsInReceiving.test.ts +++ b/src/tests/receiving/editsInReceiving.test.ts @@ -52,20 +52,16 @@ test.describe('Edit items in the middle of receipt', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/exportReceivingTemplate.test.ts b/src/tests/receiving/exportReceivingTemplate.test.ts index a28c3386..de957a61 100644 --- a/src/tests/receiving/exportReceivingTemplate.test.ts +++ b/src/tests/receiving/exportReceivingTemplate.test.ts @@ -55,10 +55,8 @@ test.describe('Export receiving template', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); @@ -68,11 +66,9 @@ test.describe('Export receiving template', () => { const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/importReceivingTemplate.test.ts b/src/tests/receiving/importReceivingTemplate.test.ts index c052c779..4af5261c 100644 --- a/src/tests/receiving/importReceivingTemplate.test.ts +++ b/src/tests/receiving/importReceivingTemplate.test.ts @@ -54,10 +54,8 @@ test.describe('Import receiving template', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); @@ -67,11 +65,9 @@ test.describe('Import receiving template', () => { const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/lotExpirySystemUpdateOnReceiving.test.ts b/src/tests/receiving/lotExpirySystemUpdateOnReceiving.test.ts index 46eed244..ebdc7111 100644 --- a/src/tests/receiving/lotExpirySystemUpdateOnReceiving.test.ts +++ b/src/tests/receiving/lotExpirySystemUpdateOnReceiving.test.ts @@ -15,10 +15,8 @@ test.describe('Lot number system expiry date modification on receiving workflow' async ({ stockMovementShowPage, stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { // TODO: Improve this one, it is prone to getting stuck if there are not deleted SMs in the tested location while (STOCK_MOVEMENTS.length > 0) { @@ -36,11 +34,9 @@ test.describe('Lot number system expiry date modification on receiving workflow' const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/receiveInbound.test.ts b/src/tests/receiving/receiveInbound.test.ts index ac79559c..f9a175dc 100644 --- a/src/tests/receiving/receiveInbound.test.ts +++ b/src/tests/receiving/receiveInbound.test.ts @@ -46,20 +46,16 @@ test.describe('Receive inbound stock movement', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/receiveToHoldBin.test.ts b/src/tests/receiving/receiveToHoldBin.test.ts index 93a015d4..0ea48ec3 100644 --- a/src/tests/receiving/receiveToHoldBin.test.ts +++ b/src/tests/receiving/receiveToHoldBin.test.ts @@ -55,6 +55,7 @@ test.describe('Receive item into hold bin', () => { test.afterEach( async ({ stockMovementService, + locationService, page, locationListPage, mainLocationService, @@ -74,11 +75,9 @@ test.describe('Receive item into hold bin', () => { }); }); - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/receivingStatusChanges.test.ts b/src/tests/receiving/receivingStatusChanges.test.ts index 5d4d8f2d..e460e789 100644 --- a/src/tests/receiving/receivingStatusChanges.test.ts +++ b/src/tests/receiving/receivingStatusChanges.test.ts @@ -47,19 +47,15 @@ test.describe('Status changes on sm view page when receive shipment', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/rollbackStatusChanges.test.ts b/src/tests/receiving/rollbackStatusChanges.test.ts index 29ead236..113ec6bd 100644 --- a/src/tests/receiving/rollbackStatusChanges.test.ts +++ b/src/tests/receiving/rollbackStatusChanges.test.ts @@ -47,20 +47,16 @@ test.describe('Status changes on sm view page when rollback receipts', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/sortByAlphabeticalOrderAndRemainInputs.test.ts b/src/tests/receiving/sortByAlphabeticalOrderAndRemainInputs.test.ts index 6931e3df..0c1c5f41 100644 --- a/src/tests/receiving/sortByAlphabeticalOrderAndRemainInputs.test.ts +++ b/src/tests/receiving/sortByAlphabeticalOrderAndRemainInputs.test.ts @@ -39,20 +39,16 @@ test.describe('Apply sorting by alphabetical order and remain inputs', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/tableShortcutsInReceiving.test.ts b/src/tests/receiving/tableShortcutsInReceiving.test.ts index b767599e..80890ec8 100644 --- a/src/tests/receiving/tableShortcutsInReceiving.test.ts +++ b/src/tests/receiving/tableShortcutsInReceiving.test.ts @@ -60,20 +60,16 @@ test.describe('Use table shortcuts on receiving page', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/validationsOnDeliverOnDate.test.ts b/src/tests/receiving/validationsOnDeliverOnDate.test.ts index b842419e..620f987c 100644 --- a/src/tests/receiving/validationsOnDeliverOnDate.test.ts +++ b/src/tests/receiving/validationsOnDeliverOnDate.test.ts @@ -37,19 +37,15 @@ test.describe('Validations on edit Deliver On Date when receiving shipment', () test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/tests/receiving/validationsOnEditAndReceive.test.ts b/src/tests/receiving/validationsOnEditAndReceive.test.ts index cd724d07..044ac73f 100644 --- a/src/tests/receiving/validationsOnEditAndReceive.test.ts +++ b/src/tests/receiving/validationsOnEditAndReceive.test.ts @@ -99,20 +99,16 @@ test.describe('Validations on edit and receive inbound stock movement', () => { test.afterEach( async ({ stockMovementService, + locationService, mainLocationService, - page, - locationListPage, - createLocationPage, }) => { await deleteShipment({ stockMovementService, STOCK_MOVEMENT }); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; - await BinLocationUtils.deactivateReceivingBin({ + await BinLocationUtils.deleteReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }); } diff --git a/src/utils/BinLocationUtils.ts b/src/utils/BinLocationUtils.ts index b0fa15ad..4a91980b 100644 --- a/src/utils/BinLocationUtils.ts +++ b/src/utils/BinLocationUtils.ts @@ -1,40 +1,81 @@ -import { Page } from '@playwright/test'; +import { expect, Page } from '@playwright/test'; +import LocationService from '@/api/LocationService'; import { LOCATION_URL } from '@/constants/applicationUrls'; import CreateLocationPage from '@/pages/location/createLocation/CreateLocationPage'; import LocationListPage from '@/pages/location/LocationListPage'; import LocationData from '@/utils/LocationData'; class BinLocationUtils { + // Only safe for bins that never went through a completed putaway (e.g. a + // plain receive, or a putaway that was left pending and deleted): once + // stock has been putaway out of the bin, product_availability keeps a + // zero-quantity row until a scheduled refresh job clears it, which can + // outlast any reasonable test timeout and make the delete fail for a + // long time. Use deactivateReceivingBin for those cases instead. + static async deleteReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }: { + locationService: LocationService; + mainLocationService: LocationData; + receivingBin: string; + }) { + const binLocation = await BinLocationUtils.findReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); + if (!binLocation) { + return; + } + + await expect + .poll(async () => locationService.deleteLocation(binLocation.id), { + message: `Problem deleting receiving bin: ${receivingBin}`, + timeout: 30_000, + }) + .toBe(true); + } + static async deactivateReceivingBin({ + locationService, mainLocationService, - locationListPage, - createLocationPage, - page, receivingBin, }: { + locationService: LocationService; + mainLocationService: LocationData; + receivingBin: string; + }) { + const binLocation = await BinLocationUtils.findReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }); + if (!binLocation) { + return; + } + + await locationService.deactivateLocation(binLocation.id); + } + + private static async findReceivingBin({ + locationService, + mainLocationService, + receivingBin, + }: { + locationService: LocationService; mainLocationService: LocationData; - locationListPage: LocationListPage; - createLocationPage: CreateLocationPage; - page: Page; receivingBin: string; }) { const mainLocation = await mainLocationService.getLocation(); - await page.goto(LOCATION_URL.list()); - await locationListPage.searchByLocationNameField.fill(mainLocation.name); - await locationListPage.findButton.click(); - await locationListPage.getLocationEditButton(mainLocation.name).click(); - await createLocationPage.binLocationTab.click(); - await createLocationPage.binLocationTabSection.isLoaded(); - await createLocationPage.binLocationTabSection.searchField.fill( - receivingBin - ); - await createLocationPage.binLocationTabSection.searchField.press('Enter'); - await createLocationPage.binLocationTabSection.isLoaded(); - await createLocationPage.binLocationTabSection.editBinButton.click(); - await createLocationPage.locationConfigurationTab.click(); - await createLocationPage.locationConfigurationTabSection.activeCheckbox.uncheck(); - await createLocationPage.locationConfigurationTabSection.saveButton.click(); + const { data: binLocations } = + await locationService.searchInternalLocations( + receivingBin, + mainLocation.id + ); + return binLocations.find((bin) => bin.name === receivingBin); } static async createHoldBin({