Skip to content

Commit 51dd3c0

Browse files
committed
draft
1 parent 87a2541 commit 51dd3c0

File tree

12 files changed

+257
-274
lines changed

12 files changed

+257
-274
lines changed

front/e2e/src/helper/grid.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export class Grid {
6666
* @param rowsPerPage - Expected number of rows per page
6767
*
6868
*/
69-
public async expectHeadersAndPaginationTobe(headerNames: string[], paginationOptions: string[] = ['10', '25', '50'] , rowsPerPage: number = 50): Promise<void> {
69+
public async expectHeadersAndPaginationToBe(headerNames: string[], paginationOptions: string[] = ['10', '25', '50'] , rowsPerPage: number = 50): Promise<void> {
7070
await this.expectHeadersToBe(headerNames)
7171
await this.pagination.expectToHaveOptions(paginationOptions)
7272
await this.pagination.expectToHaveRowsPerPage(rowsPerPage)
@@ -82,7 +82,7 @@ export class Grid {
8282
* - value: the expected value in that column
8383
* @param expectedRowCount - Expected row count
8484
*/
85-
public async expectRowsToBe<TFilters extends Record<string, FilterType>>(
85+
public async expectRowsAfterFiltersToBe<TFilters extends Record<string, FilterType>>(
8686
filter: Filter<TFilters>,
8787
filtersToApply: FilterValues<TFilters>,
8888
expectedRow: GridCondition[],
@@ -96,7 +96,7 @@ export class Grid {
9696
}
9797

9898
/**
99-
* Assert that the expected rows are present after the filters have been applied.
99+
* Assert that the expected rows are present after the search has been done.
100100
*
101101
* @param filter - Grid's filter
102102
* @param term - The search term to input

front/e2e/src/tests/pages/admin/merchandising/boost.spec.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ test('Pages > Merchandising > Boosts', {tag: ['@premium']}, async ({page}) => {
111111
const newName = randomUUID()
112112

113113
await test.step('Verify grid headers and pagination', async () => {
114-
await grid.expectHeadersAndPaginationTobe(Object.values(texts.gridHeaders))
114+
await grid.expectHeadersAndPaginationToBe(Object.values(texts.gridHeaders))
115115
})
116116

117117
await test.step('Add some filters and remove them', async () => {
@@ -133,7 +133,7 @@ test('Pages > Merchandising > Boosts', {tag: ['@premium']}, async ({page}) => {
133133
})
134134

135135
await test.step('Apply a filter and compare the grid to see if it works', async () => {
136-
await grid.expectRowsToBe(
136+
await grid.expectRowsAfterFiltersToBe(
137137
filter,
138138
{[testIds.filter.name]: texts.filtersToApply.name},
139139
[{columnName: texts.gridHeaders.name, value: texts.filtersToApply.name}]
@@ -192,7 +192,7 @@ test('Pages > Merchandising > Boosts', {tag: ['@premium']}, async ({page}) => {
192192
})
193193

194194
await test.step('Verify the boost existence in the grid', async () => {
195-
await grid.expectRowsToBe(
195+
await grid.expectRowsAfterFiltersToBe(
196196
filter,
197197
{[testIds.filter.name]: newName},
198198
[{columnName: texts.gridHeaders.name, value: newName}]
@@ -216,7 +216,7 @@ test('Pages > Merchandising > Boosts', {tag: ['@premium']}, async ({page}) => {
216216
await page.getByTestId(testIds.form.backButton).click()
217217
await expect(page).toHaveURL(urls.grid)
218218

219-
await grid.expectRowsToBe(
219+
await grid.expectRowsAfterFiltersToBe(
220220
filter,
221221
{[testIds.filter.name]: newName},
222222
[
@@ -241,6 +241,6 @@ test('Pages > Merchandising > Boosts', {tag: ['@premium']}, async ({page}) => {
241241
testIds.form.deletePopin.dialogConfirmButton,
242242
urls.grid
243243
)
244-
await grid.expectRowsToBe(filter, {[testIds.filter.name]: newName}, [], 0)
244+
await grid.expectRowsAfterFiltersToBe(filter, {[testIds.filter.name]: newName}, [], 0)
245245
})
246246
})

front/e2e/src/tests/pages/admin/merchandising/category.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ async function testCategoriesPage(page: Page, gallyPackage: GallyPackage): Promi
102102
const pageTitle = page.getByTestId(generateTestId(TestId.PAGE_TITLE, 'categoriesProducts')).locator('h1')
103103

104104
await test.step('Verify grid headers, pagination and searchBar', async () => {
105-
await grid.expectHeadersAndPaginationTobe(Object.values(texts.gridHeaders))
105+
await grid.expectHeadersAndPaginationToBe(Object.values(texts.gridHeaders))
106106
await grid.pagination.changeRowsPerPage(10)
107107
const nextPage = await grid.pagination.goToNextPage()
108108
await expect(nextPage).toBe(true)
Lines changed: 229 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,229 @@
1+
import {expect, test} from '@playwright/test'
2+
import {randomUUID} from 'crypto'
3+
import {login} from '../../../../../utils/auth'
4+
import {navigateTo} from '../../../../../utils/menu'
5+
import {Dropdown} from '../../../../../helper/dropdown'
6+
import {Switch} from '../../../../../helper/switch'
7+
import {Grid} from '../../../../../helper/grid'
8+
import {Filter, FilterType} from '../../../../../helper/filter'
9+
import {AlertMessage, AlertMessageType} from '../../../../../helper/alertMessage'
10+
import {generateTestId, TestId} from "../../../../../utils/testIds";
11+
import {deleteEntity, getCommonFormTestIds} from "../../../../../utils/form";
12+
13+
const resourceName = 'Recommender'
14+
15+
const testIds = {
16+
grid: generateTestId(TestId.TABLE, resourceName),
17+
filter: {
18+
name: 'name',
19+
priority: 'priority[between]',
20+
isActive: 'isActive',
21+
localizedCatalogs: 'localizedCatalogs.id[]',
22+
recommenderTypes: 'recommenderTypes.id[]',
23+
},
24+
form: {
25+
... getCommonFormTestIds(resourceName),
26+
isActive: 'isActive',
27+
name: generateTestId(TestId.INPUT_TEXT, 'name'),
28+
localizedCatalogs: 'localizedCatalogs',
29+
recommenderTypes: 'recommenderTypes',
30+
priority: generateTestId(TestId.INPUT_TEXT, 'priority'),
31+
},
32+
... Grid.getCommonGridTestIds(resourceName)
33+
} as const
34+
35+
const texts = {
36+
labelMenuPage: 'Auto recommenders',
37+
gridHeaders: {
38+
name: 'Name',
39+
priority: 'Priority',
40+
isActive: 'Enable',
41+
localizedCatalogs: 'Localized catalog(s)',
42+
recommenderTypes: 'Applied to',
43+
actions: 'Actions'
44+
},
45+
filtersToApply: {
46+
priority: [0, 1],
47+
isActive: true,
48+
localizedCatalogs: ['COM French Catalog'],
49+
recommenderTypes: ['Default'],
50+
},
51+
createValues: [
52+
{
53+
priority: '0',
54+
isActive: true,
55+
localizedCatalogs: [
56+
'COM French Catalog',
57+
'COM English Catalog',
58+
],
59+
recommenderTypes: ['Default'],
60+
},
61+
{
62+
priority: '2',
63+
isActive: true,
64+
localizedCatalogs: [
65+
'FR French Catalog',
66+
'EN French Catalog',
67+
],
68+
recommenderTypes: ['Default'],
69+
},
70+
],
71+
editValues: {
72+
localizedCatalogs: ['COM French Catalog'],
73+
editedLocalizedCatalogDisplay: 'COM Catalog - COM French Catalog',
74+
}
75+
} as const
76+
77+
const urls = {
78+
grid: '/admin/merchandize/recommender/auto_recommender/grid',
79+
create: '/admin/merchandize/recommender/auto_recommender/create',
80+
edit: /\/admin\/merchandize\/recommender\/auto_recommender\/edit\?id=\d+$/
81+
}
82+
test('Pages > Merchandising > Recommenders > Auto recommenders', {tag: ['@premium']}, async ({page}) => {
83+
await test.step('Login and navigate to the "Auto recommenders" page', async () => {
84+
await login(page)
85+
await navigateTo(page, texts.labelMenuPage, urls.grid)
86+
})
87+
88+
// Grid and Filters Locators:
89+
const grid = new Grid(page, resourceName)
90+
const filter = new Filter(page, resourceName, {
91+
[testIds.filter.name]: FilterType.TEXT,
92+
[testIds.filter.priority]: FilterType.RANGE,
93+
[testIds.filter.isActive]: FilterType.BOOLEAN,
94+
[testIds.filter.localizedCatalogs]: FilterType.DROPDOWN,
95+
[testIds.filter.recommenderTypes]: FilterType.DROPDOWN,
96+
})
97+
const createButton = page.getByTestId(testIds.createButton)
98+
99+
// Form Locators (Edit / Create):
100+
const isActiveSwitch = new Switch(page, testIds.form.isActive)
101+
const nameInput = page.getByTestId(testIds.form.name)
102+
const localizedCatalogs = new Dropdown(page, testIds.form.localizedCatalogs, true)
103+
const recommenderTypes = new Dropdown(page, testIds.form.recommenderTypes, true)
104+
const priorityInput = page.getByTestId(testIds.form.priority)
105+
const saveButton = page.getByTestId(testIds.form.submitButton)
106+
107+
// Define a name for the new created Entity.
108+
const recommenderNameSuffix = '_e2e_test_recommender'
109+
const names =[
110+
randomUUID() + recommenderNameSuffix,
111+
randomUUID() + recommenderNameSuffix,
112+
]
113+
114+
await test.step('Create an auto recommenders', async () => {
115+
for (let i = 0; i < 2; i++) {
116+
await test.step('Create auto recommender #' + i, async () => {
117+
await createButton.click()
118+
await expect(page).toHaveURL(urls.create)
119+
await isActiveSwitch.expectToBeChecked()
120+
await nameInput.fill(names[i])
121+
await localizedCatalogs.selectValue(texts.createValues[i].localizedCatalogs)
122+
await recommenderTypes.selectValue(texts.createValues[i].recommenderTypes)
123+
await priorityInput.fill(texts.createValues[i].priority)
124+
await saveButton.click()
125+
await expect(page).toHaveURL(urls.grid)
126+
})
127+
}
128+
})
129+
130+
await test.step('Verify the recommender #1 existence in the grid', async () => {
131+
await grid.expectRowsAfterFiltersToBe(
132+
filter,
133+
{[testIds.filter.name]: names[0]},
134+
[{columnName: texts.gridHeaders.name, value: names[0]}]
135+
)
136+
})
137+
138+
const editLink = page.locator(`[data-testid="${testIds.grid}"] a`)
139+
140+
await test.step('Edit an auto recommender', async () => {
141+
await editLink.click()
142+
await expect(page).toHaveURL(urls.edit)
143+
144+
await localizedCatalogs.expectToHaveValue(texts.createValues[0].localizedCatalogs)
145+
await localizedCatalogs.clear()
146+
await localizedCatalogs.selectValue(texts.editValues.localizedCatalogs)
147+
148+
await saveButton.click()
149+
const alertMessage = new AlertMessage(page)
150+
await alertMessage.expectToHaveText('Updating of the auto recommender with success', AlertMessageType.SUCCESS)
151+
152+
await page.getByTestId(testIds.form.backButton).click()
153+
await expect(page).toHaveURL(urls.grid)
154+
155+
await grid.expectRowsAfterFiltersToBe(
156+
filter,
157+
{[testIds.filter.name]: names[0]},
158+
[
159+
{
160+
columnName: texts.gridHeaders.name,
161+
value: names[0],
162+
},
163+
{
164+
columnName: texts.gridHeaders.localizedCatalogs,
165+
value: texts.editValues.editedLocalizedCatalogDisplay
166+
},
167+
]
168+
)
169+
170+
await filter.clearFilters()
171+
})
172+
173+
await test.step('Verify grid headers and pagination', async () => {
174+
await grid.expectHeadersAndPaginationToBe(Object.values(texts.gridHeaders))
175+
})
176+
177+
await test.step('Add some filters and remove them', async () => {
178+
const defaultRowCount = await grid.getCountLines()
179+
const applicableFilters = {
180+
[testIds.filter.name]: names[0],
181+
[testIds.filter.priority]: texts.filtersToApply.priority,
182+
[testIds.filter.isActive]: texts.filtersToApply.isActive,
183+
[testIds.filter.localizedCatalogs]: texts.filtersToApply.localizedCatalogs,
184+
[testIds.filter.recommenderTypes]: texts.filtersToApply.recommenderTypes,
185+
}
186+
187+
await test.step('Apply all filters available', async () => {
188+
await filter.addFilters(applicableFilters)
189+
})
190+
191+
await test.step('Remove applied filters one by one', async () => {
192+
await filter.removeFilters(applicableFilters)
193+
})
194+
195+
await test.step('Apply a filter and compare the grid to see if it works', async () => {
196+
await grid.expectRowsAfterFiltersToBe(
197+
filter,
198+
{[testIds.filter.name]: names[0]},
199+
[{columnName: texts.gridHeaders.name, value: names[0]}]
200+
)
201+
})
202+
203+
await test.step('Clear filter', async () => {
204+
await grid.expectAllFiltersRemoved(filter, defaultRowCount)
205+
})
206+
})
207+
208+
await test.step('Delete the auto recommenders', async () => {
209+
for (let i = 0; i < 2; i++) {
210+
await test.step('Delete auto recommender #' + i, async () => {
211+
await expect(page).toHaveURL(urls.grid)
212+
await page.locator(`[data-testid="${testIds.grid}"] a`).first().click()
213+
await deleteEntity(
214+
page,
215+
testIds.form.deleteButton,
216+
testIds.form.deletePopin.dialogConfirmButton,
217+
urls.grid
218+
)
219+
220+
// Test only for the first recommender because when all recommenders will be removed, the grid disappear.
221+
if (i === 0) {
222+
await expect(page).toHaveURL(urls.grid)
223+
await grid.expectRowsAfterFiltersToBe(filter, {[testIds.filter.name]: names[i]}, [], 0)
224+
await filter.clearFilters()
225+
}
226+
})
227+
}
228+
})
229+
})

0 commit comments

Comments
 (0)