@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
135 lines • 6.96 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 spruce_skill_utils_1 = require("@sprucelabs/spruce-skill-utils");
const test_utils_1 = require("@sprucelabs/test-utils");
const AbstractCliTest_1 = __importDefault(require("../../../tests/AbstractCliTest"));
const test_utility_1 = __importDefault(require("../../../tests/utilities/test.utility"));
class GeneratingMercuryEventContractTest extends AbstractCliTest_1.default {
static cli;
static async beforeEach() {
await super.beforeEach();
this.cli = await this.Cli();
spruce_skill_utils_1.diskUtil.writeFile(this.resolvePath('package.json'), '{}');
}
static async hasEventContractFeature() {
test_utils_1.assert.isTruthy(this.cli.getFeature('eventContract'));
}
static async hasPullFeature() {
test_utils_1.assert.isFunction(this.Action('eventContract', 'pull').execute);
}
static async generatesContractAtCwd() {
await this.FeatureFixture().installCachedFeatures('events');
const results = await this.Action('eventContract', 'pull').execute({});
test_utils_1.assert.isFalsy(results.errors);
const match = test_utility_1.default.assertFileByNameInGeneratedFiles('events.contract.ts', results.files);
test_utils_1.assert.isEqual(match, this.resolvePath('events.contract.ts'));
test_utils_1.assert.doesInclude(results.files ?? [], {
name: 'events.contract.ts',
action: 'generated',
});
const contents = spruce_skill_utils_1.diskUtil.readFile(match);
test_utils_1.assert.doesInclude(contents, "import { buildEventContract } from '@sprucelabs/mercury-types'");
}
static async generatesAtDestination() {
await this.FeatureFixture().installCachedFeatures('events');
const results = await this.Action('eventContract', 'pull').execute({
destination: './src/tests',
});
const match = test_utility_1.default.assertFileByNameInGeneratedFiles('events.contract.ts', results.files);
const expected = this.resolvePath('src/tests/events.contract.ts');
test_utils_1.assert.isEqual(expected, match);
}
static async savesContractLocallyAndImportsAsDefault() {
const contracts = await this.installSkillAndPullContracts();
test_utils_1.assert.isArray(contracts);
test_utils_1.assert.isObject(contracts[0].eventSignatures);
test_utils_1.assert.isObject(contracts[0].eventSignatures[`did-message::v2020_12_25`]);
}
static async doesNotPullGlobalContracts() {
this.cli = await this.FeatureFixture().installCachedFeatures('events');
await this.getSkillFixture().registerCurrentSkill({
name: 'heartwood test',
});
const events = await this.Store('event');
await events.registerEventContract({
eventContract: {
eventSignatures: {
'test-event::v2020_01_01': {
isGlobal: true,
},
},
},
});
const contracts = await this.installSkillAndPullContracts();
test_utils_1.assert.isEqual(contracts.length, 1);
test_utils_1.assert.isObject(contracts[0].eventSignatures);
test_utils_1.assert.isObject(contracts[0].eventSignatures['add-role::v2020_12_25']);
}
static async contractHasTypes() {
this.cli = await this.FeatureFixture().installCachedFeatures('node');
const promise = this.Action('eventContract', 'pull', {
shouldAutoHandleDependencies: true,
}).execute({});
const results = await promise;
const match = test_utility_1.default.assertFileByNameInGeneratedFiles('events.contract.ts', results.files);
const contents = spruce_skill_utils_1.diskUtil.readFile(match);
test_utils_1.assert.doesInclude(contents, 'export default eventContracts');
test_utils_1.assert.doesInclude(contents, 'as const');
test_utils_1.assert.doesInclude(contents, 'export type CoreEventContract = typeof eventContracts[0]');
}
static async generatingASecondTimeReportsAnUpdate() {
this.cli = await this.FeatureFixture().installCachedFeatures('events');
await this.Action('eventContract', 'pull').execute({});
const results = await this.Action('eventContract', 'pull').execute({});
test_utility_1.default.assertFileByNameInGeneratedFiles('events.contract.ts', results.files);
test_utils_1.assert.doesInclude(results.files ?? [], {
name: 'events.contract.ts',
action: 'updated',
});
}
static async installSkillAndPullContracts() {
this.cli = await this.FeatureFixture().installCachedFeatures('events');
return await this.pullContracts();
}
static async pullContracts() {
const results = await this.Action('eventContract', 'pull').execute({});
const match = test_utility_1.default.assertFileByNameInGeneratedFiles('events.contract.ts', results.files);
const contracts = await this.Service('import').importDefault(match);
return contracts;
}
}
exports.default = GeneratingMercuryEventContractTest;
__decorate([
(0, test_utils_1.test)()
], GeneratingMercuryEventContractTest, "hasEventContractFeature", null);
__decorate([
(0, test_utils_1.test)()
], GeneratingMercuryEventContractTest, "hasPullFeature", null);
__decorate([
(0, test_utils_1.test)()
], GeneratingMercuryEventContractTest, "generatesContractAtCwd", null);
__decorate([
(0, test_utils_1.test)()
], GeneratingMercuryEventContractTest, "generatesAtDestination", null);
__decorate([
(0, test_utils_1.test)()
], GeneratingMercuryEventContractTest, "savesContractLocallyAndImportsAsDefault", null);
__decorate([
(0, test_utils_1.test)()
], GeneratingMercuryEventContractTest, "doesNotPullGlobalContracts", null);
__decorate([
(0, test_utils_1.test)()
], GeneratingMercuryEventContractTest, "contractHasTypes", null);
__decorate([
(0, test_utils_1.test)()
], GeneratingMercuryEventContractTest, "generatingASecondTimeReportsAnUpdate", null);
//# sourceMappingURL=PullingMercuryEventContract.test.js.map