// (C) 2007-2019 GoodData Corporation import * as request from "supertest"; import * as HttpStatusCodes from "http-status-codes"; import { login, IUserLoginRequest, IUserLoginResponse } from "../login"; import { createEndpoint } from "../../../utils/tests"; import { ISchema } from "../../../schema/model/Schema"; const schema: ISchema = { project: { title: "My title", }, users: [ { identifier: "ayrton_senna", email: "ayrton@mclaren.com", }, ], }; const app = createEndpoint(login, schema); function loginRequest(body: IUserLoginRequest) { return request(app) .post("/gdc/account/login") .set("Content-Type", "application/json") .send(body); } function tokenRequest() { return request(app) .get("/gdc/account/token") .set("Content-Type", "application/json"); } function logoutRequest() { return request(app) .delete("/gdc/account/login/john.doe") .set("Content-Type", "application/json"); } const correctLoginBody: IUserLoginRequest = { postUserLogin: { login: "ayrton@mclaren.com", password: "jindrisska", remember: 1, verify_level: 0, }, }; const wrongLoginBody: IUserLoginRequest = { postUserLogin: { login: "unknown-user", password: "wrong password", remember: 1, verify_level: 0, }, }; describe("login", () => { it("should return 401 if the bad credentials are sent", () => { return loginRequest(wrongLoginBody) .expect(HttpStatusCodes.UNAUTHORIZED) .then(res => { expect(res.body).toEqual({ component: "Webapp", message: "Bad Login or Password!", parameters: [], }); }); }); it("should return 200 if the correct credentials are sent", () => { const expectedBody: IUserLoginResponse = { userLogin: { profile: "/gdc/account/profile/ayrton_senna", state: "/gdc/account/login/ayrton_senna", }, }; return loginRequest(correctLoginBody) .expect(HttpStatusCodes.OK) .then(res => { expect(res.body).toEqual(expectedBody); }); }); }); describe("token", () => { it("should return 401 if not authorized", () => { return tokenRequest() .expect(HttpStatusCodes.UNAUTHORIZED) .then(res => { expect(res.text).toEqual(""); }); }); it("should return 200 if authorized", () => { return loginRequest(correctLoginBody) .expect(HttpStatusCodes.OK) .then(loginRes => { const cookies = loginRes.header["set-cookie"]; return tokenRequest() .set("Cookie", cookies) .expect(HttpStatusCodes.OK) .then(res => { expect(res.text).toEqual(""); }); }); }); }); describe("logout", () => { it("should return 204 after logout", () => { return loginRequest(correctLoginBody) .expect(HttpStatusCodes.OK) .then(loginRes => { const cookies = loginRes.header["set-cookie"]; return logoutRequest() .set("Cookie", cookies) .expect(HttpStatusCodes.NO_CONTENT) .then(res => { expect(res.text).toEqual(""); }); }); }); });