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+

});