From 6cbbd8feb2d302a12e775011e048bbb9ddb75c6f Mon Sep 17 00:00:00 2001 From: Tomas van Rijsse Date: Tue, 23 Jun 2020 14:36:10 +0200 Subject: [PATCH] improved demo content --- .gitignore | 1 + Week2/QA-session-content/README.md | 10 +++++++ .../20200623130136_create_projects.js | 1 - .../migrations/20200623130141_create_users.js | 1 - .../migrations/20200623130146_create_tasks.js | 1 - Week2/QA-session-content/seeds/0-reset.js | 10 +++++++ .../QA-session-content/seeds/1-addProjects.js | 30 +++++++++++++++---- Week2/QA-session-content/seeds/3-addTasks.js | 12 ++++---- .../seeds/4-addProjectUsers.js | 17 +++++++++++ 9 files changed, 68 insertions(+), 15 deletions(-) create mode 100644 Week2/QA-session-content/seeds/0-reset.js create mode 100644 Week2/QA-session-content/seeds/4-addProjectUsers.js diff --git a/.gitignore b/.gitignore index 2bb4a7913..9e5fb4bb4 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules/ **/*.DS_Store **/*-secret.json **/*.sh +.idea diff --git a/Week2/QA-session-content/README.md b/Week2/QA-session-content/README.md index f95d0b4cc..29887177e 100644 --- a/Week2/QA-session-content/README.md +++ b/Week2/QA-session-content/README.md @@ -1,3 +1,13 @@ This folder contains a small codebase to setup a database with some content. The database will contain information about users their projects and tasks. Tasks can be assigned to users optionally which make for some nice example queries. + +Create a database called `db_qa_session` or make changes to the `knexfile.js` + +``` +npm install +npx knex migrate:latest +npx knex seed:run +``` + +Your database should be filled with some demo content :) diff --git a/Week2/QA-session-content/migrations/20200623130136_create_projects.js b/Week2/QA-session-content/migrations/20200623130136_create_projects.js index 1c86165e9..d8dfadfc2 100644 --- a/Week2/QA-session-content/migrations/20200623130136_create_projects.js +++ b/Week2/QA-session-content/migrations/20200623130136_create_projects.js @@ -6,7 +6,6 @@ exports.up = async (knex) => { table.date('start_date'); table.date('end_date'); table.string('code').unique(); - table.timestamps(); }) }; diff --git a/Week2/QA-session-content/migrations/20200623130141_create_users.js b/Week2/QA-session-content/migrations/20200623130141_create_users.js index 397b317dd..b064ec9e0 100644 --- a/Week2/QA-session-content/migrations/20200623130141_create_users.js +++ b/Week2/QA-session-content/migrations/20200623130141_create_users.js @@ -4,7 +4,6 @@ exports.up = async (knex) => { table.increments(); table.string('first_name').notNullable(); table.string('last_name').notNullable(); - table.timestamps(); }) }; diff --git a/Week2/QA-session-content/migrations/20200623130146_create_tasks.js b/Week2/QA-session-content/migrations/20200623130146_create_tasks.js index 50d1dee48..7dd634021 100644 --- a/Week2/QA-session-content/migrations/20200623130146_create_tasks.js +++ b/Week2/QA-session-content/migrations/20200623130146_create_tasks.js @@ -11,7 +11,6 @@ exports.up = async (knex) => { .unsigned() .references('id') .inTable('projects'); - table.timestamps(); }) }; diff --git a/Week2/QA-session-content/seeds/0-reset.js b/Week2/QA-session-content/seeds/0-reset.js new file mode 100644 index 000000000..8a7e20b6f --- /dev/null +++ b/Week2/QA-session-content/seeds/0-reset.js @@ -0,0 +1,10 @@ +exports.seed = async (knex) => { + + await knex.raw('SET foreign_key_checks = 0;'); + await knex('project_users').truncate(); + await knex('tasks').truncate(); + await knex('projects').truncate(); + await knex('users').truncate(); + await knex.raw('SET foreign_key_checks = 1;'); + +}; diff --git a/Week2/QA-session-content/seeds/1-addProjects.js b/Week2/QA-session-content/seeds/1-addProjects.js index 31c36eafb..4f289c8dd 100644 --- a/Week2/QA-session-content/seeds/1-addProjects.js +++ b/Week2/QA-session-content/seeds/1-addProjects.js @@ -1,15 +1,33 @@ const faker = require('faker'); -const createProject = () => ({ - name: faker.name.jobTitle(), -}) +const createProject = function (i) { + let companyName = faker.company.companyName(); + let abbreviation = companyName + .replace(/,|and|-/gi, '') + .split(' ') + .map((name) => name[0]) + .join(''); -exports.seed = async function(knex) { + return { + name: companyName + ' ' + (i % 2 ? 'website' : 'app'), + start_date: faker.date.past(), + end_date: faker.date.future(), + code: abbreviation + } +} + +exports.seed = async function (knex) { const fakes = []; + const codes = []; const amount = 20; - for(let i = 0; i< amount; i++){ - fakes.push(createProject()); + for (let i = 0; i < amount; i++) { + let project = createProject(i); + if(codes.includes(project.code)){ + project.code + i; + } + codes.push(project.code); + fakes.push(project); } await knex('projects').insert(fakes); diff --git a/Week2/QA-session-content/seeds/3-addTasks.js b/Week2/QA-session-content/seeds/3-addTasks.js index 782a14583..fd622aaa9 100644 --- a/Week2/QA-session-content/seeds/3-addTasks.js +++ b/Week2/QA-session-content/seeds/3-addTasks.js @@ -1,17 +1,17 @@ const faker = require('faker'); -const createTask = () => ({ - name: faker.name.jobDescriptor(), +const createTask = (i) => ({ + name: faker.random.words(), project_id: Math.ceil(Math.random() * 20), - assigned_to: Math.ceil(Math.random() * 10), + assigned_to: (i % 3 ? null : Math.ceil(Math.random() * 10)), }) -exports.seed = async function(knex) { +exports.seed = async function (knex) { const fakes = []; const amount = 100; - for(let i = 0; i< amount; i++){ - fakes.push(createTask()); + for (let i = 0; i < amount; i++) { + fakes.push(createTask(i)); } await knex('tasks').insert(fakes); diff --git a/Week2/QA-session-content/seeds/4-addProjectUsers.js b/Week2/QA-session-content/seeds/4-addProjectUsers.js new file mode 100644 index 000000000..9a17b9eb7 --- /dev/null +++ b/Week2/QA-session-content/seeds/4-addProjectUsers.js @@ -0,0 +1,17 @@ +const createRelation = (i) => ({ + // user 2 to 9 will have projects + user_id: 1 + Math.ceil(Math.random() * 8), + // project 4 to 18 will have projects + project_id: 3 + Math.ceil(Math.random() * 15) +}) + +exports.seed = async function (knex) { + + const fakes = []; + const amount = 30; + for (let i = 0; i < amount; i++) { + fakes.push(createRelation(i)); + } + + await knex('project_users').insert(fakes); +};