From 2438e1d7c3d22379d4447c0281a76034d22e7050 Mon Sep 17 00:00:00 2001 From: Vitor George <vitor.george@gmail.com> Date: Thu, 31 Oct 2019 19:29:25 +0000 Subject: [PATCH 1/2] Move reset database function to its own file. --- test/test--index.js | 11 ++--------- test/utils/reset-db.js | 13 +++++++++++++ 2 files changed, 15 insertions(+), 9 deletions(-) create mode 100644 test/utils/reset-db.js diff --git a/test/test--index.js b/test/test--index.js index 7207749..3d79800 100755 --- a/test/test--index.js +++ b/test/test--index.js @@ -1,9 +1,8 @@ import config from 'config'; import { expect } from 'chai'; import startServer from '../app'; -import db from '../app/services/db'; import logger from '../app/services/logger'; -import { clearMediaStore } from '../app/services/media-store'; +import resetDb from '../test/utils/reset-db'; import Client from './utils/http-client'; const port = config.get('port'); @@ -12,13 +11,7 @@ global.apiUrl = apiUrl; describe('Observe API', function () { before(async function () { - logger.info('Clearing database...'); - await db.schema.dropTableIfExists('knex_migrations'); - await db.schema.dropTableIfExists('users'); - await db.schema.dropTableIfExists('traces'); - await db.schema.dropTableIfExists('photos'); - await db.migrate.latest(); - await clearMediaStore(); + await resetDb(); logger.info('Starting server...'); global.server = await startServer(); diff --git a/test/utils/reset-db.js b/test/utils/reset-db.js new file mode 100644 index 0000000..94e7a1f --- /dev/null +++ b/test/utils/reset-db.js @@ -0,0 +1,13 @@ +import db from '../../app/services/db'; +import logger from '../../app/services/logger'; +import { clearMediaStore } from '../../app/services/media-store'; + +export default async function resetDb () { + logger.info('Clearing database...'); + await db.schema.dropTableIfExists('knex_migrations'); + await db.schema.dropTableIfExists('users'); + await db.schema.dropTableIfExists('traces'); + await db.schema.dropTableIfExists('photos'); + await db.migrate.latest(); + await clearMediaStore(); +} From 9bf505de45e864cdb2a8bdd59163f0c3de9d9f2f Mon Sep 17 00:00:00 2001 From: Vitor George <vitor.george@gmail.com> Date: Thu, 31 Oct 2019 19:30:52 +0000 Subject: [PATCH 2/2] Add populate-dev-db task. --- README.md | 7 +++++++ app/utils.js | 8 ++++++++ package.json | 1 + test/utils/mock-factory.js | 9 +-------- utils/populate-db.js | 38 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 55 insertions(+), 8 deletions(-) create mode 100644 utils/populate-db.js diff --git a/README.md b/README.md index 35c9b59..6ab080d 100755 --- a/README.md +++ b/README.md @@ -40,12 +40,19 @@ Open a new terminal and migrate the database: npm run migrate-dev-db +If your with to populate it with mock data, run: + + npm run populate-dev-db + +Please consider that the last step will **wipe any previous data** from the development database. + Start development server with changes monitoring: npm run dev Access the service at [localhost:3000](http://localhost:3000) + When finished, go back to the first terminal session and kill the database container with Ctrl+C. ### Testing diff --git a/app/utils.js b/app/utils.js index 2c12a63..4112d80 100644 --- a/app/utils.js +++ b/app/utils.js @@ -10,3 +10,11 @@ export function appUrl () { export function mediaUrl () { return `${appUrl()}/media`; } + +/** + * Generate random integer number up to "max" value. + * @param {integer} max + */ +export function getRandomInt (max) { + return Math.floor(Math.random() * Math.floor(max)); +} diff --git a/package.json b/package.json index bcd3115..2136794 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "lint": "node_modules/.bin/eslint app/ test/ --ext .js", "test": "NODE_ENV=test mocha -r esm test/test--index.js", "start-dev-db": "docker-compose -f docker-compose-dev.yml up", + "populate-dev-db": "NODE_ENV=development node -r esm -e 'require(\"./utils/populate-db.js\").populateDb()'", "start-test-db": "docker-compose -f docker-compose-test.yml up", "migrate-dev-db": "NODE_ENV=development node_modules/.bin/knex migrate:latest", "test-lint": "npm run lint && npm run test", diff --git a/test/utils/mock-factory.js b/test/utils/mock-factory.js index 36065b1..44226a8 100644 --- a/test/utils/mock-factory.js +++ b/test/utils/mock-factory.js @@ -2,14 +2,7 @@ import users from '../../app/models/users'; import traces from '../../app/models/traces'; import validTraceJson from '../fixtures/valid-trace.json'; import { createPhoto } from '../../app/models/photos'; - -/** - * Generate random integer number up to "max" value. - * @param {integer} max - */ -function getRandomInt (max) { - return Math.floor(Math.random() * Math.floor(max)); -} +import { getRandomInt } from '../../app/utils'; /** * Factory to create mock users at the database. diff --git a/utils/populate-db.js b/utils/populate-db.js new file mode 100644 index 0000000..84f28e2 --- /dev/null +++ b/utils/populate-db.js @@ -0,0 +1,38 @@ +import resetDb from '../test/utils/reset-db'; +import { getRandomInt } from '../app/utils'; +import logger from '../app/services/logger'; +import { + createMockUser, + createMockTrace, + createMockPhoto +} from '../test/utils/mock-factory'; + +export async function populateDb () { + await resetDb(); + + logger.info(`Populating...`); + + const numberOfUsers = 5; + + // For each user + for (let u = 0; u < numberOfUsers; u++) { + const user = await createMockUser(); + + // Generate up to 25 traces + const numberOfTraces = getRandomInt(20) + 5; + for (let t = 0; t < numberOfTraces; t++) { + await createMockTrace(user.osmId); + } + + // Generate up to 25 photos + const numberOfPhotos = getRandomInt(20) + 5; + for (let p = 0; p < numberOfPhotos; p++) { + await createMockPhoto(user.osmId); + } + + logger.info( + ` Added user ${user.osmDisplayName} with ${numberOfTraces} traces and ${numberOfPhotos} photos.` + ); + } + process.exit(); +}