Skip to content

Commit da9dbf7

Browse files
test: remove temp install from package exports smoke
1 parent 0f1e85f commit da9dbf7

2 files changed

Lines changed: 121 additions & 123 deletions

File tree

tests/create-arrow-js.spec.ts

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -160,40 +160,42 @@ describe('create-arrow-js', () => {
160160
const projectDir = path.resolve(workspace, 'arrow-app')
161161
const packDir = path.resolve(workspace, 'packs')
162162

163-
await scaffoldArrowApp(projectDir, {
164-
skillAgent: 'skip',
165-
})
166-
await fs.mkdir(packDir, { recursive: true })
167-
const tarballs = await getPackedWorkspacePackages(arrowPackages, packDir)
163+
await withWorkspaceIntegrationLock(async () => {
164+
await scaffoldArrowApp(projectDir, {
165+
skillAgent: 'skip',
166+
})
167+
await fs.mkdir(packDir, { recursive: true })
168+
const tarballs = await getPackedWorkspacePackages(arrowPackages, packDir)
168169

169-
await rewriteArrowDependencies(projectDir, tarballs)
170+
await rewriteArrowDependencies(projectDir, tarballs)
170171

171-
await execa('pnpm', ['install', '--prefer-offline'], {
172-
cwd: projectDir,
173-
})
172+
await execa('pnpm', ['install', '--prefer-offline'], {
173+
cwd: projectDir,
174+
})
174175

175-
const server = startArrowAppServer(projectDir)
176-
177-
try {
178-
const output = await waitForStreamMatch(
179-
server.all!,
180-
/Arrow app running at http:\/\/127\.0\.0\.1:(\d+)/
181-
)
182-
const port = Number(
183-
/Arrow app running at http:\/\/127\.0\.0\.1:(\d+)/.exec(output)?.[1]
184-
)
185-
const response = await fetchWithTimeout(`http://127.0.0.1:${port}/`)
186-
const html = await response.text()
187-
188-
expect(response.status).toBe(200)
189-
expect(html).toContain('<link rel="stylesheet" href="/src/style.css" />')
190-
expect(html).toContain('pnpm create arrow-js@latest')
191-
expect(html).toContain('SSR + Hydration')
192-
} finally {
193-
await stopProcess(server)
194-
}
176+
const server = startArrowAppServer(projectDir)
177+
178+
try {
179+
const output = await waitForStreamMatch(
180+
server.all!,
181+
/Arrow app running at http:\/\/127\.0\.0\.1:(\d+)/
182+
)
183+
const port = Number(
184+
/Arrow app running at http:\/\/127\.0\.0\.1:(\d+)/.exec(output)?.[1]
185+
)
186+
const response = await fetchWithTimeout(`http://127.0.0.1:${port}/`)
187+
const html = await response.text()
188+
189+
expect(response.status).toBe(200)
190+
expect(html).toContain('<link rel="stylesheet" href="/src/style.css" />')
191+
expect(html).toContain('pnpm create arrow-js@latest')
192+
expect(html).toContain('SSR + Hydration')
193+
} finally {
194+
await stopProcess(server)
195+
}
196+
})
195197
},
196-
90_000
198+
150_000
197199
)
198200

