Fix snapshots test

This commit is contained in:
Adria Navarro Redo 2023-01-25 19:01:24 +00:00 committed by adrinr
parent a54c1a1647
commit 9242470f6f
8 changed files with 82 additions and 37 deletions

View File

@ -3,6 +3,7 @@
"private": true, "private": true,
"devDependencies": { "devDependencies": {
"@rollup/plugin-json": "^4.0.2", "@rollup/plugin-json": "^4.0.2",
"@types/supertest": "^2.0.12",
"@typescript-eslint/parser": "5.45.0", "@typescript-eslint/parser": "5.45.0",
"babel-eslint": "^10.0.3", "babel-eslint": "^10.0.3",
"eslint": "^7.28.0", "eslint": "^7.28.0",

View File

@ -49,10 +49,11 @@ export async function getUser(
} }
const client = await redis.getUserClient() const client = await redis.getUserClient()
// try cache // try cache
let user = await client.get(userId) const cacheKey = getCacheKey(tenantId!, userId)
let user = await client.get(cacheKey)
if (!user) { if (!user) {
user = await populateUser(userId, tenantId) user = await populateUser(userId, tenantId)
await client.store(userId, user, EXPIRY_SECONDS) await client.store(cacheKey, user, EXPIRY_SECONDS)
} }
if (user && !user.tenantId && tenantId) { if (user && !user.tenantId && tenantId) {
// make sure the tenant ID is always correct/set // make sure the tenant ID is always correct/set
@ -62,6 +63,11 @@ export async function getUser(
} }
export async function invalidateUser(userId: string) { export async function invalidateUser(userId: string) {
const tenantId = getTenantId()
const cacheKey = getCacheKey(tenantId, userId)
const client = await redis.getUserClient() const client = await redis.getUserClient()
await client.delete(userId) await client.delete(cacheKey)
} }
const getCacheKey = (tenantId: string, userId: string) =>
`${tenantId}_${userId}`

View File

@ -7,7 +7,7 @@ Array [
"entities": Array [ "entities": Array [
Object { Object {
"_id": "ta_users", "_id": "ta_users",
"_rev": "1-6f4013e796887f1771bf7837598d87e7", "_rev": "1-2375e1bc58aeec664dc1b1f04ad43e44",
"createdAt": "2020-01-01T00:00:00.000Z", "createdAt": "2020-01-01T00:00:00.000Z",
"name": "Users", "name": "Users",
"primaryDisplay": "email", "primaryDisplay": "email",

View File

@ -18,7 +18,7 @@ describe("/authenticate", () => {
.set(config.defaultHeaders()) .set(config.defaultHeaders())
.expect("Content-Type", /json/) .expect("Content-Type", /json/)
.expect(200) .expect(200)
expect(res.body._id).toEqual(generateUserMetadataID("us_uuid1")) expect(res.body._id).toEqual(generateUserMetadataID(config.user._id))
}) })
}) })
}) })

View File

