Files
diegosouzapw--omniroute/tests/unit/copilot-m365-enterprise-6334.test.ts
2026-07-13 13:39:12 +08:00

130 lines
5.3 KiB
TypeScript

/**
* Feature test for #6334 — copilot-m365-web enterprise ("work") tier support.
*
* The individual path hardcoded `agent="web"`. Microsoft 365 Copilot for work rides the
* `agent="work"` BizChat surface with `scenario="officeweb"` + a `Premium` license. This is
* opt-in via `providerSpecificData.tier="enterprise"` (alias `"work"`), mirroring the EDU
* tier (#6210). A raw `providerSpecificData.agent` override is also honored. The individual
* and EDU tuples must remain unchanged.
*
* The live round-trip against a real M365 enterprise tenant is the separate Rule #18
* validation and is NOT possible in this environment — documented as a live-validation
* follow-up.
*/
import test from "node:test";
import assert from "node:assert/strict";
import {
buildWsUrl,
resolveConnectionParams,
M365_INDIVIDUAL_DEFAULTS,
M365_ENTERPRISE_OVERRIDES,
} from "../../open-sse/executors/copilot-m365-connection.ts";
const BASE_PARAMS = {
host: "substrate.office.com",
chathubPath: "user-oid@tenant-id",
accessToken: "tok",
};
// ── buildWsUrl: enterprise tuple ────────────────────────────────────────────
test("buildWsUrl: enterprise params emit agent=work + scenario=officeweb + Premium license [#6334]", () => {
const url = new URL(
buildWsUrl({
...BASE_PARAMS,
agent: M365_ENTERPRISE_OVERRIDES.agent,
scenario: M365_ENTERPRISE_OVERRIDES.scenario,
licenseType: M365_ENTERPRISE_OVERRIDES.licenseType,
})
);
assert.equal(url.searchParams.get("agent"), "work");
assert.equal(url.searchParams.get("scenario"), "officeweb");
assert.equal(url.searchParams.get("licenseType"), "Premium");
});
test("buildWsUrl: individual (default) tier is unchanged — agent=web [#6334]", () => {
const url = new URL(buildWsUrl(BASE_PARAMS));
assert.equal(url.searchParams.get("agent"), M365_INDIVIDUAL_DEFAULTS.agent);
assert.equal(url.searchParams.get("agent"), "web");
assert.equal(url.searchParams.get("scenario"), M365_INDIVIDUAL_DEFAULTS.scenario);
assert.equal(url.searchParams.get("isEdu"), "false");
});
// ── resolveConnectionParams: opt-in tier resolution ─────────────────────────
test("resolveConnectionParams: tier='enterprise' selects the enterprise/work tuple [#6334]", () => {
const params = resolveConnectionParams({
apiKey: "access_token=tok",
providerSpecificData: { chathubPath: "user@tenant", tier: "enterprise" },
} as never);
assert.ok(!("error" in params), "should resolve without error");
if (!("error" in params)) {
assert.equal(params.agent, "work");
assert.equal(params.scenario, "officeweb");
assert.equal(params.licenseType, "Premium");
const url = new URL(buildWsUrl(params));
assert.equal(url.searchParams.get("agent"), "work");
assert.equal(url.searchParams.get("scenario"), "officeweb");
assert.equal(url.searchParams.get("licenseType"), "Premium");
}
});
test("resolveConnectionParams: tier='work' is an alias for the enterprise tuple [#6334]", () => {
const params = resolveConnectionParams({
apiKey: "access_token=tok",
providerSpecificData: { chathubPath: "user@tenant", tier: "work" },
} as never);
assert.ok(!("error" in params));
if (!("error" in params)) {
assert.equal(params.agent, "work");
assert.equal(params.scenario, "officeweb");
}
});
test("resolveConnectionParams: raw providerSpecificData.agent override flows into the URL [#6334]", () => {
const params = resolveConnectionParams({
apiKey: "access_token=tok",
providerSpecificData: { chathubPath: "user@tenant", agent: "work" },
} as never);
assert.ok(!("error" in params));
if (!("error" in params)) {
assert.equal(params.agent, "work");
const url = new URL(buildWsUrl(params));
assert.equal(url.searchParams.get("agent"), "work");
// No tier → scenario/licenseType fall back to individual defaults.
assert.equal(url.searchParams.get("scenario"), M365_INDIVIDUAL_DEFAULTS.scenario);
}
});
// ── Regressions: individual + EDU paths untouched ───────────────────────────
test("resolveConnectionParams: no tier keeps the individual default agent (web) [#6334]", () => {
const params = resolveConnectionParams({
apiKey: "access_token=tok",
providerSpecificData: { chathubPath: "user@tenant" },
} as never);
assert.ok(!("error" in params));
if (!("error" in params)) {
// agent unset → buildWsUrl falls back to the individual default.
assert.equal(params.agent, undefined);
const url = new URL(buildWsUrl(params));
assert.equal(url.searchParams.get("agent"), "web");
}
});
test("resolveConnectionParams: tier='edu' tuple is unchanged and stays on agent=web [#6334]", () => {
const params = resolveConnectionParams({
apiKey: "access_token=tok",
providerSpecificData: { chathubPath: "user@tenant", tier: "edu" },
} as never);
assert.ok(!("error" in params));
if (!("error" in params)) {
assert.equal(params.scenario, "OfficeWebIncludedCopilot");
assert.equal(params.isEdu, "true");
// EDU tier does not touch agent → individual default in the URL.
assert.equal(params.agent, undefined);
const url = new URL(buildWsUrl(params));
assert.equal(url.searchParams.get("agent"), "web");
}
});