Skip to content

Commit

Permalink
fix: deploy skill package when icon uri path relative to its asset files
Browse files Browse the repository at this point in the history
  • Loading branch information
jsetton committed Aug 9, 2023
1 parent fbb3247 commit 72a51b1
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 13 deletions.
18 changes: 13 additions & 5 deletions lib/controllers/skill-infrastructure-controller/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const MultiTasksView = require("../../view/multi-tasks-view");
const Messenger = require("../../view/messenger");
const hashUtils = require("../../utils/hash-utils");
const stringUtils = require("../../utils/string-utils");
const profileHelper = require("../../utils/profile-helper");
const CONSTANTS = require("../../utils/constants");
const {isAcSkill, syncManifest} = require("../../utils/ac-util");
const acdl = require("@alexa/acdl");
Expand Down Expand Up @@ -314,17 +315,24 @@ module.exports = class SkillInfrastructureController {
* @param {Function} callback
*/
_ensureSkillManifestGotUpdated(callback) {
let skillMetaController;
let vendorId;

try {
skillMetaController = new SkillMetadataController({profile: this.profile, doDebug: this.doDebug});
vendorId = profileHelper.resolveVendorId(this.profile);
} catch (err) {
return callback(err);
}

skillMetaController.updateSkillManifest((err) => {
callback(err);
});
// deploy skill package if the skill manifest has file icon uri, otherwise update it
if (Manifest.getInstance().hasFileIconUri()) {
this.skillMetaController.deploySkillPackage(vendorId, this.ignoreHash, (err) => {
callback(err);
});
} else {
this.skillMetaController.updateSkillManifest((err) => {
callback(err);
});
}
}

/**
Expand Down
10 changes: 10 additions & 0 deletions lib/model/manifest.js
Original file line number Diff line number Diff line change
Expand Up @@ -128,4 +128,14 @@ module.exports = class Manifest extends ConfigFile {
setEventsSubscriptions(subscriptions) {
this.setProperty(["manifest", Manifest.endpointTypes.EVENTS, "subscriptions"], subscriptions);
}

/**
* Returns if skill manifest has file icon uri
* @return {Boolean}
*/
hasFileIconUri() {
return Object.values(this.getPublishingLocales())
.flatMap((locale) => Object.entries(locale))
.some(([key, value]) => (key === "smallIconUri" || key === "largeIconUri") && value.startsWith("file://"));
}
};
36 changes: 28 additions & 8 deletions test/unit/controller/skill-infrastructure-controller-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -763,40 +763,60 @@ describe("Controller test - skill infrastructure controller test", () => {

describe("# test class method: _ensureSkillManifestGotUpdated", () => {
const skillInfraController = new SkillInfrastructureController(TEST_CONFIGURATION);
let deploySkillPackageStub, updateSkillManifestStub;

beforeEach(() => {
new ResourcesConfig(FIXTURE_RESOURCES_CONFIG_FILE_PATH);
new Manifest(FIXTURE_MANIFEST_FILE_PATH);
sinon.stub(fs, "writeFileSync");
deploySkillPackageStub = sinon.stub(SkillMetadataController.prototype, "deploySkillPackage").yields();
updateSkillManifestStub = sinon.stub(SkillMetadataController.prototype, "updateSkillManifest").yields();
});

afterEach(() => {
ResourcesConfig.dispose();
Manifest.dispose();
sinon.restore();
});

it("| update skill manifest fails, expect error called back", (done) => {
it("| resolve vendor id fails, expect error called back", (done) => {
// setup
const TEST_ERROR = new Error("error");
sinon.stub(profileHelper, "resolveVendorId").throws(TEST_ERROR);
// call
skillInfraController._ensureSkillManifestGotUpdated((err, res) => {
// verify
expect(res).equal(undefined);
expect(err).equal(TEST_ERROR);
expect(deploySkillPackageStub.calledOnce).equal(false);
expect(updateSkillManifestStub.calledOnce).equal(false);
done();
});
});

it("| skill manifest has no file icon uri, expect updateSkillManifest to be called with no error", (done) => {
// setup
sinon.stub(profileHelper, "resolveVendorId");
sinon.stub(SkillMetadataController.prototype, "updateSkillManifest").yields("error");
sinon.stub(Manifest.prototype, "hasFileIconUri").returns(false);
// call
skillInfraController._ensureSkillManifestGotUpdated((err, res) => {
// verify
expect(res).equal(undefined);
expect(err).equal("error");
expect(err).equal(undefined);
expect(deploySkillPackageStub.calledOnce).equal(false);
expect(updateSkillManifestStub.calledOnce).equal(true);
done();
});
});

it("| update skill manifest succeeds, expect call back with no error", (done) => {
it("| skill manifest has file icon uri, expect deploySkillPackage to be called with no error", (done) => {
// setup
sinon.stub(profileHelper, "resolveVendorId");
sinon.stub(SkillMetadataController.prototype, "updateSkillManifest").yields();
sinon.stub(Manifest.prototype, "hasFileIconUri").returns(true);
// call
skillInfraController._ensureSkillManifestGotUpdated((err, res) => {
// verify
expect(res).equal(undefined);
expect(err).equal(undefined);
expect(deploySkillPackageStub.calledOnce).equal(true);
expect(updateSkillManifestStub.calledOnce).equal(false);
done();
});
});
Expand Down
32 changes: 32 additions & 0 deletions test/unit/model/manifest-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -211,5 +211,37 @@ describe("Model test - manifest file test", () => {
Manifest.dispose();
});
});

describe("# verify function hasFileIconUri", () => {
it("| icon uri https path, expect false", () => {
new Manifest(MANIFEST_FILE);
Manifest.getInstance().setPublishingLocales({
"en-US": {
name: "skillName",
summary: "one sentence description",
description: "skill description",
smallIconUri: "https://some.url.com/images/en-US_smallIcon.png",
largeIconUri: "https://some.url.com/images/en-US_largeIconUri.png",
},
});
expect(Manifest.getInstance().hasFileIconUri()).equal(false);
Manifest.dispose();
});

it("| icon uri file path relative to skill package assets, expect true", () => {
new Manifest(MANIFEST_FILE);
Manifest.getInstance().setPublishingLocales({
"en-US": {
name: "skillName",
summary: "one sentence description",
description: "skill description",
smallIconUri: "file://assets/images/en-US_smallIcon.png",
largeIconUri: "file://assets/images/en-US_largeIconUri.png",
},
});
expect(Manifest.getInstance().hasFileIconUri()).equal(true);
Manifest.dispose();
});
});
});
});

0 comments on commit 72a51b1

Please sign in to comment.