account deletion backend logic

This commit is contained in:
2021-08-02 21:02:36 +03:00
parent 715a9c10d8
commit a8392f632d
3 changed files with 50 additions and 0 deletions

View File

@@ -48,6 +48,9 @@ app.use(userRouter.routes()).use(userRouter.allowedMethods());
app.use(docsRouter.routes()).use(docsRouter.allowedMethods());
app.on("error", (err, ctx) => {
if (ctx.response.status == "500") {
console.error(err);
}
ctx.body = {
error: err.message,
data: false,

View File

@@ -1,4 +1,5 @@
import * as Router from "koa-router";
import { Document } from "~entity/Document";
import { IUserJWT, User } from "~entity/User";
export const userRouter = new Router();
@@ -15,6 +16,20 @@ userRouter.get("/users/user", async (ctx) => {
ctx.body = { error: false, data: user.toAuthJSON() };
});
userRouter.delete("/users/user", async (ctx) => {
if (!ctx.state.user) {
ctx.throw(401);
}
const jwt = ctx.state.user as IUserJWT;
const user = await User.findOne(jwt.id);
await Document.remove(await Document.find({ user }));
await user.remove();
ctx.body = { error: false };
});
userRouter.post("/users/login", async (ctx) => {
const request = ctx.request as any;

View File

@@ -4,6 +4,7 @@ import * as request from "supertest";
import { getConnection } from "typeorm";
import { app } from "~app";
import { IUserAuthJSON, User } from "~entity/User";
import { Document } from "~entity/Document";
import { ISeed, seedDB } from "./util";
@@ -41,6 +42,37 @@ describe("users", function () {
expect(user).to.deep.equal(seed.user1.toJSON());
});
it("should delete user", async function () {
const response = await request(callback)
.delete("/users/user")
.set({
Authorization: `Bearer ${seed.user1.toJWT()}`,
"Content-Type": "application/json",
})
.expect("Content-Type", /json/)
.expect(200);
expect(response.body.error).to.be.false;
expect(await User.findOne(seed.user1.id)).to.be.undefined;
expect(await Document.findOne(seed.doc1.id)).to.be.undefined;
});
it("should not delete user with wrong jwt", async function () {
const response = await request(callback)
.delete("/users/user")
.set({
Authorization: `Bearer ${seed.user2.toJWT()}`,
"Content-Type": "application/json",
})
.expect("Content-Type", /json/)
.expect(200);
expect(response.body.error).to.be.false;
expect(await User.findOne(seed.user2.id)).to.be.undefined;
expect(await User.findOne(seed.user1.id)).to.not.be.undefined;
expect(await Document.findOne(seed.doc1.id)).to.not.be.undefined;
});
it("should login user", async function () {
const response = await request(callback)
.post("/users/login")