199201
runVite8Only(

tests/package-exports.spec.ts

Lines changed: 89 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import fs from 'node:fs/promises'
22
import os from 'node:os'
33
import path from 'node:path'
4+
import { fileURLToPath } from 'node:url'
45
import { execa } from 'execa'
56
import { afterEach, describe, expect, it } from 'vitest'
67
import { getPackedWorkspacePackages } from './helpers/packed-workspace-packages.js'
7-
import { withWorkspaceIntegrationLock } from './helpers/workspace-build-lock.js'
88

99
const packagedArrowLibraries = [
1010
'@arrow-js/core',
@@ -13,6 +13,7 @@ const packagedArrowLibraries = [
1313
'@arrow-js/hydrate',
1414
'@arrow-js/highlight',
1515
] as const
16+
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..')
1617
const tempDirs: string[] = []
1718

1819
afterEach(async () => {
@@ -30,117 +31,112 @@ describe('packaged Arrow exports', () => {
3031
const workspace = await createTempDir()
3132
const packDir = path.resolve(workspace, 'packs')
3233
const consumerDir = path.resolve(workspace, 'consumer')
34+
const nodeModulesDir = path.resolve(consumerDir, 'node_modules')
3335

34-
await withWorkspaceIntegrationLock(async () => {
35-
await fs.mkdir(packDir, { recursive: true })
36-
await fs.mkdir(consumerDir, { recursive: true })
37-
const tarballs = await getPackedWorkspacePackages(
38-
packagedArrowLibraries,
39-
packDir
40-
)
36+
await fs.mkdir(packDir, { recursive: true })
37+
await fs.mkdir(nodeModulesDir, { recursive: true })
38+
const tarballs = await getPackedWorkspacePackages(
39+
packagedArrowLibraries,
40+
packDir
41+
)
4142

42-
await fs.writeFile(
43-
path.resolve(consumerDir, 'package.json'),
44-
`${JSON.stringify({
45-
name: 'arrow-package-smoke',
46-
private: true,
47-
type: 'module',
48-
dependencies: Object.fromEntries(
49-
packagedArrowLibraries.map((packageName) => [
50-
packageName,
51-
`file:${normalizePath(tarballs[packageName])}`,
52-
])
53-
),
54-
pnpm: {
55-
overrides: Object.fromEntries(
56-
packagedArrowLibraries.map((packageName) => [
57-
packageName,
58-
`file:${normalizePath(tarballs[packageName])}`,
59-
])
60-
),
61-
},
62-
}, null, 2)}\n`
43+
for (const packageName of packagedArrowLibraries) {
44+
await unpackWorkspaceTarball(
45+
tarballs[packageName],
46+
path.resolve(nodeModulesDir, ...packageName.split('/'))
6347
)
48+
}
6449

65-
await execa('pnpm', ['install', '--prefer-offline'], {
66-
cwd: consumerDir,
67-
})
50+
await linkDependency(
51+
path.resolve(repoRoot, 'node_modules', 'jsdom'),
52+
path.resolve(nodeModulesDir, 'jsdom')
53+
)
6854

69-
const verifyScriptPath = path.resolve(consumerDir, 'verify.mjs')
70-
await fs.writeFile(
71-
verifyScriptPath,
72-
[
73-
"const [{ component, html }] = await Promise.all([",
74-
" import('@arrow-js/core'),",
75-
" import('@arrow-js/core/internal'),",
76-
" import('@arrow-js/framework'),",
77-
" import('@arrow-js/framework/internal'),",
78-
" import('@arrow-js/framework/ssr'),",
79-
" import('@arrow-js/ssr'),",
80-
" import('@arrow-js/hydrate'),",
81-
" import('@arrow-js/highlight'),",
82-
'])',
83-
'component(async () => html`<p>ok</p>`)',
84-
"console.log('imports ok')",
85-
'',
86-
].join('\n')
87-
)
55+
const verifyScriptPath = path.resolve(consumerDir, 'verify.mjs')
56+
await fs.writeFile(
57+
verifyScriptPath,
58+
[
59+
"const [{ component, html }] = await Promise.all([",
60+
" import('@arrow-js/core'),",
61+
" import('@arrow-js/core/internal'),",
62+
" import('@arrow-js/framework'),",
63+
" import('@arrow-js/framework/internal'),",
64+
" import('@arrow-js/framework/ssr'),",
65+
" import('@arrow-js/ssr'),",
66+
" import('@arrow-js/hydrate'),",
67+
" import('@arrow-js/highlight'),",
68+
'])',
69+
'component(async () => html`<p>ok</p>`)',
70+
"console.log('imports ok')",
71+
'',
72+
].join('\n')
73+
)
8874

89-
const { stdout } = await execa('node', [verifyScriptPath], {
90-
cwd: consumerDir,
91-
})
75+
const { stdout } = await execa('node', [verifyScriptPath], {
76+
cwd: consumerDir,
77+
})
9278

93-
const frameworkPackage = JSON.parse(
94-
await fs.readFile(
95-
path.resolve(consumerDir, 'node_modules/@arrow-js/framework/package.json'),
96-
'utf8'
97-
)
79+
const frameworkPackage = JSON.parse(
80+
await fs.readFile(
81+
path.resolve(consumerDir, 'node_modules/@arrow-js/framework/package.json'),
82+
'utf8'
9883
)
99-
const corePackage = JSON.parse(
100-
await fs.readFile(
101-
path.resolve(consumerDir, 'node_modules/@arrow-js/core/package.json'),
102-
'utf8'
103-
)
84+
)
85+
const corePackage = JSON.parse(
86+
await fs.readFile(
87+
path.resolve(consumerDir, 'node_modules/@arrow-js/core/package.json'),
88+
'utf8'
10489
)
105-
const ssrPackage = JSON.parse(
106-
await fs.readFile(
107-
path.resolve(consumerDir, 'node_modules/@arrow-js/ssr/package.json'),
108-
'utf8'
109-
)
90+
)
91+
const ssrPackage = JSON.parse(
92+
await fs.readFile(
93+
path.resolve(consumerDir, 'node_modules/@arrow-js/ssr/package.json'),
94+
'utf8'
11095
)
111-
const hydratePackage = JSON.parse(
112-
await fs.readFile(
113-
path.resolve(consumerDir, 'node_modules/@arrow-js/hydrate/package.json'),
114-
'utf8'
115-
)
96+
)
97+
const hydratePackage = JSON.parse(
98+
await fs.readFile(
99+
path.resolve(consumerDir, 'node_modules/@arrow-js/hydrate/package.json'),
100+
'utf8'
116101
)
117-
const highlightPackage = JSON.parse(
118-
await fs.readFile(
119-
path.resolve(consumerDir, 'node_modules/@arrow-js/highlight/package.json'),
120-
'utf8'
121-
)
102+
)
103+
const highlightPackage = JSON.parse(
104+
await fs.readFile(
105+
path.resolve(consumerDir, 'node_modules/@arrow-js/highlight/package.json'),
106+
'utf8'
122107
)
108+
)
123109

124-
expect(stdout).toContain('imports ok')
125-
expect(corePackage.exports['./internal'].import).toBe('./dist/internal.mjs')
126-
expect(frameworkPackage.exports['.'].import).toBe('./dist/index.mjs')
127-
expect(frameworkPackage.exports['./internal'].import).toBe('./dist/internal.mjs')
128-
expect(frameworkPackage.exports['./ssr'].import).toBe('./dist/ssr.mjs')
129-
expect(ssrPackage.exports['.'].import).toBe('./dist/index.mjs')
130-
expect(hydratePackage.exports['.'].import).toBe('./dist/index.mjs')
131-
expect(highlightPackage.exports['.'].import).toBe('./dist/index.mjs')
132-
})
110+
expect(stdout).toContain('imports ok')
111+
expect(corePackage.exports['./internal'].import).toBe('./dist/internal.mjs')
112+
expect(frameworkPackage.exports['.'].import).toBe('./dist/index.mjs')
113+
expect(frameworkPackage.exports['./internal'].import).toBe('./dist/internal.mjs')
114+
expect(frameworkPackage.exports['./ssr'].import).toBe('./dist/ssr.mjs')
115+
expect(ssrPackage.exports['.'].import).toBe('./dist/index.mjs')
116+
expect(hydratePackage.exports['.'].import).toBe('./dist/index.mjs')
117+
expect(highlightPackage.exports['.'].import).toBe('./dist/index.mjs')
133118
},
134-
150_000
119+
90_000
135120
)
136121
})
137122

123+
async function unpackWorkspaceTarball(tarballPath: string, destinationPath: string) {
124+
const extractDir = await createTempDir()
125+
126+
await execa('tar', ['-xzf', tarballPath, '-C', extractDir])
127+
await fs.mkdir(path.dirname(destinationPath), { recursive: true })
128+
await fs.cp(path.resolve(extractDir, 'package'), destinationPath, {
129+
recursive: true,
130+
})
131+
}
132+
133+
async function linkDependency(sourcePath: string, destinationPath: string) {
134+
await fs.mkdir(path.dirname(destinationPath), { recursive: true })
135+
await fs.symlink(sourcePath, destinationPath, 'dir')
136+
}
137+
138138
async function createTempDir() {
139139
const directory = await fs.mkdtemp(path.resolve(os.tmpdir(), 'arrow-package-'))
140140
tempDirs.push(directory)
141141
return directory
142142
}
143-
144-
function normalizePath(value: string) {
145-
return value.replace(/\\/g, '/')
146-
}

0 commit comments

Comments
 (0)