@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
123 lines • 5.56 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const test_utils_1 = require("@sprucelabs/test-utils");
const lodash_1 = require("lodash");
const CommandService_1 = __importDefault(require("../../../services/CommandService"));
const AbstractCliTest_1 = __importDefault(require("../../../tests/AbstractCliTest"));
class UpdateDependencies2Test extends AbstractCliTest_1.default {
static action;
static async beforeEach() {
await super.beforeEach();
this.action = this.Action('node', 'updateDependencies');
}
static async locksVersionOfDependencyWhenDependencyAlreadyInPackageJson() {
await this.FeatureFixture().installCachedFeatures('skills');
this.Service('pkg').set({ path: 'dependencies.axios', value: '0.0.1' });
const skill = this.featureInstaller.getFeature('skill');
skill.packageDependencies.push({
name: 'axios',
version: '0.21.3',
});
const passedArgs = [];
CommandService_1.default.fakeCommand(/(npm|yarn).*?(install|add)/, {
code: 0,
callback: (_, args) => {
passedArgs.push(...args);
},
});
await this.action.execute({});
test_utils_1.assert.doesInclude(passedArgs, 'axios@0.21.3');
}
static async runsAddForAllDependenciesInPkgJson() {
await this.FeatureFixture().installCachedFeatures('events');
const name = await this.installRandomPackage();
const devName = await this.installRandomDevPackage();
const blocked = this.blockRandomPackages();
const { allDeps, allDevDeps } = this.loadAllDependencies(name, devName);
let passedArgs = [];
CommandService_1.default.fakeCommand(/(npm|yarn).*?(install|add)/, {
code: 0,
callback: (_, args) => {
passedArgs.push(args);
},
});
await this.action.execute({});
const pkg = this.Service('pkg');
const features = await this.featureInstaller.getInstalledFeatures();
for (const feature of features) {
const featureDependencies = feature.packageDependencies;
const deps = (0, lodash_1.uniq)([
...allDeps,
...featureDependencies
.filter((d) => !d.isDev && !allDevDeps.includes(d.name))
.map((d) => d.name),
]
.map((n) => pkg.stripLatest(n))
.filter((n) => n !== blocked));
const devDeps = (0, lodash_1.uniq)([
...allDevDeps,
...featureDependencies
.filter((d) => d.isDev && !allDeps.includes(d.name))
.map((d) => d.name),
]
.map((n) => pkg.stripLatest(n))
.filter((n) => n !== blocked));
for (const d of deps) {
test_utils_1.assert.doesInclude(passedArgs[0], d);
}
for (const d of devDeps) {
test_utils_1.assert.doesInclude(passedArgs[1], d);
}
}
test_utils_1.assert.doesNotInclude(passedArgs[0], blocked);
test_utils_1.assert.doesNotInclude(passedArgs[1], blocked);
}
static loadAllDependencies(name, devName) {
const pkg = this.Service('pkg');
const pkgJson = pkg.readPackage();
const allDeps = [...(Object.keys(pkgJson.dependencies) ?? []), name];
const allDevDeps = [
...(Object.keys(pkgJson.devDependencies) ?? []),
devName,
];
return { allDeps, allDevDeps };
}
static async installRandomPackage() {
const names = ['moment', 'lodash'];
const name = names[(0, lodash_1.random)(0, names.length - 1)];
const pkg = this.Service('pkg');
await pkg.install(name);
return name;
}
static async installRandomDevPackage() {
const names = ['chalk', 'axios'];
const name = names[(0, lodash_1.random)(0, names.length - 1)];
const pkg = this.Service('pkg');
await pkg.install(name, { isDev: true });
return name;
}
static blockRandomPackages() {
const names = ['@sprucelabs/error', 'typescript'];
const name = names[(0, lodash_1.random)(0, names.length - 1)];
this.action.blockUpgrade(name, this.Service('pkg'));
this.action.blockUpgrade('random', this.Service('pkg'));
return name;
}
}
exports.default = UpdateDependencies2Test;
__decorate([
(0, test_utils_1.test)()
], UpdateDependencies2Test, "locksVersionOfDependencyWhenDependencyAlreadyInPackageJson", null);
__decorate([
(0, test_utils_1.test)()
], UpdateDependencies2Test, "runsAddForAllDependenciesInPkgJson", null);
//# sourceMappingURL=UpdatingDependencies2.test.js.map