test: Make oclif commands testable (#3571)

*  Add `@oclif/core`

* 📦 Update `package-lock.json`

* 📘 Export `Logger` for use as type

*  Create `BaseCommand`

* 🐛 Prevent DB re-init

* ♻️ Refactor `reset` command

* 🧪 Fix `reset` test

* 👕 Add lint exception

Co-authored-by: Jan Oberhauser <janober@users.noreply.github.com>
This commit is contained in:
Iván Ovejero
2022-06-26 06:03:46 +02:00
committed by GitHub
parent 848fcfde5d
commit 7879239e03
7 changed files with 396 additions and 91 deletions

View File

@@ -0,0 +1,57 @@
import { Command } from '@oclif/core';
import { LoggerProxy } from 'n8n-workflow';
import { getLogger, Logger } from '../src/Logger';
import { User } from '../src/databases/entities/User';
import { Db } from '../src';
export abstract class BaseCommand extends Command {
logger: Logger;
/**
* Lifecycle methods
*/
async init(): Promise<void> {
this.logger = getLogger();
LoggerProxy.init(this.logger);
await Db.init();
}
async finally(): Promise<void> {
if (process.env.NODE_ENV === 'test') return;
this.exit();
}
/**
* User Management utils
*/
defaultUserProps = {
firstName: null,
lastName: null,
email: null,
password: null,
resetPasswordToken: null,
};
async getInstanceOwner(): Promise<User> {
const globalRole = await Db.collections.Role.findOneOrFail({
name: 'owner',
scope: 'global',
});
const owner = await Db.collections.User.findOne({ globalRole });
if (owner) return owner;
const user = new User();
Object.assign(user, { ...this.defaultUserProps, globalRole });
await Db.collections.User.save(user);
return Db.collections.User.findOneOrFail({ globalRole });
}
}