Skip to content

Commit c887305

Browse files
committed
feat: improve e2e with data-testid for futur ui evolution
1 parent 29d8012 commit c887305

18 files changed

+165
-168
lines changed

webapp/cypress/e2e/01-signature-workflow.cy.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,16 @@ describe('Test 1: User Signature Workflow (MagicLink)', () => {
2424
})
2525

2626
// Step 4: Sign the document
27-
cy.contains('button', 'Confirm reading', { timeout: 10000 }).should('be.visible').click()
27+
cy.get('[data-testid="sign-button"]', { timeout: 10000 }).should('be.visible').click()
2828

2929
// Step 5: Verify success message
30-
cy.contains('Reading confirmed', { timeout: 10000 }).should('be.visible')
30+
cy.get('[data-testid="sign-success"]', { timeout: 10000 }).should('be.visible')
3131

3232
// Step 6: Verify signature appears in the list
3333
cy.contains('confirmation', { timeout: 5000 }).should('be.visible')
3434
cy.contains(testEmail).should('be.visible')
3535

3636
// Step 7: Verify button is no longer present (already confirmed)
37-
cy.contains('button', 'Confirm reading').should('not.exist')
37+
cy.get('[data-testid="sign-button"]').should('not.exist')
3838
})
3939
})

webapp/cypress/e2e/02-signature-uniqueness.cy.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ describe('Test 2: Signature Uniqueness Verification', () => {
1717

1818
// Step 2: Sign the document
1919
cy.url({ timeout: 10000 }).should('include', `/?doc=${docId}`)
20-
cy.contains('button', 'Confirm reading', { timeout: 10000 }).should('be.visible').click()
20+
cy.get('[data-testid="sign-button"]', { timeout: 10000 }).should('be.visible').click()
2121

2222
// Step 3: Verify success and button changes
23-
cy.contains('Reading confirmed', { timeout: 10000 }).should('be.visible')
23+
cy.get('[data-testid="sign-success"]', { timeout: 10000 }).should('be.visible')
2424
cy.contains('Confirmed').should('be.visible')
2525

2626
// Step 4: Verify signature in list
@@ -32,7 +32,7 @@ describe('Test 2: Signature Uniqueness Verification', () => {
3232

3333
// Step 6: Verify "already signed" status persists
3434
cy.contains('Confirmed', { timeout: 10000 }).should('be.visible')
35-
cy.contains('button', 'Confirm reading').should('not.exist')
35+
cy.get('[data-testid="sign-button"]').should('not.exist')
3636

3737
// Step 7: Verify signature still in list
3838
cy.contains(testEmail).should('be.visible')

webapp/cypress/e2e/03-admin-signers-management.cy.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,33 +20,33 @@ describe('Test 3: Admin - Expected Signers Management', () => {
2020
cy.contains('Administration', { timeout: 10000 }).should('be.visible')
2121

2222
// Step 3: Create new document
23-
cy.get('input#newDocId, input#newDocIdMobile').first().type(docId)
24-
cy.contains('button', 'Confirm').click()
23+
cy.get('[data-testid="admin-new-doc-input"]').type(docId)
24+
cy.get('[data-testid="admin-create-doc-btn"]').click()
2525

2626
// Step 4: Should redirect to document detail page
2727
cy.url({ timeout: 10000 }).should('include', `/admin/docs/${docId}`)
2828
cy.contains('Document').should('be.visible')
2929

3030
// Step 5: Add 3 expected signers
31-
cy.contains('button', 'Add').click()
31+
cy.get('[data-testid="add-signers-btn"]').click()
3232

3333
// Modal should appear
34-
cy.contains('Add expected readers').should('be.visible')
34+
cy.get('[data-testid="add-signers-modal"]').should('be.visible')
3535

3636
// Wait for modal to be fully rendered
3737
cy.wait(500)
3838

3939
// Add signers (Name <email> format and plain email)
40-
cy.get('textarea[placeholder*="Jane"]').type(
40+
cy.get('[data-testid="add-signers-textarea"]').type(
4141
'Alice Smith <alice@test.com>{enter}bob@test.com{enter}Charlie Brown <charlie@test.com>',
4242
{ delay: 50 }
4343
)
4444

4545
// Wait a bit for Vue reactivity
4646
cy.wait(300)
4747

48-
// Submit the form by clicking the submit button (find button of type submit)
49-
cy.get('button[type="submit"]').contains('Add').click()
48+
// Submit the form
49+
cy.get('[data-testid="add-signers-submit"]').click()
5050

5151
// Wait for modal to close
5252
cy.contains('Add expected readers', { timeout: 15000 }).should('not.exist')
@@ -74,24 +74,24 @@ describe('Test 3: Admin - Expected Signers Management', () => {
7474

7575
// Create document
7676
const removeDocId = 'test-remove-signer-' + Date.now()
77-
cy.get('input#newDocId, input#newDocIdMobile').first().type(removeDocId)
78-
cy.contains('button', 'Confirm').click()
77+
cy.get('[data-testid="admin-new-doc-input"]').type(removeDocId)
78+
cy.get('[data-testid="admin-create-doc-btn"]').click()
7979

8080
cy.url({ timeout: 10000 }).should('include', `/admin/docs/${removeDocId}`)
8181

8282
// Add 2 signers
83-
cy.contains('button', 'Add').first().click()
83+
cy.get('[data-testid="add-signers-btn"]').click()
8484

8585
// Wait for modal to be fully rendered
8686
cy.wait(500)
8787

88-
cy.get('textarea[placeholder*="Jane"]').type('alice@test.com{enter}bob@test.com', { delay: 50 })
88+
cy.get('[data-testid="add-signers-textarea"]').type('alice@test.com{enter}bob@test.com', { delay: 50 })
8989

9090
// Wait a bit for Vue reactivity
9191
cy.wait(300)
9292

93-
// Submit the form by clicking the submit button (find button of type submit)
94-
cy.get('button[type="submit"]').contains('Add').click()
93+
// Submit the form
94+
cy.get('[data-testid="add-signers-submit"]').click()
9595

9696
// Wait for modal to close
9797
cy.contains('Add expected readers', { timeout: 15000 }).should('not.exist')

webapp/cypress/e2e/04-admin-email-reminders.cy.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,23 @@ describe('Test 4: Admin - Email Reminders', () => {
1717
cy.loginAsAdmin()
1818
cy.visit('/admin')
1919

20-
cy.get('input#newDocId, input#newDocIdMobile').first().type(docId)
21-
cy.contains('button', 'Confirm').click()
20+
cy.get('[data-testid="admin-new-doc-input"]').type(docId)
21+
cy.get('[data-testid="admin-create-doc-btn"]').click()
2222
cy.url({ timeout: 10000 }).should('include', `/admin/docs/${docId}`)
2323

2424
// Step 2: Add 2 expected signers
25-
cy.contains('button', 'Add').click()
25+
cy.get('[data-testid="add-signers-btn"]').click()
2626

2727
// Wait for modal
2828
cy.wait(500)
2929

30-
cy.get('textarea[placeholder*="Jane"]').type(`${alice}{enter}${bob}`, { delay: 50 })
30+
cy.get('[data-testid="add-signers-textarea"]').type(`${alice}{enter}${bob}`, { delay: 50 })
3131

3232
// Wait for Vue reactivity
3333
cy.wait(300)
3434

3535
// Submit form
36-
cy.get('button[type="submit"]').contains('Add').click()
36+
cy.get('[data-testid="add-signers-submit"]').click()
3737

3838
// Verify signers added
3939
cy.contains(alice, { timeout: 10000 }).should('be.visible')
@@ -45,8 +45,8 @@ describe('Test 4: Admin - Email Reminders', () => {
4545

4646
// Step 4: Alice signs the document
4747
cy.url({ timeout: 10000 }).should('include', `/?doc=${docId}`)
48-
cy.contains('button', 'Confirm reading', { timeout: 10000 }).should('be.visible').click()
49-
cy.contains('Reading confirmed', { timeout: 10000 }).should('be.visible')
48+
cy.get('[data-testid="sign-button"]', { timeout: 10000 }).should('be.visible').click()
49+
cy.get('[data-testid="sign-success"]', { timeout: 10000 }).should('be.visible')
5050

5151
// Step 5: Logout Alice and login back as admin
5252
cy.logout()
@@ -64,7 +64,7 @@ describe('Test 4: Admin - Email Reminders', () => {
6464
cy.clearMailbox() // Clear previous emails
6565

6666
// Click send reminders button
67-
cy.contains('button', 'Send reminders').click()
67+
cy.get('[data-testid="send-reminders-btn"]').click()
6868

6969
// Confirm in modal
7070
cy.contains('Send reminders', { timeout: 5000 }).should('be.visible')

webapp/cypress/e2e/05-document-creation-by-url.cy.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ describe('Test 5: Document Creation by URL', () => {
2525
cy.contains('example.com/policy.pdf', { timeout: 10000 }).should('be.visible')
2626

2727
// Step 5: Should be able to sign
28-
cy.contains('button', 'Confirm reading').should('be.visible')
28+
cy.get('[data-testid="sign-button"]').should('be.visible')
2929
})
3030

3131
it('should accept full URL as docId and create document', () => {
@@ -40,7 +40,7 @@ describe('Test 5: Document Creation by URL', () => {
4040
cy.url({ timeout: 15000 }).should('include', '/?doc=')
4141

4242
// Document should be created and signable
43-
cy.contains('button', 'Confirm reading', { timeout: 10000 }).should('be.visible')
43+
cy.get('[data-testid="sign-button"]', { timeout: 10000 }).should('be.visible')
4444

4545
// Should display the URL in metadata
4646
cy.contains('docs.example.com/terms').should('be.visible')
@@ -57,7 +57,7 @@ describe('Test 5: Document Creation by URL', () => {
5757
cy.url({ timeout: 10000 }).should('include', '/?doc=')
5858

5959
// Should be signable
60-
cy.contains('button', 'Confirm reading').should('be.visible')
60+
cy.get('[data-testid="sign-button"]').should('be.visible')
6161
})
6262

6363
it('should handle simple docId references', () => {
@@ -71,6 +71,6 @@ describe('Test 5: Document Creation by URL', () => {
7171
cy.url({ timeout: 10000 }).should('include', `/?doc=${simpleDocId}`)
7272

7373
// Should create document
74-
cy.contains('button', 'Confirm reading', { timeout: 10000 }).should('be.visible')
74+
cy.get('[data-testid="sign-button"]', { timeout: 10000 }).should('be.visible')
7575
})
7676
})

webapp/cypress/e2e/06-my-signatures-page.cy.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,18 @@ describe('Test 6: My Signatures Page', () => {
1919
// Step 2: Sign 3 different documents
2020
// Sign doc1
2121
cy.visit(`/?doc=${doc1}`)
22-
cy.contains('button', 'Confirm reading', { timeout: 10000 }).should('be.visible').click()
23-
cy.contains('Reading confirmed', { timeout: 10000 }).should('be.visible')
22+
cy.get('[data-testid="sign-button"]', { timeout: 10000 }).should('be.visible').click()
23+
cy.get('[data-testid="sign-success"]', { timeout: 10000 }).should('be.visible')
2424

2525
// Sign doc2
2626
cy.visit(`/?doc=${doc2}`)
27-
cy.contains('button', 'Confirm reading', { timeout: 10000 }).should('be.visible').click()
28-
cy.contains('Reading confirmed', { timeout: 10000 }).should('be.visible')
27+
cy.get('[data-testid="sign-button"]', { timeout: 10000 }).should('be.visible').click()
28+
cy.get('[data-testid="sign-success"]', { timeout: 10000 }).should('be.visible')
2929

3030
// Sign doc3
3131
cy.visit(`/?doc=${doc3}`)
32-
cy.contains('button', 'Confirm reading', { timeout: 10000 }).should('be.visible').click()
33-
cy.contains('Reading confirmed', { timeout: 10000 }).should('be.visible')
32+
cy.get('[data-testid="sign-button"]', { timeout: 10000 }).should('be.visible').click()
33+
cy.get('[data-testid="sign-success"]', { timeout: 10000 }).should('be.visible')
3434

3535
// Step 3: Navigate to /signatures
3636
cy.visit('/signatures')
@@ -57,10 +57,10 @@ describe('Test 6: My Signatures Page', () => {
5757

5858
// Sign 2 documents
5959
cy.visit(`/?doc=${searchDoc1}`)
60-
cy.contains('button', 'Confirm reading', { timeout: 10000 }).click()
60+
cy.get('[data-testid="sign-button"]', { timeout: 10000 }).click()
6161

6262
cy.visit(`/?doc=${searchDoc2}`)
63-
cy.contains('button', 'Confirm reading', { timeout: 10000 }).click()
63+
cy.get('[data-testid="sign-button"]', { timeout: 10000 }).click()
6464

6565
// Navigate to signatures page
6666
cy.visit('/signatures')

webapp/cypress/e2e/07-admin-document-deletion.cy.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@ describe('Test 7: Admin - Document Deletion', () => {
1616
cy.loginAsAdmin()
1717
cy.visit('/admin')
1818

19-
cy.get('input#newDocId, input#newDocIdMobile').first().type(docId)
20-
cy.contains('button', 'Confirm').click()
19+
cy.get('[data-testid="admin-new-doc-input"]').type(docId)
20+
cy.get('[data-testid="admin-create-doc-btn"]').click()
2121
cy.url({ timeout: 10000 }).should('include', `/admin/docs/${docId}`)
2222

2323
// Step 2: Add 2 expected signers
24-
cy.contains('button', 'Add').click()
24+
cy.get('[data-testid="add-signers-btn"]').click()
2525
cy.wait(500)
26-
cy.get('textarea[placeholder*="Jane"]').type(`alice@test.com\n${testUser}`, { delay: 50 })
26+
cy.get('[data-testid="add-signers-textarea"]').type(`alice@test.com\n${testUser}`, { delay: 50 })
2727
cy.wait(300)
28-
cy.get('button[type="submit"]').contains('Add').click()
28+
cy.get('[data-testid="add-signers-submit"]').click()
2929

3030
cy.contains('alice@test.com', { timeout: 10000 }).should('be.visible')
3131

@@ -35,8 +35,8 @@ describe('Test 7: Admin - Document Deletion', () => {
3535

3636
// Step 4: User signs the document
3737
cy.url({ timeout: 10000 }).should('include', `/?doc=${docId}`)
38-
cy.contains('button', 'Confirm reading', { timeout: 10000 }).click()
39-
cy.contains('Reading confirmed', { timeout: 10000 }).should('be.visible')
38+
cy.get('[data-testid="sign-button"]', { timeout: 10000 }).click()
39+
cy.get('[data-testid="sign-success"]', { timeout: 10000 }).should('be.visible')
4040

4141
// Step 5: Logout and login back as admin
4242
cy.logout()
@@ -48,12 +48,12 @@ describe('Test 7: Admin - Document Deletion', () => {
4848

4949
// Step 7: Delete the document
5050
cy.contains('Danger zone', { timeout: 10000 }).should('be.visible')
51-
cy.contains('button', 'Delete').click()
51+
cy.get('[data-testid="delete-doc-btn"]').click()
5252

5353
// Step 8: Confirm deletion in modal
5454
cy.contains('This action is irreversible', { timeout: 5000 }).should('be.visible')
5555
cy.contains(docId).should('be.visible')
56-
cy.contains('button', 'Delete permanently').click()
56+
cy.get('[data-testid="delete-confirm-btn"]').click()
5757

5858
// Step 9: Should redirect to admin dashboard
5959
cy.url({ timeout: 10000 }).should('eq', Cypress.config('baseUrl') + '/admin')
@@ -84,13 +84,13 @@ describe('Test 7: Admin - Document Deletion', () => {
8484
cy.visit('/admin')
8585

8686
const safeDocId = 'safe-doc-' + Date.now()
87-
cy.get('input#newDocId, input#newDocIdMobile').first().type(safeDocId)
88-
cy.contains('button', 'Confirm').click()
87+
cy.get('[data-testid="admin-new-doc-input"]').type(safeDocId)
88+
cy.get('[data-testid="admin-create-doc-btn"]').click()
8989

9090
cy.url({ timeout: 10000 }).should('include', `/admin/docs/${safeDocId}`)
9191

9292
// Try to delete
93-
cy.contains('button', 'Delete').click()
93+
cy.get('[data-testid="delete-doc-btn"]').click()
9494

9595
// Modal should appear with warning
9696
cy.contains('This action is irreversible', { timeout: 5000 }).should('be.visible')

webapp/cypress/e2e/08-admin-route-protection.cy.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ describe('Test 8: Admin Route Protection', () => {
7272
// Create document first as admin
7373
cy.loginAsAdmin()
7474
cy.visit('/admin')
75-
cy.get('input#newDocId, input#newDocIdMobile').first().type(targetDoc)
76-
cy.contains('button', 'Confirm').click()
75+
cy.get('[data-testid="admin-new-doc-input"]').type(targetDoc)
76+
cy.get('[data-testid="admin-create-doc-btn"]').click()
7777
cy.url({ timeout: 10000 }).should('include', `/admin/docs/${targetDoc}`)
7878

7979
// Logout

webapp/cypress/e2e/09-complete-workflow.cy.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,17 @@ describe('Test 9: Complete End-to-End Workflow', () => {
1919
cy.loginAsAdmin()
2020
cy.visit('/admin')
2121

22-
cy.get('input#newDocId, input#newDocIdMobile').first().type(docId)
23-
cy.contains('button', 'Confirm').click()
22+
cy.get('[data-testid="admin-new-doc-input"]').type(docId)
23+
cy.get('[data-testid="admin-create-doc-btn"]').click()
2424
cy.url({ timeout: 10000 }).should('include', `/admin/docs/${docId}`)
2525

2626
// ===== STEP 2: Admin adds 3 expected signers =====
2727
cy.log('STEP 2: Admin adds 3 expected signers')
28-
cy.contains('button', 'Add').click()
28+
cy.get('[data-testid="add-signers-btn"]').click()
2929
cy.wait(500)
30-
cy.get('textarea[placeholder*="Jane"]').type(`${alice}\n${bob}\n${charlie}`, { delay: 50 })
30+
cy.get('[data-testid="add-signers-textarea"]').type(`${alice}\n${bob}\n${charlie}`, { delay: 50 })
3131
cy.wait(300)
32-
cy.get('button[type="submit"]').contains('Add').click()
32+
cy.get('[data-testid="add-signers-submit"]').click()
3333

3434
cy.contains(alice, { timeout: 10000 }).should('be.visible')
3535
cy.contains(bob).should('be.visible')
@@ -43,7 +43,7 @@ describe('Test 9: Complete End-to-End Workflow', () => {
4343
cy.log('STEP 3: Admin sends reminders to all signers')
4444
cy.clearMailbox()
4545

46-
cy.contains('button', 'Send reminders').click()
46+
cy.get('[data-testid="send-reminders-btn"]').click()
4747
cy.contains('This action is irreversible', { timeout: 5000 }).should('be.visible')
4848
cy.contains('button', 'Confirm').click()
4949

@@ -82,8 +82,8 @@ describe('Test 9: Complete End-to-End Workflow', () => {
8282
cy.url({ timeout: 10000 }).should('include', `/?doc=${docId}`)
8383

8484
// Alice signs
85-
cy.contains('button', 'Confirm reading', { timeout: 10000 }).click()
86-
cy.contains('Reading confirmed', { timeout: 10000 }).should('be.visible')
85+
cy.get('[data-testid="sign-button"]', { timeout: 10000 }).click()
86+
cy.get('[data-testid="sign-success"]', { timeout: 10000 }).should('be.visible')
8787
})
8888

8989
// ===== STEP 5: Verify stats: 1/3 signed (33%) =====
@@ -102,8 +102,8 @@ describe('Test 9: Complete End-to-End Workflow', () => {
102102
cy.loginViaMagicLink(bob, `/?doc=${docId}`)
103103

104104
cy.url({ timeout: 10000 }).should('include', `/?doc=${docId}`)
105-
cy.contains('button', 'Confirm reading', { timeout: 10000 }).click()
106-
cy.contains('Reading confirmed', { timeout: 10000 }).should('be.visible')
105+
cy.get('[data-testid="sign-button"]', { timeout: 10000 }).click()
106+
cy.get('[data-testid="sign-success"]', { timeout: 10000 }).should('be.visible')
107107

108108
// ===== STEP 7: Verify stats: 2/3 signed (66%) =====
109109
cy.log('STEP 7: Verify completion stats after Bob signs')
@@ -119,7 +119,7 @@ describe('Test 9: Complete End-to-End Workflow', () => {
119119
cy.log('STEP 8: Admin sends reminder to remaining signer')
120120
cy.clearMailbox()
121121

122-
cy.contains('button', 'Send reminders').click()
122+
cy.get('[data-testid="send-reminders-btn"]').click()
123123
cy.contains('This action is irreversible', { timeout: 5000 }).should('be.visible')
124124
cy.contains('button', 'Confirm').click()
125125

@@ -153,8 +153,8 @@ describe('Test 9: Complete End-to-End Workflow', () => {
153153
cy.loginViaMagicLink(charlie, `/?doc=${docId}`)
154154

155155
cy.url({ timeout: 10000 }).should('include', `/?doc=${docId}`)
156-
cy.contains('button', 'Confirm reading', { timeout: 10000 }).click()
157-
cy.contains('Reading confirmed', { timeout: 10000 }).should('be.visible')
156+
cy.get('[data-testid="sign-button"]', { timeout: 10000 }).click()
157+
cy.get('[data-testid="sign-success"]', { timeout: 10000 }).should('be.visible')
158158

159159
// ===== STEP 10: Verify stats: 3/3 signed (100% completion) =====
160160
cy.log('STEP 10: Verify 100% completion')

0 commit comments

Comments
 (0)