mirror of
https://git.joinsharkey.org/Sharkey/Sharkey.git
synced 2024-11-23 01:23:08 +02:00
テストがうごかないのを修正 (#7566)
* startServer * typeorm 0.2.32 * Fix: chartのテストがテストの並び順によっては正しく初期化されない * initTestDb
This commit is contained in:
parent
334ca01092
commit
c071467b6a
11 changed files with 91 additions and 75 deletions
|
@ -2,6 +2,6 @@
|
||||||
"extension": ["ts","js","cjs","mjs"],
|
"extension": ["ts","js","cjs","mjs"],
|
||||||
"require": ["ts-node/register", "tsconfig-paths/register"],
|
"require": ["ts-node/register", "tsconfig-paths/register"],
|
||||||
"slow": 1000,
|
"slow": 1000,
|
||||||
"timeout": 30000,
|
"timeout": 35000,
|
||||||
"exit": true
|
"exit": true
|
||||||
}
|
}
|
||||||
|
|
|
@ -233,7 +233,7 @@
|
||||||
"tslint": "6.1.3",
|
"tslint": "6.1.3",
|
||||||
"tslint-sonarts": "1.9.0",
|
"tslint-sonarts": "1.9.0",
|
||||||
"twemoji-parser": "13.1.0",
|
"twemoji-parser": "13.1.0",
|
||||||
"typeorm": "0.2.34",
|
"typeorm": "0.2.32",
|
||||||
"typescript": "4.3.2",
|
"typescript": "4.3.2",
|
||||||
"ulid": "2.3.0",
|
"ulid": "2.3.0",
|
||||||
"uuid": "8.3.2",
|
"uuid": "8.3.2",
|
||||||
|
|
|
@ -12,12 +12,14 @@ process.env.NODE_ENV = 'test';
|
||||||
|
|
||||||
import * as assert from 'assert';
|
import * as assert from 'assert';
|
||||||
import * as childProcess from 'child_process';
|
import * as childProcess from 'child_process';
|
||||||
import { async, signup, request, post, launchServer, shutdownServer } from './utils';
|
import { async, signup, request, post, startServer, shutdownServer } from './utils';
|
||||||
|
|
||||||
describe('API visibility', () => {
|
describe('API visibility', () => {
|
||||||
let p: childProcess.ChildProcess;
|
let p: childProcess.ChildProcess;
|
||||||
|
|
||||||
before(launchServer(g => p = g));
|
before(async () => {
|
||||||
|
p = await startServer();
|
||||||
|
});
|
||||||
|
|
||||||
after(async () => {
|
after(async () => {
|
||||||
await shutdownServer(p);
|
await shutdownServer(p);
|
||||||
|
|
|
@ -12,61 +12,28 @@ process.env.NODE_ENV = 'test';
|
||||||
|
|
||||||
import * as assert from 'assert';
|
import * as assert from 'assert';
|
||||||
import * as lolex from '@sinonjs/fake-timers';
|
import * as lolex from '@sinonjs/fake-timers';
|
||||||
import { async } from './utils';
|
import { async, initTestDb } from './utils';
|
||||||
import TestChart from '../src/services/chart/charts/classes/test';
|
import TestChart from '../src/services/chart/charts/classes/test';
|
||||||
import TestGroupedChart from '../src/services/chart/charts/classes/test-grouped';
|
import TestGroupedChart from '../src/services/chart/charts/classes/test-grouped';
|
||||||
import TestUniqueChart from '../src/services/chart/charts/classes/test-unique';
|
import TestUniqueChart from '../src/services/chart/charts/classes/test-unique';
|
||||||
import * as _TestChart from '../src/services/chart/charts/schemas/test';
|
import * as _TestChart from '../src/services/chart/charts/schemas/test';
|
||||||
import * as _TestGroupedChart from '../src/services/chart/charts/schemas/test-grouped';
|
import * as _TestGroupedChart from '../src/services/chart/charts/schemas/test-grouped';
|
||||||
import * as _TestUniqueChart from '../src/services/chart/charts/schemas/test-unique';
|
import * as _TestUniqueChart from '../src/services/chart/charts/schemas/test-unique';
|
||||||
import { Connection, getConnection, createConnection } from 'typeorm';
|
|
||||||
import config from '../src/config';
|
|
||||||
import Chart from '../src/services/chart/core';
|
import Chart from '../src/services/chart/core';
|
||||||
import { initDb } from '../src/db/postgre';
|
|
||||||
|
|
||||||
function initChartDb() {
|
|
||||||
try {
|
|
||||||
const conn = getConnection();
|
|
||||||
return Promise.resolve(conn);
|
|
||||||
} catch (e) {}
|
|
||||||
|
|
||||||
return createConnection({
|
|
||||||
type: 'postgres',
|
|
||||||
host: config.db.host,
|
|
||||||
port: config.db.port,
|
|
||||||
username: config.db.user,
|
|
||||||
password: config.db.pass,
|
|
||||||
database: config.db.db,
|
|
||||||
synchronize: true,
|
|
||||||
dropSchema: true,
|
|
||||||
entities: [
|
|
||||||
Chart.schemaToEntity(_TestChart.name, _TestChart.schema),
|
|
||||||
Chart.schemaToEntity(_TestGroupedChart.name, _TestGroupedChart.schema),
|
|
||||||
Chart.schemaToEntity(_TestUniqueChart.name, _TestUniqueChart.schema)
|
|
||||||
]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
describe('Chart', () => {
|
describe('Chart', () => {
|
||||||
let testChart: TestChart;
|
let testChart: TestChart;
|
||||||
let testGroupedChart: TestGroupedChart;
|
let testGroupedChart: TestGroupedChart;
|
||||||
let testUniqueChart: TestUniqueChart;
|
let testUniqueChart: TestUniqueChart;
|
||||||
let clock: lolex.InstalledClock;
|
let clock: lolex.Clock;
|
||||||
let connection: Connection;
|
|
||||||
|
|
||||||
before(done => {
|
beforeEach(async(async () => {
|
||||||
initChartDb().then(c => {
|
await initTestDb(false, [
|
||||||
connection = c;
|
Chart.schemaToEntity(_TestChart.name, _TestChart.schema),
|
||||||
done();
|
Chart.schemaToEntity(_TestGroupedChart.name, _TestGroupedChart.schema),
|
||||||
});
|
Chart.schemaToEntity(_TestUniqueChart.name, _TestUniqueChart.schema)
|
||||||
});
|
]);
|
||||||
|
|
||||||
after(async(async () => {
|
|
||||||
await connection.close();
|
|
||||||
await initDb(true, undefined, true);
|
|
||||||
}));
|
|
||||||
|
|
||||||
beforeEach(done => {
|
|
||||||
testChart = new TestChart();
|
testChart = new TestChart();
|
||||||
testGroupedChart = new TestGroupedChart();
|
testGroupedChart = new TestGroupedChart();
|
||||||
testUniqueChart = new TestUniqueChart();
|
testUniqueChart = new TestUniqueChart();
|
||||||
|
@ -74,13 +41,10 @@ describe('Chart', () => {
|
||||||
clock = lolex.install({
|
clock = lolex.install({
|
||||||
now: new Date(Date.UTC(2000, 0, 1, 0, 0, 0))
|
now: new Date(Date.UTC(2000, 0, 1, 0, 0, 0))
|
||||||
});
|
});
|
||||||
done();
|
}));
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(async(async () => {
|
afterEach(async(async () => {
|
||||||
clock.uninstall();
|
clock.uninstall();
|
||||||
await connection.dropDatabase();
|
|
||||||
await connection.synchronize();
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('Can updates', async(async () => {
|
it('Can updates', async(async () => {
|
||||||
|
|
|
@ -12,7 +12,7 @@ process.env.NODE_ENV = 'test';
|
||||||
|
|
||||||
import * as assert from 'assert';
|
import * as assert from 'assert';
|
||||||
import * as childProcess from 'child_process';
|
import * as childProcess from 'child_process';
|
||||||
import { async, launchServer, signup, post, request, simpleGet, port, shutdownServer } from './utils';
|
import { async, startServer, signup, post, request, simpleGet, port, shutdownServer } from './utils';
|
||||||
import * as openapi from '@redocly/openapi-core';
|
import * as openapi from '@redocly/openapi-core';
|
||||||
|
|
||||||
// Request Accept
|
// Request Accept
|
||||||
|
@ -32,12 +32,13 @@ describe('Fetch resource', () => {
|
||||||
let alice: any;
|
let alice: any;
|
||||||
let alicesPost: any;
|
let alicesPost: any;
|
||||||
|
|
||||||
before(launchServer(g => p = g, async () => {
|
before(async () => {
|
||||||
|
p = await startServer();
|
||||||
alice = await signup({ username: 'alice' });
|
alice = await signup({ username: 'alice' });
|
||||||
alicesPost = await post(alice, {
|
alicesPost = await post(alice, {
|
||||||
text: 'test'
|
text: 'test'
|
||||||
});
|
});
|
||||||
}));
|
});
|
||||||
|
|
||||||
after(async () => {
|
after(async () => {
|
||||||
await shutdownServer(p);
|
await shutdownServer(p);
|
||||||
|
|
|
@ -12,7 +12,7 @@ process.env.NODE_ENV = 'test';
|
||||||
|
|
||||||
import * as assert from 'assert';
|
import * as assert from 'assert';
|
||||||
import * as childProcess from 'child_process';
|
import * as childProcess from 'child_process';
|
||||||
import { async, signup, request, post, react, connectStream, launchServer, shutdownServer } from './utils';
|
import { async, signup, request, post, react, connectStream, startServer, shutdownServer } from './utils';
|
||||||
|
|
||||||
describe('Mute', () => {
|
describe('Mute', () => {
|
||||||
let p: childProcess.ChildProcess;
|
let p: childProcess.ChildProcess;
|
||||||
|
@ -22,11 +22,12 @@ describe('Mute', () => {
|
||||||
let bob: any;
|
let bob: any;
|
||||||
let carol: any;
|
let carol: any;
|
||||||
|
|
||||||
before(launchServer(g => p = g, async () => {
|
before(async () => {
|
||||||
|
p = await startServer();
|
||||||
alice = await signup({ username: 'alice' });
|
alice = await signup({ username: 'alice' });
|
||||||
bob = await signup({ username: 'bob' });
|
bob = await signup({ username: 'bob' });
|
||||||
carol = await signup({ username: 'carol' });
|
carol = await signup({ username: 'carol' });
|
||||||
}));
|
});
|
||||||
|
|
||||||
after(async () => {
|
after(async () => {
|
||||||
await shutdownServer(p);
|
await shutdownServer(p);
|
||||||
|
|
10
test/note.ts
10
test/note.ts
|
@ -12,9 +12,8 @@ process.env.NODE_ENV = 'test';
|
||||||
|
|
||||||
import * as assert from 'assert';
|
import * as assert from 'assert';
|
||||||
import * as childProcess from 'child_process';
|
import * as childProcess from 'child_process';
|
||||||
import { async, signup, request, post, uploadFile, launchServer, shutdownServer } from './utils';
|
import { async, signup, request, post, uploadFile, startServer, shutdownServer, initTestDb } from './utils';
|
||||||
import { Note } from '../src/models/entities/note';
|
import { Note } from '../src/models/entities/note';
|
||||||
import { initDb } from '../src/db/postgre';
|
|
||||||
|
|
||||||
describe('Note', () => {
|
describe('Note', () => {
|
||||||
let p: childProcess.ChildProcess;
|
let p: childProcess.ChildProcess;
|
||||||
|
@ -23,12 +22,13 @@ describe('Note', () => {
|
||||||
let alice: any;
|
let alice: any;
|
||||||
let bob: any;
|
let bob: any;
|
||||||
|
|
||||||
before(launchServer(g => p = g, async () => {
|
before(async () => {
|
||||||
const connection = await initDb(true);
|
p = await startServer();
|
||||||
|
const connection = await initTestDb(true);
|
||||||
Notes = connection.getRepository(Note);
|
Notes = connection.getRepository(Note);
|
||||||
alice = await signup({ username: 'alice' });
|
alice = await signup({ username: 'alice' });
|
||||||
bob = await signup({ username: 'bob' });
|
bob = await signup({ username: 'bob' });
|
||||||
}));
|
});
|
||||||
|
|
||||||
after(async () => {
|
after(async () => {
|
||||||
await shutdownServer(p);
|
await shutdownServer(p);
|
||||||
|
|
|
@ -12,21 +12,21 @@ process.env.NODE_ENV = 'test';
|
||||||
|
|
||||||
import * as assert from 'assert';
|
import * as assert from 'assert';
|
||||||
import * as childProcess from 'child_process';
|
import * as childProcess from 'child_process';
|
||||||
import { connectStream, signup, request, post, launchServer } from './utils';
|
import { connectStream, signup, request, post, startServer, shutdownServer, initTestDb } from './utils';
|
||||||
import { Following } from '../src/models/entities/following';
|
import { Following } from '../src/models/entities/following';
|
||||||
import { initDb } from '../src/db/postgre';
|
|
||||||
|
|
||||||
describe('Streaming', () => {
|
describe('Streaming', () => {
|
||||||
let p: childProcess.ChildProcess;
|
let p: childProcess.ChildProcess;
|
||||||
let Followings: any;
|
let Followings: any;
|
||||||
|
|
||||||
beforeEach(launchServer(g => p = g, async () => {
|
beforeEach(async () => {
|
||||||
const connection = await initDb(true);
|
p = await startServer();
|
||||||
|
const connection = await initTestDb(true);
|
||||||
Followings = connection.getRepository(Following);
|
Followings = connection.getRepository(Following);
|
||||||
}));
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(async () => {
|
||||||
p.kill();
|
await shutdownServer(p);
|
||||||
});
|
});
|
||||||
|
|
||||||
const follow = async (follower: any, followee: any) => {
|
const follow = async (follower: any, followee: any) => {
|
||||||
|
|
|
@ -12,7 +12,7 @@ process.env.NODE_ENV = 'test';
|
||||||
|
|
||||||
import * as assert from 'assert';
|
import * as assert from 'assert';
|
||||||
import * as childProcess from 'child_process';
|
import * as childProcess from 'child_process';
|
||||||
import { async, signup, request, post, uploadFile, launchServer, shutdownServer } from './utils';
|
import { async, signup, request, post, uploadFile, startServer, shutdownServer } from './utils';
|
||||||
|
|
||||||
describe('users/notes', () => {
|
describe('users/notes', () => {
|
||||||
let p: childProcess.ChildProcess;
|
let p: childProcess.ChildProcess;
|
||||||
|
@ -22,7 +22,8 @@ describe('users/notes', () => {
|
||||||
let pngNote: any;
|
let pngNote: any;
|
||||||
let jpgPngNote: any;
|
let jpgPngNote: any;
|
||||||
|
|
||||||
before(launchServer(g => p = g, async () => {
|
before(async () => {
|
||||||
|
p = await startServer();
|
||||||
alice = await signup({ username: 'alice' });
|
alice = await signup({ username: 'alice' });
|
||||||
const jpg = await uploadFile(alice, __dirname + '/resources/Lenna.jpg');
|
const jpg = await uploadFile(alice, __dirname + '/resources/Lenna.jpg');
|
||||||
const png = await uploadFile(alice, __dirname + '/resources/Lenna.png');
|
const png = await uploadFile(alice, __dirname + '/resources/Lenna.png');
|
||||||
|
@ -35,7 +36,7 @@ describe('users/notes', () => {
|
||||||
jpgPngNote = await post(alice, {
|
jpgPngNote = await post(alice, {
|
||||||
fileIds: [jpg.id, png.id]
|
fileIds: [jpg.id, png.id]
|
||||||
});
|
});
|
||||||
}));
|
});
|
||||||
|
|
||||||
after(async() => {
|
after(async() => {
|
||||||
await shutdownServer(p);
|
await shutdownServer(p);
|
||||||
|
|
|
@ -6,8 +6,11 @@ import * as childProcess from 'child_process';
|
||||||
import * as http from 'http';
|
import * as http from 'http';
|
||||||
import loadConfig from '../src/config/load';
|
import loadConfig from '../src/config/load';
|
||||||
import { SIGKILL } from 'constants';
|
import { SIGKILL } from 'constants';
|
||||||
|
import { createConnection, getConnection } from 'typeorm';
|
||||||
|
import { entities } from '../src/db/postgre';
|
||||||
|
|
||||||
export const port = loadConfig().port;
|
const config = loadConfig();
|
||||||
|
export const port = config.port;
|
||||||
|
|
||||||
export const async = (fn: Function) => (done: Function) => {
|
export const async = (fn: Function) => (done: Function) => {
|
||||||
fn().then(() => {
|
fn().then(() => {
|
||||||
|
@ -147,6 +150,50 @@ export function launchServer(callbackSpawnedProcess: (p: childProcess.ChildProce
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function initTestDb(justBorrow = false, initEntities?: any[]) {
|
||||||
|
if (process.env.NODE_ENV !== 'test') throw 'NODE_ENV is not a test';
|
||||||
|
|
||||||
|
try {
|
||||||
|
const conn = await getConnection();
|
||||||
|
await conn.close();
|
||||||
|
} catch (e) {}
|
||||||
|
|
||||||
|
return await createConnection({
|
||||||
|
type: 'postgres',
|
||||||
|
host: config.db.host,
|
||||||
|
port: config.db.port,
|
||||||
|
username: config.db.user,
|
||||||
|
password: config.db.pass,
|
||||||
|
database: config.db.db,
|
||||||
|
synchronize: true && !justBorrow,
|
||||||
|
dropSchema: true && !justBorrow,
|
||||||
|
entities: initEntities || entities
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function startServer(timeout = 30 * 1000): Promise<childProcess.ChildProcess> {
|
||||||
|
return new Promise((res, rej) => {
|
||||||
|
const t = setTimeout(() => {
|
||||||
|
p.kill(SIGKILL);
|
||||||
|
rej('timeout to start');
|
||||||
|
}, timeout);
|
||||||
|
|
||||||
|
const p = childProcess.spawn('node', [__dirname + '/../index.js'], {
|
||||||
|
stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
|
||||||
|
env: { NODE_ENV: 'test', PATH: process.env.PATH }
|
||||||
|
});
|
||||||
|
|
||||||
|
p.on('error', e => rej(e));
|
||||||
|
|
||||||
|
p.on('message', message => {
|
||||||
|
if (message === 'ok') {
|
||||||
|
clearTimeout(t);
|
||||||
|
res(p);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
export function shutdownServer(p: childProcess.ChildProcess, timeout = 20 * 1000) {
|
export function shutdownServer(p: childProcess.ChildProcess, timeout = 20 * 1000) {
|
||||||
return new Promise((res, rej) => {
|
return new Promise((res, rej) => {
|
||||||
const t = setTimeout(() => {
|
const t = setTimeout(() => {
|
||||||
|
|
|
@ -10973,10 +10973,10 @@ typedarray@^0.0.6:
|
||||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
||||||
|
|
||||||
typeorm@0.2.34:
|
typeorm@0.2.32:
|
||||||
version "0.2.34"
|
version "0.2.32"
|
||||||
resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.34.tgz#637b3cec2de54ee7f423012b813a2022c0aacc8b"
|
resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.32.tgz#544dbfdfe0cd0887548d9bcbd28527ea4f4b3c9b"
|
||||||
integrity sha512-FZAeEGGdSGq7uTH3FWRQq67JjKu0mgANsSZ04j3kvDYNgy9KwBl/6RFgMVgiSgjf7Rqd7NrhC2KxVT7I80qf7w==
|
integrity sha512-LOBZKZ9As3f8KRMPCUT2H0JZbZfWfkcUnO3w/1BFAbL/X9+cADTF6bczDGGaKVENJ3P8SaKheKmBgpt5h1x+EQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@sqltools/formatter" "^1.2.2"
|
"@sqltools/formatter" "^1.2.2"
|
||||||
app-root-path "^3.0.0"
|
app-root-path "^3.0.0"
|
||||||
|
|
Loading…
Reference in a new issue