From ae99dffb2b7a870930e399be1b964f28bdf0087f Mon Sep 17 00:00:00 2001 From: mshanemc Date: Thu, 28 Dec 2023 18:39:51 -0600 Subject: [PATCH] test: ut for env global env/mode changes --- test/unit/globalTest.ts | 35 ++++++++++++++++++++++++++++------- test/unit/loggerTest.ts | 39 ++++++++++++++++++++++++--------------- 2 files changed, 52 insertions(+), 22 deletions(-) diff --git a/test/unit/globalTest.ts b/test/unit/globalTest.ts index 828c1d9063..5ccbf88b54 100644 --- a/test/unit/globalTest.ts +++ b/test/unit/globalTest.ts @@ -5,23 +5,28 @@ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ import { expect } from 'chai'; +import { isString } from '@salesforce/ts-types'; import { Global, Mode } from '../../src/global'; describe('Global', () => { describe('environmentMode', () => { - const original = { SFDX_ENV: process.env.SFDX_ENV, SF_ENV: process.env.SF_ENV }; + const originalEnv = { SFDX_ENV: process.env.SFDX_ENV, SF_ENV: process.env.SF_ENV }; + const cleanEnv = () => Object.keys(originalEnv).map((key) => delete process.env[key]); beforeEach(() => { - delete process.env.SFDX_ENV; - delete process.env.SF_ENV; + cleanEnv(); }); after(() => { - process.env.SFDX_ENV = original.SFDX_ENV; - process.env.SF_ENV = original.SF_ENV; + cleanEnv(); + Object.entries(originalEnv) + .filter(([, value]) => isString(value)) + .map(([key, value]) => { + process.env[key] = value; + }); }); - it('uses SFDX_ENV mode', () => { + it('uses SFDX_ENV mode alone', () => { process.env.SFDX_ENV = 'development'; expect(Global.getEnvironmentMode() === Mode.DEVELOPMENT).to.be.true; expect(Global.getEnvironmentMode() === Mode.PRODUCTION).to.be.false; @@ -29,6 +34,14 @@ describe('Global', () => { expect(Global.getEnvironmentMode() === Mode.TEST).to.be.false; }); + it('uses SF_ENV mode alone', () => { + process.env.SF_ENV = 'development'; + expect(Global.getEnvironmentMode() === Mode.DEVELOPMENT).to.be.true; + expect(Global.getEnvironmentMode() === Mode.PRODUCTION).to.be.false; + expect(Global.getEnvironmentMode() === Mode.DEMO).to.be.false; + expect(Global.getEnvironmentMode() === Mode.TEST).to.be.false; + }); + it('prefers SF_ENV mode', () => { process.env.SF_ENV = 'test'; process.env.SFDX_ENV = 'development'; @@ -69,12 +82,20 @@ describe('Global', () => { expect(Global.getEnvironmentMode() === Mode.TEST).to.be.false; }); - it('defaults to production when invalid values are specified', () => { + it('defaults to production when invalid values are specified (SFDX)', () => { process.env.SFDX_ENV = 'notARealMode'; expect(Global.getEnvironmentMode() === Mode.DEVELOPMENT).to.be.false; expect(Global.getEnvironmentMode() === Mode.PRODUCTION).to.be.true; expect(Global.getEnvironmentMode() === Mode.DEMO).to.be.false; expect(Global.getEnvironmentMode() === Mode.TEST).to.be.false; }); + + it('defaults to production when invalid values are specified (SF)', () => { + process.env.SF_ENV = 'notARealMode'; + expect(Global.getEnvironmentMode() === Mode.DEVELOPMENT).to.be.false; + expect(Global.getEnvironmentMode() === Mode.PRODUCTION).to.be.true; + expect(Global.getEnvironmentMode() === Mode.DEMO).to.be.false; + expect(Global.getEnvironmentMode() === Mode.TEST).to.be.false; + }); }); }); diff --git a/test/unit/loggerTest.ts b/test/unit/loggerTest.ts index 68dbaeef76..cfac7013cd 100644 --- a/test/unit/loggerTest.ts +++ b/test/unit/loggerTest.ts @@ -9,6 +9,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ import { expect, config as chaiConfig } from 'chai'; +import { isString } from '@salesforce/ts-types'; import { Logger, LoggerLevel, computeLevel } from '../../src/logger/logger'; import { shouldThrowSync, TestContext } from '../../src/testSetup'; @@ -18,12 +19,20 @@ import { shouldThrowSync, TestContext } from '../../src/testSetup'; chaiConfig.truncateThreshold = 0; describe('Logger', () => { const $$ = new TestContext(); - const sfdxEnv = process.env.SFDX_ENV; - const logRotationPeriodBackup = process.env.SF_LOG_ROTATION_PERIOD; - const logRotationCountBackup = process.env.SF_LOG_ROTATION_COUNT; - - beforeEach(async () => { + const originalEnv = { + SFDX_ENV: process.env.SFDX_ENV, + SF_ENV: process.env.SF_ENV, + SF_LOG_LEVEL: process.env.SF_LOG_LEVEL, + SF_DISABLE_LOG_FILE: process.env.SF_DISABLE_LOG_FILE, + SF_LOG_ROTATION_PERIOD: process.env.SF_LOG_ROTATION_PERIOD, + SF_LOG_ROTATION_COUNT: process.env.SF_LOG_ROTATION_COUNT, + }; + + const cleanEnv = () => Object.keys(originalEnv).map((key) => delete process.env[key]); + beforeEach(() => { + cleanEnv(); process.env.SFDX_ENV = 'test'; + process.env.SF_ENV = 'test'; // Must restore the globally stubbed Logger.child method here. Stubbed in testSetup. // @ts-expect-error: called is a sinon spy property @@ -32,9 +41,15 @@ describe('Logger', () => { afterEach(() => { Logger.destroyRoot(); - if (sfdxEnv) process.env.SFDX_ENV = sfdxEnv; - if (logRotationPeriodBackup) process.env.SF_LOG_ROTATION_PERIOD = logRotationPeriodBackup; - if (logRotationCountBackup) process.env.SF_LOG_ROTATION_COUNT = logRotationCountBackup; + }); + + after(() => { + cleanEnv(); + Object.entries(originalEnv) + .filter(([, value]) => isString(value)) + .map(([key, value]) => { + process.env[key] = value; + }); }); describe('constructor', () => { @@ -47,13 +62,10 @@ describe('Logger', () => { }); describe('DISABLE_LOG_FILE', () => { - const LOG_FILES_DISABLED = process.env.SF_DISABLE_LOG_FILE; before(() => { process.env.SF_DISABLE_LOG_FILE = 'true'; }); - after(() => { - process.env.SF_DISABLE_LOG_FILE = LOG_FILES_DISABLED; - }); + it('should construct a new named logger', async () => { const logger1 = new Logger({ name: 'testLogger-noop' }); expect(logger1).to.be.instanceof(Logger); @@ -66,9 +78,6 @@ describe('Logger', () => { describe('levels', () => { describe('level computation', () => { - afterEach(() => { - delete process.env.SF_LOG_LEVEL; - }); it('should use a matching a level name when passed in', () => { expect(computeLevel('error')).to.equal('error'); });