/
entity-soft-remove.ts
106 lines (85 loc) · 3.78 KB
/
entity-soft-remove.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import "reflect-metadata";
import {expect} from "chai";
import {closeTestingConnections, createTestingConnections, reloadTestingDatabases} from "../../../utils/test-utils";
import {Connection} from "../../../../src/connection/Connection";
import {Post} from "./entity/Post";
import { PostWithoutDeleteDateColumn } from "./entity/PostWithoutDeleteDateColumn";
import { MissingDeleteDateColumnError } from "../../../../src/error/MissingDeleteDateColumnError";
import { PromiseUtils } from "../../../../src";
describe("entity > soft-remove", () => {
let connections: Connection[];
before(async () => connections = await createTestingConnections({
entities: [__dirname + "/entity/*{.js,.ts}"],
}));
beforeEach(() => reloadTestingDatabases(connections));
after(() => closeTestingConnections(connections));
it("should perform soft removal and recovery correctly", () => PromiseUtils.runInSequence(connections, async connection => {
Post.useConnection(connection); // change connection each time because of AR specifics
const postRepository = connection.getRepository(Post);
// save a new posts
const newPost1 = postRepository.create({
id: 1,
name: "post#1"
});
const newPost2 = postRepository.create({
id: 2,
name: "post#2"
});
await postRepository.save(newPost1);
await postRepository.save(newPost2);
// soft-remove one
await newPost1.softRemove();
// load to check
const loadedPosts = await postRepository.find({ withDeleted: true });
// assert
loadedPosts.length.should.be.equal(2);
const loadedPost1 = loadedPosts.find(p => p.id === 1);
expect(loadedPost1).to.exist;
expect(loadedPost1!.deletedAt).to.be.instanceof(Date);
expect(loadedPost1!.name).to.equals("post#1");
const loadedPost2 = loadedPosts.find(p => p.id === 2);
expect(loadedPost2).to.exist;
expect(loadedPost2!.deletedAt).to.equals(null);
expect(loadedPost2!.name).to.equals("post#2");
// recover one
await loadedPost1!.recover();
// load to check
const recoveredPosts = await postRepository.find({ withDeleted: true });
// assert
recoveredPosts.length.should.be.equal(2);
const recoveredPost1 = recoveredPosts.find(p => p.id === 1);
expect(recoveredPost1).to.exist;
expect(recoveredPost1!.deletedAt).to.equals(null);
expect(recoveredPost1!.name).to.equals("post#1");
const recoveredPost2 = recoveredPosts.find(p => p.id === 2);
expect(recoveredPost2).to.exist;
expect(recoveredPost2!.deletedAt).to.equals(null);
expect(recoveredPost2!.name).to.equals("post#2");
}));
it("should throw error when delete date column is missing", () => PromiseUtils.runInSequence(connections, async connection => {
PostWithoutDeleteDateColumn.useConnection(connection); // change connection each time because of AR specifics
const postRepository = connection.getRepository(PostWithoutDeleteDateColumn);
// save a new posts
const newPost1 = postRepository.create({
id: 1,
name: "post#1"
});
await postRepository.save(newPost1);
let error1: Error | undefined;
try {
// soft-remove one
await newPost1.softRemove();
} catch (err) {
error1 = err;
}
expect(error1).to.be.an.instanceof(MissingDeleteDateColumnError);
let error2: Error | undefined;
try {
// recover one
await newPost1.recover();
} catch (err) {
error2 = err;
}
expect(error2).to.be.an.instanceof(MissingDeleteDateColumnError);
}));
});