Skip to content

Commit

Permalink
Change signature for JSON validation to T|T[]
Browse files Browse the repository at this point in the history
  • Loading branch information
MichalLytek committed Sep 15, 2017
1 parent 3a55a95 commit dd0b538
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 8 deletions.
8 changes: 4 additions & 4 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ export interface TransformValdiationOptions {
* @param {ClassType<T>} classType The Class to parse and convert JSON to
* @param {string} jsonString The string containing JSON
* @param {TransformValdiationOptions} [options] Optional options object for class-validator and class-transformer
* @returns {Promise<T>} Promise of object of given class T
* @returns {Promise<T|T[]>} Promise of object of given class T or array of objects given class T
*/
export function transformAndValidate<T extends object>(classType: ClassType<T>, jsonString: string, options?: TransformValdiationOptions): Promise<T>;
export function transformAndValidate<T extends object>(classType: ClassType<T>, jsonString: string, options?: TransformValdiationOptions): Promise<T|T[]>;
/**
* Asynchronously converts array of plain objects to array of class (constructor) objects.
* Reject the promise if any of the objects in array doesn't pass validation.
Expand Down Expand Up @@ -71,9 +71,9 @@ export function transformAndValidate<T extends object>(classType: ClassType<T>,
* @param {ClassType<T>} classType The Class to parse and convert JSON to
* @param {string} jsonString The string containing JSON
* @param {TransformValdiationOptions} [options] Optional options object for class-validator and class-transformer
* @returns {T} Object of given class T
* @returns {T|T[]} Object of given class T or array of objects given class T
*/
export function transformAndValidateSync<T extends object>(classType: ClassType<T>, jsonString: string, options?: TransformValdiationOptions): T;
export function transformAndValidateSync<T extends object>(classType: ClassType<T>, jsonString: string, options?: TransformValdiationOptions): T|T[];
/**
* Synchronously converts array of plain objects to array of class (constructor) objects.
* Throws error if any of the objects in array doesn't pass validation.
Expand Down
32 changes: 28 additions & 4 deletions src/tests/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,28 @@ describe("transformAndValidate()", () => {
expect(transformedUser.greet()).to.equals("Greeting");
});

it("should successfully transform and validate User JSON", async () => {
it("should successfully transform and validate JSON with User object", async () => {
const userJson: string = JSON.stringify(user);

const transformedUser: User = await transformAndValidate(User, userJson);
const transformedUser = await transformAndValidate(User, userJson) as User;

expect(transformedUser).to.exist;
expect(transformedUser.email).to.equals("test@test.com");
expect(transformedUser.greet()).to.equals("Greeting");
});

it("should successfully transform and validate JSON with array of Users", async () => {
const userJson: string = JSON.stringify([user]);

const transformedUsers = await transformAndValidate(User, userJson) as User[];

expect(transformedUsers).to.exist;
expect(transformedUsers).to.be.an.instanceof(Array);
expect(transformedUsers).to.have.lengthOf(1);
expect(transformedUsers[0].email).to.equals("test@test.com");
expect(transformedUsers[0].greet()).to.equals("Greeting");
});

it("should successfully transform and validate array of User objects", async () => {
const users = [
user,
Expand Down Expand Up @@ -161,16 +173,28 @@ describe("transformAndValidateSync()", () => {
expect(transformedUser.greet()).to.equals("Greeting");
});

it("should successfully transform and validate User JSON", async () => {
it("should successfully transform and validate JSON with User object", async () => {
const userJson: string = JSON.stringify(user);

const transformedUser: User = transformAndValidateSync(User, userJson);
const transformedUser = transformAndValidateSync(User, userJson) as User;

expect(transformedUser).to.exist;
expect(transformedUser.email).to.equals("test@test.com");
expect(transformedUser.greet()).to.equals("Greeting");
});

it("should successfully transform and validate JSON with array of Users", async () => {
const userJson: string = JSON.stringify([user]);

const transformedUsers = transformAndValidateSync(User, userJson) as User[];

expect(transformedUsers).to.exist;
expect(transformedUsers).to.be.an.instanceof(Array);
expect(transformedUsers).to.have.lengthOf(1);
expect(transformedUsers[0].email).to.equals("test@test.com");
expect(transformedUsers[0].greet()).to.equals("Greeting");
});

it("should successfully transform and validate array of User objects", async () => {
const users = [
user,
Expand Down

0 comments on commit dd0b538

Please sign in to comment.