From 6d0a988f0670f3e740ab965c4d7f5a12ec04502c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bitard=20Micha=C3=ABl?= <bitard.michael@gmail.com>
Date: Tue, 15 Mar 2022 09:57:18 +0100
Subject: [PATCH] chore(bdd): supprime public-copy

---
 package-lock.json                             |  77 +++------
 package.json                                  |  12 +-
 src/@types/knex-db-manager.d.ts               |   3 -
 .../permissions/administrations.test.ts       |   3 -
 .../permissions/titres-demarches.test.ts      |   8 +-
 .../queries/permissions/titres-etapes.test.ts |   7 +-
 src/database/queries/titres-demarches.test.ts |   7 +-
 src/database/queries/titres.test.ts           |   8 +-
 src/knex/public-copy.ts                       | 153 ------------------
 tests/db-manager.ts                           |  16 +-
 tsconfig.json                                 |   1 -
 11 files changed, 52 insertions(+), 243 deletions(-)
 delete mode 100644 src/@types/knex-db-manager.d.ts
 delete mode 100644 src/knex/public-copy.ts

diff --git a/package-lock.json b/package-lock.json
index d7db25b0d..bc7e04416 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -68,7 +68,6 @@
         "jsonwebtoken": "^8.5.1",
         "jszip": "^3.7.1",
         "knex": "1.0.4",
-        "knex-db-manager": "^0.7.0",
         "make-dir": "^3.1.0",
         "matomo-tracker": "^2.2.4",
         "node-fetch": "^2.6.5",
@@ -4056,6 +4055,7 @@
     },
     "node_modules/balanced-match": {
       "version": "1.0.2",
+      "dev": true,
       "license": "MIT"
     },
     "node_modules/base64-js": {
@@ -4223,6 +4223,7 @@
     },
     "node_modules/brace-expansion": {
       "version": "1.1.11",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
         "balanced-match": "^1.0.0",
@@ -5137,6 +5138,7 @@
     },
     "node_modules/concat-map": {
       "version": "0.0.1",
+      "dev": true,
       "license": "MIT"
     },
     "node_modules/concat-stream": {
@@ -8597,6 +8599,7 @@
     },
     "node_modules/fs.realpath": {
       "version": "1.0.0",
+      "dev": true,
       "license": "ISC"
     },
     "node_modules/fsevents": {
@@ -9800,6 +9803,7 @@
     },
     "node_modules/inflight": {
       "version": "1.0.6",
+      "dev": true,
       "license": "ISC",
       "dependencies": {
         "once": "^1.3.0",
@@ -11477,39 +11481,6 @@
         }
       }
     },
-    "node_modules/knex-db-manager": {
-      "version": "0.7.0",
-      "license": "MIT",
-      "dependencies": {
-        "bluebird": "^3.7.2",
-        "glob": "^7.1.6",
-        "lodash": "^4.17.15"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      },
-      "peerDependencies": {
-        "knex": "0.x"
-      }
-    },
-    "node_modules/knex-db-manager/node_modules/glob": {
-      "version": "7.1.7",
-      "license": "ISC",
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
     "node_modules/knex/node_modules/rechoir": {
       "version": "0.8.0",
       "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
@@ -12484,6 +12455,7 @@
     },
     "node_modules/minimatch": {
       "version": "3.0.4",
+      "dev": true,
       "license": "ISC",
       "dependencies": {
         "brace-expansion": "^1.1.7"
@@ -16398,6 +16370,7 @@
     },
     "node_modules/path-is-absolute": {
       "version": "1.0.1",
+      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
@@ -24152,7 +24125,8 @@
       }
     },
     "balanced-match": {
-      "version": "1.0.2"
+      "version": "1.0.2",
+      "dev": true
     },
     "base64-js": {
       "version": "1.5.1",
@@ -24272,6 +24246,7 @@
     },
     "brace-expansion": {
       "version": "1.1.11",
+      "dev": true,
       "requires": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
@@ -24920,7 +24895,8 @@
       }
     },
     "concat-map": {
-      "version": "0.0.1"
+      "version": "0.0.1",
+      "dev": true
     },
     "concat-stream": {
       "version": "1.6.2",
@@ -27283,7 +27259,8 @@
       }
     },
     "fs.realpath": {
-      "version": "1.0.0"
+      "version": "1.0.0",
+      "dev": true
     },
     "fsevents": {
       "version": "2.3.2",
@@ -28126,6 +28103,7 @@
     },
     "inflight": {
       "version": "1.0.6",
+      "dev": true,
       "requires": {
         "once": "^1.3.0",
         "wrappy": "1"
@@ -29333,27 +29311,6 @@
         }
       }
     },
