Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore:system user and events created by userid migrations #5612

Merged
merged 12 commits into from
Dec 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/lib/db/account-store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ export class AccountStore implements IAccountStore {
activeAccounts(): any {
return this.db(TABLE).where({
deleted_at: null,
is_system: false,
});
}

Expand Down
1 change: 1 addition & 0 deletions src/lib/db/user-store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ class UserStore implements IUserStore {
return this.db(TABLE).where({
deleted_at: null,
is_service: false,
is_system: false,
});
}

Expand Down
24 changes: 24 additions & 0 deletions src/migrations/20231222071533-unleash-system-user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
'use strict';

exports.up = function (db, callback) {
db.runSql(
`
ALTER TABLE users ADD COLUMN IF NOT EXISTS is_system BOOLEAN NOT NULL DEFAULT FALSE;
INSERT INTO users
(id, name, username, email, created_by_user_id, is_system)
VALUES
(-1337, 'Unleash System', 'unleash_system_user', '[email protected]', -1337, true);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even though I like -1337, I'm wondering if we should just use -1 instead.

`,
callback,
);
};

exports.down = function (db, callback) {
db.runSql(
`
ALTER TABLE users DROP COLUMN IF EXISTS is_system;
DELETE FROM users WHERE id = -1337;
`,
callback,
);
};
76 changes: 76 additions & 0 deletions src/test/e2e/system-user-migration.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import { getDbConfig } from './helpers/database-config';
import { createTestConfig } from '../config/test-config';
import { getInstance } from 'db-migrate';
import { log } from 'db-migrate-shared';
import { Client } from 'pg';
import { IDBOption } from 'lib/types';

log.setLogLevel('error');

async function initSchema(db: IDBOption): Promise<void> {
const client = new Client(db);
await client.connect();
await client.query(`DROP SCHEMA IF EXISTS ${db.schema} CASCADE`);
await client.query(`CREATE SCHEMA IF NOT EXISTS ${db.schema}`);
await client.end();
}

test('System user creation migration correctly sets is_system', async () => {
jest.setTimeout(15000);
const config = createTestConfig({
db: {
...getDbConfig(),
pool: { min: 1, max: 4 },
schema: 'system_user_migration_test',
ssl: false,
},
});

await initSchema(config.db);

const e2e = {
...config.db,
connectionTimeoutMillis: 2000,
};

// disable Intellij/WebStorm from setting verbose CLI argument to db-migrator
process.argv = process.argv.filter((it) => !it.includes('--verbose'));
const dbm = getInstance(true, {
cwd: `${__dirname}/../../`, // relative to src/test/e2e
config: { e2e },
env: 'e2e',
});

// Run all migrations up to, and including, this one, the last one before the system user migration
await dbm.up('20231221143955-feedback-table.js');

// Set up the test data
const client = new Client(config.db);
await client.connect();

await client.query(`
INSERT INTO "system_user_migration_test"."users"
(name, username, email, created_by_user_id)
VALUES
('Test Person', 'testperson', '[email protected]', 1);
`);

// Run the migration
await dbm.up('20231222071533-unleash-system-user.js');

// Check the results
const { rows: userResults } = await client.query(`
SELECT * FROM "system_user_migration_test"."users" ORDER BY id;
`);

await client.end();
await dbm.reset();

expect(userResults.length).toEqual(2);
expect(userResults[0].is_system).toEqual(true);
expect(userResults[0].id).toEqual(-1337);
expect(userResults[0].username).toEqual('unleash_system_user');
expect(userResults[1].is_system).toEqual(false);
expect(userResults[1].id).toEqual(1);
expect(userResults[1].username).toEqual('testperson');
});
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice 🏅