Skip to content

Commit 92ad0d7

Browse files
authored
Add e2e tests for UserManagement (#31840)
1 parent 19fffa4 commit 92ad0d7

File tree

12 files changed

+132
-32
lines changed

12 files changed

+132
-32
lines changed

generators/angular/templates/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.html.ejs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
@if (user) {
2020
<form name="deleteForm" (ngSubmit)="confirmDelete(user.login!)">
2121
<div class="modal-header">
22-
<h4 class="modal-title">__jhiTranslateTag__('entity.delete.title')</h4>
22+
<h4 class="modal-title" data-cy="userManagementDeleteDialogHeading">__jhiTranslateTag__('entity.delete.title')</h4>
2323
</div>
2424

2525
<div class="modal-body">
@@ -33,7 +33,7 @@
3333
<fa-icon icon="ban" />&nbsp;<span>__jhiTranslateTag__('entity.action.cancel')</span>
3434
</button>
3535

36-
<button type="submit" class="btn btn-danger">
36+
<button type="submit" class="btn btn-danger" data-cy="entityConfirmDeleteButton">
3737
<fa-icon icon="times" />&nbsp;<span>__jhiTranslateTag__('entity.action.delete')</span>
3838
</button>
3939
</div>

generators/angular/templates/src/main/webapp/app/admin/user-management/detail/user-management-detail.html.ejs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<div class="col-8">
2121
@if (user(); as userRef) {
2222
<div>
23-
<h2>
23+
<h2 data-cy="userManagementDetailsHeading">
2424
<span>__jhiTranslateTag__('userManagement.detail.title')</span> [<strong>{{ userRef.login }}</strong>]
2525
</h2>
2626

@@ -73,7 +73,7 @@
7373
</dd>
7474
</dl>
7575

76-
<button type="submit" routerLink="../../" class="btn btn-info">
76+
<button type="submit" routerLink="../../" class="btn btn-info" data-cy="entityDetailsBackButton">
7777
<fa-icon icon="arrow-left" />&nbsp;<span>__jhiTranslateTag__('entity.action.back')</span>
7878
</button>
7979
</div>

generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.html.ejs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<fa-icon icon="sync" [animation]="isLoading() ? 'spin' : undefined" />
2626
<span>__jhiTranslateTag__('userManagement.home.refreshListLabel')</span>
2727
</button>
28-
<button class="btn btn-primary jh-create-entity" [routerLink]="['./new']">
28+
<button class="btn btn-primary jh-create-entity" [routerLink]="['./new']" data-cy="entityCreateButton">
2929
<fa-icon icon="plus" /> <span>__jhiTranslateTag__('userManagement.home.createLabel')</span>
3030
</button>
3131
</div>
@@ -107,12 +107,12 @@
107107
<%_ } _%>
108108
<td class="text-end">
109109
<div class="btn-group">
110-
<button type="submit" [routerLink]="['./', user.login, 'view']" class="btn btn-info btn-sm">
110+
<button type="submit" [routerLink]="['./', user.login, 'view']" class="btn btn-info btn-sm" data-cy="entityDetailsButton">
111111
<fa-icon icon="eye" />
112112
<span class="d-none d-md-inline">__jhiTranslateTag__('entity.action.view')</span>
113113
</button>
114114

115-
<button type="submit" [routerLink]="['./', user.login, 'edit']" queryParamsHandling="merge" class="btn btn-primary btn-sm">
115+
<button type="submit" [routerLink]="['./', user.login, 'edit']" queryParamsHandling="merge" class="btn btn-primary btn-sm" data-cy="entityEditButton">
116116
<fa-icon icon="pencil-alt" />
117117
<span class="d-none d-md-inline">__jhiTranslateTag__('entity.action.edit')</span>
118118
</button>
@@ -121,6 +121,7 @@
121121
type="button"
122122
(click)="deleteUser(user)"
123123
class="btn btn-danger btn-sm"
124+
data-cy="entityDeleteButton"
124125
[disabled]="!currentAccount() || currentAccount()?.login === user.login"
125126
>
126127
<fa-icon icon="times" />

generators/angular/templates/src/main/webapp/app/admin/user-management/update/user-management-update.html.ejs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<div class="d-flex justify-content-center">
2020
<div class="col-8">
2121
<form name="editForm" novalidate (ngSubmit)="save()" [formGroup]="editForm">
22-
<h2 id="myUserLabel">__jhiTranslateTag__('userManagement.home.createOrEditLabel')</h2>
22+
<h2 id="myUserLabel" data-cy="userManagementCreateUpdateHeading">__jhiTranslateTag__('userManagement.home.createOrEditLabel')</h2>
2323

2424
<<%= jhiPrefixDashed %>-alert-error />
2525

@@ -148,11 +148,11 @@
148148
}
149149
</select>
150150
</div>
151-
<button type="button" class="btn btn-secondary" (click)="previousState()">
151+
<button type="button" class="btn btn-secondary" (click)="previousState()" data-cy="entityCreateCancelButton">
152152
<fa-icon icon="ban" />&nbsp;<span>__jhiTranslateTag__('entity.action.cancel')</span>
153153
</button>
154154

155-
<button type="submit" [disabled]="editForm.invalid || isSaving()" class="btn btn-primary">
155+
<button type="submit" [disabled]="editForm.invalid || isSaving()" class="btn btn-primary" data-cy="entityCreateSaveButton">
156156
<fa-icon icon="save" />&nbsp;<span>__jhiTranslateTag__('entity.action.save')</span>
157157
</button>
158158
</form>

generators/cypress/templates/src/test/javascript/cypress/e2e/administration/administration.cy.ts.ejs

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
See the License for the specific language governing permissions and
1717
limitations under the License.
1818
-%>
19+
import { entityConfirmDeleteButtonSelector, entityCreateCancelButtonSelector, entityCreateSaveButtonSelector, entityDeleteButtonSelector, entityDetailsBackButtonSelector, entityDetailsButtonSelector, entityEditButtonSelector } from 'support/entity';
1920
import {
2021
<%_ if (generateUserManagement) { _%>
2122
userManagementPageHeadingSelector,
@@ -45,6 +46,104 @@ describe('/admin', () => {
4546
cy.clickOnAdminMenuItem('user-management');
4647
cy.get(userManagementPageHeadingSelector).should('be.visible');
4748
});
49+
describe('/user-management CRUD', () => {
50+
const userManagementPageUrlPattern = new RegExp('/admin/user-management(\\?.*)?$');
51+
const userManagementPageUrl = '/admin/user-management';
52+
let user;
53+
54+
beforeEach(() => {
55+
cy.intercept('GET', '/api/admin/users+(?*|)').as('entitiesRequest');
56+
cy.intercept('POST', '/api/admin/users').as('postEntityRequest');
57+
cy.intercept('DELETE', '/api/admin/users/*').as('deleteEntityRequest');
58+
});
59+
60+
afterEach(() => {
61+
if (user) {
62+
cy.authenticatedRequest({
63+
method: 'DELETE',
64+
url: `/api/admin/users/${user.id}`,
65+
}).then(() => {
66+
user = undefined;
67+
});
68+
}
69+
});
70+
71+
describe('with existing value', () => {
72+
beforeEach(() => {
73+
const userSample = {
74+
login: 'user' + Math.floor(Math.random() * 1000000),
75+
email: 'user' + Math.floor(Math.random() * 1000000) + '@example.com',
76+
};
77+
78+
cy.authenticatedRequest({
79+
method: 'POST',
80+
url: '/api/admin/users',
81+
body: userSample,
82+
}).then(({ body }) => {
83+
user = body;
84+
cy.intercept(
85+
{
86+
method: 'GET',
87+
url: '/api/admin/users+(?*|)',
88+
times: 1,
89+
},
90+
{
91+
statusCode: 200,
92+
body: [user],
93+
},
94+
).as('entitiesRequestInternal');
95+
cy.visit(userManagementPageUrl);
96+
cy.wait('@entitiesRequestInternal');
97+
});
98+
});
99+
100+
it('detail button click should load details User page', () => {
101+
cy.get(entityDetailsButtonSelector).last().click();
102+
cy.getEntityDetailsHeading('userManagement');
103+
cy.get(entityDetailsBackButtonSelector).click();
104+
cy.wait('@entitiesRequest').then(({ response }) => {
105+
expect(response?.statusCode).to.equal(200);
106+
});
107+
cy.url().should('match', userManagementPageUrlPattern);
108+
});
109+
110+
it('edit button click should load edit User page and go back', () => {
111+
cy.get(entityEditButtonSelector).last().click();
112+
cy.getEntityCreateUpdateHeading('userManagement');
113+
cy.get(entityCreateSaveButtonSelector).should('exist');
114+
cy.get(entityCreateCancelButtonSelector).click();
115+
cy.wait('@entitiesRequest').then(({ response }) => {
116+
expect(response?.statusCode).to.equal(200);
117+
});
118+
cy.url().should('match', userManagementPageUrlPattern);
119+
});
120+
121+
it('edit button click should load edit User page and save', () => {
122+
cy.get(entityEditButtonSelector).last().click();
123+
cy.getEntityCreateUpdateHeading('userManagement');
124+
cy.get(entityCreateSaveButtonSelector).click();
125+
cy.wait('@entitiesRequest').then(({ response }) => {
126+
expect(response?.statusCode).to.equal(200);
127+
});
128+
cy.url().should('match', userManagementPageUrlPattern);
129+
});
130+
131+
it('last delete button click should delete instance of User', () => {
132+
cy.get(entityDeleteButtonSelector).last().click();
133+
cy.getEntityDeleteDialogHeading('userManagement').should('exist');
134+
cy.get(entityConfirmDeleteButtonSelector).click();
135+
cy.wait('@deleteEntityRequest').then(({ response }) => {
136+
expect(response?.statusCode).to.equal(204);
137+
});
138+
cy.wait('@entitiesRequest').then(({ response }) => {
139+
expect(response?.statusCode).to.equal(200);
140+
});
141+
cy.url().should('match', userManagementPageUrlPattern);
142+
143+
user = undefined;
144+
});
145+
});
146+
});
48147
});
49148
<%_ } _%>
50149