-    "knex-db-manager": {
-      "version": "0.7.0",
-      "requires": {
-        "bluebird": "^3.7.2",
-        "glob": "^7.1.6",
-        "lodash": "^4.17.15"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "7.1.7",
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        }
-      }
-    },
     "kuler": {
       "version": "2.0.0"
     },
@@ -30031,6 +29988,7 @@
     },
     "minimatch": {
       "version": "3.0.4",
+      "dev": true,
       "requires": {
         "brace-expansion": "^1.1.7"
       }
@@ -32815,7 +32773,8 @@
       "dev": true
     },
     "path-is-absolute": {
-      "version": "1.0.1"
+      "version": "1.0.1",
+      "dev": true
     },
     "path-key": {
       "version": "3.1.1"
diff --git a/package.json b/package.json
index 562f1a52c..cbc1ff4cd 100644
--- a/package.json
+++ b/package.json
@@ -29,7 +29,6 @@
     "db:export": "rm -rf sources && node ./dist/src/scripts/database-to-json-export.js",
     "db:import": "pg_restore --host=localhost --username=postgres --clean --if-exists --no-owner --no-privileges --dbname=camino ./backups/camino.sql",
     "db:prod-fetch": "scp -P 212 $u@camino.beta.gouv.fr:/srv/backups/camino.sql backups/",
-    "db:public-dump": "ts-node ./src/knex/public-copy.ts && pg_dump --clean --if-exists --host=localhost --username=postgres --format=c --no-owner --no-privileges --dbname=camino_public --file=./backups/camino-public.sql && dropdb --host=localhost --username=postgres camino_public",
     "db:public-import": "pg_restore --host=localhost --username=postgres --clean --if-exists --no-owner --no-privileges --dbname=camino ./backups/camino-public.sql",
     "db:recreate": "dropdb --host=localhost --username=postgres camino && createdb --host=localhost --username=postgres camino",
     "db:user": "ts-node ./src/knex/cli-user-add.ts",
@@ -46,12 +45,12 @@
     "documents:check": "node ./dist/src/scripts/documents-check.js",
     "lint": "prettier --write . && eslint --fix .",
     "start": "node ./dist/src/index.js",
-    "test": "prettier --check . && eslint . && npm run build && cross-env PGDATABASE=camino_tests jest --testPathIgnorePatterns=tests --runInBand --detectOpenHandles --forceExit",
-    "test:unit": "cross-env PGDATABASE=camino_tests jest --testPathIgnorePatterns=tests --runInBand --detectOpenHandles --watch",
-    "test:integration": "cross-env PGDATABASE=camino_tests JWT_SECRET=secret-tests jest --testPathIgnorePatterns=src --runInBand --detectOpenHandles --watch --testTimeout=20000",
+    "test": "cross-env jest --testPathIgnorePatterns=tests --runInBand --detectOpenHandles --forceExit",
+    "test:unit": "cross-env jest --testPathIgnorePatterns=tests --runInBand --detectOpenHandles --watch",
+    "test:integration": "cross-env JWT_SECRET=secret-tests jest --testPathIgnorePatterns=src --runInBand --detectOpenHandles --watch --testTimeout=20000",
     "ci:lint": "prettier --check . && eslint .",
-    "ci:test-unit": "cross-env PGDATABASE=camino_tests jest --testPathIgnorePatterns=tests --ci --runInBand --detectOpenHandles --forceExit --testTimeout=20000",
-    "ci:test-integration": "cross-env PGDATABASE=camino_tests JWT_SECRET=secret-tests JWT_SECRET_REFRESH=refresh-secret jest --testPathIgnorePatterns=src --runInBand --detectOpenHandles --ci --forceExit --testTimeout=20000",
+    "ci:test-unit": "cross-env jest --testPathIgnorePatterns=tests --ci --runInBand --detectOpenHandles --forceExit --testTimeout=20000",
+    "ci:test-integration": "cross-env JWT_SECRET=secret-tests JWT_SECRET_REFRESH=refresh-secret jest --testPathIgnorePatterns=src --runInBand --detectOpenHandles --ci --forceExit --testTimeout=20000",
     "ci:codecov": "codecov",
     "prepare": "husky install"
   },
