From 5e328e85e9adb7a7156730699f91910c3ba853c9 Mon Sep 17 00:00:00 2001 From: Ben King <9087625+benfdking@users.noreply.github.com> Date: Tue, 29 Jul 2025 12:35:12 +0100 Subject: [PATCH] chore(vscode): move to central temp dir creation - cleans up tem dir after every test --- vscode/extension/tests/bad_setup.spec.ts | 17 +++---- vscode/extension/tests/broken_project.spec.ts | 31 +++++------ vscode/extension/tests/diagnostics.spec.ts | 39 ++++++-------- .../extension/tests/external_models.spec.ts | 11 +--- .../extension/tests/find_references.spec.ts | 51 ++++++++++++------- vscode/extension/tests/fixtures.ts | 25 ++++++++- vscode/extension/tests/format.spec.ts | 9 ++-- .../extension/tests/go_to_definition.spec.ts | 12 ++--- vscode/extension/tests/hints.spec.ts | 5 +- vscode/extension/tests/lineage.spec.ts | 7 ++- .../extension/tests/lineage_settings.spec.ts | 4 +- vscode/extension/tests/python_env.spec.ts | 25 ++++----- vscode/extension/tests/quickfix.spec.ts | 7 +-- vscode/extension/tests/rename_cte.spec.ts | 32 +++++++----- vscode/extension/tests/render.spec.ts | 11 ++-- vscode/extension/tests/stop.spec.ts | 7 +-- vscode/extension/tests/tcloud.spec.ts | 21 ++------ vscode/extension/tests/tests.spec.ts | 9 ++-- vscode/extension/tests/venv_naming.spec.ts | 7 +-- 19 files changed, 159 insertions(+), 171 deletions(-) diff --git a/vscode/extension/tests/bad_setup.spec.ts b/vscode/extension/tests/bad_setup.spec.ts index c4da69ca23..3f715e525a 100644 --- a/vscode/extension/tests/bad_setup.spec.ts +++ b/vscode/extension/tests/bad_setup.spec.ts @@ -16,10 +16,8 @@ import { test('missing LSP dependencies shows install prompt', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) const pythonEnvDir = path.join(tempDir, '.venv') const pythonDetails = await createVirtualEnvironment(pythonEnvDir) const custom_materializations = path.join( @@ -60,10 +58,11 @@ test('missing LSP dependencies shows install prompt', async ({ expect(await page.locator('text=Install').count()).toBeGreaterThanOrEqual(1) }) -test('lineage, no sqlmesh found', async ({ page, sharedCodeServer }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) +test('lineage, no sqlmesh found', async ({ + page, + sharedCodeServer, + tempDir, +}) => { const pythonEnvDir = path.join(tempDir, '.venv') const pythonDetails = await createVirtualEnvironment(pythonEnvDir) @@ -95,10 +94,8 @@ test('lineage, no sqlmesh found', async ({ page, sharedCodeServer }) => { test.skip('check that the LSP runs correctly by opening lineage when looking at another file before not in workspace', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) await fs.copy(SUSHI_SOURCE_PATH, tempDir) const pythonEnvDir = path.join(tempDir, '.venv') const pythonDetails = await createVirtualEnvironment(pythonEnvDir) diff --git a/vscode/extension/tests/broken_project.spec.ts b/vscode/extension/tests/broken_project.spec.ts index 8fe78fa321..f32a39a86d 100644 --- a/vscode/extension/tests/broken_project.spec.ts +++ b/vscode/extension/tests/broken_project.spec.ts @@ -1,6 +1,5 @@ import { test, expect } from './fixtures' import fs from 'fs-extra' -import os from 'os' import path from 'path' import { openLineageView, @@ -12,10 +11,11 @@ import { } from './utils' import { createPythonInterpreterSettingsSpecifier } from './utils_code_server' -test('bad project, double model', async ({ page, sharedCodeServer }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) +test('bad project, double model', async ({ + tempDir, + page, + sharedCodeServer, +}) => { await fs.copy(SUSHI_SOURCE_PATH, tempDir) // Read the customers.sql file @@ -52,11 +52,9 @@ test('bad project, double model', async ({ page, sharedCodeServer }) => { test('working project, then broken through adding double model, then refixed', async ({ page, + tempDir, sharedCodeServer, }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) @@ -149,11 +147,9 @@ test('working project, then broken through adding double model, then refixed', a test('bad project, double model, then fixed', async ({ page, + tempDir, sharedCodeServer, }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) await fs.copy(SUSHI_SOURCE_PATH, tempDir) // Read the customers.sql file @@ -218,10 +214,8 @@ test('bad project, double model, then fixed', async ({ test('bad project, double model, check lineage', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) await fs.copy(SUSHI_SOURCE_PATH, tempDir) // Read the customers.sql file @@ -248,10 +242,11 @@ test('bad project, double model, check lineage', async ({ await page.waitForTimeout(500) }) -test('bad model block, then fixed', async ({ page, sharedCodeServer }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) +test('bad model block, then fixed', async ({ + page, + sharedCodeServer, + tempDir, +}) => { // Copy over the sushi project await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) diff --git a/vscode/extension/tests/diagnostics.spec.ts b/vscode/extension/tests/diagnostics.spec.ts index fcac5cecf0..1c0e471e82 100644 --- a/vscode/extension/tests/diagnostics.spec.ts +++ b/vscode/extension/tests/diagnostics.spec.ts @@ -10,8 +10,8 @@ import yaml from 'yaml' test('Workspace diagnostics show up in the diagnostics panel', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) @@ -55,10 +55,8 @@ test.describe('Bad config.py/config.yaml file issues', () => { test('sqlmesh init, then corrupted config.yaml, bad yaml', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) await setup(tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) @@ -135,10 +133,8 @@ test.describe('Bad config.py/config.yaml file issues', () => { test('sushi example, correct python, bad config', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) @@ -170,10 +166,11 @@ test.describe('Bad config.py/config.yaml file issues', () => { await expect(errorElement).toBeVisible({ timeout: 5000 }) }) - test('sushi example, bad config.py', async ({ page, sharedCodeServer }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) + test('sushi example, bad config.py', async ({ + page, + sharedCodeServer, + tempDir, + }) => { await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) @@ -205,10 +202,7 @@ test.describe('Bad config.py/config.yaml file issues', () => { }) test.describe('Diagnostics for bad SQLMesh models', () => { - test('duplicate model names', async ({ page, sharedCodeServer }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) + test('duplicate model names', async ({ page, sharedCodeServer, tempDir }) => { // Copy over the sushi project await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) @@ -246,10 +240,7 @@ test.describe('Diagnostics for bad SQLMesh models', () => { .isVisible({ timeout: 5_000 }) }) - test('bad model block', async ({ page, sharedCodeServer }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) + test('bad model block', async ({ page, sharedCodeServer, tempDir }) => { // Copy over the sushi project await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) @@ -289,11 +280,11 @@ test.describe('Diagnostics for bad SQLMesh models', () => { }) test.describe('Diagnostics for bad audits', () => { - test('bad audit block in audit', async ({ page, sharedCodeServer }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) - + test('bad audit block in audit', async ({ + page, + sharedCodeServer, + tempDir, + }) => { // Copy over the sushi project await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) diff --git a/vscode/extension/tests/external_models.spec.ts b/vscode/extension/tests/external_models.spec.ts index 8d70edae62..4fdd19fa61 100644 --- a/vscode/extension/tests/external_models.spec.ts +++ b/vscode/extension/tests/external_models.spec.ts @@ -1,4 +1,3 @@ -import os from 'os' import { openServerPage, SUSHI_SOURCE_PATH, @@ -10,12 +9,9 @@ import fs from 'fs-extra' import path from 'path' test.describe('External model files trigger lsp', () => { - test('external_models.yaml', async ({ page, sharedCodeServer }) => { + test('external_models.yaml', async ({ page, sharedCodeServer, tempDir }) => { const file = 'external_models.yaml' - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-sushi-'), - ) await fs.copy(SUSHI_SOURCE_PATH, tempDir) // Assert external_models.yaml exists @@ -38,12 +34,9 @@ test.describe('External model files trigger lsp', () => { await waitForLoadedSQLMesh(page) }) - test('external_models.yml', async ({ page, sharedCodeServer }) => { + test('external_models.yml', async ({ page, sharedCodeServer, tempDir }) => { const file = 'external_models.yml' - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-sushi-'), - ) await fs.copy(SUSHI_SOURCE_PATH, tempDir) // Move external_models.yaml to external_models.yml diff --git a/vscode/extension/tests/find_references.spec.ts b/vscode/extension/tests/find_references.spec.ts index e15868e234..e2d25269a6 100644 --- a/vscode/extension/tests/find_references.spec.ts +++ b/vscode/extension/tests/find_references.spec.ts @@ -1,7 +1,5 @@ import { test, expect, Page } from './fixtures' -import path from 'path' import fs from 'fs-extra' -import os from 'os' import { findAllReferences, goToReferences, @@ -12,11 +10,9 @@ import { import { createPythonInterpreterSettingsSpecifier } from './utils_code_server' // Helper function to set up a test environment for model references -async function setupModelTestEnvironment(): Promise { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) +async function setupModelTestEnvironment(tempDir: string): Promise { await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) - return tempDir } // Helper function to navigate to models folder @@ -63,8 +59,9 @@ test.describe('Model References', () => { test('Go to References (Shift+F12) for Model usage', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await setupModelTestEnvironment() + await setupModelTestEnvironment(tempDir) await openServerPage(page, tempDir, sharedCodeServer) // Open customers.sql which contains references to other models @@ -130,8 +127,9 @@ test.describe('Model References', () => { test('Find All References (Alt+Shift+F12) for Model', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await setupModelTestEnvironment() + await setupModelTestEnvironment(tempDir) await openServerPage(page, tempDir, sharedCodeServer) @@ -179,8 +177,9 @@ test.describe('Model References', () => { test('Go to References for Model from Audit', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await setupModelTestEnvironment() + await setupModelTestEnvironment(tempDir) await openServerPage(page, tempDir, sharedCodeServer) // Open assert_item_price_above_zero.sql audit file which references sushi.items model @@ -263,8 +262,9 @@ test.describe('Model References', () => { test.skip('Find All Model References from Audit', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await setupModelTestEnvironment() + await setupModelTestEnvironment(tempDir) await openServerPage(page, tempDir, sharedCodeServer) @@ -325,8 +325,9 @@ test.describe('CTE References', () => { test('Go to references from definition of CTE', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await setupModelTestEnvironment() + await setupModelTestEnvironment(tempDir) await openServerPage(page, tempDir, sharedCodeServer) await openCustomersFile(page) @@ -363,8 +364,9 @@ test.describe('CTE References', () => { test('Go to references from usage of CTE', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await setupModelTestEnvironment() + await setupModelTestEnvironment(tempDir) await openServerPage(page, tempDir, sharedCodeServer) @@ -403,8 +405,9 @@ test.describe('CTE References', () => { test('Go to references for nested CTE', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await setupModelTestEnvironment() + await setupModelTestEnvironment(tempDir) await openServerPage(page, tempDir, sharedCodeServer) await openCustomersFile(page) @@ -440,8 +443,12 @@ test.describe('CTE References', () => { await page.waitForSelector('text=FROM current_marketing') }) - test('Find all references for CTE', async ({ page, sharedCodeServer }) => { - const tempDir = await setupModelTestEnvironment() + test('Find all references for CTE', async ({ + page, + sharedCodeServer, + tempDir, + }) => { + await setupModelTestEnvironment(tempDir) await openServerPage(page, tempDir, sharedCodeServer) await openCustomersFile(page) @@ -464,8 +471,9 @@ test.describe('CTE References', () => { test('Find all references from usage for CTE', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await setupModelTestEnvironment() + await setupModelTestEnvironment(tempDir) await openServerPage(page, tempDir, sharedCodeServer) @@ -489,8 +497,9 @@ test.describe('CTE References', () => { test('Find all references for nested CTE', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await setupModelTestEnvironment() + await setupModelTestEnvironment(tempDir) await openServerPage(page, tempDir, sharedCodeServer) await openCustomersFile(page) @@ -518,8 +527,9 @@ test.describe('Macro References', () => { test('Go to References for @ADD_ONE macro', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await setupModelTestEnvironment() + await setupModelTestEnvironment(tempDir) await openServerPage(page, tempDir, sharedCodeServer) await openTopWaitersFile(page) @@ -553,8 +563,10 @@ test.describe('Macro References', () => { test('Find All References for @MULTIPLY macro', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await setupModelTestEnvironment() + await setupModelTestEnvironment(tempDir) + await openServerPage(page, tempDir, sharedCodeServer) await openTopWaitersFile(page) @@ -606,8 +618,9 @@ test.describe('Macro References', () => { test('Go to References for @SQL_LITERAL macro', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await setupModelTestEnvironment() + await setupModelTestEnvironment(tempDir) await openServerPage(page, tempDir, sharedCodeServer) await openTopWaitersFile(page) diff --git a/vscode/extension/tests/fixtures.ts b/vscode/extension/tests/fixtures.ts index 916305c9c2..7a10d811fa 100644 --- a/vscode/extension/tests/fixtures.ts +++ b/vscode/extension/tests/fixtures.ts @@ -9,8 +9,11 @@ import { } from './utils_code_server' // Worker-scoped fixture to start/stop VS Code server once per worker -// eslint-disable-next-line @typescript-eslint/no-empty-object-type -export const test = base.extend<{}, { sharedCodeServer: CodeServerContext }>({ +export const test = base.extend< + // eslint-disable-next-line @typescript-eslint/no-empty-object-type + {}, + { sharedCodeServer: CodeServerContext; tempDir: string } +>({ sharedCodeServer: [ // eslint-disable-next-line no-empty-pattern async ({}, use) => { @@ -37,6 +40,24 @@ export const test = base.extend<{}, { sharedCodeServer: CodeServerContext }>({ }, { scope: 'worker', auto: true }, ], + tempDir: [ + // eslint-disable-next-line no-empty-pattern + async ({}, use) => { + // Create a temporary directory for each test + const tempDir = await fs.mkdtemp( + path.join(os.tmpdir(), 'vscode-test-temp-'), + ) + console.log(`Created temporary directory: ${tempDir}`) + await use(tempDir) + + // Clean up after each test + console.log(`Cleaning up temporary directory: ${tempDir}`) + await fs.remove(tempDir) + }, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + { auto: true }, + ], }) // Export expect and Page from Playwright for convenience diff --git a/vscode/extension/tests/format.spec.ts b/vscode/extension/tests/format.spec.ts index fb95e66ba0..c8a98a066c 100644 --- a/vscode/extension/tests/format.spec.ts +++ b/vscode/extension/tests/format.spec.ts @@ -1,7 +1,5 @@ import { test, expect } from './fixtures' -import path from 'path' import fs from 'fs-extra' -import os from 'os' import { openServerPage, runCommand, @@ -10,8 +8,11 @@ import { } from './utils' import { createPythonInterpreterSettingsSpecifier } from './utils_code_server' -test('Format project works correctly', async ({ page, sharedCodeServer }) => { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) +test('Format project works correctly', async ({ + page, + sharedCodeServer, + tempDir, +}) => { await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) diff --git a/vscode/extension/tests/go_to_definition.spec.ts b/vscode/extension/tests/go_to_definition.spec.ts index 36ad2177e1..3b85c73f27 100644 --- a/vscode/extension/tests/go_to_definition.spec.ts +++ b/vscode/extension/tests/go_to_definition.spec.ts @@ -1,7 +1,5 @@ import { test, expect } from './fixtures' -import path from 'path' import fs from 'fs-extra' -import os from 'os' import { goToDefinition, openServerPage, @@ -10,8 +8,7 @@ import { } from './utils' import { createPythonInterpreterSettingsSpecifier } from './utils_code_server' -test('Stop server works', async ({ page, sharedCodeServer }) => { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) +test('Stop server works', async ({ page, sharedCodeServer, tempDir }) => { await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) await openServerPage(page, tempDir, sharedCodeServer) @@ -42,8 +39,11 @@ test('Stop server works', async ({ page, sharedCodeServer }) => { await expect(page.locator('text=def multiply(')).toBeVisible() }) -test('Go to definition for model', async ({ page, sharedCodeServer }) => { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) +test('Go to definition for model', async ({ + page, + sharedCodeServer, + tempDir, +}) => { await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) diff --git a/vscode/extension/tests/hints.spec.ts b/vscode/extension/tests/hints.spec.ts index 8bcd2b9d09..a74f8e184b 100644 --- a/vscode/extension/tests/hints.spec.ts +++ b/vscode/extension/tests/hints.spec.ts @@ -1,7 +1,5 @@ import { test, expect } from './fixtures' -import path from 'path' import fs from 'fs-extra' -import os from 'os' import { openServerPage, SUSHI_SOURCE_PATH, @@ -9,8 +7,7 @@ import { } from './utils' import { createPythonInterpreterSettingsSpecifier } from './utils_code_server' -test('Model type hinting', async ({ page, sharedCodeServer }) => { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) +test('Model type hinting', async ({ page, sharedCodeServer, tempDir }) => { await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) await openServerPage(page, tempDir, sharedCodeServer) diff --git a/vscode/extension/tests/lineage.spec.ts b/vscode/extension/tests/lineage.spec.ts index e61079e035..eb6a695e3c 100644 --- a/vscode/extension/tests/lineage.spec.ts +++ b/vscode/extension/tests/lineage.spec.ts @@ -28,8 +28,8 @@ async function testLineageWithProjectPath(page: Page): Promise { test('Lineage panel renders correctly - no project path config (default)', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) @@ -39,6 +39,7 @@ test('Lineage panel renders correctly - no project path config (default)', async test.skip('Lineage panel renders correctly - relative project path', async ({ page, + sharedCodeServer, }) => { const workspaceDir = await fs.mkdtemp( path.join(os.tmpdir(), 'vscode-test-workspace-'), @@ -71,6 +72,8 @@ test.skip('Lineage panel renders correctly - relative project path', async ({ test.skip('Lineage panel renders correctly - absolute project path', async ({ page, + tempDir, + sharedCodeServer, }) => { const workspaceDir = await fs.mkdtemp( path.join(os.tmpdir(), 'vscode-test-workspace-'), @@ -103,6 +106,8 @@ test.skip('Lineage panel renders correctly - absolute project path', async ({ test.skip('Lineage panel renders correctly - relative project outside of workspace', async ({ page, + sharedCodeServer, + tempDir, }) => { const tempFolder = await fs.mkdtemp( path.join(os.tmpdir(), 'vscode-test-workspace-'), diff --git a/vscode/extension/tests/lineage_settings.spec.ts b/vscode/extension/tests/lineage_settings.spec.ts index 47ccf47f35..c3237f13dc 100644 --- a/vscode/extension/tests/lineage_settings.spec.ts +++ b/vscode/extension/tests/lineage_settings.spec.ts @@ -1,7 +1,5 @@ import { test, expect } from './fixtures' -import path from 'path' import fs from 'fs-extra' -import os from 'os' import { openLineageView, openServerPage, @@ -13,8 +11,8 @@ import { createPythonInterpreterSettingsSpecifier } from './utils_code_server' test('Settings button is visible in the lineage view', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) diff --git a/vscode/extension/tests/python_env.spec.ts b/vscode/extension/tests/python_env.spec.ts index 27dd7a481f..cfbdc7efa6 100644 --- a/vscode/extension/tests/python_env.spec.ts +++ b/vscode/extension/tests/python_env.spec.ts @@ -10,7 +10,6 @@ import { SUSHI_SOURCE_PATH, waitForLoadedSQLMesh, } from './utils' -import os from 'os' import path from 'path' import { setTcloudVersion, setupAuthenticatedState } from './tcloud_utils' import { CodeServerContext } from './utils_code_server' @@ -41,13 +40,9 @@ async function runTest( await openLineageView(page) } -async function setupEnvironment(): Promise<{ - tempDir: string +async function setupEnvironment(tempDir: string): Promise<{ pythonDetails: PythonEnvironment }> { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) await fs.copy(SUSHI_SOURCE_PATH, tempDir) const pythonEnvDir = path.join(tempDir, '.venv') const pythonDetails = await createVirtualEnvironment(pythonEnvDir) @@ -67,19 +62,19 @@ async function setupEnvironment(): Promise<{ await fs.writeJson(path.join(tempDir, '.vscode', 'settings.json'), settings, { spaces: 2, }) - return { tempDir, pythonDetails } + return { pythonDetails } } test.describe('python environment variable injection on sqlmesh_lsp', () => { - test('normal setup - error ', async ({ page, sharedCodeServer }) => { - const { tempDir } = await setupEnvironment() + test('normal setup - error ', async ({ page, sharedCodeServer, tempDir }) => { + await setupEnvironment(tempDir) writeEnvironmentConfig(tempDir) await runTest(page, sharedCodeServer, tempDir) await page.waitForSelector('text=Error creating context') }) - test('normal setup - set', async ({ page, sharedCodeServer }) => { - const { tempDir } = await setupEnvironment() + test('normal setup - set', async ({ page, sharedCodeServer, tempDir }) => { + await setupEnvironment(tempDir) writeEnvironmentConfig(tempDir) const env_file = path.join(tempDir, '.env') fs.writeFileSync(env_file, 'TEST_VAR=test_value') @@ -113,16 +108,16 @@ async function setupTcloudProject( } test.describe('tcloud version', () => { - test('normal setup - error ', async ({ page, sharedCodeServer }) => { - const { tempDir, pythonDetails } = await setupEnvironment() + test('normal setup - error ', async ({ page, sharedCodeServer, tempDir }) => { + const { pythonDetails } = await setupEnvironment(tempDir) await setupTcloudProject(tempDir, pythonDetails) writeEnvironmentConfig(tempDir) await runTest(page, sharedCodeServer, tempDir) await page.waitForSelector('text=Error creating context') }) - test('normal setup - set', async ({ page, sharedCodeServer }) => { - const { tempDir, pythonDetails } = await setupEnvironment() + test('normal setup - set', async ({ page, sharedCodeServer, tempDir }) => { + const { pythonDetails } = await setupEnvironment(tempDir) await setupTcloudProject(tempDir, pythonDetails) writeEnvironmentConfig(tempDir) const env_file = path.join(tempDir, '.env') diff --git a/vscode/extension/tests/quickfix.spec.ts b/vscode/extension/tests/quickfix.spec.ts index 5bbfe4020b..60d0207f7c 100644 --- a/vscode/extension/tests/quickfix.spec.ts +++ b/vscode/extension/tests/quickfix.spec.ts @@ -1,6 +1,5 @@ import fs from 'fs-extra' import path from 'path' -import os from 'os' import { openProblemsView, SUSHI_SOURCE_PATH, @@ -9,11 +8,7 @@ import { import { test, expect } from './fixtures' import { createPythonInterpreterSettingsSpecifier } from './utils_code_server' -test('noselectstar quickfix', async ({ page, sharedCodeServer }) => { - // Base test setup - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) +test('noselectstar quickfix', async ({ page, sharedCodeServer, tempDir }) => { await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) diff --git a/vscode/extension/tests/rename_cte.spec.ts b/vscode/extension/tests/rename_cte.spec.ts index 4f566ef19c..579bda06dd 100644 --- a/vscode/extension/tests/rename_cte.spec.ts +++ b/vscode/extension/tests/rename_cte.spec.ts @@ -1,7 +1,5 @@ import { test, expect, Page } from './fixtures' -import path from 'path' import fs from 'fs-extra' -import os from 'os' import { findAllReferences, openServerPage, @@ -14,11 +12,12 @@ import { createPythonInterpreterSettingsSpecifier } from './utils_code_server' async function setupTestEnvironment({ page, sharedCodeServer, + tempDir, }: { page: Page sharedCodeServer: any + tempDir: string }) { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) @@ -39,8 +38,12 @@ async function setupTestEnvironment({ } test.describe('CTE Rename', () => { - test('Rename CTE from definition', async ({ page, sharedCodeServer }) => { - await setupTestEnvironment({ page, sharedCodeServer }) + test('Rename CTE from definition', async ({ + page, + sharedCodeServer, + tempDir, + }) => { + await setupTestEnvironment({ page, sharedCodeServer, tempDir }) // Click on the inner CTE definition "current_marketing" (not the outer one) await page.locator('text=WITH current_marketing AS').click({ position: { x: 100, y: 5 }, @@ -59,8 +62,8 @@ test.describe('CTE Rename', () => { await page.waitForSelector('text=WITH new_marketing AS') }) - test('Rename CTE from usage', async ({ page, sharedCodeServer }) => { - await setupTestEnvironment({ page, sharedCodeServer }) + test('Rename CTE from usage', async ({ page, sharedCodeServer, tempDir }) => { + await setupTestEnvironment({ page, sharedCodeServer, tempDir }) // Click on CTE usage in FROM clause await page.locator('text=FROM current_marketing_outer').click({ position: { x: 80, y: 5 }, @@ -81,8 +84,8 @@ test.describe('CTE Rename', () => { await page.waitForSelector('text=FROM updated_marketing_out') }) - test('Cancel CTE rename', async ({ page, sharedCodeServer }) => { - await setupTestEnvironment({ page, sharedCodeServer }) + test('Cancel CTE rename', async ({ page, sharedCodeServer, tempDir }) => { + await setupTestEnvironment({ page, sharedCodeServer, tempDir }) // Click on the CTE to rename await page.locator('text=current_marketing_outer').first().click() @@ -107,9 +110,10 @@ test.describe('CTE Rename', () => { test('Rename CTE updates all references', async ({ page, + tempDir, sharedCodeServer, }) => { - await setupTestEnvironment({ page, sharedCodeServer }) + await setupTestEnvironment({ page, sharedCodeServer, tempDir }) // Click on the CTE definition await page.locator('text=WITH current_marketing AS').click({ position: { x: 100, y: 5 }, @@ -141,8 +145,12 @@ test.describe('CTE Rename', () => { await page.waitForSelector('text=renamed_cte.customer_id != 100') }) - test('Rename CTE with preview', async ({ page, sharedCodeServer }) => { - await setupTestEnvironment({ page, sharedCodeServer }) + test('Rename CTE with preview', async ({ + page, + sharedCodeServer, + tempDir, + }) => { + await setupTestEnvironment({ page, sharedCodeServer, tempDir }) // Click on the CTE to rename await page.locator('text=WITH current_marketing AS').click({ position: { x: 100, y: 5 }, diff --git a/vscode/extension/tests/render.spec.ts b/vscode/extension/tests/render.spec.ts index 298e3c690d..db660daae1 100644 --- a/vscode/extension/tests/render.spec.ts +++ b/vscode/extension/tests/render.spec.ts @@ -1,7 +1,5 @@ import { test, expect } from './fixtures' -import path from 'path' import fs from 'fs-extra' -import os from 'os' import { openLineageView, openServerPage, @@ -11,8 +9,7 @@ import { } from './utils' import { createPythonInterpreterSettingsSpecifier } from './utils_code_server' -test('Render works correctly', async ({ page, sharedCodeServer }) => { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) +test('Render works correctly', async ({ page, sharedCodeServer, tempDir }) => { await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) @@ -47,8 +44,8 @@ test('Render works correctly', async ({ page, sharedCodeServer }) => { test('Render works correctly with model without a description', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) @@ -83,8 +80,8 @@ test('Render works correctly with model without a description', async ({ test('Render works correctly with every rendered model opening a new tab', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) @@ -127,8 +124,8 @@ test('Render works correctly with every rendered model opening a new tab', async test('Render shows model picker when no active editor is open', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) diff --git a/vscode/extension/tests/stop.spec.ts b/vscode/extension/tests/stop.spec.ts index b15638be63..64a12b2e46 100644 --- a/vscode/extension/tests/stop.spec.ts +++ b/vscode/extension/tests/stop.spec.ts @@ -1,17 +1,14 @@ -import path from 'path' import { openServerPage, runCommand, SUSHI_SOURCE_PATH, waitForLoadedSQLMesh, } from './utils' -import os from 'os' import { test } from './fixtures' import fs from 'fs-extra' import { createPythonInterpreterSettingsSpecifier } from './utils_code_server' -test('Stop server works', async ({ page, sharedCodeServer }) => { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) +test('Stop server works', async ({ page, sharedCodeServer, tempDir }) => { await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) @@ -55,8 +52,8 @@ test('Stop server works', async ({ page, sharedCodeServer }) => { test('Stopped server only restarts when explicitly requested', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) diff --git a/vscode/extension/tests/tcloud.spec.ts b/vscode/extension/tests/tcloud.spec.ts index 2d9010e059..1229696e02 100644 --- a/vscode/extension/tests/tcloud.spec.ts +++ b/vscode/extension/tests/tcloud.spec.ts @@ -1,7 +1,6 @@ import { expect, test } from './fixtures' import path from 'path' import fs from 'fs-extra' -import os from 'os' import { createVirtualEnvironment, openServerPage, @@ -43,10 +42,8 @@ async function setupPythonEnvironment(envDir: string): Promise { test('not signed in, shows sign in window', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) const pythonEnvDir = path.join(tempDir, '.venv') const context = await startCodeServer({ tempDir }) @@ -116,10 +113,8 @@ test('not signed in, shows sign in window', async ({ test('signed in and not installed shows installation window', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) const pythonEnvDir = path.join(tempDir, '.venv') const context = await startCodeServer({ tempDir }) @@ -192,10 +187,8 @@ test('signed in and not installed shows installation window', async ({ test('tcloud sqlmesh_lsp command starts the sqlmesh_lsp in old version when ready', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) const pythonEnvDir = path.join(tempDir, '.venv') try { @@ -269,10 +262,8 @@ test('tcloud sqlmesh_lsp command starts the sqlmesh_lsp in old version when read test('tcloud sqlmesh_lsp command starts the sqlmesh_lsp in new version when ready', async ({ page, sharedCodeServer, + tempDir, }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) const pythonEnvDir = path.join(tempDir, '.venv') try { @@ -346,10 +337,8 @@ test('tcloud sqlmesh_lsp command starts the sqlmesh_lsp in new version when read // but the test is still useful when running it manually. test.skip('tcloud not signed in and not installed, shows sign in window and then fact that loaded', async ({ page, + tempDir, }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) const pythonEnvDir = path.join(tempDir, '.venv') // Create a tcloud.yaml to mark this as a tcloud project diff --git a/vscode/extension/tests/tests.spec.ts b/vscode/extension/tests/tests.spec.ts index 415eddb543..bea8776447 100644 --- a/vscode/extension/tests/tests.spec.ts +++ b/vscode/extension/tests/tests.spec.ts @@ -1,7 +1,5 @@ import { test } from './fixtures' -import path from 'path' import fs from 'fs-extra' -import os from 'os' import { openServerPage, runCommand, @@ -10,8 +8,11 @@ import { } from './utils' import { createPythonInterpreterSettingsSpecifier } from './utils_code_server' -test('Format project works correctly', async ({ page, sharedCodeServer }) => { - const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-')) +test('Format project works correctly', async ({ + page, + sharedCodeServer, + tempDir, +}) => { await fs.copy(SUSHI_SOURCE_PATH, tempDir) await createPythonInterpreterSettingsSpecifier(tempDir) diff --git a/vscode/extension/tests/venv_naming.spec.ts b/vscode/extension/tests/venv_naming.spec.ts index ee036a5eb6..5cb1730a18 100644 --- a/vscode/extension/tests/venv_naming.spec.ts +++ b/vscode/extension/tests/venv_naming.spec.ts @@ -1,6 +1,5 @@ import { test } from './fixtures' import fs from 'fs-extra' -import os from 'os' import path from 'path' import { createVirtualEnvironment, @@ -12,11 +11,7 @@ import { waitForLoadedSQLMesh, } from './utils' -test('venv being named .env', async ({ page, sharedCodeServer }) => { - const tempDir = await fs.mkdtemp( - path.join(os.tmpdir(), 'vscode-test-tcloud-'), - ) - +test('venv being named .env', async ({ page, sharedCodeServer, tempDir }) => { const pythonEnvDir = path.join(tempDir, '.env') const pythonDetails = await createVirtualEnvironment(pythonEnvDir) const custom_materializations = path.join(