1
1
import { type Page , expect , test } from "@playwright/test" ;
2
- import { users } from "../constants" ;
2
+ import { defaultPassword , users } from "../constants" ;
3
3
import {
4
4
createTemplate ,
5
+ createUser ,
5
6
createWorkspace ,
6
- currentUser ,
7
7
login ,
8
+ randomName ,
8
9
requiresLicense ,
9
10
} from "../helpers" ;
10
11
import { beforeCoderTest } from "../hooks" ;
@@ -15,6 +16,14 @@ test.beforeEach(async ({ page }) => {
15
16
beforeCoderTest ( page ) ;
16
17
} ) ;
17
18
19
+ const name = randomName ( ) ;
20
+ const userToAudit = {
21
+ username : `peep-${ name } ` ,
22
+ password : defaultPassword ,
23
+ email : `peep-${ name } @coder.com` ,
24
+ roles : [ "Template Admin" , "User Admin" ] ,
25
+ } ;
26
+
18
27
async function resetSearch ( page : Page , username : string ) {
19
28
const clearButton = page . getByLabel ( "Clear search" ) ;
20
29
if ( await clearButton . isVisible ( ) ) {
@@ -27,92 +36,96 @@ async function resetSearch(page: Page, username: string) {
27
36
await expect ( page . getByText ( "All users" ) ) . not . toBeVisible ( ) ;
28
37
}
29
38
30
- test ( "logins are logged ", async ( { page } ) => {
39
+ test . describe ( "audit logs ", ( ) => {
31
40
requiresLicense ( ) ;
32
41
33
- // Go to the audit history
34
- await login ( page , users . auditor ) ;
35
- await page . goto ( "/audit" ) ;
36
- const username = users . auditor . username ;
37
-
38
- const loginMessage = `${ username } logged in` ;
39
- // Make sure those things we did all actually show up
40
- await resetSearch ( page , username ) ;
41
- await expect ( page . getByText ( loginMessage ) . first ( ) ) . toBeVisible ( ) ;
42
- } ) ;
42
+ test . beforeAll ( async ( { browser } ) => {
43
+ const context = await browser . newContext ( ) ;
44
+ const page = await context . newPage ( ) ;
45
+ await login ( page ) ;
46
+ await createUser ( page , userToAudit ) ;
47
+ } ) ;
43
48
44
- test ( "creating templates and workspaces is logged" , async ( { page } ) => {
45
- requiresLicense ( ) ;
49
+ test ( "logins are logged" , async ( { page } ) => {
50
+ // Go to the audit history
51
+ await login ( page , users . auditor ) ;
52
+ await page . goto ( "/audit" ) ;
46
53
47
- // Do some stuff that should show up in the audit logs
48
- await login ( page , users . templateAdmin ) ;
49
- const username = users . templateAdmin . username ;
50
- const templateName = await createTemplate ( page ) ;
51
- const workspaceName = await createWorkspace ( page , templateName ) ;
52
-
53
- // Go to the audit history
54
- await login ( page , users . auditor ) ;
55
- await page . goto ( "/audit" ) ;
56
-
57
- // Make sure those things we did all actually show up
58
- await resetSearch ( page , username ) ;
59
- await expect (
60
- page . getByText ( `${ username } created template ${ templateName } ` ) ,
61
- ) . toBeVisible ( ) ;
62
- await expect (
63
- page . getByText ( `${ username } created workspace ${ workspaceName } ` ) ,
64
- ) . toBeVisible ( ) ;
65
- await expect (
66
- page . getByText ( `${ username } started workspace ${ workspaceName } ` ) ,
67
- ) . toBeVisible ( ) ;
68
-
69
- // Make sure we can inspect the details of the log item
70
- const createdWorkspace = page . locator ( ".MuiTableRow-root" , {
71
- hasText : `${ username } created workspace ${ workspaceName } ` ,
54
+ // Make sure those things we did all actually show up
55
+ await resetSearch ( page , users . auditor . username ) ;
56
+ const loginMessage = `${ users . auditor . username } logged in` ;
57
+ await expect ( page . getByText ( loginMessage ) . first ( ) ) . toBeVisible ( ) ;
72
58
} ) ;
73
- await createdWorkspace . getByLabel ( "open-dropdown" ) . click ( ) ;
74
- await expect (
75
- createdWorkspace . getByText ( `automatic_updates: "never"` ) ,
76
- ) . toBeVisible ( ) ;
77
- await expect (
78
- createdWorkspace . getByText ( `name: "${ workspaceName } "` ) ,
79
- ) . toBeVisible ( ) ;
80
- } ) ;
81
59
82
- test ( "inspecting and filtering audit logs" , async ( { page } ) => {
83
- requiresLicense ( ) ;
60
+ test ( "creating templates and workspaces is logged" , async ( { page } ) => {
61
+ // Do some stuff that should show up in the audit logs
62
+ await login ( page , userToAudit ) ;
63
+ const username = userToAudit . username ;
64
+ const templateName = await createTemplate ( page ) ;
65
+ const workspaceName = await createWorkspace ( page , templateName ) ;
66
+
67
+ // Go to the audit history
68
+ await login ( page , users . auditor ) ;
69
+ await page . goto ( "/audit" ) ;
70
+
71
+ // Make sure those things we did all actually show up
72
+ await resetSearch ( page , username ) ;
73
+ await expect (
74
+ page . getByText ( `${ username } created template ${ templateName } ` ) ,
75
+ ) . toBeVisible ( ) ;
76
+ await expect (
77
+ page . getByText ( `${ username } created workspace ${ workspaceName } ` ) ,
78
+ ) . toBeVisible ( ) ;
79
+ await expect (
80
+ page . getByText ( `${ username } started workspace ${ workspaceName } ` ) ,
81
+ ) . toBeVisible ( ) ;
82
+
83
+ // Make sure we can inspect the details of the log item
84
+ const createdWorkspace = page . locator ( ".MuiTableRow-root" , {
85
+ hasText : `${ username } created workspace ${ workspaceName } ` ,
86
+ } ) ;
87
+ await createdWorkspace . getByLabel ( "open-dropdown" ) . click ( ) ;
88
+ await expect (
89
+ createdWorkspace . getByText ( `automatic_updates: "never"` ) ,
90
+ ) . toBeVisible ( ) ;
91
+ await expect (
92
+ createdWorkspace . getByText ( `name: "${ workspaceName } "` ) ,
93
+ ) . toBeVisible ( ) ;
94
+ } ) ;
84
95
85
- // Do some stuff that should show up in the audit logs
86
- await login ( page , users . templateAdmin ) ;
87
- const username = users . templateAdmin . username ;
88
- const templateName = await createTemplate ( page ) ;
89
- const workspaceName = await createWorkspace ( page , templateName ) ;
90
-
91
- // Go to the audit history
92
- await login ( page , users . auditor ) ;
93
- await page . goto ( "/audit" ) ;
94
- const loginMessage = `${ username } logged in` ;
95
- const startedWorkspaceMessage = `${ username } started workspace ${ workspaceName } ` ;
96
-
97
- // Filter by resource type
98
- await resetSearch ( page , username ) ;
99
- await page . getByText ( "All resource types" ) . click ( ) ;
100
- const workspaceBuildsOption = page . getByText ( "Workspace Build" ) ;
101
- await workspaceBuildsOption . scrollIntoViewIfNeeded ( { timeout : 5000 } ) ;
102
- await workspaceBuildsOption . click ( ) ;
103
- // Our workspace build should be visible
104
- await expect ( page . getByText ( startedWorkspaceMessage ) ) . toBeVisible ( ) ;
105
- // Logins should no longer be visible
106
- await expect ( page . getByText ( loginMessage ) ) . not . toBeVisible ( ) ;
107
- await page . getByLabel ( "Clear search" ) . click ( ) ;
108
- await expect ( page . getByText ( "All resource types" ) ) . toBeVisible ( ) ;
109
-
110
- // Filter by action type
111
- await resetSearch ( page , username ) ;
112
- await page . getByText ( "All actions" ) . click ( ) ;
113
- await page . getByText ( "Login" , { exact : true } ) . click ( ) ;
114
- // Logins should be visible
115
- await expect ( page . getByText ( loginMessage ) . first ( ) ) . toBeVisible ( ) ;
116
- // Our workspace build should no longer be visible
117
- await expect ( page . getByText ( startedWorkspaceMessage ) ) . not . toBeVisible ( ) ;
96
+ test ( "inspecting and filtering audit logs" , async ( { page } ) => {
97
+ // Do some stuff that should show up in the audit logs
98
+ await login ( page , userToAudit ) ;
99
+ const username = userToAudit . username ;
100
+ const templateName = await createTemplate ( page ) ;
101
+ const workspaceName = await createWorkspace ( page , templateName ) ;
102
+
103
+ // Go to the audit history
104
+ await login ( page , users . auditor ) ;
105
+ await page . goto ( "/audit" ) ;
106
+ const loginMessage = `${ username } logged in` ;
107
+ const startedWorkspaceMessage = `${ username } started workspace ${ workspaceName } ` ;
108
+
109
+ // Filter by resource type
110
+ await resetSearch ( page , username ) ;
111
+ await page . getByText ( "All resource types" ) . click ( ) ;
112
+ const workspaceBuildsOption = page . getByText ( "Workspace Build" ) ;
113
+ await workspaceBuildsOption . scrollIntoViewIfNeeded ( { timeout : 5000 } ) ;
114
+ await workspaceBuildsOption . click ( ) ;
115
+ // Our workspace build should be visible
116
+ await expect ( page . getByText ( startedWorkspaceMessage ) ) . toBeVisible ( ) ;
117
+ // Logins should no longer be visible
118
+ await expect ( page . getByText ( loginMessage ) ) . not . toBeVisible ( ) ;
119
+ await page . getByLabel ( "Clear search" ) . click ( ) ;
120
+ await expect ( page . getByText ( "All resource types" ) ) . toBeVisible ( ) ;
121
+
122
+ // Filter by action type
123
+ await resetSearch ( page , username ) ;
124
+ await page . getByText ( "All actions" ) . click ( ) ;
125
+ await page . getByText ( "Login" , { exact : true } ) . click ( ) ;
126
+ // Logins should be visible
127
+ await expect ( page . getByText ( loginMessage ) . first ( ) ) . toBeVisible ( ) ;
128
+ // Our workspace build should no longer be visible
129
+ await expect ( page . getByText ( startedWorkspaceMessage ) ) . not . toBeVisible ( ) ;
130
+ } ) ;
118
131
} ) ;
0 commit comments