mirror of
https://github.com/LukeHagar/vercel.git
synced 2025-12-09 21:07:46 +00:00
[now-cli] Add e2e test for vercel.json and .vercelignore (#4292)
This PR adds a test for a deployment as well as `now dev` to ensure both `vercel.json` and `.vercelignore` are applied. I also fixed the remaining test helpers to work with `vercel.json`.
This commit is contained in:
2
packages/now-cli/test/dev/fixtures/28-vercel-json-and-ignore/.gitignore
vendored
Normal file
2
packages/now-cli/test/dev/fixtures/28-vercel-json-and-ignore/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
.vercel
|
||||
public
|
||||
@@ -0,0 +1,3 @@
|
||||
.vercel
|
||||
public
|
||||
api/two.js
|
||||
@@ -0,0 +1 @@
|
||||
module.exports = (_req, res) => res.end('One');
|
||||
@@ -0,0 +1 @@
|
||||
module.exports = (_req, res) => res.end('Two');
|
||||
@@ -0,0 +1,5 @@
|
||||
<h1>Home Page</h1>
|
||||
|
||||
<a href="/api/one">1. Should exist</a>
|
||||
<a href="/api/two">2. Should NOT exist</a>
|
||||
<a href="/api/three">3. Should rewrite to one</a>
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"rewrites": [{ "source": "/api/three", "destination": "/api/one" }]
|
||||
}
|
||||
@@ -232,34 +232,22 @@ function testFixtureStdio(
|
||||
{ expectedCode = 0, skipDeploy } = {}
|
||||
) {
|
||||
return async t => {
|
||||
const dir = fixture(directory);
|
||||
const cwd = fixtureAbsolute(directory);
|
||||
const token = await fetchTokenWithRetry();
|
||||
let deploymentUrl;
|
||||
|
||||
// Deploy fixture and link project
|
||||
if (!skipDeploy) {
|
||||
const project = join(
|
||||
fixtureAbsolute(directory),
|
||||
'.vercel',
|
||||
'project.json'
|
||||
);
|
||||
const project = join(cwd, '.vercel', 'project.json');
|
||||
if (await fs.exists(project)) {
|
||||
await fs.unlink(project);
|
||||
}
|
||||
const gitignore = join(fixtureAbsolute(directory), '.gitignore');
|
||||
const gitignore = join(cwd, '.gitignore');
|
||||
const gitignoreOrig = await fs.exists(gitignore);
|
||||
let { stdout, stderr, exitCode } = await execa(
|
||||
binaryPath,
|
||||
[
|
||||
dir,
|
||||
'-t',
|
||||
token,
|
||||
'--confirm',
|
||||
'--public',
|
||||
'--no-clipboard',
|
||||
'--debug',
|
||||
],
|
||||
{ reject: false }
|
||||
['-t', token, '--confirm', '--public', '--no-clipboard', '--debug'],
|
||||
{ cwd, reject: false }
|
||||
);
|
||||
console.log({ stdout, stderr, exitCode });
|
||||
if (!gitignoreOrig && (await fs.exists(gitignore))) {
|
||||
@@ -274,7 +262,7 @@ function testFixtureStdio(
|
||||
// Start dev
|
||||
let dev;
|
||||
|
||||
await runNpmInstall(dir);
|
||||
await runNpmInstall(cwd);
|
||||
|
||||
const stdoutList = [];
|
||||
const stderrList = [];
|
||||
@@ -289,11 +277,10 @@ function testFixtureStdio(
|
||||
const env = skipDeploy
|
||||
? { ...process.env, __VERCEL_SKIP_DEV_CMD: 1 }
|
||||
: process.env;
|
||||
dev = execa(
|
||||
binaryPath,
|
||||
['dev', dir, '-l', port, '-t', token, '--debug'],
|
||||
{ env }
|
||||
);
|
||||
dev = execa(binaryPath, ['dev', '-l', port, '-t', token, '--debug'], {
|
||||
cwd,
|
||||
env,
|
||||
});
|
||||
|
||||
dev.stdout.on('data', data => {
|
||||
stdoutList.push(data);
|
||||
@@ -1285,6 +1272,15 @@ test(
|
||||
)
|
||||
);
|
||||
|
||||
test(
|
||||
'[now dev] 28-vercel-json-and-ignore',
|
||||
testFixtureStdio('28-vercel-json-and-ignore', async testPath => {
|
||||
await testPath(200, '/api/one', 'One');
|
||||
await testPath(404, '/api/two');
|
||||
await testPath(200, '/api/three', 'One');
|
||||
})
|
||||
);
|
||||
|
||||
test(
|
||||
'[now dev] Use `@now/python` with Flask requirements.txt',
|
||||
testFixtureStdio('python-flask', async testPath => {
|
||||
|
||||
@@ -7,7 +7,7 @@ const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
|
||||
|
||||
async function nowDeploy(bodies, randomness) {
|
||||
const files = Object.keys(bodies)
|
||||
.filter(n => n !== 'now.json')
|
||||
.filter(n => n !== 'vercel.json' && n !== 'now.json')
|
||||
.map(n => ({
|
||||
sha: digestOfFile(bodies[n]),
|
||||
size: bodies[n].length,
|
||||
@@ -16,7 +16,7 @@ async function nowDeploy(bodies, randomness) {
|
||||
}));
|
||||
|
||||
const { FORCE_BUILD_IN_REGION, NOW_DEBUG, VERCEL_DEBUG } = process.env;
|
||||
const nowJson = JSON.parse(bodies['now.json']);
|
||||
const nowJson = JSON.parse(bodies['vercel.json'] || bodies['now.json']);
|
||||
|
||||
const nowDeployPayload = {
|
||||
version: 2,
|
||||
|
||||
@@ -53,8 +53,10 @@ async function testDeployment(
|
||||
);
|
||||
}
|
||||
|
||||
const configName = 'vercel.json' in bodies ? 'vercel.json' : 'now.json';
|
||||
|
||||
// we use json5 to allow comments for probes
|
||||
const nowJson = json5.parse(bodies['vercel.json'] || bodies['now.json']);
|
||||
const nowJson = json5.parse(bodies[configName]);
|
||||
|
||||
if (process.env.VERCEL_BUILDER_DEBUG) {
|
||||
if (!nowJson.build) {
|
||||
@@ -90,7 +92,7 @@ async function testDeployment(
|
||||
}
|
||||
}
|
||||
|
||||
bodies['now.json'] = Buffer.from(JSON.stringify(nowJson));
|
||||
bodies[configName] = Buffer.from(JSON.stringify(nowJson));
|
||||
delete bodies['probe.js'];
|
||||
const { deploymentId, deploymentUrl } = await nowDeploy(bodies, randomness);
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ function runAnalyze(wrapper, context) {
|
||||
|
||||
async function runBuildLambda(inputPath) {
|
||||
const inputFiles = await glob('**', inputPath);
|
||||
const nowJsonRef = inputFiles['now.json'];
|
||||
const nowJsonRef = inputFiles['vercel.json'] || inputFiles['now.json'];
|
||||
expect(nowJsonRef).toBeDefined();
|
||||
const nowJson = require(nowJsonRef.fsPath);
|
||||
expect(nowJson.builds.length).toBe(1);
|
||||
|
||||
Reference in New Issue
Block a user