@@ -119,7 +118,6 @@
     "jsonwebtoken": "^8.5.1",
     "jszip": "^3.7.1",
     "knex": "1.0.4",
-    "knex-db-manager": "^0.7.0",
     "make-dir": "^3.1.0",
     "matomo-tracker": "^2.2.4",
     "node-fetch": "^2.6.5",
diff --git a/src/@types/knex-db-manager.d.ts b/src/@types/knex-db-manager.d.ts
deleted file mode 100644
index eb9b8ca8a..000000000
--- a/src/@types/knex-db-manager.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-// la version 0.6.3 de types/knex-db-manager utilise une très vieille version de knex qui génère
-// des warnings lors de l’installation des dépendances NPM
-declare module 'knex-db-manager'
diff --git a/src/database/queries/permissions/administrations.test.ts b/src/database/queries/permissions/administrations.test.ts
index 9ad640ead..f5ef15321 100644
--- a/src/database/queries/permissions/administrations.test.ts
+++ b/src/database/queries/permissions/administrations.test.ts
@@ -18,9 +18,7 @@ console.error = jest.fn()
 const knex = dbManager.getKnex()
 
 beforeAll(async () => {
-  console.log('BEFORE ALL')
   await dbManager.populateDb(knex)
-  console.log('AFTER BEFORE ALL')
 })
 
 afterAll(async () => {
@@ -38,7 +36,6 @@ describe('administrationsTitresQuery', () => {
   `(
     "Vérifie l'écriture de la requête sur les titres dont une administration a des droits sur le type",
     async ({ gestionnaire, associee, visible }) => {
-      console.log('PLOOOOOOP')
       await Titres.query().delete()
       await AdministrationsTitresTypes.query().delete()
 
diff --git a/src/database/queries/permissions/titres-demarches.test.ts b/src/database/queries/permissions/titres-demarches.test.ts
index 911160994..9cf2a4db5 100644
--- a/src/database/queries/permissions/titres-demarches.test.ts
+++ b/src/database/queries/permissions/titres-demarches.test.ts
@@ -14,13 +14,15 @@ import TitresEtapes from '../../models/titres-etapes'
 console.info = jest.fn()
 console.error = jest.fn()
 
+const knex = dbManager.getKnex()
+
 beforeAll(async () => {
-  await dbManager.populateDb()
+  await dbManager.populateDb(knex)
 })
 
 afterAll(async () => {
-  await dbManager.truncateDb()
-  await dbManager.closeKnex()
+  await dbManager.truncateDb(knex)
+  await dbManager.closeKnex(knex)
 })
 
 describe('titresDemarchesQueryModify', () => {
diff --git a/src/database/queries/permissions/titres-etapes.test.ts b/src/database/queries/permissions/titres-etapes.test.ts
index 87f2a90aa..7901cf55e 100644
--- a/src/database/queries/permissions/titres-etapes.test.ts
+++ b/src/database/queries/permissions/titres-etapes.test.ts
@@ -10,13 +10,14 @@ import TitresDemarches from '../../models/titres-demarches'
 console.info = jest.fn()
 console.error = jest.fn()
 
+const knex = dbManager.getKnex()
 beforeAll(async () => {
-  await dbManager.populateDb()
+  await dbManager.populateDb(knex)
 })
 
 afterAll(async () => {
-  await dbManager.truncateDb()
-  await dbManager.closeKnex()
+  await dbManager.truncateDb(knex)
+  await dbManager.closeKnex(knex)
 })
 
 describe('titresEtapesQueryModify', () => {
diff --git a/src/database/queries/titres-demarches.test.ts b/src/database/queries/titres-demarches.test.ts
index a187ac4f1..a84698257 100644
--- a/src/database/queries/titres-demarches.test.ts
+++ b/src/database/queries/titres-demarches.test.ts
@@ -8,13 +8,14 @@ import { titreDemarcheArchive } from './titres-demarches'
 console.info = jest.fn()
 console.error = jest.fn()
 
+const knex = dbManager.getKnex()
 beforeAll(async () => {
-  await dbManager.populateDb()
+  await dbManager.populateDb(knex)
 })
 
 afterAll(async () => {
-  await dbManager.truncateDb()
-  await dbManager.closeKnex()
+  await dbManager.truncateDb(knex)
+  await dbManager.closeKnex(knex)
 })
 describe('teste les requêtes sur les démarches', () => {
   describe('titreDemarcheArchive', () => {
diff --git a/src/database/queries/titres.test.ts b/src/database/queries/titres.test.ts
index 0a1847bbc..7e77c1b1b 100644
--- a/src/database/queries/titres.test.ts
+++ b/src/database/queries/titres.test.ts
@@ -7,14 +7,14 @@ import { titreArchive } from './titres'
 
 console.info = jest.fn()
 console.error = jest.fn()
-
+const knex = dbManager.getKnex()
 beforeAll(async () => {
-  await dbManager.populateDb()
+  await dbManager.populateDb(knex)
 })
 
 afterAll(async () => {
-  await dbManager.truncateDb()
-  await dbManager.closeKnex()
+  await dbManager.truncateDb(knex)
+  await dbManager.closeKnex(knex)
 })
 describe('teste les requêtes sur les titres', () => {
   describe('titreArchive', () => {
diff --git a/src/knex/public-copy.ts b/src/knex/public-copy.ts
deleted file mode 100644
index ffd531cbd..000000000
--- a/src/knex/public-copy.ts
+++ /dev/null
@@ -1,153 +0,0 @@
-// afin de faire un dump public de la base de données,
-// ce script copie la base de données
-// et supprime les informations confidentielles
-
-import { dbManagerConfig } from './db-manager-config'
-import { knexSnakeCaseMappers } from 'objection'
-import { knex, knexInit } from '../knex'
-
-import { databaseManagerFactory } from 'knex-db-manager'
-import chalk from 'chalk'
-const dbManager = databaseManagerFactory(dbManagerConfig)
-
-if (!process.env.PUBLIC_TITRES_IDS) {
-  console.error(
-    "La variable d'environnement PUBLIC_TITRES_IDS n'est pas définie"
-  )
-  process.exit(1)
-}
-
-const titresIds = process.env.PUBLIC_TITRES_IDS.split(',')
-
-const dbPublicName = 'camino_public'
-
-const dbPublicKnexConfig = {
-  client: 'pg',
-  connection: {
-    host: dbManagerConfig.knex.connection.host,
-    port: dbManagerConfig.knex.connection.port,
-    database: dbPublicName,
-    user: dbManagerConfig.knex.connection.user,
-    password: dbManagerConfig.knex.connection.password
-  },
-  ...knexSnakeCaseMappers()
-}
-
-knexInit(dbPublicKnexConfig)
-
-const run = async () => {
-  try {
-    console.info('Copie de la base de données…')
-    await dbManager.dropDb(dbPublicName)
-    await dbManager.copyDb(
-      dbManagerConfig.knex.connection.database,
-      dbPublicName
-    )
-
-    console.info('Suppression des informations confidentielles…')
-
-    const titresDeleted = await knex('titres').whereNotIn('id', titresIds).del()
-
-    console.info(`${titresDeleted} titres supprimés de la base de données`)
-
-    const activitesDeleted = await knex('titresActivites').del()
-
-    console.info(
-      `${activitesDeleted} activités supprimés de la base de données`
-    )
-
-    const utilisateursDeleted = await knex('utilisateurs').del()
-
-    console.info(
-      `${utilisateursDeleted} utilisateurs supprimés de la base de données`
-    )
-
-    const titresEntreprises = [
-      ...(await knex('titres_titulaires')),
-      ...(await knex('titres_amodiataires'))
-    ]
-
-    const entreprisesIdsIndex = titresEntreprises.reduce(
-      (entreprisesIdsIndex, titreEntreprise) => {
-        entreprisesIdsIndex[titreEntreprise.entrepriseId] = true
-
-        return entreprisesIdsIndex
-      },
-      {}
-    )
-
-    const entreprisesDeleted = await knex('entreprises')
-      .whereNotIn('id', Object.keys(entreprisesIdsIndex))
-      .del()
-
-    console.info(
-      `${entreprisesDeleted} entreprises supprimées de la base de données`
-    )
-
-    const titresAdministrations = [
-      ...(await knex('titres_administrations_gestionnaires')),
-      ...(await knex('titres_administrations_locales'))
-    ]
-
-    const administrationsIdsIndex = titresAdministrations.reduce(
-      (administrationsIdsIndex, titreAdministration) => {
-        administrationsIdsIndex[titreAdministration.administrationId] = true
-
-        return administrationsIdsIndex
-      },
-      {}
-    )
-
-    const administrationsDeleted = await knex('administrations')
-      .whereNotIn('id', Object.keys(administrationsIdsIndex))
-      .del()
-
-    console.info(
-      `${administrationsDeleted} administrations supprimées de la base de données`
-    )
-
-    const titresCommunes = await knex('titres_communes')
-
-    const communesIdsIndex = titresCommunes.reduce(
-      (communesIdsIndex, titreCommune) => {
-        communesIdsIndex[titreCommune.communeId] = true
-
-        return communesIdsIndex
-      },
-      {}
-    )
-
-    const communesDeleted = await knex('communes')
-      .whereNotIn('id', Object.keys(communesIdsIndex))
-      .del()
-
-    console.info(`${communesDeleted} communes supprimées de la base de données`)
-
-    const titresSubstances = await knex('titres_substances')
-
-    const substancesIdsIndex = titresSubstances.reduce(
-      (substancesIdsIndex, titreSubstance) => {
-        substancesIdsIndex[titreSubstance.substanceId] = true
-
-        return substancesIdsIndex
-      },
-      {}
-    )
-
-    const substancesDeleted = await knex('substances')
-      .whereNotIn('id', Object.keys(substancesIdsIndex))
-      .del()
-
-    console.info(
-      `${substancesDeleted} substances supprimées de la base de données`
-    )
-
-    process.exit()
-  } catch (e) {
-    console.error(chalk.red(e))
-
-    process.exit(1)
-  }
-}
-
-run()
diff --git a/tests/db-manager.ts b/tests/db-manager.ts
index 491bb2005..fbd70e56d 100644
--- a/tests/db-manager.ts
+++ b/tests/db-manager.ts
@@ -17,8 +17,16 @@ class DbManager {
     process.env.DB_NAME = this.dbName
   }
 
+  private static getPgUser() {
+    return process.env.PGUSER ?? 'postgres'
+  }
+
+  private static getPgPassword() {
+    return process.env.PGPASSWORD ?? 'password'
+  }
+
   public async init(): Promise<void> {
-    const globalConnection = 'postgres://postgres:password@localhost/postgres'
+    const globalConnection = `postgres://${DbManager.getPgUser()}:${DbManager.getPgPassword()}@localhost/postgres`
     const globalClient = new Client(globalConnection)
     await globalClient.connect()
     const queryResult = await globalClient.query(
@@ -42,8 +50,8 @@ class DbManager {
         host: 'localhost',
         port: 5432,
         database: this.dbName,
-        user: 'postgres',
-        password: 'password'
+        user: DbManager.getPgUser(),
+        password: DbManager.getPgPassword()
       },
       migrations: {
         directory: [join(__dirname, '../src/knex/migrations-schema')]
@@ -68,7 +76,7 @@ class DbManager {
   }
 
   public async closeKnex(knex: Knex<any, unknown[]>): Promise<void> {
-    knex.destroy()
+    await knex.destroy()
   }
 
   public setGlobally(knex: Knex<any, unknown[]>): void {
diff --git a/tsconfig.json b/tsconfig.json
index ad7875727..35c3065f9 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -24,7 +24,6 @@
       "geojson-rewind": ["./src/@types/geojson-rewind"],
       "graphql-fields": ["./src/@types/graphql-fields"],
       "html-to-text": ["./src/@types/html-to-text"],
-      "knex-db-manager": ["./src/@types/knex-db-manager"],
       "matomo-tracker": ["./src/@types/matomo-tracker"],
       "momoa": ["./src/@types/momoa"],
       "turf-center": ["./src/@types/turf-center"],
-- 
GitLab