0
Fork 0
mirror of https://github.com/withastro/astro.git synced 2024-12-23 21:53:55 -05:00
astro/packages/upgrade/test/install.test.js

212 lines
4.9 KiB
JavaScript

import { describe, it } from 'node:test';
import * as assert from 'node:assert/strict';
import { setup } from './utils.js';
import { install } from '../dist/index.js';
describe('install', () => {
const fixture = setup();
const ctx = {
cwd: '',
version: 'latest',
packageManager: 'npm',
dryRun: true,
};
it('up to date', async () => {
const context = {
...ctx,
packages: [
{
name: 'astro',
currentVersion: '1.0.0',
targetVersion: '1.0.0',
},
],
};
await install(context);
assert.equal(fixture.hasMessage('◼ astro is up to date on v1.0.0'), true);
});
it('patch', async () => {
const context = {
...ctx,
packages: [
{
name: 'astro',
currentVersion: '1.0.0',
targetVersion: '1.0.1',
},
],
};
await install(context);
assert.equal(fixture.hasMessage('● astro can be updated to v1.0.1'), true);
});
it('minor', async () => {
const context = {
...ctx,
packages: [
{
name: 'astro',
currentVersion: '1.0.0',
targetVersion: '1.2.0',
},
],
};
await install(context);
assert.equal(fixture.hasMessage('● astro can be updated to v1.2.0'), true);
});
it('major (reject)', async () => {
let prompted = false;
let exitCode;
const context = {
...ctx,
prompt: () => {
prompted = true;
return { proceed: false };
},
exit: (code) => {
exitCode = code;
},
packages: [
{
name: 'astro',
currentVersion: '1.0.0',
targetVersion: '2.0.0',
isMajor: true,
changelogTitle: 'CHANGELOG',
changelogURL: 'https://example.com',
},
],
};
await install(context);
assert.equal(fixture.hasMessage('▲ astro can be updated to v2.0.0'), true);
assert.equal(prompted, true);
assert.equal(exitCode, 0);
assert.equal(fixture.hasMessage('check Be sure to follow the CHANGELOG.'), false);
});
it('major (accept)', async () => {
let prompted = false;
let exitCode;
const context = {
...ctx,
prompt: () => {
prompted = true;
return { proceed: true };
},
exit: (code) => {
exitCode = code;
},
packages: [
{
name: 'astro',
currentVersion: '1.0.0',
targetVersion: '2.0.0',
isMajor: true,
changelogTitle: 'CHANGELOG',
changelogURL: 'https://example.com',
},
],
};
await install(context);
assert.equal(fixture.hasMessage('▲ astro can be updated to v2.0.0'), true);
assert.equal(prompted, true);
assert.equal(exitCode, undefined);
assert.equal(fixture.hasMessage('check Be sure to follow the CHANGELOG.'), true);
});
it('multiple major', async () => {
let prompted = false;
let exitCode;
const context = {
...ctx,
prompt: () => {
prompted = true;
return { proceed: true };
},
exit: (code) => {
exitCode = code;
},
packages: [
{
name: 'a',
currentVersion: '1.0.0',
targetVersion: '2.0.0',
isMajor: true,
changelogTitle: 'CHANGELOG',
changelogURL: 'https://example.com',
},
{
name: 'b',
currentVersion: '6.0.0',
targetVersion: '7.0.0',
isMajor: true,
changelogTitle: 'CHANGELOG',
changelogURL: 'https://example.com',
},
],
};
await install(context);
assert.equal(fixture.hasMessage('▲ a can be updated to v2.0.0'), true);
assert.equal(fixture.hasMessage('▲ b can be updated to v7.0.0'), true);
assert.equal(prompted, true);
assert.equal(exitCode, undefined);
const [changelog, a, b] = fixture.messages().slice(-5);
assert.match(changelog, /^check/);
assert.match(a, /^a/);
assert.match(b, /^b/);
});
it('current patch minor major', async () => {
let prompted = false;
let exitCode;
const context = {
...ctx,
prompt: () => {
prompted = true;
return { proceed: true };
},
exit: (code) => {
exitCode = code;
},
packages: [
{
name: 'current',
currentVersion: '1.0.0',
targetVersion: '1.0.0',
},
{
name: 'patch',
currentVersion: '1.0.0',
targetVersion: '1.0.1',
},
{
name: 'minor',
currentVersion: '1.0.0',
targetVersion: '1.2.0',
},
{
name: 'major',
currentVersion: '1.0.0',
targetVersion: '3.0.0',
isMajor: true,
changelogTitle: 'CHANGELOG',
changelogURL: 'https://example.com',
},
],
};
await install(context);
assert.equal(fixture.hasMessage('◼ current is up to date on v1.0.0'), true);
assert.equal(fixture.hasMessage('● patch can be updated to v1.0.1'), true);
assert.equal(fixture.hasMessage('● minor can be updated to v1.2.0'), true);
assert.equal(fixture.hasMessage('▲ major can be updated to v3.0.0'), true);
assert.equal(prompted, true);
assert.equal(exitCode, undefined);
assert.equal(fixture.hasMessage('check Be sure to follow the CHANGELOG.'), true);
const [changelog, major] = fixture.messages().slice(-4);
assert.match(changelog, /^check/);
assert.match(major, /^major/)
});
});