Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: create-column, update-column, version-column column kinds now s…
…upport user specified values (#5867) * Fixes #3271 - create-column, update-column, version-column column kinds now support user specified values * removed .only * create/update/version kind columns now considered as "changed" columns * removed .only
- Loading branch information
Showing
11 changed files
with
380 additions
and
12 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
96 changes: 96 additions & 0 deletions
96
test/core/column-kinds/create-date-column/create-date-column.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
import { expect } from "chai"; | ||
import "reflect-metadata"; | ||
import { Connection } from "../../../../src"; | ||
import { | ||
closeTestingConnections, | ||
createTestingConnections, | ||
reloadTestingDatabases, | ||
sleep | ||
} from "../../../utils/test-utils"; | ||
import { Post } from "./entity/Post"; | ||
|
||
describe("column kinds > create date column", () => { | ||
|
||
let connections: Connection[]; | ||
before(async () => connections = await createTestingConnections({ | ||
entities: [__dirname + "/entity/*{.js,.ts}"], | ||
})); | ||
beforeEach(() => reloadTestingDatabases(connections)); | ||
after(() => closeTestingConnections(connections)); | ||
|
||
it("create date column should automatically be set by a database", () => Promise.all(connections.map(async connection => { | ||
const postRepository = connection.getRepository(Post); | ||
|
||
// save a new post | ||
const post = new Post(); | ||
post.title = "Post"; | ||
await postRepository.save(post); | ||
|
||
// load and check if createdAt is a date (generated by db) | ||
const loadedPost = await postRepository.findOne(); | ||
expect(loadedPost).to.be.not.empty; | ||
expect(loadedPost!.title).to.be.eql("Post"); | ||
expect(loadedPost!.createdAt).to.be.instanceOf(Date); | ||
}))); | ||
|
||
it("create date column can also be manually set by user", () => Promise.all(connections.map(async connection => { | ||
const postRepository = connection.getRepository(Post); | ||
|
||
const createdAt = new Date(Date.parse("2020-01-01T00:00:00+0000")); | ||
|
||
// save a new post | ||
const post = new Post(); | ||
post.title = "Post"; | ||
post.createdAt = createdAt; | ||
await postRepository.save(post); | ||
|
||
// load and check if createdAt was a value set by us | ||
const loadedPost = await postRepository.findOne(); | ||
expect(loadedPost).to.be.not.empty; | ||
expect(loadedPost!.title).to.be.eql("Post"); | ||
expect(loadedPost!.createdAt).to.be.eql(createdAt); | ||
|
||
}))); | ||
|
||
it("create date column should not be updated automatically on every change", () => Promise.all(connections.map(async connection => { | ||
const postRepository = connection.getRepository(Post); | ||
|
||
// save a new post | ||
const post = new Post(); | ||
post.title = "Post"; | ||
await postRepository.save(post); | ||
|
||
// load to get created date we had after first save | ||
const loadedPostBeforeUpdate = await postRepository.findOne(); | ||
|
||
// wait a second | ||
await sleep(1000); | ||
|
||
// create post once again | ||
post.title = "Updated Title"; | ||
await postRepository.save(post); | ||
|
||
// check if date was created | ||
const loadedPostAfterUpdate = await postRepository.findOne(); | ||
expect(loadedPostAfterUpdate!.createdAt.toString()).to.be.eql(loadedPostBeforeUpdate!.createdAt.toString()); | ||
}))); | ||
|
||
it("create date column should set a custom date when specified", () => Promise.all(connections.map(async connection => { | ||
const postRepository = connection.getRepository(Post); | ||
|
||
// save a new post | ||
const post = new Post(); | ||
post.title = "Post"; | ||
await postRepository.save(post); | ||
|
||
// create post once again | ||
const createdAt = new Date(Date.parse("2020-01-01T00:00:00+0000")); | ||
post.title = "Updated Title"; | ||
post.createdAt = createdAt; | ||
await postRepository.save(post); | ||
|
||
// check if date was created | ||
const loadedPost = await postRepository.findOne(); | ||
expect(loadedPost!.createdAt).to.be.eql(createdAt); | ||
}))); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn } from "../../../../../src"; | ||
|
||
@Entity() | ||
export class Post { | ||
|
||
@PrimaryGeneratedColumn() | ||
id: number; | ||
|
||
@Column() | ||
title: string; | ||
|
||
@CreateDateColumn() | ||
createdAt: Date; | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
import { Column, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from "../../../../../src"; | ||
|
||
@Entity() | ||
export class Post { | ||
|
||
@PrimaryGeneratedColumn() | ||
id: number; | ||
|
||
@Column() | ||
title: string; | ||
|
||
@UpdateDateColumn() | ||
updatedAt: Date; | ||
|
||
} |
115 changes: 115 additions & 0 deletions
115
test/core/column-kinds/update-date-column/update-date-column.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
import { expect } from "chai"; | ||
import "reflect-metadata"; | ||
import { Connection } from "../../../../src"; | ||
import { | ||
closeTestingConnections, | ||
createTestingConnections, | ||
reloadTestingDatabases, | ||
sleep | ||
} from "../../../utils/test-utils"; | ||
import { Post } from "./entity/Post"; | ||
|
||
describe("column kinds > update date column", () => { | ||
|
||
let connections: Connection[]; | ||
before(async () => connections = await createTestingConnections({ | ||
entities: [__dirname + "/entity/*{.js,.ts}"], | ||
})); | ||
beforeEach(() => reloadTestingDatabases(connections)); | ||
after(() => closeTestingConnections(connections)); | ||
|
||
it("update date column should automatically be set by a database", () => Promise.all(connections.map(async connection => { | ||
const postRepository = connection.getRepository(Post); | ||
|
||
// save a new post | ||
const post = new Post(); | ||
post.title = "Post"; | ||
await postRepository.save(post); | ||
|
||
// load and check if updatedAt is a date (generated by db) | ||
const loadedPost = await postRepository.findOne(); | ||
expect(loadedPost).to.be.not.empty; | ||
expect(loadedPost!.title).to.be.eql("Post"); | ||
expect(loadedPost!.updatedAt).to.be.instanceOf(Date); | ||
}))); | ||
|
||
it("update column should not update if no changes were detected", () => Promise.all(connections.map(async connection => { | ||
const postRepository = connection.getRepository(Post); | ||
|
||
// save a new post | ||
const post = new Post(); | ||
post.title = "Post"; | ||
await postRepository.save(post); | ||
|
||
// update post once again | ||
const loadedPost1 = await postRepository.findOneOrFail(); | ||
await postRepository.save(loadedPost1); | ||
|
||
// load and check if version was a value set by us | ||
const loadedPost2 = await postRepository.findOne(); | ||
|
||
// make sure version is the same | ||
expect(loadedPost2!.title).to.be.eql("Post"); | ||
expect(loadedPost2!.updatedAt).to.be.eql(loadedPost1.updatedAt); | ||
}))); | ||
|
||
it("update date column can also be manually set by user", () => Promise.all(connections.map(async connection => { | ||
const postRepository = connection.getRepository(Post); | ||
|
||
const updatedAt = new Date(Date.parse("2020-01-01T00:00:00+0000")); | ||
|
||
// save a new post | ||
const post = new Post(); | ||
post.title = "Post"; | ||
post.updatedAt = updatedAt; | ||
await postRepository.save(post); | ||
|
||
// load and check if updatedAt was a value set by us | ||
const loadedPost = await postRepository.findOne(); | ||
expect(loadedPost).to.be.not.empty; | ||
expect(loadedPost!.title).to.be.eql("Post"); | ||
expect(loadedPost!.updatedAt).to.be.eql(updatedAt); | ||
}))); | ||
|
||
it("update date column should be updated automatically on every change", () => Promise.all(connections.map(async connection => { | ||
const postRepository = connection.getRepository(Post); | ||
|
||
// save a new post | ||
const post = new Post(); | ||
post.title = "Post"; | ||
await postRepository.save(post); | ||
|
||
// load to get updated date we had after first save | ||
const loadedPostBeforeUpdate = await postRepository.findOne(); | ||
|
||
// wait a second | ||
await sleep(1000); | ||
|
||
// update post once again | ||
post.title = "Updated Title"; | ||
await postRepository.save(post); | ||
|
||
// check if date was updated | ||
const loadedPostAfterUpdate = await postRepository.findOne(); | ||
expect(loadedPostAfterUpdate!.updatedAt.toString()).to.be.not.eql(loadedPostBeforeUpdate!.updatedAt.toString()); | ||
}))); | ||
|
||
it("update date column should set a custom date when specified", () => Promise.all(connections.map(async connection => { | ||
const postRepository = connection.getRepository(Post); | ||
|
||
// save a new post | ||
const post = new Post(); | ||
post.title = "Post"; | ||
await postRepository.save(post); | ||
|
||
// update post once again | ||
const updatedAt = new Date(Date.parse("2020-01-01T00:00:00+0000")); | ||
post.title = "Updated Title"; | ||
post.updatedAt = updatedAt; | ||
await postRepository.save(post); | ||
|
||
// check if date was updated | ||
const loadedPost = await postRepository.findOne(); | ||
expect(loadedPost!.updatedAt).to.be.eql(updatedAt); | ||
}))); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
import { Column, Entity, PrimaryGeneratedColumn, VersionColumn } from "../../../../../src"; | ||
|
||
@Entity() | ||
export class Post { | ||
|
||
@PrimaryGeneratedColumn() | ||
id: number; | ||
|
||
@Column() | ||
title: string; | ||
|
||
@VersionColumn() | ||
version: number; | ||
|
||
} |
Oops, something went wrong.