@@ -15,17 +15,6 @@ import {
1515} from './utils/demo-users.js' ;
1616import { asyncEvents } from './utils/async-events.js' ;
1717
18- test ( 'get tokens without logging in should error' , async ( { page } ) => {
19- const { navigate } = asyncEvents ( page ) ;
20- await navigate ( '/ping-am/' ) ;
21- expect ( page . url ( ) ) . toBe ( 'http://localhost:8443/ping-am/' ) ;
22-
23- await page . getByRole ( 'button' , { name : 'Get Tokens' } ) . click ( ) ;
24-
25- await expect ( page . locator ( '.error' ) ) . toContainText ( `"error": "No tokens found"` ) ;
26- await expect ( page . locator ( '.error' ) ) . toContainText ( `"type": "state_error"` ) ;
27- } ) ;
28-
2918test . describe ( 'PingAM tokens' , ( ) => {
3019 test ( 'login and get tokens' , async ( { page } ) => {
3120 const { navigate, clickButton } = asyncEvents ( page ) ;
@@ -44,7 +33,6 @@ test.describe('PingAM tokens', () => {
4433
4534 await page . getByRole ( 'button' , { name : 'Get Tokens' } ) . click ( ) ;
4635 await expect ( page . locator ( '#accessToken-1' ) ) . not . toBeEmpty ( ) ;
47- await expect ( page . locator ( '#accessToken-1' ) ) . not . toHaveText ( 'undefined' ) ;
4836
4937 const accessToken0 = await page . locator ( '#accessToken-0' ) . textContent ( ) ;
5038 const accessToken1 = await page . locator ( '#accessToken-1' ) . textContent ( ) ;
@@ -70,13 +58,35 @@ test.describe('PingAM tokens', () => {
7058 await page . getByRole ( 'button' , { name : 'Renew Tokens' } ) . click ( ) ;
7159
7260 await expect ( page . locator ( '#accessToken-1' ) ) . not . toBeEmpty ( ) ;
73- await expect ( page . locator ( '#accessToken-1' ) ) . not . toHaveText ( 'undefined' ) ;
7461
7562 const accessToken0 = await page . locator ( '#accessToken-0' ) . textContent ( ) ;
7663 const accessToken1 = await page . locator ( '#accessToken-1' ) . textContent ( ) ;
7764 await expect ( accessToken0 ) . not . toBe ( accessToken1 ) ;
7865 } ) ;
7966
67+ test ( 'login and revoke tokens' , async ( { page } ) => {
68+ const { navigate, clickButton } = asyncEvents ( page ) ;
69+ await navigate ( '/ping-am/' ) ;
70+ expect ( page . url ( ) ) . toBe ( 'http://localhost:8443/ping-am/' ) ;
71+
72+ await clickButton ( 'Login (Background)' , 'https://openam-sdks.forgeblocks.com/' ) ;
73+
74+ await page . getByLabel ( 'User Name' ) . fill ( pingAmUsername ) ;
75+ await page . getByRole ( 'textbox' , { name : 'Password' } ) . fill ( pingAmPassword ) ;
76+ await page . getByRole ( 'button' , { name : 'Next' } ) . click ( ) ;
77+
78+ await page . waitForURL ( 'http://localhost:8443/ping-am/**' , { waitUntil : 'networkidle' } ) ;
79+ expect ( page . url ( ) ) . toContain ( 'code' ) ;
80+ expect ( page . url ( ) ) . toContain ( 'state' ) ;
81+
82+ await expect ( page . locator ( '#accessToken-0' ) ) . not . toBeEmpty ( ) ;
83+
84+ await page . getByRole ( 'button' , { name : 'Revoke Token' } ) . click ( ) ;
85+ await expect ( page . getByText ( 'Token successfully revoked' ) ) . toBeVisible ( ) ;
86+ const token = await page . evaluate ( ( ) => localStorage . getItem ( 'pic-oidcTokens' ) ) ;
87+ await expect ( token ) . toBeFalsy ( ) ;
88+ } ) ;
89+
8090 test ( 'renew tokens without logging in should error' , async ( { page } ) => {
8191 const { navigate } = asyncEvents ( page ) ;
8292 await navigate ( '/ping-am/' ) ;
@@ -110,7 +120,6 @@ test.describe('PingOne tokens', () => {
110120
111121 await page . getByRole ( 'button' , { name : 'Get Tokens' } ) . click ( ) ;
112122 await expect ( page . locator ( '#accessToken-1' ) ) . not . toBeEmpty ( ) ;
113- await expect ( page . locator ( '#accessToken-1' ) ) . not . toHaveText ( 'undefined' ) ;
114123
115124 const accessToken0 = await page . locator ( '#accessToken-0' ) . textContent ( ) ;
116125 const accessToken1 = await page . locator ( '#accessToken-1' ) . textContent ( ) ;
@@ -136,13 +145,35 @@ test.describe('PingOne tokens', () => {
136145 await page . getByRole ( 'button' , { name : 'Renew Tokens' } ) . click ( ) ;
137146
138147 await expect ( page . locator ( '#accessToken-1' ) ) . not . toBeEmpty ( ) ;
139- await expect ( page . locator ( '#accessToken-1' ) ) . not . toHaveText ( 'undefined' ) ;
140148
141149 const accessToken0 = await page . locator ( '#accessToken-0' ) . textContent ( ) ;
142150 const accessToken1 = await page . locator ( '#accessToken-1' ) . textContent ( ) ;
143151 await expect ( accessToken0 ) . not . toBe ( accessToken1 ) ;
144152 } ) ;
145153
154+ test ( 'login and revoke tokens' , async ( { page } ) => {
155+ const { navigate, clickButton } = asyncEvents ( page ) ;
156+ await navigate ( '/ping-one/' ) ;
157+ expect ( page . url ( ) ) . toBe ( 'http://localhost:8443/ping-one/' ) ;
158+
159+ await clickButton ( 'Login (Background)' , 'https://apps.pingone.ca/' ) ;
160+
161+ await page . getByLabel ( 'Username' ) . fill ( pingOneUsername ) ;
162+ await page . getByRole ( 'textbox' , { name : 'Password' } ) . fill ( pingOnePassword ) ;
163+ await page . getByRole ( 'button' , { name : 'Sign On' } ) . click ( ) ;
164+
165+ await page . waitForURL ( 'http://localhost:8443/ping-one/**' , { waitUntil : 'networkidle' } ) ;
166+ expect ( page . url ( ) ) . toContain ( 'code' ) ;
167+ expect ( page . url ( ) ) . toContain ( 'state' ) ;
168+
169+ await expect ( page . locator ( '#accessToken-0' ) ) . not . toBeEmpty ( ) ;
170+
171+ await page . getByRole ( 'button' , { name : 'Revoke Token' } ) . click ( ) ;
172+ await expect ( page . getByText ( 'Token successfully revoked' ) ) . toBeVisible ( ) ;
173+ const token = await page . evaluate ( ( ) => localStorage . getItem ( 'pic-oidcTokens' ) ) ;
174+ await expect ( token ) . toBeFalsy ( ) ;
175+ } ) ;
176+
146177 test ( 'renew tokens without logging in should error' , async ( { page } ) => {
147178 const { navigate } = asyncEvents ( page ) ;
148179 await navigate ( '/ping-one/' ) ;
@@ -155,3 +186,25 @@ test.describe('PingOne tokens', () => {
155186 await expect ( page . locator ( '.error' ) ) . toContainText ( 'User authentication is required' ) ;
156187 } ) ;
157188} ) ;
189+
190+ test ( 'get tokens without logging in should error' , async ( { page } ) => {
191+ const { navigate } = asyncEvents ( page ) ;
192+ await navigate ( '/ping-am/' ) ;
193+ expect ( page . url ( ) ) . toBe ( 'http://localhost:8443/ping-am/' ) ;
194+
195+ await page . getByRole ( 'button' , { name : 'Get Tokens' } ) . click ( ) ;
196+
197+ await expect ( page . locator ( '.error' ) ) . toContainText ( `"error": "No tokens found"` ) ;
198+ await expect ( page . locator ( '.error' ) ) . toContainText ( `"type": "state_error"` ) ;
199+ } ) ;
200+
201+ test ( 'revoke tokens should error with missing token' , async ( { page } ) => {
202+ const { navigate } = asyncEvents ( page ) ;
203+ await navigate ( '/ping-am/' ) ;
204+ expect ( page . url ( ) ) . toBe ( 'http://localhost:8443/ping-am/' ) ;
205+
206+ await page . getByRole ( 'button' , { name : 'Revoke Token' } ) . click ( ) ;
207+
208+ await expect ( page . locator ( '.error' ) ) . toContainText ( `"error": "No access token found"` ) ;
209+ await expect ( page . locator ( '.error' ) ) . toContainText ( `"type": "state_error"` ) ;
210+ } ) ;
0 commit comments