@ -4,6 +4,10 @@ import { checkBuilderEndpoint } from "./utilities/TestFunctions"
import { checkCacheForDynamicVariable } from "../../../threads/utils" import { checkCacheForDynamicVariable } from "../../../threads/utils"
import { events } from "@budibase/backend-core" import { events } from "@budibase/backend-core"
import tk from "timekeeper"
import { mocks } from "@budibase/backend-core/tests"
tk.freeze(mocks.date.MOCK_DATE)
let { basicDatasource } = setup.structures let { basicDatasource } = setup.structures
const pg = require("pg") const pg = require("pg")
@ -55,7 +59,14 @@ describe("/datasources", () => {
datasource: any, datasource: any,
fields: { path: string; queryString: string } fields: { path: string; queryString: string }
) { ) {
return config.previewQuery(request, config, datasource, fields) return config.previewQuery(
request,
config,
datasource,
fields,
undefined,
""
)
} }
it("should invalidate changed or removed variables", async () => { it("should invalidate changed or removed variables", async () => {

View File

@ -1,5 +1,6 @@
import TestConfig from "../../../../tests/utilities/TestConfiguration" import TestConfig from "../../../../tests/utilities/TestConfiguration"
import env from "../../../../environment" import env from "../../../../environment"
import supertest from "supertest"
export * as structures from "../../../../tests/utilities/structures" export * as structures from "../../../../tests/utilities/structures"
function user() { function user() {
@ -44,7 +45,8 @@ export function delay(ms: number) {
return new Promise(resolve => setTimeout(resolve, ms)) return new Promise(resolve => setTimeout(resolve, ms))
} }
let request: any, config: any let request: supertest.SuperTest<supertest.Test> | undefined | null,
config: TestConfig | null
export function beforeAll() { export function beforeAll() {
config = new TestConfig() config = new TestConfig()
@ -65,14 +67,14 @@ export function getRequest() {
if (!request) { if (!request) {
beforeAll() beforeAll()
} }
return request return request!
} }
export function getConfig() { export function getConfig() {
if (!config) { if (!config) {
beforeAll() beforeAll()
} }
return config return config!
} }
export async function switchToSelfHosted(func: any) { export async function switchToSelfHosted(func: any) {

View File

@ -39,11 +39,17 @@ import { cleanup } from "../../utilities/fileSystem"
import newid from "../../db/newid" import newid from "../../db/newid"
import { generateUserMetadataID } from "../../db/utils" import { generateUserMetadataID } from "../../db/utils"
import { startup } from "../../startup" import { startup } from "../../startup"
import { db } from "@budibase/backend-core"
import Nano from "@budibase/nano"
import { AuthToken } from "@budibase/types" import { AuthToken } from "@budibase/types"
const supertest = require("supertest") const supertest = require("supertest")
type DefaultUserValues = {
globalUserId: string
email: string
firstName: string
lastName: string
csrfToken: string
}
class TestConfiguration { class TestConfiguration {
server: any server: any
request: any request: any
@ -61,13 +67,7 @@ class TestConfiguration {
automation: any automation: any
datasource: any datasource: any
tenantId: string | null tenantId: string | null
defaultValues: { defaultUserValues: DefaultUserValues
globalUserId: string
email: string
firstName: string
lastName: string
csrfToken: string
}
constructor(openServer = true) { constructor(openServer = true) {
if (openServer) { if (openServer) {
@ -83,10 +83,10 @@ class TestConfiguration {
this.appId = null this.appId = null
this.allApps = [] this.allApps = []
this.tenantId = null this.tenantId = null
this.defaultValues = this.populateDefaultValues() this.defaultUserValues = this.populateDefaultUserValues()
} }
populateDefaultValues() { populateDefaultUserValues(): DefaultUserValues {
return { return {
globalUserId: `us_${faker.datatype.uuid()}`, globalUserId: `us_${faker.datatype.uuid()}`,
email: faker.internet.email(), email: faker.internet.email(),
@ -118,10 +118,10 @@ class TestConfiguration {
getUserDetails() { getUserDetails() {
return { return {
globalId: this.defaultValues.globalUserId, globalId: this.defaultUserValues.globalUserId,
email: this.defaultValues.email, email: this.defaultUserValues.email,
firstName: this.defaultValues.firstName, firstName: this.defaultUserValues.firstName,
lastName: this.defaultValues.lastName, lastName: this.defaultUserValues.lastName,
} }
} }
@ -147,7 +147,7 @@ class TestConfiguration {
// use a new id as the name to avoid name collisions // use a new id as the name to avoid name collisions
async init(appName = newid()) { async init(appName = newid()) {
this.defaultValues = this.populateDefaultValues() this.defaultUserValues = this.populateDefaultUserValues()
if (context.isMultiTenant()) { if (context.isMultiTenant()) {
this.tenantId = `tenant-${newid()}` this.tenantId = `tenant-${newid()}`
context.updateTenantId(this.tenantId) context.updateTenantId(this.tenantId)
@ -201,12 +201,12 @@ class TestConfiguration {
// USER / AUTH // USER / AUTH
async globalUser({ async globalUser({
id = this.defaultValues.globalUserId, id = this.defaultUserValues.globalUserId,
firstName = this.defaultValues.firstName, firstName = this.defaultUserValues.firstName,
lastName = this.defaultValues.lastName, lastName = this.defaultUserValues.lastName,
builder = true, builder = true,
admin = false, admin = false,
email = this.defaultValues.email, email = this.defaultUserValues.email,
roles, roles,
}: any = {}) { }: any = {}) {
return tenancy.doWithGlobalDB(this.getTenantId(), async (db: any) => { return tenancy.doWithGlobalDB(this.getTenantId(), async (db: any) => {
@ -227,7 +227,7 @@ class TestConfiguration {
await sessions.createASession(id, { await sessions.createASession(id, {
sessionId: "sessionid", sessionId: "sessionid",
tenantId: this.getTenantId(), tenantId: this.getTenantId(),
csrfToken: this.defaultValues.csrfToken, csrfToken: this.defaultUserValues.csrfToken,
}) })
if (builder) { if (builder) {
user.builder = { global: true } user.builder = { global: true }
@ -249,9 +249,9 @@ class TestConfiguration {
async createUser( async createUser(
id = null, id = null,
firstName = this.defaultValues.firstName, firstName = this.defaultUserValues.firstName,
lastName = this.defaultValues.lastName, lastName = this.defaultUserValues.lastName,
email = this.defaultValues.email, email = this.defaultUserValues.email,
builder = true, builder = true,
admin = false, admin = false,
roles = {} roles = {}
@ -321,7 +321,7 @@ class TestConfiguration {
defaultHeaders(extras = {}) { defaultHeaders(extras = {}) {
const tenantId = this.getTenantId() const tenantId = this.getTenantId()
const authObj: AuthToken = { const authObj: AuthToken = {
userId: this.defaultValues.globalUserId, userId: this.defaultUserValues.globalUserId,
sessionId: "sessionid", sessionId: "sessionid",
tenantId, tenantId,
} }
@ -337,7 +337,7 @@ class TestConfiguration {
`${constants.Cookie.Auth}=${authToken}`, `${constants.Cookie.Auth}=${authToken}`,
`${constants.Cookie.CurrentApp}=${appToken}`, `${constants.Cookie.CurrentApp}=${appToken}`,
], ],
[constants.Header.CSRF_TOKEN]: this.defaultValues.csrfToken, [constants.Header.CSRF_TOKEN]: this.defaultUserValues.csrfToken,
...extras, ...extras,
} }
if (this.appId) { if (this.appId) {
@ -366,7 +366,7 @@ class TestConfiguration {
} }
async roleHeaders({ async roleHeaders({
email = this.defaultValues.email, email = this.defaultUserValues.email,
roleId = roles.BUILTIN_ROLE_IDS.ADMIN, roleId = roles.BUILTIN_ROLE_IDS.ADMIN,
builder = false, builder = false,
prodApp = true, prodApp = true,
@ -376,7 +376,7 @@ class TestConfiguration {
// API // API
async generateApiKey(userId = this.defaultValues.globalUserId) { async generateApiKey(userId = this.defaultUserValues.globalUserId) {
return tenancy.doWithGlobalDB(this.getTenantId(), async (db: any) => { return tenancy.doWithGlobalDB(this.getTenantId(), async (db: any) => {
const id = dbCore.generateDevInfoID(userId) const id = dbCore.generateDevInfoID(userId)
let devInfo let devInfo

View File

@ -986,6 +986,11 @@
estree-walker "^1.0.1" estree-walker "^1.0.1"
picomatch "^2.2.2" picomatch "^2.2.2"
"@types/cookiejar@*":
version "2.1.2"
resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.2.tgz#66ad9331f63fe8a3d3d9d8c6e3906dd10f6446e8"
integrity sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==
"@types/estree@0.0.39": "@types/estree@0.0.39":
version "0.0.39" version "0.0.39"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
@ -1001,6 +1006,11 @@
resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c"
integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==
"@types/node@*":
version "18.11.18"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f"
integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==
"@types/node@>= 8": "@types/node@>= 8":
version "18.0.0" version "18.0.0"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.0.tgz#67c7b724e1bcdd7a8821ce0d5ee184d3b4dd525a" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.0.tgz#67c7b724e1bcdd7a8821ce0d5ee184d3b4dd525a"
@ -1011,6 +1021,21 @@
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==
"@types/superagent@*":
version "4.1.16"
resolved "https://registry.yarnpkg.com/@types/superagent/-/superagent-4.1.16.tgz#12c9c16f232f9d89beab91d69368f96ce8e2d881"
integrity sha512-tLfnlJf6A5mB6ddqF159GqcDizfzbMUB1/DeT59/wBNqzRTNNKsaw79A/1TZ84X+f/EwWH8FeuSkjlCLyqS/zQ==
dependencies:
"@types/cookiejar" "*"
"@types/node" "*"
"@types/supertest@^2.0.12":
version "2.0.12"
resolved "https://registry.yarnpkg.com/@types/supertest/-/supertest-2.0.12.tgz#ddb4a0568597c9aadff8dbec5b2e8fddbe8692fc"
integrity sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==
dependencies:
"@types/superagent" "*"
"@typescript-eslint/parser@5.45.0": "@typescript-eslint/parser@5.45.0":
version "5.45.0" version "5.45.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.45.0.tgz#b18a5f6b3cf1c2b3e399e9d2df4be40d6b0ddd0e" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.45.0.tgz#b18a5f6b3cf1c2b3e399e9d2df4be40d6b0ddd0e"