mirror of
https://github.com/Gitlawb/openclaude.git
synced 2026-08-24 02:34:15 -05:00
test: restore global mock isolation (#1980)
This commit is contained in:
@@ -13,10 +13,14 @@ import {
|
||||
} from '../test/sharedMutationLock.js'
|
||||
|
||||
type SettingsModule = typeof import('../utils/settings/settings.js')
|
||||
type ProviderStartupOverridesModule = typeof import('../utils/providerStartupOverrides.js')
|
||||
|
||||
const actualSettingsModule = (await import(
|
||||
`../utils/settings/settings.ts?providerManagerSettingsActual=${Date.now()}-${Math.random()}`
|
||||
)) as SettingsModule
|
||||
const actualProviderStartupOverridesModule = (await import(
|
||||
`../utils/providerStartupOverrides.ts?providerManagerStartupOverridesActual=${Date.now()}-${Math.random()}`
|
||||
)) as ProviderStartupOverridesModule
|
||||
|
||||
const SYNC_START = '\x1B[?2026h'
|
||||
const SYNC_END = '\x1B[?2026l'
|
||||
@@ -574,6 +578,7 @@ afterEach(() => {
|
||||
try {
|
||||
mock.restore()
|
||||
mock.module('../utils/settings/settings.js', () => actualSettingsModule)
|
||||
mock.module('../utils/providerStartupOverrides.js', () => actualProviderStartupOverridesModule)
|
||||
|
||||
for (const [key, value] of Object.entries(ORIGINAL_ENV)) {
|
||||
if (value === undefined) {
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import { afterAll, describe, expect, mock, test } from 'bun:test'
|
||||
import * as actualConfig from '../../utils/config.js'
|
||||
import * as actualSettings from '../../utils/settings/settings.js'
|
||||
import {
|
||||
acquireSharedMutationLock,
|
||||
releaseSharedMutationLock,
|
||||
@@ -34,6 +36,8 @@ mock.module('../../utils/config.js', () => ({
|
||||
afterAll(() => {
|
||||
try {
|
||||
mock.restore()
|
||||
mock.module('../../utils/settings/settings.js', () => actualSettings)
|
||||
mock.module('../../utils/config.js', () => actualConfig)
|
||||
} finally {
|
||||
releaseSharedMutationLock()
|
||||
}
|
||||
|
||||
@@ -3,7 +3,11 @@ import {
|
||||
acquireSharedMutationLock,
|
||||
releaseSharedMutationLock,
|
||||
} from '../../test/sharedMutationLock.js'
|
||||
import * as actualAnalytics from '../analytics/index.js'
|
||||
import * as actualConfig from '../../utils/config.js'
|
||||
import * as actualSettings from '../../utils/settings/settings.js'
|
||||
import type { Tip } from './types.js'
|
||||
import * as actualTipRegistry from './tipRegistry.js'
|
||||
|
||||
const settingsRef: {
|
||||
value: {
|
||||
@@ -49,6 +53,10 @@ mock.module('../analytics/index.js', () => ({
|
||||
afterAll(() => {
|
||||
try {
|
||||
mock.restore()
|
||||
mock.module('../../utils/settings/settings.js', () => actualSettings)
|
||||
mock.module('../../utils/config.js', () => actualConfig)
|
||||
mock.module('./tipRegistry.js', () => actualTipRegistry)
|
||||
mock.module('../analytics/index.js', () => actualAnalytics)
|
||||
} finally {
|
||||
releaseSharedMutationLock()
|
||||
}
|
||||
|
||||
@@ -17,78 +17,6 @@ import type { SettingsJson } from './settings/types.js'
|
||||
|
||||
const actualSettings = { ...realSettings }
|
||||
|
||||
function restoredGovernancePolicyModule() {
|
||||
const getForbiddenCommitMessagePatterns = (): string[] => {
|
||||
const patterns: string[] = []
|
||||
const sourceNames = [
|
||||
'userSettings',
|
||||
'projectSettings',
|
||||
'localSettings',
|
||||
'policySettings',
|
||||
'flagSettings',
|
||||
]
|
||||
for (const source of sourceNames) {
|
||||
const sourcePatterns =
|
||||
actualSettings.getSettingsForSource(source as never)?.git
|
||||
?.forbiddenCommitMessagePatterns ?? []
|
||||
for (const pattern of sourcePatterns) {
|
||||
if (!patterns.includes(pattern)) {
|
||||
patterns.push(pattern)
|
||||
}
|
||||
}
|
||||
}
|
||||
return patterns
|
||||
}
|
||||
|
||||
const findForbiddenCommitMessagePattern = (message: string): string | null => {
|
||||
const normalizedMessage = message.toLocaleLowerCase()
|
||||
for (const pattern of getForbiddenCommitMessagePatterns()) {
|
||||
if (pattern && normalizedMessage.includes(pattern.toLocaleLowerCase())) {
|
||||
return pattern
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
const sourceHasGitFlag = (
|
||||
key: 'addAICoAuthor' | 'addGeneratedWithFooter',
|
||||
value: boolean,
|
||||
): boolean =>
|
||||
[
|
||||
'userSettings',
|
||||
'projectSettings',
|
||||
'localSettings',
|
||||
'policySettings',
|
||||
'flagSettings',
|
||||
].some(
|
||||
source =>
|
||||
actualSettings.getSettingsForSource(source as never)?.git?.[key] ===
|
||||
value,
|
||||
)
|
||||
|
||||
return {
|
||||
getGitAttributionOptIns: () => {
|
||||
const git = actualSettings.getInitialSettings().git
|
||||
return {
|
||||
addAICoAuthor: git?.addAICoAuthor === true,
|
||||
addGeneratedWithFooter: git?.addGeneratedWithFooter === true,
|
||||
}
|
||||
},
|
||||
isGeneratedCommitAttributionBlocked: () =>
|
||||
sourceHasGitFlag('addAICoAuthor', false),
|
||||
isGeneratedPrAttributionBlocked: () =>
|
||||
sourceHasGitFlag('addGeneratedWithFooter', false),
|
||||
isGitAttributionBlocked: () =>
|
||||
sourceHasGitFlag('addAICoAuthor', false) ||
|
||||
sourceHasGitFlag('addGeneratedWithFooter', false),
|
||||
getForbiddenCommitMessagePatterns,
|
||||
findForbiddenCommitMessagePattern,
|
||||
isMemoryWriteApprovalRequired: () =>
|
||||
actualSettings.getInitialSettings().memory?.requireApprovalBeforeWrite !==
|
||||
false,
|
||||
}
|
||||
}
|
||||
|
||||
let getAttributionTexts: (typeof import('./attribution.js'))['getAttributionTexts']
|
||||
let getDefaultCommitCoAuthorEmail: (typeof import('./attribution.js'))[
|
||||
'getDefaultCommitCoAuthorEmail'
|
||||
@@ -218,25 +146,6 @@ beforeEach(async () => {
|
||||
getSettings_DEPRECATED: () => testSettings,
|
||||
getSettingsForSource: () => testSettings,
|
||||
}))
|
||||
mock.module('./governancePolicy.js', () => ({
|
||||
getGitAttributionOptIns: () => ({
|
||||
addAICoAuthor: testSettings.git?.addAICoAuthor === true,
|
||||
addGeneratedWithFooter:
|
||||
testSettings.git?.addGeneratedWithFooter === true,
|
||||
}),
|
||||
isGeneratedCommitAttributionBlocked: () =>
|
||||
testSettings.git?.addAICoAuthor === false,
|
||||
isGeneratedPrAttributionBlocked: () =>
|
||||
testSettings.git?.addGeneratedWithFooter === false,
|
||||
isGitAttributionBlocked: () =>
|
||||
testSettings.git?.addAICoAuthor === false ||
|
||||
testSettings.git?.addGeneratedWithFooter === false,
|
||||
getForbiddenCommitMessagePatterns: () =>
|
||||
testSettings.git?.forbiddenCommitMessagePatterns ?? [],
|
||||
findForbiddenCommitMessagePattern: () => null,
|
||||
isMemoryWriteApprovalRequired: () =>
|
||||
testSettings.memory?.requireApprovalBeforeWrite !== false,
|
||||
}))
|
||||
const attribution = await import(
|
||||
`./attribution.ts?attributionTest=${Date.now()}-${Math.random()}`
|
||||
)
|
||||
@@ -253,8 +162,9 @@ afterEach(() => {
|
||||
testSettings = {}
|
||||
setClientType(originalClientType)
|
||||
setMainLoopModelOverride(originalMainLoopModelOverride)
|
||||
mock.module('./model/model.js', () => actualModel)
|
||||
mock.module('./model/providers.js', () => actualProviders)
|
||||
mock.module('./settings/settings.js', () => actualSettings)
|
||||
mock.module('./governancePolicy.js', restoredGovernancePolicyModule)
|
||||
restoreEnv()
|
||||
})
|
||||
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
import { describe, expect, mock, test } from 'bun:test'
|
||||
|
||||
import { clearStartupProviderOverrides } from './providerStartupOverrides.js'
|
||||
async function importStartupOverridesForTest() {
|
||||
return import(
|
||||
`./providerStartupOverrides.ts?startupOverridesTest=${Date.now()}-${Math.random()}`
|
||||
)
|
||||
}
|
||||
|
||||
describe('clearStartupProviderOverrides', () => {
|
||||
test('removes stale provider env from user settings and global config env', () => {
|
||||
test('removes stale provider env from user settings and global config env', async () => {
|
||||
const { clearStartupProviderOverrides } = await importStartupOverridesForTest()
|
||||
const updateUserSettings = mock(() => ({ error: null }))
|
||||
const saveConfig = mock((updater: (current: {
|
||||
env: Record<string, string>
|
||||
|
||||
Reference in New Issue
Block a user