Skip to content

Built for people who want to own their automations. Join the waitlist for an invite.

Package listing

@kody/vercel

scripts/test-setup.mjs

136 lines · 3.1 KB · JavaScript
import assert from 'node:assert/strict'
import {
	API_KEY_SECRET,
	SECRET_URL,
	assertNoRetiredAlias,
	queryFromInput,
	redactEnvValue,
	requireConfirm,
	setupUrls,
	slimDeployment,
	slimEnvVar,
	slimProject,
	slimTeam,
	slimUser,
} from '../src/setup.js'

assert.equal(API_KEY_SECRET, 'vercelToken')
assert.match(SECRET_URL, /name=vercelToken/)
assert.match(SECRET_URL, /allowedHosts=api\.vercel\.com/)
assert.doesNotMatch(SECRET_URL, /kent/i)

const setup = setupUrls()
assert.equal(setup.tokenSecret, 'vercelToken')
assert.match(setup.oauthUrl, /provider=vercel/)
assert.match(setup.oauthUrl, /vercel\.com%2Foauth%2Fauthorize/)
assert.equal(setup.redirectUri, 'https://kody.codes/connect/oauth')

assert.throws(() => assertNoRetiredAlias('kentcdodds', 'account'), /not supported/)
assert.doesNotThrow(() => assertNoRetiredAlias('work', 'account'))

const preview = requireConfirm({ dryRun: true }, 'addDomain', 'POST', '/v10/projects/app/domains', {
	name: 'www.example.com',
})
assert.deepEqual(preview, {
	dryRun: true,
	method: 'POST',
	path: '/v10/projects/app/domains',
	body: { name: 'www.example.com' },
	query: {},
})

assert.throws(
	() => requireConfirm({}, 'createDeployment', 'POST', '/v13/deployments', { name: 'app' }),
	/dryRun: true/,
)

assert.equal(requireConfirm({ confirm: true }, 'createDeployment', 'POST', '/v13/deployments', {}), null)

assert.deepEqual(redactEnvValue({ key: 'FLAG', value: 'super-secret', target: ['preview'] }), {
	key: 'FLAG',
	value: '[redacted]',
	target: ['preview'],
})

assert.deepEqual(
	slimEnvVar({
		id: 'env_1',
		key: 'FLAG',
		type: 'plain',
		target: ['production'],
		value: 'should-not-leak',
		updatedAt: 1,
	}),
	{
		id: 'env_1',
		key: 'FLAG',
		type: 'plain',
		target: ['production'],
		gitBranch: null,
		createdAt: null,
		updatedAt: 1,
		comment: null,
	},
)

assert.equal(
	Object.prototype.hasOwnProperty.call(
		slimEnvVar({ key: 'FLAG', value: 'secret', type: 'plain' }),
		'value',
	),
	false,
)

assert.deepEqual(slimUser({ id: 'u1', username: 'ada', name: 'Ada', email: 'ada@example.com', defaultTeamId: 'team_1', billing: {} }), {
	id: 'u1',
	username: 'ada',
	name: 'Ada',
	email: 'ada@example.com',
	defaultTeamId: 'team_1',
})

assert.deepEqual(slimTeam({ id: 'team_1', name: 'Acme', slug: 'acme', createdAt: 1, billing: {} }), {
	id: 'team_1',
	name: 'Acme',
	slug: 'acme',
	createdAt: 1,
	limited: false,
})

assert.deepEqual(
	slimProject({
		id: 'prj_1',
		name: 'example-app',
		framework: 'nextjs',
		updatedAt: 2,
		env: [{ key: 'SECRET', value: 'nope' }],
	}),
	{
		id: 'prj_1',
		name: 'example-app',
		framework: 'nextjs',
		updatedAt: 2,
		link: null,
	},
)

assert.deepEqual(
	slimDeployment({ uid: 'dpl_1', name: 'example-app', url: 'example.vercel.app', readyState: 'READY', target: 'preview', createdAt: 3 }),
	{
		id: 'dpl_1',
		name: 'example-app',
		url: 'example.vercel.app',
		state: 'READY',
		target: 'preview',
		createdAt: 3,
		inspectorUrl: null,
		projectId: null,
	},
)

assert.deepEqual(queryFromInput({ teamSlug: 'acme', search: 'docs', dryRun: true, secretName: 'x' }), {
	slug: 'acme',
	search: 'docs',
})

console.log('setup checks passed')