it("JSON body", () => { cy.request("GET", "/api/greet", { first: "Dillon" }).then((res) => { expect(res.headers["content-type"]).to.eq("text/plain"); expect(res.status).to.eq(200); expect(res.body).to.eq("Hello Dillon"); }); }); it("JSON body with content-type metadata", () => { cy.request({ method: "POST", url: "/api/greet", headers: { "Content-Type": "application/json; charset=utf-8" }, body: JSON.stringify({ first: "Dillon" }), }).then((res) => { expect(res.headers["content-type"]).to.eq("text/plain"); expect(res.status).to.eq(200); expect(res.body).to.eq("Hello Dillon"); }); }); it("form post", () => { cy.request({ method: "POST", url: "/api/greet", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ first: "Dillon" }).toString(), }).then((res) => { expect(res.headers["content-type"]).to.eq("text/plain"); expect(res.status).to.eq(200); expect(res.body).to.eq("Hello Dillon"); }); }); it("query param", () => { cy.request({ method: "GET", url: "/api/greet?first=QueryParam", }).then((res) => { expect(res.headers["content-type"]).to.eq("text/plain"); expect(res.status).to.eq(200); expect(res.body).to.eq("Hello QueryParam"); }); }); it("expect query param when none present", () => { cy.request({ method: "GET", url: "/api/greet", failOnStatusCode: false, }).then((res) => { expect(res.headers["content-type"]).to.eq("text/plain"); expect(res.status).to.eq(400); expect(res.body).to.include( 'Expected query param "first", but there were no query params.' ); }); }); it("missing expected query param", () => { cy.request({ method: "GET", url: "/api/greet?name=Jane", failOnStatusCode: false, }).then((res) => { expect(res.headers["content-type"]).to.eq("text/plain"); expect(res.status).to.eq(400); expect(res.body).to.include('Missing query param "first"'); }); }); it("multi-part form post", () => { const formData = new FormData(); formData.set("first", "Multipart"); cy.request({ method: "POST", url: "/api/greet", body: formData, }).then((res) => { expect(res.headers["content-type"]).to.eq("text/plain"); expect(res.status).to.eq(200); expect(Cypress.Blob.arrayBufferToBinaryString(res.body)).to.eq( "Hello Multipart" ); }); }); it("decodes xml", () => { cy.request({ method: "POST", url: "/api/xml", headers: { "Content-Type": "application/xml" }, body: ` SomeString `, }).then((res) => { expect(res.headers["content-type"]).to.eq("text/plain"); expect(res.status).to.eq(200); expect(res.body).to.eq("SomeString"); }); }); it("accepts xml content-type with extra whitespace and params", () => { cy.request({ method: "POST", url: "/api/xml", headers: { "Content-Type": "application/xml ; charset=utf-8" }, body: ` SomeString `, }).then((res) => { expect(res.headers["content-type"]).to.eq("text/plain"); expect(res.status).to.eq(200); expect(res.body).to.eq("SomeString"); }); }); it("gives an error when there is no content-type header", () => { cy.request({ method: "POST", url: "/api/xml", headers: {}, body: ` SomeString `, failOnStatusCode: false, }).then((res) => { expect(res.headers["content-type"]).to.eq("text/plain"); expect(res.status).to.eq(400); expect(res.body).to.eq( "Expected content-type `application/xml` but there was no content-type header." ); }); }); it("handles XML body", () => { cy.request({ method: "POST", url: "/api/multiple-content-types", headers: { "Content-Type": "application/xml ; charset=utf-8" }, body: ` SomeString `, }).then((res) => { expect(res.headers["content-type"]).to.eq("text/plain"); expect(res.status).to.eq(200); expect(res.body).to.eq("SomeString"); }); }); it("handles JSON body", () => { cy.request({ method: "POST", url: "/api/multiple-content-types", body: { path: { to: { string: { value: "SomeString" } } } }, }).then((res) => { expect(res.headers["content-type"]).to.eq("text/plain"); expect(res.status).to.eq(200); expect(res.body).to.eq("SomeString"); }); });