Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cypress test config and commands #3134

Draft
wants to merge 84 commits into
base: dev
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
113e190
task: create new version selector button
finnar-bin Nov 26, 2024
f5ea2b4
task: create version item component
finnar-bin Nov 26, 2024
828cf06
task: move menuItem to parent
finnar-bin Nov 26, 2024
ed0e32b
task: wire load version
finnar-bin Nov 27, 2024
323b451
task: render labels
finnar-bin Nov 27, 2024
25413ad
task: use new version selector
finnar-bin Nov 28, 2024
4c57890
task: create add label component
finnar-bin Dec 3, 2024
135d640
task: create rtk queries
finnar-bin Dec 3, 2024
9866289
task: virtualize list
finnar-bin Dec 4, 2024
485d34a
task: dynamically change row height
finnar-bin Dec 4, 2024
5160299
task: prevent jank when opening add label form
finnar-bin Dec 5, 2024
34800d0
task: add label select
finnar-bin Dec 5, 2024
18641fa
task: calculate max list height dynamically
finnar-bin Dec 5, 2024
1ac802f
task: remove ununsed hook
finnar-bin Dec 5, 2024
2c9ce2b
chore: cleanup
finnar-bin Dec 5, 2024
7113141
task: map an item's active status labels
finnar-bin Dec 6, 2024
02eccc1
chore: cleanup
finnar-bin Dec 10, 2024
243fe2c
Merge branch 'dev' into feature/2132-workflow-status
finnar-bin Dec 10, 2024
058d747
task: label mapping
finnar-bin Dec 10, 2024
f458535
task: add/remove status
finnar-bin Dec 11, 2024
ed32b1b
Merge branch 'dev' into feature/2132-workflow-status
finnar-bin Dec 11, 2024
c7c9b67
task: wire edit statuses button
finnar-bin Dec 11, 2024
40363e7
task: wire add/remove label
finnar-bin Dec 11, 2024
05029ae
task: invalidate itemworkflowstatus on content item update
finnar-bin Dec 12, 2024
1bf08ab
task: show most recent label on the header
finnar-bin Dec 12, 2024
fbe6ce3
task: change dropdown position
finnar-bin Dec 16, 2024
0aef49b
task: set max width for chip
finnar-bin Dec 16, 2024
7c4a6c0
task: show counter if active label is more than 1
finnar-bin Dec 16, 2024
75b35a9
task: add publish check
finnar-bin Dec 16, 2024
38a56c8
task: simplify row calculation
finnar-bin Dec 17, 2024
9bda0dc
task: optimize row height calculation
finnar-bin Dec 17, 2024
d2b7743
Merge branch 'dev' into feature/2132-workflow-status
finnar-bin Dec 18, 2024
3fee7d7
[feature/2132-workflow-status-labels]: Create workflows page | status…
geodem127 Dec 18, 2024
683c158
Merge branch 'dev' into feature/2132-workflow-status
finnar-bin Dec 20, 2024
dbff4de
fix: sort labels
finnar-bin Dec 20, 2024
0a2a67d
task: add e2e tests
finnar-bin Dec 20, 2024
5e4002c
Fix reorder trigger
geodem127 Dec 20, 2024
ec3e4f2
Added test cases
geodem127 Dec 20, 2024
c073edb
Added test cases
geodem127 Dec 20, 2024
0e7840b
Added test cases
geodem127 Dec 20, 2024
f9d76b8
Added test cases for reordering labels.
geodem127 Dec 22, 2024
ba438ed
Merge branch 'dev' into feature/2132-workflow-status
finnar-bin Jan 2, 2025
aea7d7b
task: update tests
finnar-bin Jan 2, 2025
00377ee
fix: filter out undefined workflow labels
finnar-bin Jan 2, 2025
6eda4c5
fix: update tests
finnar-bin Jan 2, 2025
296ac60
Added workflow labels test cases, added config to support ts in cypre…
geodem127 Jan 2, 2025
c96b661
Merge remote-tracking branch 'refs/remotes/origin/feature/2132-workfl…
geodem127 Jan 2, 2025
6cc3ae0
Merge remote-tracking branch 'refs/remotes/origin/feature/2132-workfl…
geodem127 Jan 2, 2025
a3ff119
Merge remote-tracking branch 'refs/remotes/origin/feature/2132-workfl…
geodem127 Jan 2, 2025
ce5ea6d
Merge remote-tracking branch 'refs/remotes/origin/feature/2132-workfl…
geodem127 Jan 2, 2025
b32086c
Merge remote-tracking branch 'refs/remotes/origin/feature/2132-workfl…
geodem127 Jan 2, 2025
acf1622
Merge remote-tracking branch 'refs/remotes/origin/feature/2132-workfl…
geodem127 Jan 2, 2025
8a487bf
Merge remote-tracking branch 'refs/remotes/origin/feature/2132-workfl…
geodem127 Jan 2, 2025
772715a
Merge remote-tracking branch 'refs/remotes/origin/feature/2132-workfl…
geodem127 Jan 2, 2025
deab34e
Merge remote-tracking branch 'refs/remotes/origin/feature/2132-workfl…
geodem127 Jan 2, 2025
e08647d
task: remove unused mocks
finnar-bin Jan 3, 2025
a5e8e81
task: fix cache invalidation
finnar-bin Jan 3, 2025
85de838
task: remove timeout
finnar-bin Jan 3, 2025
7eaeb71
Merge branch 'dev' into feature/2132-workflow-status
finnar-bin Jan 3, 2025
5695e41
Relocated prop types | refactored user role identifier - changed to s…
geodem127 Jan 3, 2025
78bb88b
Added test cases to cover important scenarios
geodem127 Jan 3, 2025
f434075
Added test cases to cover important scenarios
geodem127 Jan 3, 2025
3ec6c2b
Fix test errors in deactivating status label
geodem127 Jan 3, 2025
0cc2171
Refactored test cases to resolve flaky test issues
geodem127 Jan 6, 2025
73d5f57
Refactored test cases to resolve flaky test issues
geodem127 Jan 6, 2025
0371227
Merge branch 'dev' into feature/2132-workflow-status
finnar-bin Jan 7, 2025
860f490
Merge remote-tracking branch 'refs/remotes/origin/feature/2132-workfl…
geodem127 Jan 7, 2025
fca84d9
Merge branch 'dev' into feature/2132-workflow-status
finnar-bin Jan 8, 2025
b732280
fix: fixed broken tests
finnar-bin Jan 9, 2025
4559256
Fixed workflow status labels test cases
geodem127 Jan 9, 2025
3a3172e
Fixed workflow status labels test cases
geodem127 Jan 9, 2025
31c2e10
Merge remote-tracking branch 'refs/remotes/origin/feature/2132-workfl…
geodem127 Jan 9, 2025
ee05946
Fixed test cases
geodem127 Jan 9, 2025
f08c7ca
Fixed test cases
geodem127 Jan 9, 2025
914bf2a
Merge remote-tracking branch 'refs/remotes/origin/feature/2132-workfl…
geodem127 Jan 9, 2025
69ad65a
Fix flaky test
geodem127 Jan 9, 2025
08ab081
cypress-test-config-experimental
geodem127 Jan 9, 2025
99385cc
cypress-test-config-experimental
geodem127 Jan 9, 2025
4edd15b
updated cypress config, added custom commands for data cleanup, updat…
geodem127 Jan 14, 2025
6b783cd
updated cypress config, added custom commands for data cleanup, updat…
geodem127 Jan 14, 2025
9d8097c
updated custom commands
geodem127 Jan 15, 2025
383edc4
Merge branch 'dev' into cypress-test-config-and-commands
geodem127 Jan 15, 2025
42219f4
Updaated Field.spec
geodem127 Jan 15, 2025
90f1317
fix test
geodem127 Jan 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions cypress.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ module.exports = defineConfig({
viewportWidth: 1920,
viewportHeight: 1080,
video: false,

env: {
API_AUTH: "https://auth.api.dev.zesty.io",
COOKIE_NAME: "DEV_APP_SID",
Expand All @@ -27,4 +28,8 @@ module.exports = defineConfig({
specPattern: "cypress/e2e/**/*.{js,jsx,ts,tsx}",
testIsolation: false,
},
defaultCommandTimeout: 15_000,
pageLoadTimeout: 80_000,
requestTimeout: 40_000,
responseTimeout: 80_000,
});
5 changes: 4 additions & 1 deletion cypress/e2e/blocks/pages/AllBlocksPage.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
const TIMEOUT = { timeout: 30_000 };
class AllBlocksPage {
visit() {
cy.visit("/blocks");
Expand Down Expand Up @@ -28,9 +29,11 @@ class AllBlocksPage {
}

createBlock(name) {
this.createBlockButton.click();
cy.intercept("POST", "**/content/models").as("createModel");
this.createBlockButton.click(TIMEOUT);
cy.getBySelector("create-model-display-name-input").type(name);
cy.getBySelector("create-model-submit-button").click();
cy.wait("@createModel");
}
}

Expand Down
29 changes: 19 additions & 10 deletions cypress/e2e/blocks/tests/blocks.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,20 @@ import SchemaPage from "../../schema/pages/SchemaPage";
const CypressTestBlock = "Cypress Test Block";
const CypressTestVariant = "Cypress Test Variant";

const TIMEOUT = { timeout: 30_000 };

describe("All Blocks Tests", () => {
before(() => {
AllBlocksPage.visit();
cy.deleteContentModels(["Cypress Test Block", "Cypress Test Variant"]);
});

after(() => {
SchemaPage.visit();
SchemaPage.deleteModel(CypressTestBlock);
cy.deleteContentModels(["Cypress Test Block", "Cypress Test Variant"]);
});

it("should show and traverse onboarding flow", () => {
AllBlocksPage.onboardingDialog.should("be.visible");
AllBlocksPage.visit();
cy.get('[data-cy="onboarding-dialog"]', TIMEOUT).should("be.visible");
const totalSteps = 4;
for (let i = 0; i < totalSteps; i++) {
AllBlocksPage.clickOnboardingNextButton();
Expand All @@ -26,7 +28,7 @@ describe("All Blocks Tests", () => {

it("creates new block with default values", () => {
AllBlocksPage.createBlock(CypressTestBlock);
cy.contains(CypressTestBlock).should("exist");
cy.contains(CypressTestBlock, TIMEOUT).should("exist");
SchemaPage.visit();
SchemaPage.addSingleLineTextFieldWithDefaultValue(
CypressTestBlock,
Expand All @@ -50,16 +52,23 @@ describe("All Blocks Tests", () => {
});

it("navigates to block detail page", () => {
cy.contains(CypressTestBlock).click();
cy.contains("Start Creating Variants Now").should("exist");
cy.contains(CypressTestBlock).click({ timeout: 30_000 });
cy.contains("Start Creating Variants Now", { timeout: 30_000 }).should(
"exist"
);
});

it("creates a variant with default values", () => {
cy.contains(CypressTestBlock).click();
AllBlocksPage.visit();
cy.contains(CypressTestBlock).click(TIMEOUT);
BlockPage.createVariant(CypressTestVariant);
cy.contains(
new RegExp(`${CypressTestBlock}:\\s*${CypressTestVariant}`)
new RegExp(`${CypressTestBlock}:\\s*${CypressTestVariant}`),
TIMEOUT
).should("exist");
cy.get('input[name="foo"]').should("have.value", "Default Foo");
cy.get('input[name="foo"]', { timeout: 30_000 }).should(
"have.value",
"Default Foo"
);
});
});
31 changes: 17 additions & 14 deletions cypress/e2e/content/actions.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ const yesterdayTimestamp = moment()
describe("Actions in content editor", () => {
const timestamp = Date.now();

before(() => {
cy.cleanStatusLabels();
});

it("Must not save when missing required Field", () => {
cy.waitOn("/v1/content/models*", () => {
cy.visit("/content/6-556370-8sh47g/7-82a5c7ffb0-07vj1c");
Expand Down Expand Up @@ -83,7 +87,7 @@ describe("Actions in content editor", () => {
cy.get("#12-f8efe4e0f5-xj7pj6 input").should("not.exist");

// Make an edit to enable save button
cy.get("#12-849844-t8v5l6 input").clear().type(timestamp);
cy.get("#12-849844-t8v5l6 input").clear().type(timestamp.toString());

// save to api
cy.waitOn(
Expand All @@ -95,7 +99,6 @@ describe("Actions in content editor", () => {

cy.get("[data-cy=toast]").contains("Item Saved");
});

it("Saves homepage item metadata", () => {
cy.waitOn("/v1/content/models*", () => {
cy.visit("/content/6-a1a600-k0b6f0/7-a1be38-1b42ht/meta");
Expand All @@ -119,10 +122,9 @@ describe("Actions in content editor", () => {
it("Publishes an item", () => {
cy.getBySelector("PublishButton").click();
cy.getBySelector("ConfirmPublishModal").should("exist");
cy.getBySelector("ConfirmPublishButton").click();

cy.intercept("GET", "**/publishings").as("publish");
cy.wait("@publish");
cy.getBySelector("ConfirmPublishButton").click();
cy.wait("@publish", { timeout: 30_000 });

cy.getBySelector("ContentPublishedIndicator").should("exist");
});
Expand Down Expand Up @@ -212,17 +214,18 @@ describe("Actions in content editor", () => {
cy.visit("/content/6-a1a600-k0b6f0/new");
});

cy.get("input[name=title]", { timeout: 5000 }).click().type(timestamp);
cy.get("input[name=title]")
.click({ timeout: 30_000 })
.type(timestamp.toString());
cy.getBySelector("ManualMetaFlow").click();
cy.getBySelector("metaDescription")
.find("textarea")
.first()
.type(timestamp);
.type(timestamp.toString());
cy.getBySelector("CreateItemSaveButton").click();

cy.contains("Created Item", { timeout: 5000 }).should("exist");
cy.contains("Created Item", { timeout: 30_000 }).should("exist");
});

it("Saved item becomes publishable", () => {
cy.get("#PublishButton").should("exist");
});
Expand All @@ -232,7 +235,7 @@ describe("Actions in content editor", () => {
cy.visit("/content/6-a1a600-k0b6f0");
});

cy.contains(timestamp, { timeout: 5000 }).should("exist");
cy.contains(timestamp, { timeout: 30_000 }).should("exist");
});

it("Deletes an item", () => {
Expand All @@ -257,9 +260,9 @@ describe("Actions in content editor", () => {
// these waits are due to a delay
// dealing with these specific endpoints
// the local environment is slow
cy.contains("Successfully sent workflow request", { timeout: 5000 }).should(
"exist"
);
cy.contains("Successfully sent workflow request", {
timeout: 30_000,
}).should("exist");
});

// it("Refreshes the CDN cache", () => {
Expand Down Expand Up @@ -330,6 +333,6 @@ describe("Actions in content editor", () => {

cy.getBySelector("CreateItemSaveButton").click();

cy.contains("Created Item", { timeout: 5000 }).should("exist");
cy.contains("Created Item", { timeout: 60_000 }).should("exist");
});
});
8 changes: 5 additions & 3 deletions cypress/e2e/content/comments.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
describe("Content Item: Comments", () => {
before(() => {
cy.waitOn("/v1/content/models*", () => {
cy.waitOn("/v1/comments*", () => {
cy.waitOn("**/v1/content/models*", () => {
cy.waitOn("**/v1/comments*", () => {
cy.visit("/content/6-556370-8sh47g/7-b939a4-457q19");
});
});
Expand All @@ -10,7 +10,9 @@ describe("Content Item: Comments", () => {

it("Creates an initial comment", () => {
cy.getBySelector("OpenCommentsButton").first().click();
cy.get("#commentInputField").click().type("This is a new comment.");
cy.get("#commentInputField").type("This is a new comment.", {
timeout: 60_000,
});
cy.getBySelector("SubmitNewComment").click();
cy.intercept("/v1/comments/*").as("getAllComments");
cy.wait("@getAllComments");
Expand Down
44 changes: 22 additions & 22 deletions cypress/e2e/content/content.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ describe("Content Specs", () => {

describe("editing content", () => {
before(() => {
cy.waitOn("/v1/content/models*", () => {
cy.waitOn("**/v1/content/models*", () => {
cy.visit("/content/6-556370-8sh47g/7-b939a4-457q19");
});
cy.getBySelector("DuoModeToggle").click();
cy.getBySelector("DuoModeToggle").click({ timeout: 60_000 });
});

it("Text Field", () => {
Expand Down Expand Up @@ -412,24 +412,24 @@ describe("Content Specs", () => {
});
});

describe("Block Selector Field", () => {
before(() => {
cy.waitOn("/v1/content/models*", () => {
cy.visit("/content/6-556370-8sh47g/7-b939a4-457q19");
});
});

it("Sets a block variant", () => {
cy.getBySelector("BlockSelectorModelField", { timeout: 10000 })
.find("input")
.click();
cy.get(".MuiAutocomplete-popper .MuiAutocomplete-option")
.contains("Test Block Do Not Delete")
.click();

cy.getBySelector("BlockSelectorVariantField", { timeout: 10000 }).click();
cy.getBySelector("Variant_0").click();
cy.getBySelector("BlockFieldVariantPreview").should("exist");
});
});
// describe("Block Selector Field", () => {
// before(() => {
// cy.waitOn("**/v1/content/models*", () => {
// cy.visit("/content/6-556370-8sh47g/7-b939a4-457q19");
// });
// });

// it("Sets a block variant", () => {
// cy.getBySelector("BlockSelectorModelField", { timeout: 10000 })
// .find("input")
// .click();
// cy.get(".MuiAutocomplete-popper .MuiAutocomplete-option")
// .contains("Test Block Do Not Delete")
// .click();

// cy.getBySelector("BlockSelectorVariantField", { timeout: 10000 }).click();
// cy.getBySelector("Variant_0").click();
// cy.getBySelector("BlockFieldVariantPreview").should("exist");
// });
// });
});
4 changes: 2 additions & 2 deletions cypress/e2e/content/headTags.spec.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// assumes no Head Tags as starting state
describe("Head Tags", () => {
it("creates and deletes new head tag", () => {
cy.waitOn("/v1/content/models*", () => {
cy.waitOn("**/v1/content/models*", () => {
cy.visit("/content/6-556370-8sh47g/7-b939a4-457q19/head");
});

cy.contains("Create Head Tag").click();
cy.contains("Create Head Tag").click({ timeout: 60_000 });

cy.get("[data-cy=newTagCard]")
.last()
Expand Down
9 changes: 5 additions & 4 deletions cypress/e2e/content/item-list-table.spec.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
describe("Content item list table", () => {
it("Resolves internal link zuids", () => {
cy.waitOn("/search/items*", () => {
cy.waitOn("/v1/content/models*", () => {
cy.waitOn("**/search/items*", () => {
cy.waitOn("**/v1/content/models*", () => {
cy.visit("/content/6-a1a600-k0b6f0");
});
});

cy.getBySelector("SingleRelationshipCell", { timeout: 10000 })
cy.getBySelector("SingleRelationshipCell")
.first()
.contains(
"5 Tricks to Teach Your Pitbull: Fun & Easy Tips for You & Your Dog!"
"5 Tricks to Teach Your Pitbull: Fun & Easy Tips for You & Your Dog!",
{ timeout: 30_000 }
);
});
});
18 changes: 9 additions & 9 deletions cypress/e2e/content/meta.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,9 @@ describe("Content Meta", () => {
});

it("Does not validate meta description for dataset items", () => {
cy.waitOn("/v1/content/models*", () => {
cy.waitOn("/v1/env/nav", () => {
cy.waitOn("/v1/search/items*", () => {
cy.waitOn("**/v1/content/models*", () => {
cy.waitOn("**/v1/env/nav", () => {
cy.waitOn("**/v1/search/items*", () => {
cy.visit("/content/6-675028-84dq4s/new");
});
});
Expand All @@ -81,9 +81,9 @@ describe("Content Meta", () => {
});

it("Auto applies page parent when creating an item", () => {
cy.waitOn("/v1/content/models*", () => {
cy.waitOn("/v1/env/nav", () => {
cy.waitOn("/v1/search/items*", () => {
cy.waitOn("**/v1/content/models*", () => {
cy.waitOn("**/v1/env/nav", () => {
cy.waitOn("**/v1/search/items*", () => {
cy.visit("/content/6-0c960c-d1n0kx/new");
});
});
Expand All @@ -104,9 +104,9 @@ describe("Content Meta", () => {
});

it("Supports a dedicated Twitter title, description and image", () => {
cy.waitOn("/v1/content/models*", () => {
cy.waitOn("/v1/env/nav", () => {
cy.waitOn("/v1/search/items*", () => {
cy.waitOn("**/v1/content/models*", () => {
cy.waitOn("**/v1/env/nav", () => {
cy.waitOn("**/v1/search/items*", () => {
cy.visit("/content/6-b6cde1aa9f-wftv50/7-92ab81c5a8-bhvb0l/meta");
});
});
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/content/multi-lang.spec.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
describe("multi-lang", () => {
it("Check if multi lang exist", () => {
cy.waitOn(
"/v1/content/models/6-a4d6e6f087-1jmlbx/items/7-b8da98dea8-1nwkc9",
"**/v1/content/models/6-a4d6e6f087-1jmlbx/items/7-b8da98dea8-1nwkc9",
() => {
cy.visit("/content/6-a4d6e6f087-1jmlbx/7-b8da98dea8-1nwkc9");
}
Expand Down
6 changes: 5 additions & 1 deletion cypress/e2e/content/navigation.spec.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
const LABELS = {
cypressTest: "Cypress test (Group with visible fields in list)",
};

describe("Navigation through content editor", () => {
before(() => {
cy.waitOn("/v1/env/nav", () => {
Expand All @@ -24,7 +28,7 @@ describe("Navigation through content editor", () => {
cy.getBySelector("create_new_content_item_dialog").should("exist");
cy.getBySelector("create_new_content_item_input")
.find("input")
.type("cypress");
.type(LABELS.cypressTest);
cy.get(".MuiAutocomplete-listbox .MuiAutocomplete-option")
.first()
.should("exist")
Expand Down
24 changes: 24 additions & 0 deletions cypress/e2e/content/pages/ContentItemPage.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
class ContentItemPage {
elements = {
createItemButton: () => cy.getBySelector("CreateItemSaveButton"),
duoModeToggle: () => cy.getBySelector("DuoModeToggle"),
moreMenu: () => cy.getBySelector("ContentItemMoreButton"),
deleteItemButton: () => cy.getBySelector("DeleteContentItem"),
confirmDeleteItemButton: () =>
cy.getBySelector("DeleteContentItemConfirmButton"),
versionSelector: () => cy.getBySelector("VersionSelector"),
versionItem: () => cy.getBySelector("VersionItem"),
addWorkflowStatusLabel: () => cy.getBySelector("AddWorkflowStatusLabel"),
workflowStatusLabelOption: () =>
cy.getBySelector("WorkflowStatusLabelOption"),
activeWorkflowStatusLabel: () =>
cy.getBySelector("ActiveWorkflowStatusLabel"),
publishItemButton: () => cy.getBySelector("PublishButton"),
confirmPublishItemButton: () => cy.getBySelector("ConfirmPublishButton"),
toast: () => cy.getBySelector("toast"),
contentPublishedIndicator: () =>
cy.getBySelector("ContentPublishedIndicator"),
};
}

export default new ContentItemPage();
Loading
Loading