add cypress home page spec
This commit is contained in:
parent
07f9746316
commit
84ee24c2ee
1 changed files with 101 additions and 0 deletions
101
frontend/blog_portal/cypress/e2e/home_page.cy.ts
Normal file
101
frontend/blog_portal/cypress/e2e/home_page.cy.ts
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
describe("home page", function () {
|
||||||
|
beforeEach(function () {
|
||||||
|
cy.resetDb();
|
||||||
|
cy.clearMail();
|
||||||
|
cy.seedConfirmedUser({
|
||||||
|
email: "alice@example.com",
|
||||||
|
displayName: "alice",
|
||||||
|
password: "longenoughpassword",
|
||||||
|
});
|
||||||
|
cy.seedConfirmedUser({
|
||||||
|
email: "bob@example.com",
|
||||||
|
displayName: "bob",
|
||||||
|
password: "longenoughpassword",
|
||||||
|
});
|
||||||
|
cy.seedPostAs({
|
||||||
|
email: "alice@example.com",
|
||||||
|
password: "longenoughpassword",
|
||||||
|
title: "Alice first",
|
||||||
|
body: "Alice's first post.",
|
||||||
|
});
|
||||||
|
cy.seedPostAs({
|
||||||
|
email: "bob@example.com",
|
||||||
|
password: "longenoughpassword",
|
||||||
|
title: "Bob says hi",
|
||||||
|
body: "Bob's only post.",
|
||||||
|
});
|
||||||
|
cy.seedPostAs({
|
||||||
|
email: "alice@example.com",
|
||||||
|
password: "longenoughpassword",
|
||||||
|
title: "Alice second",
|
||||||
|
body: "Alice's second post.",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("renders recent posts in newest-first order with author links", function () {
|
||||||
|
cy.visit("/");
|
||||||
|
cy.contains("h2", "Recent posts").should("be.visible");
|
||||||
|
cy.get(".recent .post-card").should("have.length", 3);
|
||||||
|
cy.get(".recent .post-card").first().within(function () {
|
||||||
|
cy.contains("Alice second");
|
||||||
|
cy.contains("a", "alice");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("hides the featured section when no posts are featured", function () {
|
||||||
|
cy.visit("/");
|
||||||
|
cy.contains("h2", "Featured").should("not.exist");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("shows featured posts in slot order once an admin features them", function () {
|
||||||
|
cy.seedAdmin({
|
||||||
|
email: "admin@example.com",
|
||||||
|
displayName: "rootadmin",
|
||||||
|
password: "longenoughpassword",
|
||||||
|
});
|
||||||
|
cy.request("/api/posts").then(function (response) {
|
||||||
|
const posts = response.body.posts as Array<{
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
}>;
|
||||||
|
const aliceSecond = posts.find(function (entry) {
|
||||||
|
return entry.title === "Alice second";
|
||||||
|
})!;
|
||||||
|
const bobPost = posts.find(function (entry) {
|
||||||
|
return entry.title === "Bob says hi";
|
||||||
|
})!;
|
||||||
|
cy.seedFeaturedPost({
|
||||||
|
adminEmail: "admin@example.com",
|
||||||
|
adminPassword: "longenoughpassword",
|
||||||
|
postId: bobPost.id,
|
||||||
|
slot: 2,
|
||||||
|
});
|
||||||
|
cy.seedFeaturedPost({
|
||||||
|
adminEmail: "admin@example.com",
|
||||||
|
adminPassword: "longenoughpassword",
|
||||||
|
postId: aliceSecond.id,
|
||||||
|
slot: 1,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
cy.visit("/");
|
||||||
|
cy.contains("h2", "Featured").should("be.visible");
|
||||||
|
cy.get(".featured .post-card").should("have.length", 2);
|
||||||
|
cy.get(".featured .post-card").eq(0).contains("Alice second");
|
||||||
|
cy.get(".featured .post-card").eq(1).contains("Bob says hi");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("searches users by display name and email prefix", function () {
|
||||||
|
cy.visit("/");
|
||||||
|
cy.get('input[type="search"]').type("al");
|
||||||
|
cy.get(".results li").should("have.length", 1);
|
||||||
|
cy.get(".results li").contains("alice");
|
||||||
|
|
||||||
|
cy.get('input[type="search"]').clear().type("b");
|
||||||
|
cy.get(".results li").should("have.length", 1);
|
||||||
|
cy.get(".results li").contains("bob");
|
||||||
|
|
||||||
|
cy.get('input[type="search"]').clear().type("zzz");
|
||||||
|
cy.get(".results li").should("have.length", 0);
|
||||||
|
});
|
||||||
|
});
|
||||||
Loading…
Add table
Add a link
Reference in a new issue