diff --git a/addons/api/addon/services/sqlite.js b/addons/api/addon/services/sqlite.js index 636757409..798a27936 100644 --- a/addons/api/addon/services/sqlite.js +++ b/addons/api/addon/services/sqlite.js @@ -42,10 +42,17 @@ export const modelMapping = { scope_id: 'scope.scope_id', created_time: 'created_time', }, + user: { + id: 'id', + name: 'name', + description: 'description', + scope_id: 'scope.scope_id', + created_time: 'created_time', + }, }; // A list of tables that we support searching using FTS5 in SQLite. -export const searchTables = new Set(['target', 'alias', 'role']); +export const searchTables = new Set(['target', 'alias', 'role', 'user']); export default class SqliteDbService extends Service { // =attributes diff --git a/addons/api/addon/workers/utils/schema.js b/addons/api/addon/workers/utils/schema.js index 78a563afd..dcb0b5665 100644 --- a/addons/api/addon/workers/utils/schema.js +++ b/addons/api/addon/workers/utils/schema.js @@ -125,6 +125,39 @@ CREATE TRIGGER IF NOT EXISTS role_ad AFTER DELETE ON role BEGIN VALUES('delete', old.rowid, old.id, old.name, old.description, old.scope_id, old.created_time); END;`; +const createUserTables = ` +CREATE TABLE IF NOT EXISTS user ( + id TEXT NOT NULL PRIMARY KEY, + name TEXT, + description TEXT, + scope_id TEXT NOT NULL, + created_time TEXT NOT NULL, + data TEXT NOT NULL +); +CREATE INDEX IF NOT EXISTS idx_user_scope_id_created_time ON user(scope_id, created_time DESC); + +CREATE VIRTUAL TABLE IF NOT EXISTS user_fts USING fts5( + id, + name, + description, + scope_id, + created_time, + content='', +); + +CREATE TRIGGER IF NOT EXISTS user_ai AFTER INSERT ON user BEGIN + INSERT INTO user_fts( + id, name, description, scope_id, created_time + ) VALUES ( + new.id, new.name, new.description, new.scope_id, new.created_time + ); +END; + +CREATE TRIGGER IF NOT EXISTS user_ad AFTER DELETE ON user BEGIN + INSERT INTO user_fts(user_fts, rowid, id, name, description, scope_id, created_time) + VALUES('delete', old.rowid, old.id, old.name, old.description, old.scope_id, old.created_time); +END;`; + export const CREATE_TABLES = (version) => ` BEGIN; @@ -138,6 +171,7 @@ CREATE TABLE IF NOT EXISTS token ( ${createTargetTables} ${createAliasTables} ${createRoleTables} +${createUserTables} CREATE TABLE IF NOT EXISTS "group" ( id TEXT NOT NULL PRIMARY KEY, diff --git a/ui/admin/tests/acceptance/authentication-test.js b/ui/admin/tests/acceptance/authentication-test.js index d4dff1270..7f990886d 100644 --- a/ui/admin/tests/acceptance/authentication-test.js +++ b/ui/admin/tests/acceptance/authentication-test.js @@ -14,6 +14,7 @@ import { import { setupApplicationTest } from 'admin/tests/helpers'; import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import { setupIndexedDb } from 'api/test-support/helpers/indexed-db'; +import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { setupIntl } from 'ember-intl/test-support'; import { Response } from 'miragejs'; import { @@ -32,6 +33,7 @@ module('Acceptance | authentication', function (hooks) { setupApplicationTest(hooks); setupMirage(hooks); setupIndexedDb(hooks); + setupSqlite(hooks); setupIntl(hooks, 'en-us'); let indexURL; diff --git a/ui/admin/tests/acceptance/groups/members-test.js b/ui/admin/tests/acceptance/groups/members-test.js index aa9720936..d08aee579 100644 --- a/ui/admin/tests/acceptance/groups/members-test.js +++ b/ui/admin/tests/acceptance/groups/members-test.js @@ -8,6 +8,7 @@ import { visit, currentURL, click } from '@ember/test-helpers'; import { setupApplicationTest } from 'admin/tests/helpers'; import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import { setupIndexedDb } from 'api/test-support/helpers/indexed-db'; +import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { Response } from 'miragejs'; import { authenticateSession } from 'ember-simple-auth/test-support'; import * as commonSelectors from 'admin/tests/helpers/selectors'; @@ -18,6 +19,7 @@ module('Acceptance | groups | members', function (hooks) { setupApplicationTest(hooks); setupMirage(hooks); setupIndexedDb(hooks); + setupSqlite(hooks); const instances = { scopes: { diff --git a/ui/admin/tests/acceptance/users/create-test.js b/ui/admin/tests/acceptance/users/create-test.js index 4e71d5965..545a100cf 100644 --- a/ui/admin/tests/acceptance/users/create-test.js +++ b/ui/admin/tests/acceptance/users/create-test.js @@ -8,6 +8,7 @@ import { visit, currentURL, click, fillIn } from '@ember/test-helpers'; import { setupApplicationTest } from 'admin/tests/helpers'; import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import { setupIndexedDb } from 'api/test-support/helpers/indexed-db'; +import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { Response } from 'miragejs'; import { authenticateSession } from 'ember-simple-auth/test-support'; import * as commonSelectors from 'admin/tests/helpers/selectors'; @@ -17,6 +18,7 @@ module('Acceptance | users | create', function (hooks) { setupApplicationTest(hooks); setupMirage(hooks); setupIndexedDb(hooks); + setupSqlite(hooks); let getUsersCount; diff --git a/ui/admin/tests/acceptance/users/delete-test.js b/ui/admin/tests/acceptance/users/delete-test.js index edf98fb3f..b43bff60f 100644 --- a/ui/admin/tests/acceptance/users/delete-test.js +++ b/ui/admin/tests/acceptance/users/delete-test.js @@ -8,6 +8,7 @@ import { visit, click, currentURL } from '@ember/test-helpers'; import { setupApplicationTest } from 'admin/tests/helpers'; import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import { setupIndexedDb } from 'api/test-support/helpers/indexed-db'; +import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { Response } from 'miragejs'; import { authenticateSession } from 'ember-simple-auth/test-support'; import * as commonSelectors from 'admin/tests/helpers/selectors'; @@ -18,6 +19,7 @@ module('Acceptance | users | delete', function (hooks) { setupApplicationTest(hooks); setupMirage(hooks); setupIndexedDb(hooks); + setupSqlite(hooks); let getUsersCount, confirmService; diff --git a/ui/admin/tests/acceptance/users/list-test.js b/ui/admin/tests/acceptance/users/list-test.js index 34e61097f..235ec44aa 100644 --- a/ui/admin/tests/acceptance/users/list-test.js +++ b/ui/admin/tests/acceptance/users/list-test.js @@ -15,6 +15,7 @@ import { import { setupApplicationTest } from 'admin/tests/helpers'; import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import { setupIndexedDb } from 'api/test-support/helpers/indexed-db'; +import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; import * as commonSelectors from 'admin/tests/helpers/selectors'; import * as selectors from './selectors'; @@ -25,6 +26,7 @@ module('Acceptance | users | list', function (hooks) { setupApplicationTest(hooks); setupMirage(hooks); setupIndexedDb(hooks); + setupSqlite(hooks); const instances = { scopes: { diff --git a/ui/admin/tests/acceptance/users/read-test.js b/ui/admin/tests/acceptance/users/read-test.js index 13f32a47f..556867c5d 100644 --- a/ui/admin/tests/acceptance/users/read-test.js +++ b/ui/admin/tests/acceptance/users/read-test.js @@ -8,6 +8,7 @@ import { visit, currentURL, click } from '@ember/test-helpers'; import { setupApplicationTest } from 'admin/tests/helpers'; import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import { setupIndexedDb } from 'api/test-support/helpers/indexed-db'; +import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; import * as commonSelectors from 'admin/tests/helpers/selectors'; import { setRunOptions } from 'ember-a11y-testing/test-support'; @@ -16,6 +17,7 @@ module('Acceptance | users | read', function (hooks) { setupApplicationTest(hooks); setupMirage(hooks); setupIndexedDb(hooks); + setupSqlite(hooks); const urls = { orgScope: null, diff --git a/ui/admin/tests/acceptance/users/update-test.js b/ui/admin/tests/acceptance/users/update-test.js index 5e47a5933..b9083ae0a 100644 --- a/ui/admin/tests/acceptance/users/update-test.js +++ b/ui/admin/tests/acceptance/users/update-test.js @@ -8,6 +8,7 @@ import { visit, currentURL, click, fillIn } from '@ember/test-helpers'; import { setupApplicationTest } from 'admin/tests/helpers'; import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import { setupIndexedDb } from 'api/test-support/helpers/indexed-db'; +import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { Response } from 'miragejs'; import { authenticateSession } from 'ember-simple-auth/test-support'; import * as commonSelectors from 'admin/tests/helpers/selectors'; @@ -17,6 +18,7 @@ module('Acceptance | users | update', function (hooks) { setupApplicationTest(hooks); setupMirage(hooks); setupIndexedDb(hooks); + setupSqlite(hooks); let confirmService; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js index f19225749..8318a8f71 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js @@ -7,6 +7,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; module( @@ -14,6 +15,7 @@ module( function (hooks) { setupTest(hooks); setupMirage(hooks); + setupSqlite(hooks); let store; let controller; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/users/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/users/index-test.js index 5e47440da..be8f6396a 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/users/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/users/index-test.js @@ -8,6 +8,7 @@ import { setupTest } from 'ember-qunit'; import { waitUntil, visit } from '@ember/test-helpers'; import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import { setupIndexedDb } from 'api/test-support/helpers/indexed-db'; +import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { setupIntl } from 'ember-intl/test-support'; import { authenticateSession } from 'ember-simple-auth/test-support'; @@ -15,6 +16,7 @@ module('Unit | Controller | scopes/scope/users/index', function (hooks) { setupTest(hooks); setupMirage(hooks); setupIndexedDb(hooks); + setupSqlite(hooks); setupIntl(hooks, 'en-us'); let intl;