Merge pull request #15651 from Budibase/demock-environment-variable-tests
De-mock the environment variable tests.
This commit is contained in:
commit
ab8ec8f09d
|
@ -1,153 +1,106 @@
|
|||
const pg = require("pg")
|
||||
|
||||
jest.mock("pg", () => {
|
||||
return {
|
||||
Client: jest.fn().mockImplementation(() => ({
|
||||
connect: jest.fn(),
|
||||
query: jest.fn().mockImplementation(() => ({ rows: [] })),
|
||||
end: jest.fn().mockImplementation((fn: any) => fn()),
|
||||
})),
|
||||
queryMock: jest.fn().mockImplementation(() => {}),
|
||||
on: jest.fn(),
|
||||
}
|
||||
})
|
||||
import * as setup from "./utilities"
|
||||
import { structures } from "./utilities"
|
||||
import { mocks } from "@budibase/backend-core/tests"
|
||||
import { env, events } from "@budibase/backend-core"
|
||||
import { QueryPreview } from "@budibase/types"
|
||||
import { setEnv } from "@budibase/backend-core"
|
||||
import { Datasource } from "@budibase/types"
|
||||
import TestConfiguration from "../../../tests/utilities/TestConfiguration"
|
||||
import {
|
||||
DatabaseName,
|
||||
datasourceDescribe,
|
||||
} from "../../../integrations/tests/utils"
|
||||
|
||||
const structures = setup.structures
|
||||
const describes = datasourceDescribe({ only: [DatabaseName.POSTGRES] })
|
||||
|
||||
env._set("ENCRYPTION_KEY", "budibase")
|
||||
mocks.licenses.useEnvironmentVariables()
|
||||
if (describes.length > 0) {
|
||||
describe.each(describes)("/api/env/variables", ({ dsProvider }) => {
|
||||
const config = new TestConfiguration()
|
||||
|
||||
describe("/api/env/variables", () => {
|
||||
let request = setup.getRequest()
|
||||
let config = setup.getConfig()
|
||||
|
||||
afterAll(setup.afterAll)
|
||||
let rawDatasource: Datasource
|
||||
let restoreEnv: () => void
|
||||
|
||||
beforeAll(async () => {
|
||||
await config.init()
|
||||
restoreEnv = setEnv({ ENCRYPTION_KEY: "budibase" })
|
||||
mocks.licenses.useEnvironmentVariables()
|
||||
|
||||
const ds = await dsProvider()
|
||||
rawDatasource = ds.rawDatasource!
|
||||
})
|
||||
|
||||
afterAll(() => {
|
||||
restoreEnv()
|
||||
})
|
||||
|
||||
beforeEach(async () => {
|
||||
const { variables } = await config.api.environment.fetch()
|
||||
for (const variable of variables) {
|
||||
await config.api.environment.destroy(variable)
|
||||
}
|
||||
|
||||
await config.api.environment.create({
|
||||
name: "test",
|
||||
production: rawDatasource.config!.password,
|
||||
development: rawDatasource.config!.password,
|
||||
})
|
||||
})
|
||||
|
||||
it("should be able check the status of env var API", async () => {
|
||||
const res = await request
|
||||
.get(`/api/env/variables/status`)
|
||||
.set(config.defaultHeaders())
|
||||
.expect("Content-Type", /json/)
|
||||
.expect(200)
|
||||
|
||||
expect(res.body.encryptionKeyAvailable).toEqual(true)
|
||||
})
|
||||
|
||||
it("should be able to create an environment variable", async () => {
|
||||
await request
|
||||
.post(`/api/env/variables`)
|
||||
.send(structures.basicEnvironmentVariable("test", "test"))
|
||||
.set(config.defaultHeaders())
|
||||
.expect(200)
|
||||
const { encryptionKeyAvailable } = await config.api.environment.status()
|
||||
expect(encryptionKeyAvailable).toEqual(true)
|
||||
})
|
||||
|
||||
it("should be able to fetch the 'test' variable name", async () => {
|
||||
const res = await request
|
||||
.get(`/api/env/variables`)
|
||||
.set(config.defaultHeaders())
|
||||
.expect("Content-Type", /json/)
|
||||
.expect(200)
|
||||
expect(res.body.variables.length).toEqual(1)
|
||||
expect(res.body.variables[0]).toEqual("test")
|
||||
const { variables } = await config.api.environment.fetch()
|
||||
expect(variables.length).toEqual(1)
|
||||
expect(variables[0]).toEqual("test")
|
||||
})
|
||||
|
||||
it("should be able to update the environment variable 'test'", async () => {
|
||||
const varName = "test"
|
||||
await request
|
||||
.patch(`/api/env/variables/${varName}`)
|
||||
.send(structures.basicEnvironmentVariable("test", "test1"))
|
||||
.set(config.defaultHeaders())
|
||||
.expect(200)
|
||||
await config.api.environment.update("test", {
|
||||
production: "test1",
|
||||
development: "test1",
|
||||
})
|
||||
})
|
||||
|
||||
it("should be able to delete the environment variable 'test'", async () => {
|
||||
const varName = "test"
|
||||
await request
|
||||
.delete(`/api/env/variables/${varName}`)
|
||||
.set(config.defaultHeaders())
|
||||
.expect(200)
|
||||
await config.api.environment.destroy("test")
|
||||
})
|
||||
|
||||
it("should create a datasource (using the environment variable) and query", async () => {
|
||||
const datasourceBase = structures.basicDatasource()
|
||||
await request
|
||||
.post(`/api/env/variables`)
|
||||
.send(structures.basicEnvironmentVariable("test", "test"))
|
||||
.set(config.defaultHeaders())
|
||||
|
||||
datasourceBase.datasource.config = {
|
||||
const datasource = await config.api.datasource.create({
|
||||
...structures.basicDatasource().datasource,
|
||||
config: {
|
||||
...rawDatasource.config,
|
||||
password: "{{ env.test }}",
|
||||
}
|
||||
const response = await request
|
||||
.post(`/api/datasources`)
|
||||
.send(datasourceBase)
|
||||
.set(config.defaultHeaders())
|
||||
.expect("Content-Type", /json/)
|
||||
.expect(200)
|
||||
expect(response.body.datasource._id).toBeDefined()
|
||||
},
|
||||
})
|
||||
|
||||
const response2 = await request
|
||||
.post(`/api/queries`)
|
||||
.send(structures.basicQuery(response.body.datasource._id))
|
||||
.set(config.defaultHeaders())
|
||||
.expect("Content-Type", /json/)
|
||||
.expect(200)
|
||||
expect(response2.body._id).toBeDefined()
|
||||
const query = await config.api.query.save({
|
||||
...structures.basicQuery(datasource._id!),
|
||||
fields: { sql: "SELECT 1" },
|
||||
})
|
||||
expect(query._id).toBeDefined()
|
||||
})
|
||||
|
||||
it("should run a query preview and check the mocked results", async () => {
|
||||
const datasourceBase = structures.basicDatasource()
|
||||
await request
|
||||
.post(`/api/env/variables`)
|
||||
.send(structures.basicEnvironmentVariable("test", "test"))
|
||||
.set(config.defaultHeaders())
|
||||
|
||||
datasourceBase.datasource.config = {
|
||||
const datasource = await config.api.datasource.create({
|
||||
...structures.basicDatasource().datasource,
|
||||
config: {
|
||||
...rawDatasource.config,
|
||||
password: "{{ env.test }}",
|
||||
}
|
||||
const response = await request
|
||||
.post(`/api/datasources`)
|
||||
.send(datasourceBase)
|
||||
.set(config.defaultHeaders())
|
||||
.expect("Content-Type", /json/)
|
||||
.expect(200)
|
||||
expect(response.body.datasource._id).toBeDefined()
|
||||
|
||||
const queryPreview: QueryPreview = {
|
||||
datasourceId: response.body.datasource._id,
|
||||
parameters: [],
|
||||
fields: {},
|
||||
queryVerb: "read",
|
||||
name: response.body.datasource.name,
|
||||
transformer: null,
|
||||
schema: {},
|
||||
readable: true,
|
||||
}
|
||||
const res = await request
|
||||
.post(`/api/queries/preview`)
|
||||
.send(queryPreview)
|
||||
.set(config.defaultHeaders())
|
||||
.expect("Content-Type", /json/)
|
||||
.expect(200)
|
||||
expect(res.body.rows.length).toEqual(0)
|
||||
expect(events.query.previewed).toHaveBeenCalledTimes(1)
|
||||
// API doesn't include config in response
|
||||
delete response.body.datasource.config
|
||||
expect(events.query.previewed).toHaveBeenCalledWith(
|
||||
response.body.datasource,
|
||||
{
|
||||
...queryPreview,
|
||||
nullDefaultSupport: true,
|
||||
}
|
||||
)
|
||||
expect(pg.Client).toHaveBeenCalledWith({ password: "test", ssl: undefined })
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
const query = await config.api.query.save({
|
||||
...structures.basicQuery(datasource._id!),
|
||||
fields: { sql: "SELECT 1 as id" },
|
||||
})
|
||||
|
||||
const { rows } = await config.api.query.preview({
|
||||
...query,
|
||||
queryId: query._id!,
|
||||
})
|
||||
|
||||
expect(rows).toEqual([{ id: 1 }])
|
||||
})
|
||||
})
|
||||
}
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
import { Expectations, TestAPI } from "./base"
|
||||
import {
|
||||
CreateEnvironmentVariableRequest,
|
||||
CreateEnvironmentVariableResponse,
|
||||
GetEnvironmentVariablesResponse,
|
||||
StatusEnvironmentVariableResponse,
|
||||
UpdateEnvironmentVariableRequest,
|
||||
} from "@budibase/types"
|
||||
|
||||
export class EnvironmentAPI extends TestAPI {
|
||||
create = async (
|
||||
body: CreateEnvironmentVariableRequest,
|
||||
expectations?: Expectations
|
||||
) => {
|
||||
return await this._post<CreateEnvironmentVariableResponse>(
|
||||
`/api/env/variables`,
|
||||
{ body, expectations }
|
||||
)
|
||||
}
|
||||
|
||||
status = async (expectations?: Expectations) => {
|
||||
return await this._get<StatusEnvironmentVariableResponse>(
|
||||
`/api/env/variables/status`,
|
||||
{ expectations }
|
||||
)
|
||||
}
|
||||
|
||||
fetch = async (expectations?: Expectations) => {
|
||||
return await this._get<GetEnvironmentVariablesResponse>(
|
||||
`/api/env/variables`,
|
||||
{ expectations }
|
||||
)
|
||||
}
|
||||
|
||||
update = async (
|
||||
varName: string,
|
||||
body: UpdateEnvironmentVariableRequest,
|
||||
expectations?: Expectations
|
||||
) => {
|
||||
return await this._patch<void>(`/api/env/variables/${varName}`, {
|
||||
body,
|
||||
expectations,
|
||||
})
|
||||
}
|
||||
|
||||
destroy = async (varName: string, expectations?: Expectations) => {
|
||||
return await this._delete<void>(`/api/env/variables/${varName}`, {
|
||||
expectations,
|
||||
})
|
||||
}
|
||||
}
|
|
@ -17,6 +17,7 @@ import { RowActionAPI } from "./rowAction"
|
|||
import { AutomationAPI } from "./automation"
|
||||
import { PluginAPI } from "./plugin"
|
||||
import { WebhookAPI } from "./webhook"
|
||||
import { EnvironmentAPI } from "./environment"
|
||||
import { UserPublicAPI } from "./public/user"
|
||||
|
||||
export default class API {
|
||||
|
@ -25,6 +26,7 @@ export default class API {
|
|||
automation: AutomationAPI
|
||||
backup: BackupAPI
|
||||
datasource: DatasourceAPI
|
||||
environment: EnvironmentAPI
|
||||
legacyView: LegacyViewAPI
|
||||
permission: PermissionAPI
|
||||
plugin: PluginAPI
|
||||
|
@ -49,6 +51,7 @@ export default class API {
|
|||
this.automation = new AutomationAPI(config)
|
||||
this.backup = new BackupAPI(config)
|
||||
this.datasource = new DatasourceAPI(config)
|
||||
this.environment = new EnvironmentAPI(config)
|
||||
this.legacyView = new LegacyViewAPI(config)
|
||||
this.permission = new PermissionAPI(config)
|
||||
this.plugin = new PluginAPI(config)
|
||||
|
|
|
@ -37,6 +37,7 @@ import {
|
|||
DeepPartial,
|
||||
FilterCondition,
|
||||
AutomationTriggerResult,
|
||||
CreateEnvironmentVariableRequest,
|
||||
} from "@budibase/types"
|
||||
import { LoopInput } from "../../definitions/automations"
|
||||
import { merge } from "lodash"
|
||||
|
@ -574,7 +575,7 @@ export function basicEnvironmentVariable(
|
|||
name: string,
|
||||
prod: string,
|
||||
dev?: string
|
||||
) {
|
||||
): CreateEnvironmentVariableRequest {
|
||||
return {
|
||||
name,
|
||||
production: prod,
|
||||
|
|
Loading…
Reference in New Issue