/** * E2E Tests for Search Type 100: Time Span + Work Center + Item Number * * This search type allows users to search by a date range combined with work center(s) * and item number(s). It finds work orders processed through specific work centers * for specific items within the given time range. * * Required filters: * - Timespan (Min Date to Max Date) * - Work Center (one or more) * - Item Number (one or more via file upload) */ import { test, expect } from '@playwright/test'; import { navigateToSearchPage } from '../helpers/navigation.helper'; import { selectSearchType, SearchTypes, enterSearchName, clickSubmitSearch, confirmSubmitSearch } from '../helpers/search-type.helper'; import { setDateRange, setMinDate, setMaxDate, TestDateRanges } from '../helpers/date-picker.helper'; import { addWorkCenter, addWorkCenters, workCenterConfig, getAutocompleteItemCount } from '../helpers/autocomplete.helper'; import { uploadFile, itemNumberConfig, getTestFile, TestFiles, getUploadedItemCount } from '../helpers/file-upload.helper'; import { assertNoErrorNotification, hasErrorNotification } from '../helpers/radzen.helper'; import { hasValidationErrors, submitAndExpectError, ValidationMessages } from '../helpers/validation.helper'; // Valid test data from manual test scripts const TEST_WORK_CENTERS = { SINGLE: '10595CA', AS_SUFFIX: ['0083AS', '0278AS', '0424AS'], CA_SUFFIX: ['11275CA', '11350CA', '11355CA'], CB_SUFFIX: '1700CB', MIXED: ['1010AS', '14305CA'], }; test.describe('Search Type 100: Time Span + Work Center + Item Number', () => { test.beforeEach(async ({ page }) => { await navigateToSearchPage(page); await selectSearchType(page, SearchTypes.TIMESPAN_WC_ITEM); }); test.describe('Positive Test Cases', () => { test('TC-100-P01: Single Work Center with Single Item Number', async ({ page }) => { // Enter search name await enterSearchName(page, 'Test 100-P01 Single WC Single Item'); // Set date range (mid-range) await setDateRange(page, '2018-01-01', '2019-12-31'); // Add single work center await addWorkCenter(page, TEST_WORK_CENTERS.SINGLE); // Upload single item file await uploadFile(page, itemNumberConfig, getTestFile(TestFiles.SINGLE_ITEM)); // Verify work center was added const wcCount = await getAutocompleteItemCount(page, workCenterConfig); expect(wcCount).toBeGreaterThanOrEqual(1); // Verify no error notification await assertNoErrorNotification(page); // Submit search await clickSubmitSearch(page); await confirmSubmitSearch(page); // Should navigate to search page or show queued status await expect(page).toHaveURL(/\/search\/\d+/); }); test('TC-100-P02: Single Work Center with Multiple Item Numbers', async ({ page }) => { // Enter search name await enterSearchName(page, 'Test 100-P02 Single WC Multi Items'); // Set date range (recent) await setDateRange(page, '2019-01-01', '2020-09-01'); // Add single work center await addWorkCenter(page, '11275CA'); // Upload multiple items file await uploadFile(page, itemNumberConfig, getTestFile(TestFiles.MULTIPLE_ITEMS)); // Verify items were uploaded const itemCount = await getUploadedItemCount(page, itemNumberConfig); expect(itemCount).toBeGreaterThan(1); // Verify no error notification await assertNoErrorNotification(page); // Submit search await clickSubmitSearch(page); await confirmSubmitSearch(page); // Should navigate to search page await expect(page).toHaveURL(/\/search\/\d+/); }); test('TC-100-P03: Multiple Work Centers with Single Item Number', async ({ page }) => { // Enter search name await enterSearchName(page, 'Test 100-P03 Multi WC Single Item'); // Set date range (mid-range) await setDateRange(page, '2018-01-01', '2019-12-31'); // Add multiple work centers (AS suffix) await addWorkCenters(page, TEST_WORK_CENTERS.AS_SUFFIX); // Verify work centers were added const wcCount = await getAutocompleteItemCount(page, workCenterConfig); expect(wcCount).toBe(3); // Upload single item file await uploadFile(page, itemNumberConfig, getTestFile(TestFiles.SINGLE_ITEM)); // Verify no error notification await assertNoErrorNotification(page); // Submit search await clickSubmitSearch(page); await confirmSubmitSearch(page); // Should navigate to search page await expect(page).toHaveURL(/\/search\/\d+/); }); test('TC-100-P04: Multiple Work Centers with Multiple Item Numbers', async ({ page }) => { // Enter search name await enterSearchName(page, 'Test 100-P04 Multi WC Multi Items'); // Set date range (wide) await setDateRange(page, '2017-01-01', '2020-09-01'); // Add multiple work centers await addWorkCenter(page, '10595CA'); await addWorkCenter(page, '11350CA'); // Verify work centers were added const wcCount = await getAutocompleteItemCount(page, workCenterConfig); expect(wcCount).toBe(2); // Upload multiple items file await uploadFile(page, itemNumberConfig, getTestFile(TestFiles.MULTIPLE_ITEMS)); // Verify no error notification await assertNoErrorNotification(page); // Submit search await clickSubmitSearch(page); await confirmSubmitSearch(page); // Should navigate to search page await expect(page).toHaveURL(/\/search\/\d+/); }); test('TC-100-P05: Historical Date Range with Work Center and Items', async ({ page }) => { // Enter search name await enterSearchName(page, 'Test 100-P05 Historical Search'); // Set historical date range await setDateRange(page, TestDateRanges.HISTORICAL.min, TestDateRanges.HISTORICAL.max); // Add work center await addWorkCenter(page, TEST_WORK_CENTERS.CB_SUFFIX); // Upload item file await uploadFile(page, itemNumberConfig, getTestFile(TestFiles.SINGLE_ITEM)); // Verify no error notification await assertNoErrorNotification(page); // Submit search await clickSubmitSearch(page); await confirmSubmitSearch(page); // Should navigate to search page await expect(page).toHaveURL(/\/search\/\d+/); }); test('TC-100-P06: Work Center Code Variants (AS vs CA suffix)', async ({ page }) => { // Enter search name await enterSearchName(page, 'Test 100-P06 WC Code Variants'); // Set date range await setDateRange(page, '2018-01-01', '2020-09-01'); // Add work centers with different suffixes await addWorkCenter(page, '1010AS'); // AS suffix await addWorkCenter(page, '14305CA'); // CA suffix // Verify both were added const wcCount = await getAutocompleteItemCount(page, workCenterConfig); expect(wcCount).toBe(2); // Upload item file await uploadFile(page, itemNumberConfig, getTestFile(TestFiles.SINGLE_ITEM)); // Verify no error notification await assertNoErrorNotification(page); // Submit search await clickSubmitSearch(page); await confirmSubmitSearch(page); // Should navigate to search page await expect(page).toHaveURL(/\/search\/\d+/); }); }); test.describe('Negative Test Cases', () => { test('TC-100-N01: Missing Required Date Range', async ({ page }) => { // Enter search name await enterSearchName(page, 'Test 100-N01 Missing Dates'); // Do NOT set date range (leave empty) // Add work center await addWorkCenter(page, TEST_WORK_CENTERS.SINGLE); // Upload item file await uploadFile(page, itemNumberConfig, getTestFile(TestFiles.SINGLE_ITEM)); // Attempt to submit await clickSubmitSearch(page); // Should show validation error expect(await hasValidationErrors(page) || await hasErrorNotification(page)).toBe(true); }); test('TC-100-N02: Missing Work Center', async ({ page }) => { // Enter search name await enterSearchName(page, 'Test 100-N02 Missing Work Center'); // Set date range await setDateRange(page, '2018-01-01', '2019-12-31'); // Do NOT add any work center // Upload item file await uploadFile(page, itemNumberConfig, getTestFile(TestFiles.SINGLE_ITEM)); // Attempt to submit await clickSubmitSearch(page); // Should show validation error expect(await hasValidationErrors(page) || await hasErrorNotification(page)).toBe(true); }); test('TC-100-N03: Missing Item Number', async ({ page }) => { // Enter search name await enterSearchName(page, 'Test 100-N03 Missing Item Number'); // Set date range await setDateRange(page, '2018-01-01', '2019-12-31'); // Add work center await addWorkCenter(page, TEST_WORK_CENTERS.SINGLE); // Do NOT upload any item file // Attempt to submit await clickSubmitSearch(page); // Should show validation error expect(await hasValidationErrors(page) || await hasErrorNotification(page)).toBe(true); }); test('TC-100-N04: Invalid Date Range (End Before Start)', async ({ page }) => { // Enter search name await enterSearchName(page, 'Test 100-N04 Invalid Date Range'); // Set invalid date range (max before min) await setDateRange(page, TestDateRanges.INVALID_REVERSED.min, TestDateRanges.INVALID_REVERSED.max); // Add work center await addWorkCenter(page, TEST_WORK_CENTERS.SINGLE); // Upload item file await uploadFile(page, itemNumberConfig, getTestFile(TestFiles.SINGLE_ITEM)); // Attempt to submit await clickSubmitSearch(page); // Should show validation error expect(await hasValidationErrors(page) || await hasErrorNotification(page)).toBe(true); }); test('TC-100-N05: Missing Minimum Date Only', async ({ page }) => { // Enter search name await enterSearchName(page, 'Test 100-N05 Missing Min Date'); // Set only max date await setMaxDate(page, '2019-12-31'); // Add work center await addWorkCenter(page, '11275CA'); // Upload item file await uploadFile(page, itemNumberConfig, getTestFile(TestFiles.SINGLE_ITEM)); // Attempt to submit await clickSubmitSearch(page); // Should show validation error expect(await hasValidationErrors(page) || await hasErrorNotification(page)).toBe(true); }); test('TC-100-N06: Missing Maximum Date Only', async ({ page }) => { // Enter search name await enterSearchName(page, 'Test 100-N06 Missing Max Date'); // Set only min date await setMinDate(page, '2018-01-01'); // Add work center await addWorkCenter(page, '0083AS'); // Upload item file await uploadFile(page, itemNumberConfig, getTestFile(TestFiles.SINGLE_ITEM)); // Attempt to submit await clickSubmitSearch(page); // Should show validation error expect(await hasValidationErrors(page) || await hasErrorNotification(page)).toBe(true); }); test('TC-100-N07: Missing Search Name', async ({ page }) => { // Do NOT enter search name // Set date range await setDateRange(page, '2018-01-01', '2019-12-31'); // Add work center await addWorkCenter(page, TEST_WORK_CENTERS.SINGLE); // Upload item file await uploadFile(page, itemNumberConfig, getTestFile(TestFiles.SINGLE_ITEM)); // Attempt to submit await clickSubmitSearch(page); // Should show validation error expect(await hasValidationErrors(page) || await hasErrorNotification(page)).toBe(true); }); test('TC-100-N08: All Required Filters Missing', async ({ page }) => { // Enter search name await enterSearchName(page, 'Test 100-N08 All Filters Missing'); // Do NOT set date range // Do NOT add work center // Do NOT upload item file // Attempt to submit await clickSubmitSearch(page); // Should show validation error expect(await hasValidationErrors(page) || await hasErrorNotification(page)).toBe(true); }); }); });