Skip to content

Commit d88457f

Browse files
Copilotrenemadsen
andcommitted
Create Cypress tests for folders migration
Co-authored-by: renemadsen <[email protected]>
1 parent f227b53 commit d88457f

File tree

6 files changed

+1175
-0
lines changed

6 files changed

+1175
-0
lines changed
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import loginPage from '../Login.page';
2+
import foldersPage from '../Folders.page';
3+
import { generateRandmString } from '../helper-functions';
4+
import { expect } from 'chai';
5+
import {applicationLanguages} from '../../../src/app/common/const/application-languages.const';
6+
7+
const parentFolderName = generateRandmString();
8+
9+
describe('Folders - Add child folder', function () {
10+
before(() => {
11+
cy.visit('http://localhost:4200');
12+
loginPage.login();
13+
foldersPage.goToFoldersPage();
14+
15+
// Create a parent folder
16+
const description = generateRandmString();
17+
foldersPage.newFolderBtn().click();
18+
cy.wait(500);
19+
cy.get('#cancelCreateBtn').should('be.visible');
20+
21+
const da = applicationLanguages[0];
22+
cy.get('#createLanguageSelector input').type(da.text);
23+
cy.get('ng-dropdown-panel .ng-option').contains(da.text).click();
24+
cy.wait(500);
25+
26+
const nameIndex = applicationLanguages.findIndex((x) => x.text === da.text);
27+
cy.get(`#createFolderNameTranslation_${nameIndex}`).type(parentFolderName);
28+
cy.wait(500);
29+
30+
cy.get('#createLanguageSelector input').clear().type(da.text);
31+
cy.get('ng-dropdown-panel .ng-option').contains(da.text).click();
32+
cy.wait(500);
33+
cy.get(`#createFolderDescriptionTranslation_${nameIndex} .NgxEditor__Content`).type(description);
34+
cy.wait(500);
35+
36+
cy.get('#folderSaveBtn').click();
37+
cy.get('#spinner-animation').should('not.exist', { timeout: 90000 });
38+
foldersPage.newFolderBtn().should('be.visible');
39+
cy.wait(500);
40+
});
41+
42+
it('should create child folder with name and description', () => {
43+
const childName = generateRandmString();
44+
const childDescription = generateRandmString();
45+
46+
// Count children before creation
47+
cy.get('mat-tree > mat-tree-node.children').then(($children) => {
48+
const rowCountBeforeCreation = $children.length;
49+
50+
// Open parent folder menu and create child
51+
cy.get('.folder-tree-name').contains(parentFolderName).parents('mat-tree-node').find('button.mat-menu-trigger').click();
52+
cy.get('#createFolderChildBtn').should('be.visible').click();
53+
cy.get('#cancelCreateBtn').should('be.visible');
54+
55+
// Enter child folder details
56+
const da = applicationLanguages[0];
57+
cy.get('#createLanguageSelector input').type(da.text);
58+
cy.get('ng-dropdown-panel .ng-option').contains(da.text).click();
59+
cy.wait(500);
60+
61+
const nameIndex = applicationLanguages.findIndex((x) => x.text === da.text);
62+
cy.get(`#createFolderNameTranslation_${nameIndex}`).type(childName);
63+
cy.wait(500);
64+
65+
cy.get('#createLanguageSelector input').clear().type(da.text);
66+
cy.get('ng-dropdown-panel .ng-option').contains(da.text).click();
67+
cy.wait(500);
68+
cy.get(`#createFolderDescriptionTranslation_${nameIndex} .NgxEditor__Content`).type(childDescription);
69+
cy.wait(500);
70+
71+
// Save
72+
cy.get('#folderSaveBtn').click();
73+
cy.get('#spinner-animation').should('not.exist', { timeout: 90000 });
74+
foldersPage.newFolderBtn().should('be.visible');
75+
cy.wait(500);
76+
77+
// Expand parent to see children
78+
cy.get('.folder-tree-name').contains(parentFolderName).parents('mat-tree-node').find('button[aria-label="Toggle"]').then(($btn) => {
79+
if ($btn.attr('aria-expanded') === 'false') {
80+
cy.wrap($btn).click();
81+
cy.wait(1000);
82+
}
83+
});
84+
85+
// Verify child was created
86+
cy.get('mat-tree > mat-tree-node.children').then(($childrenAfter) => {
87+
const rowCountAfterCreation = $childrenAfter.length;
88+
expect(
89+
rowCountAfterCreation,
90+
'Number of child rows hasn\'t changed after creating new child folder'
91+
).to.equal(rowCountBeforeCreation + 1);
92+
});
93+
94+
// Verify child folder exists
95+
cy.get('mat-tree-node.children .folder-tree-name').contains(childName).should('exist');
96+
});
97+
});
98+
99+
after('should delete folders', () => {
100+
// Delete parent folder (which will delete children too)
101+
cy.get('.folder-tree-name').contains(parentFolderName).parents('mat-tree-node').first().find('button.mat-menu-trigger').click();
102+
cy.get('#deleteFolderTreeBtn').click();
103+
cy.get('#saveDeleteBtn').should('be.visible').click();
104+
cy.get('#spinner-animation').should('not.exist', { timeout: 90000 });
105+
foldersPage.newFolderBtn().should('be.visible');
106+
cy.wait(500);
107+
108+
// Verify all folders deleted
109+
foldersPage.rowNum().then((count) => {
110+
expect(count, 'Folders not deleted').to.equal(0);
111+
});
112+
});
113+
});
Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
import loginPage from '../Login.page';
2+
import foldersPage from '../Folders.page';
3+
import { generateRandmString } from '../helper-functions';
4+
import { expect } from 'chai';
5+
import {applicationLanguages} from '../../../src/app/common/const/application-languages.const';
6+
7+
const parentFolderName = generateRandmString();
8+
9+
describe('Folders - Delete child folder', function () {
10+
before(() => {
11+
cy.visit('http://localhost:4200');
12+
loginPage.login();
13+
foldersPage.goToFoldersPage();
14+
15+
// Create a parent folder
16+
const description = generateRandmString();
17+
foldersPage.newFolderBtn().click();
18+
cy.wait(500);
19+
cy.get('#cancelCreateBtn').should('be.visible');
20+
21+
const da = applicationLanguages[0];
22+
cy.get('#createLanguageSelector input').type(da.text);
23+
cy.get('ng-dropdown-panel .ng-option').contains(da.text).click();
24+
cy.wait(500);
25+
26+
const nameIndex = applicationLanguages.findIndex((x) => x.text === da.text);
27+
cy.get(`#createFolderNameTranslation_${nameIndex}`).type(parentFolderName);
28+
cy.wait(500);
29+
30+
cy.get('#createLanguageSelector input').clear().type(da.text);
31+
cy.get('ng-dropdown-panel .ng-option').contains(da.text).click();
32+
cy.wait(500);
33+
cy.get(`#createFolderDescriptionTranslation_${nameIndex} .NgxEditor__Content`).type(description);
34+
cy.wait(500);
35+
36+
cy.get('#folderSaveBtn').click();
37+
cy.get('#spinner-animation').should('not.exist', { timeout: 90000 });
38+
foldersPage.newFolderBtn().should('be.visible');
39+
cy.wait(500);
40+
41+
// Create a child folder
42+
const childName = generateRandmString();
43+
const childDescription = generateRandmString();
44+
cy.get('.folder-tree-name').contains(parentFolderName).parents('mat-tree-node').find('button.mat-menu-trigger').click();
45+
cy.get('#createFolderChildBtn').should('be.visible').click();
46+
cy.get('#cancelCreateBtn').should('be.visible');
47+
48+
cy.get('#createLanguageSelector input').type(da.text);
49+
cy.get('ng-dropdown-panel .ng-option').contains(da.text).click();
50+
cy.wait(500);
51+
cy.get(`#createFolderNameTranslation_${nameIndex}`).type(childName);
52+
cy.wait(500);
53+
54+
cy.get('#createLanguageSelector input').clear().type(da.text);
55+
cy.get('ng-dropdown-panel .ng-option').contains(da.text).click();
56+
cy.wait(500);
57+
cy.get(`#createFolderDescriptionTranslation_${nameIndex} .NgxEditor__Content`).type(childDescription);
58+
cy.wait(500);
59+
60+
cy.get('#folderSaveBtn').click();
61+
cy.get('#spinner-animation').should('not.exist', { timeout: 90000 });
62+
foldersPage.newFolderBtn().should('be.visible');
63+
cy.wait(500);
64+
65+
// Expand parent to see child
66+
cy.get('.folder-tree-name').contains(parentFolderName).parents('mat-tree-node').find('button[aria-label="Toggle"]').then(($btn) => {
67+
if ($btn.attr('aria-expanded') === 'false') {
68+
cy.wrap($btn).click();
69+
cy.wait(1000);
70+
}
71+
});
72+
});
73+
74+
it('should delete child folder', () => {
75+
// Count children before delete
76+
cy.get('mat-tree > mat-tree-node.children').then(($children) => {
77+
const rowCountBeforeDelete = $children.length;
78+
const childName = $children.first().find('.folder-tree-name').text().trim();
79+
80+
// Delete the child
81+
cy.wrap($children.first()).find('button.mat-menu-trigger').click();
82+
cy.get('#deleteFolderTreeBtn').click();
83+
cy.get('#saveDeleteBtn').should('be.visible').click();
84+
cy.get('#spinner-animation').should('not.exist', { timeout: 90000 });
85+
foldersPage.newFolderBtn().should('be.visible');
86+
cy.wait(500);
87+
88+
// Verify child was deleted
89+
cy.get('mat-tree > mat-tree-node.children').then(($childrenAfter) => {
90+
const rowCountAfterDelete = $childrenAfter.length;
91+
expect(
92+
rowCountAfterDelete,
93+
'Number of child rows hasn\'t changed after deleting child folder'
94+
).to.equal(rowCountBeforeDelete - 1);
95+
});
96+
});
97+
});
98+
99+
it('should not delete child if cancel was clicked', () => {
100+
// Create another child folder
101+
const childName = generateRandmString();
102+
const childDescription = generateRandmString();
103+
104+
cy.get('.folder-tree-name').contains(parentFolderName).parents('mat-tree-node').find('button.mat-menu-trigger').click();
105+
cy.get('#createFolderChildBtn').should('be.visible').click();
106+
cy.get('#cancelCreateBtn').should('be.visible');
107+
108+
const da = applicationLanguages[0];
109+
const nameIndex = applicationLanguages.findIndex((x) => x.text === da.text);
110+
111+
cy.get('#createLanguageSelector input').type(da.text);
112+
cy.get('ng-dropdown-panel .ng-option').contains(da.text).click();
113+
cy.wait(500);
114+
cy.get(`#createFolderNameTranslation_${nameIndex}`).type(childName);
115+
cy.wait(500);
116+
117+
cy.get('#createLanguageSelector input').clear().type(da.text);
118+
cy.get('ng-dropdown-panel .ng-option').contains(da.text).click();
119+
cy.wait(500);
120+
cy.get(`#createFolderDescriptionTranslation_${nameIndex} .NgxEditor__Content`).type(childDescription);
121+
cy.wait(500);
122+
123+
cy.get('#folderSaveBtn').click();
124+
cy.get('#spinner-animation').should('not.exist', { timeout: 90000 });
125+
foldersPage.newFolderBtn().should('be.visible');
126+
cy.wait(500);
127+
128+
// Expand parent to see children
129+
cy.get('.folder-tree-name').contains(parentFolderName).parents('mat-tree-node').find('button[aria-label="Toggle"]').then(($btn) => {
130+
if ($btn.attr('aria-expanded') === 'false') {
131+
cy.wrap($btn).click();
132+
cy.wait(1000);
133+
}
134+
});
135+
136+
// Count children before delete attempt
137+
cy.get('mat-tree > mat-tree-node.children').then(($children) => {
138+
const rowCountBeforeDelete = $children.length;
139+
140+
// Try to delete but cancel
141+
cy.get('mat-tree-node.children .folder-tree-name').contains(childName).parents('mat-tree-node').find('button.mat-menu-trigger').click();
142+
cy.get('#deleteFolderTreeBtn').click();
143+
cy.get('#cancelDeleteBtn').should('be.visible').click();
144+
foldersPage.newFolderBtn().should('be.visible');
145+
cy.wait(500);
146+
147+
// Verify child was not deleted
148+
cy.get('mat-tree > mat-tree-node.children').then(($childrenAfter) => {
149+
const rowCountAfterDelete = $childrenAfter.length;
150+
expect(
151+
rowCountAfterDelete,
152+
'Number of child rows changed after cancel'
153+
).to.equal(rowCountBeforeDelete);
154+
});
155+
156+
cy.get('mat-tree-node.children .folder-tree-name').contains(childName).should('exist');
157+
});
158+
});
159+
160+
it('should delete remaining child folders', () => {
161+
// Count children
162+
cy.get('mat-tree > mat-tree-node.children').then(($children) => {
163+
const rowCountBeforeDelete = $children.length;
164+
165+
// Delete first child
166+
cy.wrap($children.first()).find('button.mat-menu-trigger').click();
167+
cy.get('#deleteFolderTreeBtn').click();
168+
cy.get('#saveDeleteBtn').should('be.visible').click();
169+
cy.get('#spinner-animation').should('not.exist', { timeout: 90000 });
170+
foldersPage.newFolderBtn().should('be.visible');
171+
cy.wait(500);
172+
173+
// Verify child was deleted
174+
cy.get('mat-tree > mat-tree-node.children').then(($childrenAfter) => {
175+
const rowCountAfterDelete = $childrenAfter.length;
176+
expect(
177+
rowCountAfterDelete,
178+
'Folder not deleted'
179+
).to.equal(rowCountBeforeDelete - 1);
180+
});
181+
});
182+
});
183+
184+
after('should delete parent folder', () => {
185+
// Delete parent folder
186+
cy.get('.folder-tree-name').contains(parentFolderName).parents('mat-tree-node').first().find('button.mat-menu-trigger').click();
187+
cy.get('#deleteFolderTreeBtn').click();
188+
cy.get('#saveDeleteBtn').should('be.visible').click();
189+
cy.get('#spinner-animation').should('not.exist', { timeout: 90000 });
190+
foldersPage.newFolderBtn().should('be.visible');
191+
192+
// Verify parent was deleted
193+
foldersPage.rowNum().then((count) => {
194+
expect(count, 'Parent folder not deleted').to.equal(0);
195+
});
196+
});
197+
});

0 commit comments

Comments
 (0)