Skip to content

Commit 6a4a8d4

Browse files
committed
test: remove automatic logout for all tests
1 parent d10835b commit 6a4a8d4

7 files changed

Lines changed: 114 additions & 67 deletions

File tree

playwright/fixtures/index.ts

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
import * as fs from "fs/promises";
2-
import * as os from "os";
3-
import * as path from "path";
41
import { test as baseTest, expect } from "@playwright/test";
52
import { SharedSlice } from "@prismicio/types-internal/lib/customtypes";
63
import {
@@ -48,10 +45,10 @@ type Fixtures = {
4845
/**
4946
* Data
5047
*/
51-
reusablePageType: { name: string };
52-
singlePageType: { name: string };
53-
reusableCustomType: { name: string };
54-
singleCustomType: { name: string };
48+
reusablePageType: { name: string; id: string };
49+
singlePageType: { name: string; id: string };
50+
reusableCustomType: { name: string; id: string };
51+
singleCustomType: { name: string; id: string };
5552
slice: { name: string };
5653
repeatableZoneSlice: { name: string };
5754
firstSliceLibrary: { id: string };
@@ -116,49 +113,69 @@ export const test = baseTest.extend<Options & Fixtures>({
116113
await pageTypesTablePage.goto();
117114
await pageTypesTablePage.openCreateDialog();
118115

119-
const pageTypeName = "Page Type " + generateRandomId();
116+
const uuid = generateRandomId();
117+
const pageTypeName = "Page Type " + uuid;
120118
await pageTypesTablePage.createTypeDialog.createType(
121119
pageTypeName,
122120
"reusable",
123121
);
124122

125-
await use({ name: pageTypeName });
123+
await use({ name: pageTypeName, id: `page_type_${uuid}` });
124+
125+
await pageTypesTablePage.goto();
126+
await pageTypesTablePage.openActionMenu(pageTypeName, "Remove");
127+
await pageTypesTablePage.deleteTypeDialog.deleteType();
126128
},
127129
singlePageType: async ({ pageTypesTablePage }, use) => {
128130
await pageTypesTablePage.goto();
129131
await pageTypesTablePage.openCreateDialog();
130132

131-
const pageTypeName = "Page Type " + generateRandomId();
133+
const uuid = generateRandomId();
134+
const pageTypeName = "Page Type " + uuid;
132135
await pageTypesTablePage.createTypeDialog.createType(
133136
pageTypeName,
134137
"single",
135138
);
136139

137-
await use({ name: pageTypeName });
140+
await use({ name: pageTypeName, id: `page_type_${uuid}` });
141+
142+
await pageTypesTablePage.goto();
143+
await pageTypesTablePage.openActionMenu(pageTypeName, "Remove");
144+
await pageTypesTablePage.deleteTypeDialog.deleteType();
138145
},
139146
reusableCustomType: async ({ customTypesTablePage }, use) => {
140147
await customTypesTablePage.goto();
141148
await customTypesTablePage.openCreateDialog();
142149

143-
const customTypeName = "Custom Type " + generateRandomId();
150+
const uuid = generateRandomId();
151+
const customTypeName = "Custom Type " + uuid;
144152
await customTypesTablePage.createTypeDialog.createType(
145153
customTypeName,
146154
"reusable",
147155
);
148156

149-
await use({ name: customTypeName });
157+
await use({ name: customTypeName, id: `custom_type_${uuid}` });
158+
159+
await customTypesTablePage.goto();
160+
await customTypesTablePage.openActionMenu(customTypeName, "Remove");
161+
await customTypesTablePage.deleteTypeDialog.deleteType();
150162
},
151163
singleCustomType: async ({ customTypesTablePage }, use) => {
152164
await customTypesTablePage.goto();
153165
await customTypesTablePage.openCreateDialog();
154166

155-
const customTypeName = "Custom Type " + generateRandomId();
167+
const uuid = generateRandomId();
168+
const customTypeName = "Custom Type " + uuid;
156169
await customTypesTablePage.createTypeDialog.createType(
157170
customTypeName,
158171
"single",
159172
);
160173

161-
await use({ name: customTypeName });
174+
await use({ name: customTypeName, id: `custom_type_${uuid}` });
175+
176+
await customTypesTablePage.goto();
177+
await customTypesTablePage.openActionMenu(customTypeName, "Remove");
178+
await customTypesTablePage.deleteTypeDialog.deleteType();
162179
},
163180
slice: async ({ slicesListPage }, use) => {
164181
await slicesListPage.goto();
@@ -170,6 +187,10 @@ export const test = baseTest.extend<Options & Fixtures>({
170187
await slicesListPage.createSliceDialog.createSlice(sliceName);
171188

172189
await use({ name: sliceName });
190+
191+
await slicesListPage.goto();
192+
await slicesListPage.openActionMenu(sliceName, "Delete");
193+
await slicesListPage.deleteSliceDialog.deleteSlice(sliceName);
173194
},
174195
repeatableZoneSlice: async ({ firstSliceLibrary, manager }, use) => {
175196
const sliceName = "Slice" + generateRandomId();
@@ -196,6 +217,11 @@ export const test = baseTest.extend<Options & Fixtures>({
196217
});
197218

198219
await use({ name: model.name });
220+
221+
await manager.slices.deleteSlice({
222+
libraryID: firstSliceLibrary.id,
223+
sliceID: model.id,
224+
});
199225
},
200226
firstSliceLibrary: async ({ manager }, use) => {
201227
const config = await manager.project.getSliceMachineConfig();
@@ -280,13 +306,6 @@ export const test = baseTest.extend<Options & Fixtures>({
280306
const newContext = await browser.newContext({ storageState });
281307
const page = await newContext.newPage();
282308

283-
// Logout user by default
284-
try {
285-
await fs.rm(path.join(os.homedir(), ".prismic"));
286-
} catch (error) {
287-
// Ignore since it means the user is already logged out
288-
}
289-
290309
// Propagate the modified page to the test
291310
await use(page);
292311

playwright/pages/ChangesPage.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export class ChangesPage extends SliceMachinePage {
1212
readonly notLoggedInTitle: Locator;
1313
readonly notAuthorizedTitle: Locator;
1414
readonly blankSlateTitle: Locator;
15+
readonly postPushBlankSlateTitle: Locator;
1516
readonly unknownErrorMessage: Locator;
1617
readonly softLimitTitle: Locator;
1718
readonly softLimitCheckbox: Locator;
@@ -50,6 +51,10 @@ export class ChangesPage extends SliceMachinePage {
5051
this.blankSlateTitle = page.getByText("Everything is up-to-date", {
5152
exact: true,
5253
});
54+
this.postPushBlankSlateTitle = page.getByText(
55+
"Success! Your changes have been pushed to the Page Builder.",
56+
{ exact: true },
57+
);
5358
this.unknownErrorMessage = page.getByText(
5459
"Something went wrong when pushing your changes. Check your terminal logs.",
5560
{
@@ -100,6 +105,7 @@ export class ChangesPage extends SliceMachinePage {
100105
await this.pushChangesButton.click();
101106
await expect(this.pushChangesButton).toBeDisabled();
102107
await this.checkPushedMessage();
108+
await expect(this.postPushBlankSlateTitle).toBeVisible();
103109
}
104110

105111
async confirmDeleteDocuments() {
@@ -136,6 +142,18 @@ export class ChangesPage extends SliceMachinePage {
136142
).toBeVisible();
137143
}
138144

145+
async checkSliceName(name: string) {
146+
await expect(
147+
this.getSliceCard(name).getByText(name, { exact: true }),
148+
).toBeVisible();
149+
}
150+
151+
async checkSliceStatus(name: string, status: string) {
152+
await expect(
153+
this.getSliceCard(name).getByText(status, { exact: true }),
154+
).toBeVisible();
155+
}
156+
139157
async checkPushedMessage() {
140158
await expect(this.pushedMessaged).toBeVisible();
141159
await expect(this.pushedMessaged).not.toBeVisible();

playwright/playwright.config.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,7 @@ const config = {
108108
// Run local dev servers before starting the tests if needed.
109109
webServer: {
110110
cwd: "..",
111-
command: process.env["CI"]
112-
? `yarn play --prefix ${REPOSITORY_NAME_PREFIX}`
113-
: `yarn play`,
111+
command: "yarn play",
114112
url: "http://localhost:9999/",
115113
reuseExistingServer: !process.env["CI"],
116114
stdout: "pipe",

playwright/tests/changes/changes.spec.ts

Lines changed: 22 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,11 @@
1-
import { CustomType } from "@prismicio/types-internal/lib/customtypes";
21
import { expect } from "@playwright/test";
32

43
import { test } from "../../fixtures";
54
import { generateLibraries, generateTypes } from "../../mocks";
65

76
test("I cannot see the login screen when logged in", async ({
87
changesPage,
9-
procedures,
108
}) => {
11-
procedures.mock("getState", ({ data }) => ({
12-
...(data as Record<string, unknown>),
13-
clientError: {
14-
clientError: undefined,
15-
},
16-
}));
17-
189
await changesPage.goto();
1910
await expect(changesPage.loginButton).not.toBeVisible();
2011
await expect(changesPage.notLoggedInTitle).not.toBeVisible();
@@ -73,27 +64,23 @@ test("I can see the empty state when I don't have any changes to push", async ({
7364

7465
test("I can see the changes I have to push", async ({
7566
changesPage,
76-
procedures,
67+
reusablePageType,
68+
slice,
7769
}) => {
78-
const types = generateTypes({ typesCount: 1 });
79-
const customType = types[0] as CustomType;
80-
procedures.mock("getState", ({ data }) => ({
81-
...(data as Record<string, unknown>),
82-
libraries: generateLibraries({ slicesCount: 0 }),
83-
customTypes: types,
84-
remoteCustomTypes: [],
85-
remoteSlices: [],
86-
clientError: undefined,
87-
}));
88-
8970
await changesPage.goto();
9071
await expect(changesPage.loginButton).not.toBeVisible();
72+
73+
// Custom Type
9174
await changesPage.checkCustomTypeName(
92-
customType.id,
93-
customType.label as string,
75+
reusablePageType.id,
76+
reusablePageType.name,
9477
);
95-
await changesPage.checkCustomTypeApiId(customType.id);
96-
await changesPage.checkCustomTypeStatus(customType.id, "New");
78+
await changesPage.checkCustomTypeApiId(reusablePageType.id);
79+
await changesPage.checkCustomTypeStatus(reusablePageType.id, "New");
80+
81+
// Slice
82+
await changesPage.checkSliceName(slice.name);
83+
await changesPage.checkSliceStatus(slice.name, "New");
9784
});
9885

9986
test("I can update screenshots", async ({ changesPage, procedures, slice }) => {
@@ -116,22 +103,19 @@ test("I can update screenshots", async ({ changesPage, procedures, slice }) => {
116103
).not.toBeVisible();
117104
});
118105

119-
test("I can push the changes I have", async ({ changesPage, procedures }) => {
120-
procedures.mock("getState", ({ data }) => ({
121-
...(data as Record<string, unknown>),
122-
libraries: generateLibraries({ slicesCount: 0 }),
123-
customTypes: generateTypes({ typesCount: 1 }),
124-
remoteCustomTypes: [],
125-
remoteSlices: [],
126-
clientError: undefined,
127-
}));
128-
procedures.mock("prismicRepository.pushChanges", () => undefined, {
129-
execute: false,
130-
});
131-
106+
test("I can push the changes I have", async ({
107+
changesPage,
108+
reusablePageType,
109+
slice,
110+
}) => {
132111
await changesPage.goto();
133112
await expect(changesPage.loginButton).not.toBeVisible();
134113
await changesPage.pushChanges();
114+
115+
await expect(
116+
changesPage.getCustomType(reusablePageType.id),
117+
).not.toBeVisible();
118+
await expect(changesPage.getSliceCard(slice.name)).not.toBeVisible();
135119
});
136120

137121
test("I can see an error when the push failed", async ({

playwright/tests/common/environment.spec.ts

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,39 @@ import { expect } from "@playwright/test";
33
import { test } from "../../fixtures";
44
import { environments } from "../../mocks";
55

6-
test("I can click on the text to log in", async ({ sliceMachinePage }) => {
6+
test("I can click on the text to log in", async ({
7+
sliceMachinePage,
8+
procedures,
9+
}) => {
10+
procedures.mock(
11+
"prismicRepository.fetchEnvironments",
12+
() => {
13+
const error = new Error();
14+
error.name = "SMUnauthenticatedError";
15+
throw error;
16+
},
17+
{ execute: false },
18+
);
19+
720
await sliceMachinePage.gotoDefaultPage();
821
await sliceMachinePage.menu.environmentSelector.loginTextButton.click();
922
await expect(sliceMachinePage.loginDialog.submitButton).toBeVisible();
1023
});
1124

12-
test("I can click on the icon to log in", async ({ sliceMachinePage }) => {
25+
test("I can click on the icon to log in", async ({
26+
sliceMachinePage,
27+
procedures,
28+
}) => {
29+
procedures.mock(
30+
"prismicRepository.fetchEnvironments",
31+
() => {
32+
const error = new Error();
33+
error.name = "SMUnauthenticatedError";
34+
throw error;
35+
},
36+
{ execute: false },
37+
);
38+
1339
await sliceMachinePage.gotoDefaultPage();
1440
await sliceMachinePage.menu.environmentSelector.loginIconButton.click();
1541
await expect(sliceMachinePage.loginDialog.submitButton).toBeVisible();

playwright/tests/common/navigation.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ test("I can navigate through all menu entries", async ({
5656
);
5757
});
5858

59-
test("I can access the repository using the open icon", async ({
59+
test.skip("I can access the repository using the open icon", async ({
6060
sliceMachinePage,
6161
procedures,
6262
}) => {

scripts/play.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ Arguments:
142142

143143
let [playgroundName] = args._;
144144
const didProvidePlaygroundName = Boolean(playgroundName);
145+
let usedExistingPlayground = false;
145146

146147
if (!playgroundName) {
147148
if (args.new) {
@@ -151,11 +152,12 @@ Arguments:
151152
PLAYGROUNDS_ROOT,
152153
{ dirOnly: true, exclude: [".yarn", "node_modules"] },
153154
);
155+
usedExistingPlayground = Boolean(mostRecentPlaygroundName);
154156
playgroundName = mostRecentPlaygroundName ?? createRandomName();
155157
}
156158
}
157159

158-
if (!playgroundName.startsWith(args.prefix)) {
160+
if (!usedExistingPlayground && !playgroundName.startsWith(args.prefix)) {
159161
playgroundName = `${args.prefix}${playgroundName}`;
160162
}
161163

0 commit comments

Comments
 (0)