Skip to content

Commit

Permalink
chore:system user and events created by userid migrations (#5612)
Browse files Browse the repository at this point in the history
## About the changes

Migrations for:
- Adds column is_system to users
- Inserts unleash_system_user id -1337 to users 

includes `is_system: false` in the activeUsers and activeAccounts where filter

Tested by running:
`
select * into users_pre_check from users where id > -1;
delete from users where id > -1;
`
before starting unleash, then inspecting users table after unleash has
started and verifying that an 'admin' user has been created.

---------

Co-authored-by: Christopher Kolstad <[email protected]>
  • Loading branch information
daveleek and Christopher Kolstad authored Dec 22, 2023
1 parent d8a7d76 commit 1dadd23
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 0 deletions.
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);
`,
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');
});

0 comments on commit 1dadd23

Please sign in to comment.