Skip to content

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

Package listing

@kody/netlify

scripts/test-setup.mjs

189 lines · 4.1 KB · JavaScript
import assert from 'node:assert/strict'
import {
	API_KEY_SECRET,
	SECRET_URL,
	assertNoRetiredAlias,
	queryFromInput,
	redactEnvValue,
	requireConfirm,
	setupUrls,
	slimDeploy,
	slimEnvVar,
	slimSite,
	slimUser,
} from '../src/setup.js'

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

const setup = setupUrls()
assert.equal(setup.tokenSecret, 'netlifyToken')
assert.match(setup.tokenDashboardUrl, /app\.netlify\.com/)
assert.doesNotMatch(JSON.stringify(setup), /kent/i)

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

const preview = requireConfirm({ dryRun: true }, 'createDeploy', 'POST', '/sites/example-site/deploys', {
	draft: true,
})
assert.deepEqual(preview, {
	dryRun: true,
	method: 'POST',
	path: '/sites/example-site/deploys',
	body: { draft: true },
	query: null,
})

assert.throws(
	() => requireConfirm({}, 'restoreDeploy', 'POST', '/sites/example-site/deploys/d1/restore', null),
	/dryRun: true/,
)

assert.equal(
	requireConfirm({ confirm: true }, 'createDeploy', 'POST', '/sites/example-site/deploys', {}),
	null,
)

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

assert.equal(
	Object.prototype.hasOwnProperty.call(
		slimEnvVar({
			key: 'FLAG',
			scopes: ['builds'],
			is_secret: true,
			values: [{ id: 'v1', context: 'production', value: 'should-not-leak' }],
		}),
		'value',
	),
	false,
)

assert.deepEqual(
	slimEnvVar({
		key: 'FLAG',
		scopes: ['builds'],
		is_secret: true,
		updated_at: '2026-01-01',
		values: [{ id: 'v1', context: 'production', value: 'should-not-leak' }],
	}),
	{
		key: 'FLAG',
		scopes: ['builds'],
		is_secret: true,
		updated_at: '2026-01-01',
		values: [{ id: 'v1', context: 'production', context_parameter: null }],
	},
)

assert.deepEqual(slimUser({ id: 'u1', email: 'ada@example.com', full_name: 'Ada', billing: {} }), {
	id: 'u1',
	email: 'ada@example.com',
	full_name: 'Ada',
	avatar_url: null,
	slug: null,
})

assert.equal(
	Object.prototype.hasOwnProperty.call(
		slimSite({
			id: 's1',
			name: 'example-site',
			url: 'https://example.netlify.app',
			password: 'nope',
			deploy_hook: 'https://secret',
			build_settings: { env: { SECRET: 'nope' } },
			default_hooks_data: { access_token: 'nope' },
		}),
		'password',
	),
	false,
)

assert.deepEqual(
	slimSite({
		id: 's1',
		name: 'example-site',
		url: 'https://example.netlify.app',
		ssl_url: 'https://example.netlify.app',
		state: 'current',
		account_slug: 'acme',
		password: 'nope',
		published_deploy: { id: 'd1', state: 'ready', url: 'https://example.netlify.app' },
	}),
	{
		id: 's1',
		name: 'example-site',
		url: 'https://example.netlify.app',
		ssl_url: 'https://example.netlify.app',
		admin_url: null,
		state: 'current',
		custom_domain: null,
		account_id: null,
		account_name: null,
		account_slug: 'acme',
		created_at: null,
		updated_at: null,
		published_deploy: {
			id: 'd1',
			site_id: null,
			state: 'ready',
			name: null,
			url: 'https://example.netlify.app',
			ssl_url: null,
			deploy_url: null,
			admin_url: null,
			branch: null,
			context: null,
			draft: false,
			error_message: null,
			commit_ref: null,
			title: null,
			created_at: null,
			published_at: null,
			framework: null,
		},
	},
)

assert.deepEqual(
	slimDeploy({ id: 'd1', state: 'ready', context: 'production', skew_protection_token: 'nope' }),
	{
		id: 'd1',
		site_id: null,
		state: 'ready',
		name: null,
		url: null,
		ssl_url: null,
		deploy_url: null,
		admin_url: null,
		branch: null,
		context: 'production',
		draft: false,
		error_message: null,
		commit_ref: null,
		title: null,
		created_at: null,
		published_at: null,
		framework: null,
	},
)

assert.deepEqual(queryFromInput({ name: 'docs', dryRun: true, secretName: 'x', per_page: 10 }), {
	name: 'docs',
	per_page: 10,
})

console.log('setup checks passed')