generators/react/templates/src/main/webapp/app/modules/administration/user-management/user-management-delete-dialog.tsx.ejs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export const UserManagementDeleteDialog = () => {
5050

5151
return (
5252
<Modal isOpen toggle={handleClose}>
53-
<ModalHeader toggle={handleClose}>
53+
<ModalHeader toggle={handleClose} data-cy="userManagementDeleteDialogHeading">
5454
<Translate contentKey="entity.delete.title">Confirm delete operation</Translate>
5555
</ModalHeader>
5656
<ModalBody>
@@ -64,7 +64,7 @@ export const UserManagementDeleteDialog = () => {
6464
&nbsp;
6565
<Translate contentKey="entity.action.cancel">Cancel</Translate>
6666
</Button>
67-
<Button color="danger" onClick={confirmDelete}>
67+
<Button color="danger" onClick={confirmDelete} data-cy="entityConfirmDeleteButton">
6868
<FontAwesomeIcon icon={faTrash} />
6969
&nbsp;
7070
<Translate contentKey="entity.action.delete">Delete</Translate>

generators/react/templates/src/main/webapp/app/modules/administration/user-management/user-management-detail.tsx.ejs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export const UserManagementDetail = () => {
4141

4242
return (
4343
<div>
44-
<h2>
44+
<h2 data-cy="userManagementDetailsHeading">
4545
<Translate contentKey="userManagement.detail.title">User</Translate> [<strong>{user.login}</strong>]
4646
</h2>
4747
<Row size="md">
@@ -93,7 +93,7 @@ export const UserManagementDetail = () => {
9393
</dd>
9494
</dl>
9595
</Row>
96-
<Button tag={Link} to="/admin/user-management" replace color="info">
96+
<Button tag={Link} to="/admin/user-management" replace color="info" data-cy="entityDetailsBackButton">
9797
<FontAwesomeIcon icon={faArrowLeft} />{' '}
9898
<span className="d-none d-md-inline">
9999
<Translate contentKey="entity.action.back">Back</Translate>

generators/react/templates/src/main/webapp/app/modules/administration/user-management/user-management-update.tsx.ejs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export const UserManagementUpdate = () => {
7171
<div>
7272
<Row className="justify-content-center">
7373
<Col md="8">
74-
<h1>
74+
<h1 data-cy="userManagementCreateUpdateHeading">
7575
<Translate contentKey="userManagement.home.createOrEditLabel">Create or edit a User</Translate>
7676
</h1>
7777
</Col>
@@ -181,14 +181,14 @@ export const UserManagementUpdate = () => {
181181
</option>
182182
))}
183183
</ValidatedField>
184-
<Button tag={Link} to="/admin/user-management" replace color="info">
184+
<Button tag={Link} to="/admin/user-management" replace color="info" data-cy="entityCreateCancelButton">
185185
<FontAwesomeIcon icon={faArrowLeft} />&nbsp;
186186
<span className="d-none d-md-inline">
187187
<Translate contentKey="entity.action.back">Back</Translate>
188188
</span>
189189
</Button>
190190
&nbsp;
191-
<Button color="primary" type="submit" disabled={updating}>
191+
<Button color="primary" type="submit" disabled={updating} data-cy="entityCreateSaveButton">
192192
<FontAwesomeIcon icon={faSave} />&nbsp;
193193
<Translate contentKey="entity.action.save">Save</Translate>
194194
</Button>

generators/react/templates/src/main/webapp/app/modules/administration/user-management/user-management.tsx.ejs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ export const UserManagement = () => {
128128
<FontAwesomeIcon icon={faSync} spin={loading} />{' '}
129129
<Translate contentKey="userManagement.home.refreshListLabel">Refresh List</Translate>
130130
</Button>
131-
<Link to="new" className="btn btn-primary jh-create-entity">
131+
<Link to="new" className="btn btn-primary jh-create-entity" data-cy="entityCreateButton">
132132
<FontAwesomeIcon icon={faPlus} /> <Translate contentKey="userManagement.home.createLabel">Create a new user</Translate>
133133
</Link>
134134
</div>
@@ -202,19 +202,19 @@ export const UserManagement = () => {
202202
<%_ } _%>
203203
<td className="text-end">
204204
<div className="btn-group flex-btn-group-container">
205-
<Button tag={Link} to={user.login} color="info" size="sm">
205+
<Button tag={Link} to={user.login} color="info" size="sm" data-cy="entityDetailsButton">
206206
<FontAwesomeIcon icon={faEye} />{' '}
207207
<span className="d-none d-md-inline">
208208
<Translate contentKey="entity.action.view">View</Translate>
209209
</span>
210210
</Button>
211-
<Button tag={Link} to={`${user.login}/edit`} color="primary" size="sm">
211+
<Button tag={Link} to={`${user.login}/edit`} color="primary" size="sm" data-cy="entityEditButton">
212212
<FontAwesomeIcon icon={faPencilAlt} />{' '}
213213
<span className="d-none d-md-inline">
214214
<Translate contentKey="entity.action.edit">Edit</Translate>
215215
</span>
216216
</Button>
217-
<Button tag={Link} to={`${user.login}/delete`} color="danger" size="sm" disabled={account.login === user.login}>
217+
<Button tag={Link} to={`${user.login}/delete`} color="danger" size="sm" disabled={account.login === user.login} data-cy="entityDeleteButton">
218218
<FontAwesomeIcon icon={faTrash} />{' '}
219219
<span className="d-none d-md-inline">
220220
<Translate contentKey="entity.action.delete">Delete</Translate>

generators/vue/templates/src/main/webapp/app/admin/user-management/user-management-edit.vue.ejs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<div class="d-flex justify-content-center">
33
<div class="col-8">
44
<form name="editForm" novalidate @submit.prevent="save()" v-if="userAccount">
5-
<h2 id="myUserLabel">{{ t$('userManagement.home.createOrEditLabel') }}</h2>
5+
<h2 id="myUserLabel" data-cy="userManagementCreateUpdateHeading">{{ t$('userManagement.home.createOrEditLabel') }}</h2>
66
<div>
77
<div class="mb-3" :hidden="!userAccount.id">
88
<label>{{ t$('global.field.id') }}</label>
@@ -125,10 +125,10 @@
125125
</div>
126126
</div>
127127
<div>
128-
<button type="button" class="btn btn-secondary" @click="previousState()">
128+
<button type="button" class="btn btn-secondary" @click="previousState()" data-cy="entityCreateCancelButton">
129129
<font-awesome-icon icon="ban"></font-awesome-icon>&nbsp;<span>{{ t$('entity.action.cancel') }}</span>
130130
</button>
131-
<button type="submit" :disabled="v$.userAccount.$invalid || isSaving" class="btn btn-primary">
131+
<button type="submit" :disabled="v$.userAccount.$invalid || isSaving" class="btn btn-primary" data-cy="entityCreateSaveButton">
132132
<font-awesome-icon icon="save"></font-awesome-icon>&nbsp;<span>{{ t$('entity.action.save') }}</span>
133133
</button>
134134
</div>

0 commit comments

Comments
 (0)