diff options
Diffstat (limited to 'cypress')
| -rw-r--r-- | cypress/e2e/event.cy.ts | 160 | 
1 files changed, 127 insertions, 33 deletions
diff --git a/cypress/e2e/event.cy.ts b/cypress/e2e/event.cy.ts index 3536806..da050eb 100644 --- a/cypress/e2e/event.cy.ts +++ b/cypress/e2e/event.cy.ts @@ -4,7 +4,6 @@ const eventData = {      timezone: "Europe/London",      eventDescription: "Event Description",      eventURL: "https://example.com", -    imagePath: "path/to/your/image.jpg", // If you have an image to upload      hostName: "Your Name",      creatorEmail: "test@example.com",      eventGroupCheckbox: false, @@ -14,40 +13,25 @@ const eventData = {      joinCheckbox: true,      maxAttendeesCheckbox: true,      maxAttendees: 10, -    eventStart: "", -    eventEnd: "", +    eventStart: "2030-01-01T00:00", +    eventEnd: "2030-01-01T01:00",  };  describe("Events", () => {      beforeEach(() => { -        cy.clearLocalStorage(); -          cy.visit("/new");          cy.get("#showNewEventFormButton").click();          cy.get("#eventName").type(eventData.eventName);          cy.get("#eventLocation").type(eventData.eventLocation); -        cy.get("#eventStart").click(); -        // This opens a datepicker, so find the first non-disabled day and click it -        cy.get(".datepicker--cell-day:not(.-disabled-)").first().click(); -        cy.get("#eventStart").invoke("val").as("eventStart"); -        // Click away from the datepicker to close it -        cy.get("#eventName").click(); -        cy.get("#eventEnd").click(); -        // This opens a datepicker, so find the last non-disabled day and click it -        cy.get(".datepicker--cell-day:not(.-disabled-)").last().click(); -        cy.get("#eventEnd").invoke("val").as("eventEnd"); -        // Click away from the datepicker to close it -        cy.get("#eventName").click(); +        // These are datetime-local inputs +        cy.get("#eventStart").type(eventData.eventStart); +        cy.get("#eventEnd").type(eventData.eventEnd);          // #timezone is a Select2 dropdown, so select the option you want          cy.get("#timezone").select(eventData.timezone, { force: true });          cy.get("#eventDescription").type(eventData.eventDescription);          cy.get("#eventURL").type(eventData.eventURL); -        // Upload an image -        // if (eventData.imagePath) { -        //   cy.get("#eventImageUpload").attachFile(eventData.imagePath); -        // }          cy.get("#hostName").type(eventData.hostName);          cy.get("#creatorEmail").type(eventData.creatorEmail); @@ -74,6 +58,16 @@ describe("Events", () => {          // Submit the form          cy.get("#newEventFormSubmit").click(); + +        // Wait for the new page to load +        cy.url().should("not.include", "/new"); + +        // Get the new event ID from the URL +        cy.url().then((url) => { +            const [eventID, editToken] = url.split("/").pop().split("?"); +            cy.wrap(eventID).as("eventID"); +            cy.wrap(editToken).as("editToken"); +        });      });      it("creates a new event", function () {          // Check that all the data is correct @@ -82,30 +76,25 @@ describe("Events", () => {          cy.get(".p-summary").should("contain.text", eventData.eventDescription);          cy.get("#hosted-by").should(              "contain.text", -            `Hosted by ${eventData.hostName}` +            `Hosted by ${eventData.hostName}`,          );          cy.get("#attendees-alert").should("contain.text", "10 spots remaining"); -        let [startDate, startTime] = this.eventStart.split(", "); -        let [endDate, endTime] = this.eventEnd.split(", "); -        // Remove leading zeroes from the times -        startTime = startTime.replace(/^0+/, ""); -        endTime = endTime.replace(/^0+/, ""); -        cy.get(".dt-duration").should("contain.text", startDate); -        cy.get(".dt-duration").should("contain.text", endDate); -        cy.get(".dt-duration").should("contain.text", startTime); -        cy.get(".dt-duration").should("contain.text", endTime); +        cy.get(".dt-duration").should( +            "contain.text", +            "Tuesday 1 January 2030 from 12:00 am to 1:00 am (GMT)", +        );      });      it("allows you to attend an event", function () {          cy.get("button#attendEvent").click();          cy.get("#attendeeName").type("Test Attendee"); -        cy.get("#attendeeNumber").clear(); +        cy.get("#attendeeNumber").focus().clear();          cy.get("#attendeeNumber").type("2");          cy.get("form#attendEventForm").submit();          cy.get("#attendees-alert").should("contain.text", "8 spots remaining");          cy.get(".attendeesList").should(              "contain.text", -            "Test Attendee (2 people)" +            "Test Attendee (2 people)",          );      }); @@ -116,4 +105,109 @@ describe("Events", () => {          cy.get(".comment").should("contain.text", "Test Author");          cy.get(".comment").should("contain.text", "Test Comment");      }); + +    it("displays the ActivityPub featured post", function () { +        cy.log(this.eventID); + +        cy.request({ +            url: `/${this.eventID}/featured`, +            headers: { +                Accept: "application/activity+json", +            }, +        }).then((response) => { +            expect(response.body).to.have.property("@context"); +            expect(response.body).to.have.property("id"); +            expect(response.body).to.have.property("type"); +            expect(response.body).to.have.property("orderedItems"); +            expect(response.body.orderedItems) +                .to.be.an("array") +                .and.to.have.lengthOf(1); +            const featuredPost = response.body.orderedItems[0]; +            expect(featuredPost).to.have.property("@context"); +            expect(featuredPost).to.have.property("id"); +            expect(featuredPost).to.have.property("type"); +            expect(featuredPost).to.have.property("name"); +            expect(featuredPost).to.have.property("content"); +            expect(featuredPost).to.have.property("attributedTo"); +        }); +    }); + +    it("responds correctly to ActivityPub webfinger requests", function () { +        cy.request({ +            url: `/.well-known/webfinger?resource=acct:${ +                this.eventID +            }@${Cypress.env("CYPRESS_DOMAIN")}`, +            headers: { +                Accept: "application/activity+json", +            }, +        }).then((response) => { +            expect(response.body).to.have.property("subject"); +            expect(response.body).to.have.property("links"); +            expect(response.body.links) +                .to.be.an("array") +                .and.to.have.lengthOf(1); +            const link = response.body.links[0]; +            expect(link).to.have.property("rel"); +            expect(link).to.have.property("type"); +            expect(link).to.have.property("href"); +        }); +    }); + +    it("edits an event", function () { +        cy.get("#editEvent").click(); + +        // The edit form is the same as the new form, so we can just re-use the same selectors +        // but we need to clear the fields first +        cy.get("#editEventForm #eventName").focus().clear(); +        cy.get("#editEventForm #eventLocation").focus().clear(); +        cy.get("#editEventForm #eventStart").focus().clear(); +        cy.get("#editEventForm #eventEnd").focus().clear(); +        cy.get("#editEventForm #eventDescription").focus().clear(); +        cy.get("#editEventForm #eventURL").focus().clear(); +        cy.get("#editEventForm #hostName").focus().clear(); +        cy.get("#editEventForm #creatorEmail").focus().clear(); +        cy.get("#editEventForm #maxAttendees").focus().clear(); + +        cy.get("#editEventForm #eventName").type("Edited Event Name"); +        cy.get("#editEventForm #eventLocation").type("Edited Event Location"); +        // These are datetime-local inputs +        cy.get("#editEventForm #eventStart").type("2030-12-01T00:00"); +        cy.get("#editEventForm #eventEnd").type("2030-12-01T01:00"); +        // #timezone is a Select2 dropdown, so select the option you want +        cy.get("#editEventForm #timezone").select("Australia/Sydney", { +            force: true, +        }); +        cy.get("#editEventForm #eventDescription").type( +            "Edited Event Description", +        ); +        cy.get("#editEventForm #eventURL").type("https://edited.example.com"); +        cy.get("#editEventForm #hostName").type("Edited Name"); +        cy.get("#editEventForm #creatorEmail").type("edited@example.com"); + +        cy.get("#editEventForm #maxAttendeesCheckbox").uncheck(); + +        cy.get("#editEventForm #interactionCheckbox").uncheck(); + +        cy.get("#editEventForm #joinCheckbox").uncheck(); + +        // Submit the form +        cy.get("#editEventForm").submit(); + +        // Wait for the modal to not be visible +        cy.get("#editModal").should("not.be.visible"); + +        // Check that all the data is correct +        cy.get(".p-name").should("have.text", "Edited Event Name"); +        cy.get(".p-location").should("have.text", "Edited Event Location"); +        cy.get(".p-summary").should("contain.text", "Edited Event Description"); +        cy.get("#hosted-by").should("contain.text", "Hosted by Edited Name"); +        cy.get(".dt-duration").should( +            "contain.text", +            "Sunday 1 December 2030 from 12:00 am to 1:00 am", +        ); +        // Check that the comment form is not visible +        cy.get("#postComment").should("not.exist"); +        // Check that the attendee form is not visible +        cy.get("#attendEvent").should("not.exist"); +    });  });  | 
