Skip to content

Commit

Permalink
fix(typeorm): fix datasource case
Browse files Browse the repository at this point in the history
Closes: #339
  • Loading branch information
Romakita committed Dec 14, 2023
1 parent 57da831 commit cd402dd
Show file tree
Hide file tree
Showing 12 changed files with 292 additions and 236 deletions.
9 changes: 5 additions & 4 deletions packages/cli-plugin-mongoose/jest.config.js
Expand Up @@ -3,12 +3,13 @@

module.exports = {
...require("@tsed/jest-config"),
roots: ["<rootDir>/src", "<rootDir>/test"],
coverageThreshold: {
global: {
statements: 0,
branches: 0,
functions: 0,
lines: 0
statements: 63.9,
branches: 22.72,
functions: 33.33,
lines: 63.9
}
}
};
1 change: 1 addition & 0 deletions packages/cli-plugin-typegraphql/jest.config.js
Expand Up @@ -3,6 +3,7 @@

module.exports = {
...require("@tsed/jest-config"),
roots: ["<rootDir>/src", "<rootDir>/test"],
coverageThreshold: {
global: {
statements: 0,
Expand Down
@@ -1,6 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`Init TypeGraphQL project should generate a project with typegraphql 1`] = `
exports[`Init TypeGraphQL project should generate a project with typegraphql 2`] = `
"import {join} from \\"path\\";
import {Configuration, Inject} from \\"@tsed/di\\";
import {PlatformApplication} from \\"@tsed/common\\";
Expand All @@ -18,6 +18,9 @@ import * as rest from \\"./controllers/rest/index\\";
httpPort: process.env.PORT || 8083,
httpsPort: false, // CHANGE
disableComponentsScan: true,
ajv: {
returnsCoercedValues: true
},
mount: {
\\"/rest\\": [
...Object.values(rest)
Expand Down Expand Up @@ -51,7 +54,7 @@ export class Server {
"
`;

exports[`Init TypeGraphQL project should generate a project with typegraphql 2`] = `
exports[`Init TypeGraphQL project should generate a project with typegraphql 3`] = `
"import {readFileSync} from \\"fs\\";
import {envs} from \\"./envs/index\\";
import loggerConfig from \\"./logger/index\\";
Expand Down
82 changes: 40 additions & 42 deletions packages/cli-plugin-typegraphql/test/init/init.integration.spec.ts
@@ -1,10 +1,6 @@
import {CliService, ProjectPackageJson} from "@tsed/cli-core";
import {CliPlatformTest, FakeCliFs} from "@tsed/cli-testing";
import {InitCmd, TEMPLATE_DIR} from "@tsed/cli";
import "@tsed/cli-plugin-typegraphql";
import filedirname from "filedirname";

const [, dir] = filedirname();

describe("Init TypeGraphQL project", () => {
beforeEach(() =>
Expand All @@ -27,52 +23,54 @@ describe("Init TypeGraphQL project", () => {

await CliPlatformTest.exec("init", {
platform: "express",
convention: "default",
convention: "conv_default",
rootDir: "./project-data",
projectName: "project-data",
tsedVersion: "5.58.1",
graphql: true
});

expect(FakeCliFs.getKeys()).toEqual([
"./project-name",
"project-name",
"project-name/.barrelsby.json",
"project-name/.dockerignore",
"project-name/.gitignore",
"project-name/Dockerfile",
"project-name/README.md",
"project-name/docker-compose.yml",
"project-name/package.json",
"project-name/processes.config.js",
"project-name/src",
"project-name/src/Server.ts",
"project-name/src/config",
"project-name/src/config/envs",
"project-name/src/config/envs/index.ts",
"project-name/src/config/index.ts",
"project-name/src/config/logger",
"project-name/src/config/logger/index.ts",
"project-name/src/controllers/rest",
"project-name/src/controllers/rest/HelloWorldController.ts",
"project-name/src/datasources",
"project-name/src/datasources/MyDataSource.ts",
"project-name/src/datasources/index.ts",
"project-name/src/index.ts",
"project-name/src/resolvers",
"project-name/src/resolvers/index.ts",
"project-name/src/resolvers/recipes",
"project-name/src/resolvers/recipes/Recipe.ts",
"project-name/src/resolvers/recipes/RecipeNotFoundError.ts",
"project-name/src/resolvers/recipes/RecipeResolver.ts",
"project-name/src/services",
"project-name/src/services/RecipeService.ts",
"project-name/tsconfig.compile.json",
"project-name/tsconfig.json"
]);
expect(FakeCliFs.getKeys()).toMatchInlineSnapshot(`
Array [
"./project-name",
"project-name",
"project-name/.barrelsby.json",
"project-name/.dockerignore",
"project-name/.gitignore",
"project-name/Dockerfile",
"project-name/README.md",
"project-name/docker-compose.yml",
"project-name/package.json",
"project-name/processes.config.js",
"project-name/src",
"project-name/src/Server.ts",
"project-name/src/config",
"project-name/src/config/envs",
"project-name/src/config/envs/index.ts",
"project-name/src/config/index.ts",
"project-name/src/config/logger",
"project-name/src/config/logger/index.ts",
"project-name/src/controllers/rest",
"project-name/src/controllers/rest/HelloWorldController.ts",
"project-name/src/datasources",
"project-name/src/datasources/MyDataSource.ts",
"project-name/src/datasources/index.ts",
"project-name/src/index.ts",
"project-name/src/resolvers",
"project-name/src/resolvers/index.ts",
"project-name/src/resolvers/recipes",
"project-name/src/resolvers/recipes/Recipe.ts",
"project-name/src/resolvers/recipes/RecipeNotFoundError.ts",
"project-name/src/resolvers/recipes/RecipeResolver.ts",
"project-name/src/services",
"project-name/src/services/RecipeService.ts",
"project-name/tsconfig.compile.json",
"project-name/tsconfig.json",
]
`);

const content = FakeCliFs.entries.get("project-name/src/Server.ts")!;
expect(content).toMatchSnapshot()
expect(content).toMatchSnapshot();
expect(content).toContain("import \"@tsed/typegraphql\"");
expect(content).toContain("import \"./datasources/index\";");
expect(content).toContain("import \"./resolvers/index\";");
Expand Down
9 changes: 5 additions & 4 deletions packages/cli-plugin-typeorm/jest.config.js
Expand Up @@ -3,12 +3,13 @@

module.exports = {
...require("@tsed/jest-config"),
roots: ["<rootDir>/src", "<rootDir>/test"],
coverageThreshold: {
global: {
statements: 0,
branches: 0,
functions: 0,
lines: 0
statements: 86.25,
branches: 61.11,
functions: 92.3,
lines: 86.25
}
}
};
2 changes: 1 addition & 1 deletion packages/cli-plugin-typeorm/package.json
Expand Up @@ -34,4 +34,4 @@
"jest": "29.5.0"
},
"peerDependencies": {}
}
}
3 changes: 1 addition & 2 deletions packages/cli-plugin-typeorm/src/hooks/TypeORMGenerateHook.ts
Expand Up @@ -91,8 +91,7 @@ export class TypeORMGenerateHook {
});

const database = typeormDataSource.split(":").at(-1)!;

const symbolName = ctx.symbolName.replace("Datasource", "DataSource");
const symbolName = ctx.symbolName;

return [
{
Expand Down
@@ -0,0 +1,51 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`Generate DataSource should generate the template with the right options (simple path) 1`] = `
"import {registerProvider} from \\"@tsed/di\\";
import {DataSource} from \\"typeorm\\";
import {Logger} from \\"@tsed/logger\\";
export const TEST_DATASOURCE = Symbol.for(\\"TestDatasource\\");
export const TestDatasource = new DataSource({
type: \\"mysql\\",
entities: [],
host: \\"localhost\\",
port: 3306,
username: \\"test\\",
password: \\"test\\",
database: \\"test\\"
});
registerProvider<DataSource>({
provide: TEST_DATASOURCE,
type: \\"typeorm:datasource\\",
deps: [Logger],
async useAsyncFactory(logger: Logger) {
await TestDatasource.initialize();
logger.info(\\"Connected with typeorm to database: Test\\");
return TestDatasource;
},
hooks: {
$onDestroy(dataSource) {
return dataSource.isInitialized && dataSource.close();
}
}
});
"
`;
exports[`Generate DataSource should generate the template with the right options (simple path) 2`] = `
"services:
test:
image: mysql:8.0.28-oracle
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: admin
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_DATABASE: test
"
`;
@@ -1,23 +1,7 @@
import {GenerateCmd, TEMPLATE_DIR} from "@tsed/cli";
import {CliService, ProjectPackageJson} from "@tsed/cli-core";
import {CliPlatformTest, FakeCliFs} from "@tsed/cli-testing";
import {dirname} from "path";
import "../../../src";
import {ensureDirSync, existsSync, readFileSync, writeFileSync} from "fs-extra";
import filedirname from "filedirname";
const [, dir] = filedirname();

function readFile(file: string, content: string, rewrite = true) {
const path = `${dir}/${file}`

ensureDirSync(dirname(path))

if (!existsSync(path) || rewrite) {
writeFileSync(path, content, {encoding: "utf8"});
}

return readFileSync(path, {encoding: "utf8"});
}

describe("Generate DataSource", () => {
beforeEach(() =>
Expand Down Expand Up @@ -53,9 +37,9 @@ describe("Generate DataSource", () => {

const datasource = FakeCliFs.entries.get("project-name/src/datasources/TestDatasource.ts");

expect(datasource).toEqual(readFile("data/TestDatasource.ts.txt", datasource!, false));
expect(datasource).toMatchSnapshot();

const dockerCompose = FakeCliFs.entries.get("project-name/docker-compose.yml");
expect(dockerCompose).toEqual(readFile("data/docker-compose.yml.txt", dockerCompose!, false));
expect(dockerCompose).toMatchSnapshot();
});
});
@@ -1,6 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`TypeORM: Init cmd should generate a project with the right options 1`] = `
exports[`TypeORM: Init cmd should generate a project with the right options 2`] = `
"import {join} from \\"path\\";
import {Configuration, Inject} from \\"@tsed/di\\";
import {PlatformApplication} from \\"@tsed/common\\";
Expand All @@ -15,6 +15,9 @@ import * as rest from \\"./controllers/rest/index\\";
httpPort: process.env.PORT || 8083,
httpsPort: false, // CHANGE
disableComponentsScan: true,
ajv: {
returnsCoercedValues: true
},
mount: {
\\"/rest\\": [
...Object.values(rest)
Expand Down Expand Up @@ -47,3 +50,57 @@ export class Server {
}
"
`;

exports[`TypeORM: Init cmd should generate a project with the right options 3`] = `
"import {registerProvider} from \\"@tsed/di\\";
import {DataSource} from \\"typeorm\\";
import {Logger} from \\"@tsed/logger\\";
export const MYSQL_DATASOURCE = Symbol.for(\\"MysqlDatasource\\");
export const MysqlDatasource = new DataSource({
type: \\"mysql\\",
entities: [],
host: \\"localhost\\",
port: 3306,
username: \\"test\\",
password: \\"test\\",
database: \\"test\\"
});
registerProvider<DataSource>({
provide: MYSQL_DATASOURCE,
type: \\"typeorm:datasource\\",
deps: [Logger],
async useAsyncFactory(logger: Logger) {
await MysqlDatasource.initialize();
logger.info(\\"Connected with typeorm to database: Mysql\\");
return MysqlDatasource;
},
hooks: {
$onDestroy(dataSource) {
return dataSource.isInitialized && dataSource.close();
}
}
});
"
`;
exports[`TypeORM: Init cmd should generate a project with the right options 4`] = `
"import { PlatformTest } from \\"@tsed/common\\";
import { MysqlDatasource } from \\"./MysqlDatasource\\";
describe(\\"MysqlDatasource\\", () => {
beforeEach(PlatformTest.create);
afterEach(PlatformTest.reset);
it(\\"should do something\\", () => {
const instance = PlatformTest.get<MysqlDatasource>(MysqlDatasource);
// const instance = PlatformTest.invoke<MysqlDatasource>(MysqlDatasource); // get fresh instance
expect(instance).toBeInstanceOf(MysqlDatasource);
});
});
"
`;

This file was deleted.

0 comments on commit cd402dd

Please sign in to comment.