feat: create-column, update-column, version-column column kinds now s… · typeorm/typeorm@5a2eb30
1+import { expect } from "chai";
2+import "reflect-metadata";
3+import { Connection } from "../../../../src";
4+import {
5+closeTestingConnections,
6+createTestingConnections,
7+reloadTestingDatabases,
8+sleep
9+} from "../../../utils/test-utils";
10+import { Post } from "./entity/Post";
11+12+describe("column kinds > update date column", () => {
13+14+let connections: Connection[];
15+before(async () => connections = await createTestingConnections({
16+entities: [__dirname + "/entity/*{.js,.ts}"],
17+}));
18+beforeEach(() => reloadTestingDatabases(connections));
19+after(() => closeTestingConnections(connections));
20+21+it("update date column should automatically be set by a database", () => Promise.all(connections.map(async connection => {
22+const postRepository = connection.getRepository(Post);
23+24+// save a new post
25+const post = new Post();
26+post.title = "Post";
27+await postRepository.save(post);
28+29+// load and check if updatedAt is a date (generated by db)
30+const loadedPost = await postRepository.findOne();
31+expect(loadedPost).to.be.not.empty;
32+expect(loadedPost!.title).to.be.eql("Post");
33+expect(loadedPost!.updatedAt).to.be.instanceOf(Date);
34+})));
35+36+it("update column should not update if no changes were detected", () => Promise.all(connections.map(async connection => {
37+const postRepository = connection.getRepository(Post);
38+39+// save a new post
40+const post = new Post();
41+post.title = "Post";
42+await postRepository.save(post);
43+44+// update post once again
45+const loadedPost1 = await postRepository.findOneOrFail();
46+await postRepository.save(loadedPost1);
47+48+// load and check if version was a value set by us
49+const loadedPost2 = await postRepository.findOne();
50+51+// make sure version is the same
52+expect(loadedPost2!.title).to.be.eql("Post");
53+expect(loadedPost2!.updatedAt).to.be.eql(loadedPost1.updatedAt);
54+})));
55+56+it("update date column can also be manually set by user", () => Promise.all(connections.map(async connection => {
57+const postRepository = connection.getRepository(Post);
58+59+const updatedAt = new Date(Date.parse("2020-01-01T00:00:00+0000"));
60+61+// save a new post
62+const post = new Post();
63+post.title = "Post";
64+post.updatedAt = updatedAt;
65+await postRepository.save(post);
66+67+// load and check if updatedAt was a value set by us
68+const loadedPost = await postRepository.findOne();
69+expect(loadedPost).to.be.not.empty;
70+expect(loadedPost!.title).to.be.eql("Post");
71+expect(loadedPost!.updatedAt).to.be.eql(updatedAt);
72+})));
73+74+it("update date column should be updated automatically on every change", () => Promise.all(connections.map(async connection => {
75+const postRepository = connection.getRepository(Post);
76+77+// save a new post
78+const post = new Post();
79+post.title = "Post";
80+await postRepository.save(post);
81+82+// load to get updated date we had after first save
83+const loadedPostBeforeUpdate = await postRepository.findOne();
84+85+// wait a second
86+await sleep(1000);
87+88+// update post once again
89+post.title = "Updated Title";
90+await postRepository.save(post);
91+92+// check if date was updated
93+const loadedPostAfterUpdate = await postRepository.findOne();
94+expect(loadedPostAfterUpdate!.updatedAt.toString()).to.be.not.eql(loadedPostBeforeUpdate!.updatedAt.toString());
95+})));
96+97+it("update date column should set a custom date when specified", () => Promise.all(connections.map(async connection => {
98+const postRepository = connection.getRepository(Post);
99+100+// save a new post
101+const post = new Post();
102+post.title = "Post";
103+await postRepository.save(post);
104+105+// update post once again
106+const updatedAt = new Date(Date.parse("2020-01-01T00:00:00+0000"));
107+post.title = "Updated Title";
108+post.updatedAt = updatedAt;
109+await postRepository.save(post);
110+111+// check if date was updated
112+const loadedPost = await postRepository.findOne();
113+expect(loadedPost!.updatedAt).to.be.eql(updatedAt);
114+})));
115+});