From 9434426e42e60f5ddbd4c5c658c94c60a2d7e04d Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 17 Jun 2017 17:11:06 +0200 Subject: [PATCH] added compilation of generated model in integration tests --- src/drivers/MssqlDriver.ts | 4 +-- test/integration/integration.test.ts | 47 +++++++++++++++++++++++----- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index c185a0a..498b0b1 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -301,7 +301,7 @@ order by ownerRelation.relatedColumn = relatedColumn.name.toLowerCase() ownerRelation.relatedTable = relationTmp.referencedTable ownerRelation.ownerTable = relationTmp.ownerTable - ownerRelation.ownerColumn = ownerEntity.EntityName.toLowerCase() + ownerRelation.ownerColumn = ownerEntity.EntityName.toLowerCase()+(isOneToMany ? 's':'') ownerRelation.relationType = isOneToMany ? "ManyToOne" : "OneToOne" ownerColumn.relations.push(ownerRelation) if (isOneToMany) { @@ -329,7 +329,7 @@ order by referencedRelation.relatedColumn = ownerColumn.name referencedRelation.relatedTable = relationTmp.ownerTable referencedRelation.ownerTable = relationTmp.referencedTable - referencedRelation.ownerColumn = relatedColumn.name.toLowerCase() + referencedRelation.ownerColumn = relatedColumn.name.toLowerCase() referencedRelation.relationType = "OneToOne" referencedEntity.Columns.push(col) diff --git a/test/integration/integration.test.ts b/test/integration/integration.test.ts index 2427477..cc2a5eb 100644 --- a/test/integration/integration.test.ts +++ b/test/integration/integration.test.ts @@ -12,20 +12,23 @@ import * as Sinon from 'sinon' import { EntityFileToJson } from "../utils/EntityFileToJson"; var chai = require('chai'); var chaiSubset = require('chai-subset'); +import * as ts from "typescript"; + chai.use(chaiSubset); + describe("integration tests", async function () { let examplesPath = path.resolve(process.cwd(), 'test/integration/examples') let files = fs.readdirSync(examplesPath) let dbDrivers: DriverType[] = [] - if (process.env.MSSQL_Skip=='0') dbDrivers.push('mssql') + if (process.env.MSSQL_Skip == '0') dbDrivers.push('mssql') for (let folder of files) { describe(folder, async function () { - + this.slow(5000) for (let dbDriver of dbDrivers) { it(dbDriver, async function () { @@ -74,17 +77,47 @@ describe("integration tests", async function () { let filesOrg = fs.readdirSync(filesOrgPath).filter(function (this, val, ind, arr) { return val.toString().endsWith('.ts') }) let filesGen = fs.readdirSync(filesGenPath).filter(function (this, val, ind, arr) { return val.toString().endsWith('.ts') }) - expect(filesOrg).to.be.deep.equal(filesGen) + expect(filesOrg,'Errors detected in model comparision').to.be.deep.equal(filesGen) for (let file of filesOrg) { let entftj = new EntityFileToJson(); - let jsonEntityOrg= entftj.convert(fs.readFileSync(path.resolve(filesOrgPath, file))) - let jsonEntityGen= entftj.convert(fs.readFileSync(path.resolve(filesGenPath, file))) - expect(jsonEntityGen,`Error in file ${file}`).to.containSubset(jsonEntityOrg) + let jsonEntityOrg = entftj.convert(fs.readFileSync(path.resolve(filesOrgPath, file))) + let jsonEntityGen = entftj.convert(fs.readFileSync(path.resolve(filesGenPath, file))) + expect(jsonEntityGen, `Error in file ${file}`).to.containSubset(jsonEntityOrg) } + const currentDirectoryFiles = fs.readdirSync(filesGenPath). + filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => { + return path.resolve(filesGenPath, v) + }) + let compileErrors = compileTsFiles(currentDirectoryFiles, { + + experimentalDecorators: true, + sourceMap: false, + emitDecoratorMetadata: true, + target: ts.ScriptTarget.ES2016, + moduleResolution: ts.ModuleResolutionKind.NodeJs, + module: ts.ModuleKind.CommonJS + }); + expect(compileErrors, 'Errors detected while compiling generated model').to.be.false; }); } }) } -}) \ No newline at end of file +}) + +function compileTsFiles(fileNames: string[], options: ts.CompilerOptions): boolean { + let program = ts.createProgram(fileNames, options); + let emitResult = program.emit(); + let compileErrors = false; + let allDiagnostics = ts.getPreEmitDiagnostics(program).concat(emitResult.diagnostics); + + allDiagnostics.forEach(diagnostic => { + let { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start); + let message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n'); + console.log(`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`); + compileErrors = true; + }); + + return compileErrors; +} \ No newline at end of file