Fix snapshots test
This commit is contained in:
parent
a54c1a1647
commit
9242470f6f
|
@ -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",
|
||||||
|
|
|
@ -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}`
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
|
@ -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 () => {
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
25
yarn.lock
25
yarn.lock
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue