@@ -14,110 +14,106 @@ const SUSHI_SOURCE_PATH = path.join(__dirname, '..', '..', '..', 'examples', 'su
1414 * Helper function to launch VS Code and test lineage with given project path config
1515 */
1616async function testLineageWithProjectPath (
17- workspaceDir : string ,
18- projectDir : string ,
19- projectPathConfig ?: string
17+ window : Page ,
2018) : Promise < void > {
21- const ciArgs = process . env . CI ? [
22- '--disable-gpu' ,
23- '--headless' ,
24- '--no-sandbox' ,
25- '--disable-dev-shm-usage' ,
26- '--window-position=-10000,0' ,
27- ] : [ ] ;
28-
29- const userDataDir = await fs . mkdtemp ( path . join ( os . tmpdir ( ) , 'vscode-user-data-' ) ) ;
30-
31- try {
32- // If projectPathConfig is provided, create .vscode/settings.json in the workspace
33- if ( projectPathConfig !== undefined ) {
34- const vscodeDir = path . join ( workspaceDir , '.vscode' ) ;
35- await fs . ensureDir ( vscodeDir ) ;
36- const settings = {
37- "sqlmesh.projectPath" : projectPathConfig
38- } ;
39- await fs . writeJson ( path . join ( vscodeDir , 'settings.json' ) , settings , { spaces : 2 } ) ;
40- }
41-
42- const args = [
43- ...ciArgs ,
44- `--extensionDevelopmentPath=${ EXT_PATH } ` ,
45- '--disable-workspace-trust' ,
46- '--disable-telemetry' ,
47- `--user-data-dir=${ userDataDir } ` ,
48- workspaceDir ,
49- ] ;
50-
51- const electronApp = await electron . launch ( {
52- executablePath : VS_CODE_EXE ,
53- args,
54- } ) ;
55-
56- const window = await electronApp . firstWindow ( ) ;
57- await window . waitForLoadState ( 'domcontentloaded' ) ;
58- await window . waitForLoadState ( 'networkidle' ) ;
59-
60- // Wait a bit for the extension to fully initialize with the settings
61- await window . waitForTimeout ( 2000 ) ;
62-
6319 // Trigger lineage command
6420 await window . keyboard . press ( process . platform === 'darwin' ? 'Meta+Shift+P' : 'Control+Shift+P' ) ;
6521 await window . keyboard . type ( 'Lineage: Focus On View' ) ;
6622 await window . keyboard . press ( 'Enter' ) ;
6723
6824 // Wait for "Loaded SQLmesh Context" text to appear
6925 const loadedContextText = window . locator ( 'text=Loaded SQLMesh Context' ) ;
70- await expect ( loadedContextText . first ( ) ) . toBeVisible ( { timeout : 15000 } ) ;
26+ // TODO REVERT TIMINGS
27+ await expect ( loadedContextText . first ( ) ) . toBeVisible ( { timeout : 10_000 } ) ;
28+ }
7129
30+ /**
31+ * Launch VS Code and return the window and a function to close the app.
32+ * @param workspaceDir The workspace directory to open.
33+ * @returns The window and a function to close the app.
34+ */
35+ export const startVSCode = async ( workspaceDir : string ) : Promise < {
36+ window : Page ,
37+ close : ( ) => Promise < void > ,
38+ } > => {
39+ const userDataDir = await fs . mkdtemp ( path . join ( os . tmpdir ( ) , 'vscode-user-data-' ) ) ;
40+ const ciArgs = process . env . CI ? [
41+ '--disable-gpu' ,
42+ '--headless' ,
43+ '--no-sandbox' ,
44+ '--disable-dev-shm-usage' ,
45+ '--window-position=-10000,0' ,
46+ ] : [ ] ;
47+ const args = [
48+ ...ciArgs ,
49+ `--extensionDevelopmentPath=${ EXT_PATH } ` ,
50+ '--disable-workspace-trust' ,
51+ '--disable-telemetry' ,
52+ `--user-data-dir=${ userDataDir } ` ,
53+ workspaceDir ,
54+ ] ;
55+ const electronApp = await electron . launch ( {
56+ executablePath : VS_CODE_EXE ,
57+ args,
58+ } ) ;
59+ const window = await electronApp . firstWindow ( ) ;
60+ await window . waitForLoadState ( 'domcontentloaded' ) ;
61+ await window . waitForLoadState ( 'networkidle' ) ;
62+ await window . waitForTimeout ( 2_000 ) ;
63+ return { window, close : async ( ) => {
7264 await electronApp . close ( ) ;
73- } finally {
7465 await fs . remove ( userDataDir ) ;
75- }
76- }
77-
78- export const startVSCode = async ( workspaceDir : string ) => {
79-
66+ } } ;
8067}
8168
8269test ( 'Lineage panel renders correctly - no project path config (default)' , async ( ) => {
8370 const tempDir = await fs . mkdtemp ( path . join ( os . tmpdir ( ) , 'vscode-test-sushi-' ) ) ;
8471 await fs . copy ( SUSHI_SOURCE_PATH , tempDir ) ;
85-
8672 try {
87- await testLineageWithProjectPath ( tempDir , tempDir ) ;
88- } finally {
73+ const { window, close } = await startVSCode ( tempDir ) ;
74+ await testLineageWithProjectPath ( window ) ;
75+ await close ( ) ;
76+ } finally {
8977 await fs . remove ( tempDir ) ;
9078 }
9179} ) ;
9280
9381test ( 'Lineage panel renders correctly - relative project path' , async ( ) => {
94- // Create workspace directory with subdirectory containing the project
9582 const workspaceDir = await fs . mkdtemp ( path . join ( os . tmpdir ( ) , 'vscode-test-workspace-' ) ) ;
96- const projectSubdir = path . join ( workspaceDir , 'projects' , 'sushi' ) ;
97- await fs . ensureDir ( path . dirname ( projectSubdir ) ) ;
98- await fs . copy ( SUSHI_SOURCE_PATH , projectSubdir ) ;
83+ const projectDir = path . join ( workspaceDir , 'projects' , 'sushi' ) ;
84+ await fs . copy ( SUSHI_SOURCE_PATH , projectDir ) ;
85+
86+ const settings = {
87+ "sqlmesh.projectPath" : path . relative ( workspaceDir , projectDir ) ,
88+ } ;
89+ await fs . ensureDir ( path . join ( workspaceDir , '.vscode' ) ) ;
90+ await fs . writeJson ( path . join ( workspaceDir , '.vscode' , 'settings.json' ) , settings , { spaces : 2 } ) ;
9991
10092 try {
101- // Test with relative path
102- await testLineageWithProjectPath ( workspaceDir , projectSubdir , 'projects/sushi' ) ;
93+ const { window, close } = await startVSCode ( workspaceDir ) ;
94+ await testLineageWithProjectPath ( window ) ;
95+ await close ( ) ;
10396 } finally {
10497 await fs . remove ( workspaceDir ) ;
10598 }
10699} ) ;
107100
108101test ( 'Lineage panel renders correctly - absolute project path' , async ( ) => {
109- // Create workspace directory
110102 const workspaceDir = await fs . mkdtemp ( path . join ( os . tmpdir ( ) , 'vscode-test-workspace-' ) ) ;
111-
112- // Create project directory outside workspace
113- const projectDir = await fs . mkdtemp ( path . join ( os . tmpdir ( ) , 'vscode-test-sushi-project-' ) ) ;
103+ const projectDir = path . join ( workspaceDir , 'projects' , 'sushi' ) ;
104+ await fs . ensureDir ( path . join ( workspaceDir , '.vscode' ) ) ;
114105 await fs . copy ( SUSHI_SOURCE_PATH , projectDir ) ;
106+ await fs . ensureDir ( path . join ( workspaceDir , '.vscode' ) ) ;
107+ const settings = {
108+ "sqlmesh.projectPath" : projectDir ,
109+ } ;
110+ await fs . writeJson ( path . join ( workspaceDir , '.vscode' , 'settings.json' ) , settings , { spaces : 2 } ) ;
115111
116112 try {
117- // Test with absolute path
118- await testLineageWithProjectPath ( workspaceDir , projectDir , projectDir ) ;
113+ const { window, close } = await startVSCode ( workspaceDir ) ;
114+ await testLineageWithProjectPath ( window ) ;
115+ await close ( ) ;
119116 } finally {
120117 await fs . remove ( workspaceDir ) ;
121- await fs . remove ( projectDir ) ;
122118 }
123119} ) ;
0 commit comments