From 80008a07391bb97c7f24fb18dee3617119bca332 Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Tue, 19 Mar 2024 11:29:19 +0000 Subject: [PATCH 1/3] Reenable no-inner-declarations. --- .eslintrc.json | 2 -- .../backend-core/src/logging/pino/logger.ts | 26 +++++++++---------- packages/server/__mocks__/airtable.ts | 2 +- packages/server/__mocks__/aws-sdk.ts | 4 +-- packages/server/__mocks__/oracledb.ts | 2 +- packages/server/__mocks__/pg.ts | 3 +-- .../api/controllers/row/ExternalRequest.ts | 4 +-- packages/server/src/middleware/authorized.ts | 2 +- 8 files changed, 21 insertions(+), 24 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 4b2b523137..d93c086578 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -39,7 +39,6 @@ "extends": ["eslint:recommended"], "rules": { "no-unused-vars": "off", - "no-inner-declarations": "off", "no-case-declarations": "off", "no-undef": "off", "no-prototype-builtins": "off", @@ -57,7 +56,6 @@ }, "rules": { "no-unused-vars": "off", - "no-inner-declarations": "off", "no-case-declarations": "off", "no-undef": "off", "no-prototype-builtins": "off", diff --git a/packages/backend-core/src/logging/pino/logger.ts b/packages/backend-core/src/logging/pino/logger.ts index 7a051e7f12..0a8470a453 100644 --- a/packages/backend-core/src/logging/pino/logger.ts +++ b/packages/backend-core/src/logging/pino/logger.ts @@ -10,6 +10,18 @@ import { formats } from "dd-trace/ext" import { localFileDestination } from "../system" +function isPlainObject(obj: any) { + return typeof obj === "object" && obj !== null && !(obj instanceof Error) +} + +function isError(obj: any) { + return obj instanceof Error +} + +function isMessage(obj: any) { + return typeof obj === "string" +} + // LOGGER let pinoInstance: pino.Logger | undefined @@ -71,23 +83,11 @@ if (!env.DISABLE_PINO_LOGGER) { err?: Error } - function isPlainObject(obj: any) { - return typeof obj === "object" && obj !== null && !(obj instanceof Error) - } - - function isError(obj: any) { - return obj instanceof Error - } - - function isMessage(obj: any) { - return typeof obj === "string" - } - /** * Backwards compatibility between console logging statements * and pino logging requirements. */ - function getLogParams(args: any[]): [MergingObject, string] { + const getLogParams = (args: any[]): [MergingObject, string] => { let error = undefined let objects: any[] = [] let message = "" diff --git a/packages/server/__mocks__/airtable.ts b/packages/server/__mocks__/airtable.ts index ee4b38ffcd..f4dd974d7e 100644 --- a/packages/server/__mocks__/airtable.ts +++ b/packages/server/__mocks__/airtable.ts @@ -1,5 +1,5 @@ module AirtableMock { - function Airtable() { + const Airtable = () => { // @ts-ignore this.base = jest.fn() } diff --git a/packages/server/__mocks__/aws-sdk.ts b/packages/server/__mocks__/aws-sdk.ts index 3cf4bba007..f23425a7be 100644 --- a/packages/server/__mocks__/aws-sdk.ts +++ b/packages/server/__mocks__/aws-sdk.ts @@ -9,7 +9,7 @@ module AwsMock { ...extra, }) - function DocumentClient() { + const DocumentClient = () => { // @ts-ignore this.put = jest.fn(response({})) // @ts-ignore @@ -36,7 +36,7 @@ module AwsMock { this.delete = jest.fn(response({})) } - function S3() { + const S3 = () => { // @ts-ignore this.listObjects = jest.fn( response({ diff --git a/packages/server/__mocks__/oracledb.ts b/packages/server/__mocks__/oracledb.ts index fd19845eee..63d6b0887b 100644 --- a/packages/server/__mocks__/oracledb.ts +++ b/packages/server/__mocks__/oracledb.ts @@ -12,7 +12,7 @@ module OracleDbMock { const close = jest.fn() // mock connection - function Connection() {} + const Connection = () => {} Connection.prototype.execute = execute Connection.prototype.close = close diff --git a/packages/server/__mocks__/pg.ts b/packages/server/__mocks__/pg.ts index 110933ad52..d7db297335 100644 --- a/packages/server/__mocks__/pg.ts +++ b/packages/server/__mocks__/pg.ts @@ -11,8 +11,7 @@ module PgMock { })) // constructor - function Client() {} - + const Client = () => {} Client.prototype.query = query Client.prototype.end = jest.fn(cb => { if (cb) cb() diff --git a/packages/server/src/api/controllers/row/ExternalRequest.ts b/packages/server/src/api/controllers/row/ExternalRequest.ts index 814b57567f..d25ae952e3 100644 --- a/packages/server/src/api/controllers/row/ExternalRequest.ts +++ b/packages/server/src/api/controllers/row/ExternalRequest.ts @@ -717,7 +717,7 @@ export class ExternalRequest { const rows = related[key]?.rows || [] - function relationshipMatchPredicate({ + const relationshipMatchPredicate = ({ row, linkPrimary, linkSecondary, @@ -725,7 +725,7 @@ export class ExternalRequest { row: Row linkPrimary: string linkSecondary?: string - }) { + }) => { const matchesPrimaryLink = row[linkPrimary] === relationship.id || row[linkPrimary] === body?.[linkPrimary] diff --git a/packages/server/src/middleware/authorized.ts b/packages/server/src/middleware/authorized.ts index fe7f6bb6fe..ec8a3711cf 100644 --- a/packages/server/src/middleware/authorized.ts +++ b/packages/server/src/middleware/authorized.ts @@ -120,7 +120,7 @@ const authorized = !!subResourceId && (await sdk.permissions.getResourcePerms(subResourceId)) - function getPermLevel(permLevel: string) { + const getPermLevel = (permLevel: string) => { let result: string[] = [] if (permissions[permLevel]) { result.push(permissions[permLevel].role) From 9eeb04fa9527c24038c98efd1bfb874564fad33e Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Tue, 19 Mar 2024 16:50:48 +0000 Subject: [PATCH 2/3] Fix broken mocks. --- packages/server/__mocks__/airtable.ts | 11 +- packages/server/__mocks__/aws-sdk.ts | 169 ++++++++---------- packages/server/__mocks__/mssql.ts | 27 ++- packages/server/__mocks__/mysql2.ts | 23 ++- packages/server/__mocks__/oracledb.ts | 46 ++--- packages/server/__mocks__/pg.ts | 46 +++-- .../routes/tests/queries/query.seq.spec.ts | 1 + 7 files changed, 138 insertions(+), 185 deletions(-) diff --git a/packages/server/__mocks__/airtable.ts b/packages/server/__mocks__/airtable.ts index f4dd974d7e..fed30ca069 100644 --- a/packages/server/__mocks__/airtable.ts +++ b/packages/server/__mocks__/airtable.ts @@ -1,8 +1,5 @@ -module AirtableMock { - const Airtable = () => { - // @ts-ignore - this.base = jest.fn() - } - - module.exports = Airtable +class Airtable { + base = jest.fn() } + +module.exports = Airtable diff --git a/packages/server/__mocks__/aws-sdk.ts b/packages/server/__mocks__/aws-sdk.ts index f23425a7be..d6d33f6c46 100644 --- a/packages/server/__mocks__/aws-sdk.ts +++ b/packages/server/__mocks__/aws-sdk.ts @@ -1,102 +1,81 @@ import fs from "fs" import { join } from "path" -module AwsMock { - const aws: any = {} +const response = (body: any, extra?: any) => () => ({ + promise: () => body, + ...extra, +}) - const response = (body: any, extra?: any) => () => ({ - promise: () => body, - ...extra, - }) - - const DocumentClient = () => { - // @ts-ignore - this.put = jest.fn(response({})) - // @ts-ignore - this.query = jest.fn( - response({ - Items: [], - }) - ) - // @ts-ignore - this.scan = jest.fn( - response({ - Items: [ - { - Name: "test", - }, - ], - }) - ) - // @ts-ignore - this.get = jest.fn(response({})) - // @ts-ignore - this.update = jest.fn(response({})) - // @ts-ignore - this.delete = jest.fn(response({})) - } - - const S3 = () => { - // @ts-ignore - this.listObjects = jest.fn( - response({ - Contents: [], - }) - ) - - // @ts-ignore - this.createBucket = jest.fn( - response({ - Contents: {}, - }) - ) - - // @ts-ignore - this.deleteObjects = jest.fn( - response({ - Contents: {}, - }) - ) - - // @ts-ignore - this.getSignedUrl = (operation, params) => { - return `http://example.com/${params.Bucket}/${params.Key}` - } - - // @ts-ignore - this.headBucket = jest.fn( - response({ - Contents: {}, - }) - ) - - // @ts-ignore - this.upload = jest.fn( - response({ - Contents: {}, - }) - ) - - // @ts-ignore - this.getObject = jest.fn( - response( +class DocumentClient { + put = jest.fn(response({})) + query = jest.fn( + response({ + Items: [], + }) + ) + scan = jest.fn( + response({ + Items: [ { - Body: "", + Name: "test", }, - { - createReadStream: jest - .fn() - .mockReturnValue( - fs.createReadStream(join(__dirname, "aws-sdk.ts")) - ), - } - ) - ) - } - - aws.DynamoDB = { DocumentClient } - aws.S3 = S3 - aws.config = { update: jest.fn() } - - module.exports = aws + ], + }) + ) + get = jest.fn(response({})) + update = jest.fn(response({})) + delete = jest.fn(response({})) +} + +class S3 { + listObjects = jest.fn( + response({ + Contents: [], + }) + ) + createBucket = jest.fn( + response({ + Contents: {}, + }) + ) + deleteObjects = jest.fn( + response({ + Contents: {}, + }) + ) + getSignedUrl = jest.fn((operation, params) => { + return `http://example.com/${params.Bucket}/${params.Key}` + }) + headBucket = jest.fn( + response({ + Contents: {}, + }) + ) + upload = jest.fn( + response({ + Contents: {}, + }) + ) + getObject = jest.fn( + response( + { + Body: "", + }, + { + createReadStream: jest + .fn() + .mockReturnValue(fs.createReadStream(join(__dirname, "aws-sdk.ts"))), + } + ) + ) +} + +module.exports = { + DynamoDB: { + DocumentClient, + }, + S3, + config: { + update: jest.fn(), + }, } diff --git a/packages/server/__mocks__/mssql.ts b/packages/server/__mocks__/mssql.ts index cdfb7d520e..6a34e1e9d7 100644 --- a/packages/server/__mocks__/mssql.ts +++ b/packages/server/__mocks__/mssql.ts @@ -1,24 +1,17 @@ -module MsSqlMock { - const mssql: any = {} - - mssql.query = jest.fn(() => ({ +module.exports = { + ConnectionPool: jest.fn(() => ({ + connect: jest.fn(() => ({ + request: jest.fn(() => ({ + query: jest.fn(sql => ({ recordset: [sql] })), + })), + })), + })), + query: jest.fn(() => ({ recordset: [ { a: "string", b: 1, }, ], - })) - - // mssql.connect = jest.fn(() => ({ recordset: [] })) - - mssql.ConnectionPool = jest.fn(() => ({ - connect: jest.fn(() => ({ - request: jest.fn(() => ({ - query: jest.fn(sql => ({ recordset: [sql] })), - })), - })), - })) - - module.exports = mssql + })), } diff --git a/packages/server/__mocks__/mysql2.ts b/packages/server/__mocks__/mysql2.ts index 9d42a35dd8..67ff897811 100644 --- a/packages/server/__mocks__/mysql2.ts +++ b/packages/server/__mocks__/mysql2.ts @@ -1,14 +1,11 @@ -module MySQLMock { - const mysql: any = {} - - const client = { - connect: jest.fn(), - query: jest.fn((query, bindings, fn) => { - fn(null, []) - }), - } - - mysql.createConnection = jest.fn(() => client) - - module.exports = mysql +const client = { + connect: jest.fn(), + query: jest.fn((query, bindings, fn) => { + fn(null, []) + }), +} + +module.exports = { + createConnection: jest.fn(() => client), + client, } diff --git a/packages/server/__mocks__/oracledb.ts b/packages/server/__mocks__/oracledb.ts index 63d6b0887b..0172ace0e6 100644 --- a/packages/server/__mocks__/oracledb.ts +++ b/packages/server/__mocks__/oracledb.ts @@ -1,31 +1,21 @@ -module OracleDbMock { - // mock execute - const execute = jest.fn(() => ({ - rows: [ - { - a: "string", - b: 1, - }, - ], - })) +const executeMock = jest.fn(() => ({ + rows: [ + { + a: "string", + b: 1, + }, + ], +})) - const close = jest.fn() +const closeMock = jest.fn() - // mock connection - const Connection = () => {} - Connection.prototype.execute = execute - Connection.prototype.close = close - - // mock oracledb - const oracleDb: any = {} - oracleDb.getConnection = jest.fn(() => { - // @ts-ignore - return new Connection() - }) - - // expose mocks - oracleDb.executeMock = execute - oracleDb.closeMock = close - - module.exports = oracleDb +class Connection { + execute = executeMock + close = closeMock +} + +module.exports = { + getConnection: jest.fn(() => new Connection()), + executeMock, + closeMock, } diff --git a/packages/server/__mocks__/pg.ts b/packages/server/__mocks__/pg.ts index d7db297335..50a7c7349e 100644 --- a/packages/server/__mocks__/pg.ts +++ b/packages/server/__mocks__/pg.ts @@ -1,29 +1,25 @@ -module PgMock { - const pg: any = {} +const query = jest.fn(() => ({ + rows: [ + { + a: "string", + b: 1, + }, + ], +})) - const query = jest.fn(() => ({ - rows: [ - { - a: "string", - b: 1, - }, - ], - })) - - // constructor - const Client = () => {} - Client.prototype.query = query - Client.prototype.end = jest.fn(cb => { +class Client { + query = query + end = jest.fn(cb => { if (cb) cb() }) - Client.prototype.connect = jest.fn() - Client.prototype.release = jest.fn() - - const on = jest.fn() - - pg.Client = Client - pg.queryMock = query - pg.on = on - - module.exports = pg + connect = jest.fn() + release = jest.fn() +} + +const on = jest.fn() + +module.exports = { + Client, + queryMock: query, + on, } diff --git a/packages/server/src/api/routes/tests/queries/query.seq.spec.ts b/packages/server/src/api/routes/tests/queries/query.seq.spec.ts index 0ca424c48b..10b90eafb1 100644 --- a/packages/server/src/api/routes/tests/queries/query.seq.spec.ts +++ b/packages/server/src/api/routes/tests/queries/query.seq.spec.ts @@ -330,6 +330,7 @@ describe("/queries", () => { ], }, ] + pg.queryMock.mockImplementation(() => ({ rows, })) From 5ef1bd655cb75adb5690606f6db39d3638f8495f Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Tue, 19 Mar 2024 16:55:28 +0000 Subject: [PATCH 3/3] Update pro reference. --- packages/pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pro b/packages/pro index 7d1b3eaf33..993b9f010f 160000 --- a/packages/pro +++ b/packages/pro @@ -1 +1 @@ -Subproject commit 7d1b3eaf33e560d19d591813e5bba91d75ef3953 +Subproject commit 993b9f010f619b7f8b50c89105c645e3d874929e