Skip to content

Commit

Permalink
feat(add hascapcapabilities): add hasCapCapabilities (#249)
Browse files Browse the repository at this point in the history
* feat(add hascapcapabilities): add hasCapCapabilities
  • Loading branch information
vevush authored Jun 7, 2023
1 parent f6a7f04 commit f2948a2
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 0 deletions.
5 changes: 5 additions & 0 deletions examples/sample-action-client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@
"title": "BAS Toolkit: has Fiori capabilities (hasFioriCapabilities)",
"command": "has.fiori.capabilities"
},
{
"title": "BAS Toolkit: has Cap capabilities (hasCapCapabilities)",
"command": "has.cap.capabilities"
},
{
"title": "BAS Toolkit: Is Opened For Action (isOpenedForAction)",
"command": "is.opened.for.action"
Expand Down Expand Up @@ -88,6 +92,7 @@
"onCommand:get.parameter",
"onCommand:lcap.enabled",
"onCommand:has.fiori.capabilities",
"onCommand:has.cap.capabilities",
"onCommand:is.opened.for.action",
"onCommand:fileaction.scheduled",
"onCommand:executeaction.display.error",
Expand Down
9 changes: 9 additions & 0 deletions examples/sample-action-client/src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,15 @@ export function activate(context: ExtensionContext) {
})
);

context.subscriptions.push(
commands.registerCommand("has.cap.capabilities", async () => {
const enabledValue = await basAPI.hasCapCapabilities();
void window.showInformationMessage(
`has Cap capabilities? ${enabledValue}`
);
})
);

context.subscriptions.push(
commands.registerCommand("is.opened.for.action", async () => {
const isOpenedForActionValue = await basAPI.isOpenedForAction();
Expand Down
5 changes: 5 additions & 0 deletions packages/app-studio-toolkit-types/api.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,11 @@ export interface BasToolkit {
*/
hasFioriCapabilities: () => Promise<boolean>;

/**
* Is environment Cap or not
*/
hasCapCapabilities: () => Promise<boolean>;

/**
* Determine whether BAS is opened for running action or editing a project
*
Expand Down
15 changes: 15 additions & 0 deletions packages/app-studio-toolkit/src/apis/validateCapCapabilities.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { getLogger } from "@sap/artifact-management";
import { extensions } from "vscode";

export const CAP_EXTENSION_ID = "SAPSE.vscode-cds";

// eslint-disable-next-line @typescript-eslint/require-await -- the new implementation does not require await.
export async function hasCapCapabilities(): Promise<boolean> {
const logger = getLogger().getChildLogger({ label: "hasCapCapabilities" });

// Cap mode is determined by the existence of the Cap extension
const hasCapCapabilities = !!extensions.getExtension(CAP_EXTENSION_ID);
logger.trace("Has Cap Capabilities", { hasCapCapabilities });

return hasCapCapabilities;
}
2 changes: 2 additions & 0 deletions packages/app-studio-toolkit/src/public-api/base-bas-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
import { getLogger } from "../logger/logger";
import { isLCAPEnabled, isLCAPEnabledSync } from "../apis/validateLCAP";
import { hasFioriCapabilities } from "../apis/validateFioriCapabilities";
import { hasCapCapabilities } from "../apis/validateCapCapabilities";
import { isOpenedForAction } from "../apis/isOpenedForAction";

/**
Expand Down Expand Up @@ -48,6 +49,7 @@ export const baseBasToolkitAPI: Omit<BasToolkit, "workspaceAPI"> = {
isLCAPEnabled,
isLCAPEnabledSync,
hasFioriCapabilities,
hasCapCapabilities,
isOpenedForAction,

actions: {
Expand Down
23 changes: 23 additions & 0 deletions packages/app-studio-toolkit/test/apis/validateCapabilities.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,16 @@ const testVscode = {
mockVscode(testVscode, "dist/src/logger/logger.js");
mockVscode(testVscode, "dist/src/apis/validateLCAP.js");
mockVscode(testVscode, "dist/src/apis/validateFioriCapabilities.js");
mockVscode(testVscode, "dist/src/apis/validateCapCapabilities.js");
import { isLCAPEnabled, LACP_EXTENSION_ID } from "../../src/apis/validateLCAP";
import {
hasFioriCapabilities,
FIORI_EXTENSION_ID,
} from "../../src/apis/validateFioriCapabilities";
import {
hasCapCapabilities,
CAP_EXTENSION_ID,
} from "../../src/apis/validateCapCapabilities";

describe("validate capabilities API", () => {
it("should return false", async () => {
Expand Down Expand Up @@ -79,5 +84,23 @@ describe("validate capabilities API", () => {
const parameterValue = await hasFioriCapabilities();
expect(parameterValue).to.be.true;
});
it("should return false when Cap extension does not exist", async () => {
extensionsMock
.expects("getExtension")
.withExactArgs(CAP_EXTENSION_ID)
.returns(undefined);
const parameterValue = await hasCapCapabilities();
expect(parameterValue).to.be.false;
});

it("should return true when Cap extension exists", async () => {
const extension = { id: CAP_EXTENSION_ID };
extensionsMock
.expects("getExtension")
.withExactArgs(CAP_EXTENSION_ID)
.returns(extension);
const parameterValue = await hasCapCapabilities();
expect(parameterValue).to.be.true;
});
});
});

0 comments on commit f2948a2

Please sign in to comment.