Split withEnv, so the core env isn't touched in it.

This commit is contained in:
Sam Rose 2023-12-11 17:43:56 +00:00
parent 0f54f64ad9
commit c50e8fd05b
No known key found for this signature in database
2 changed files with 29 additions and 4 deletions

View File

@ -39,7 +39,7 @@ describe("Google Sheets Integration", () => {
let cleanupEnv: () => void let cleanupEnv: () => void
beforeAll(() => { beforeAll(() => {
cleanupEnv = config.setEnv({ cleanupEnv = config.setCoreEnv({
GOOGLE_CLIENT_ID: "test", GOOGLE_CLIENT_ID: "test",
GOOGLE_CLIENT_SECRET: "test", GOOGLE_CLIENT_SECRET: "test",
}) })

View File

@ -218,20 +218,45 @@ class TestConfiguration {
*/ */
setEnv(newEnvVars: Partial<typeof env>): () => void { setEnv(newEnvVars: Partial<typeof env>): () => void {
const oldEnv = cloneDeep(env) const oldEnv = cloneDeep(env)
const oldCoreEnv = cloneDeep(coreEnv)
let key: keyof typeof newEnvVars let key: keyof typeof newEnvVars
for (key in newEnvVars) { for (key in newEnvVars) {
env._set(key, newEnvVars[key]) env._set(key, newEnvVars[key])
coreEnv._set(key, newEnvVars[key])
} }
return () => { return () => {
for (const [key, value] of Object.entries(oldEnv)) { for (const [key, value] of Object.entries(oldEnv)) {
env._set(key, value) env._set(key, value)
} }
}
}
for (const [key, value] of Object.entries(oldCoreEnv)) { async withCoreEnv(
newEnvVars: Partial<typeof coreEnv>,
f: () => Promise<void>
) {
let cleanup = this.setCoreEnv(newEnvVars)
try {
await f()
} finally {
cleanup()
}
}
/*
* Sets the environment variables to the given values and returns a function
* that can be called to reset the environment variables to their original values.
*/
setCoreEnv(newEnvVars: Partial<typeof coreEnv>): () => void {
const oldEnv = cloneDeep(env)
let key: keyof typeof newEnvVars
for (key in newEnvVars) {
coreEnv._set(key, newEnvVars[key])
}
return () => {
for (const [key, value] of Object.entries(oldEnv)) {
coreEnv._set(key, value) coreEnv._set(key, value)
} }
} }