Fix unreleased bug where workstations is not selected on controls page (#43893)
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
import { preferredOrLowestIdFleet } from "./useTeamIdParam";
|
||||
|
||||
describe("preferredOrLowestIdFleet", () => {
|
||||
it('returns "Workstations" when present', () => {
|
||||
const fleets = [
|
||||
{ id: 1, name: "Alpha" },
|
||||
{ id: 2, name: "Workstations" },
|
||||
{ id: 3, name: "Zebra" },
|
||||
];
|
||||
expect(preferredOrLowestIdFleet(fleets)).toEqual({
|
||||
id: 2,
|
||||
name: "Workstations",
|
||||
});
|
||||
});
|
||||
|
||||
it('returns "💻 Workstations" (emoji variant) when present', () => {
|
||||
const fleets = [
|
||||
{ id: 1, name: "Alpha" },
|
||||
{ id: 3, name: "💻 Workstations" },
|
||||
];
|
||||
expect(preferredOrLowestIdFleet(fleets)).toEqual({
|
||||
id: 3,
|
||||
name: "💻 Workstations",
|
||||
});
|
||||
});
|
||||
|
||||
it("prefers plain over emoji when both exist (first match wins)", () => {
|
||||
const fleets = [
|
||||
{ id: 5, name: "Workstations" },
|
||||
{ id: 2, name: "💻 Workstations" },
|
||||
];
|
||||
expect(preferredOrLowestIdFleet(fleets)).toEqual({
|
||||
id: 5,
|
||||
name: "Workstations",
|
||||
});
|
||||
});
|
||||
|
||||
it("matches case-insensitively", () => {
|
||||
const fleets = [
|
||||
{ id: 1, name: "Alpha" },
|
||||
{ id: 4, name: "WORKSTATIONS" },
|
||||
];
|
||||
expect(preferredOrLowestIdFleet(fleets)).toEqual({
|
||||
id: 4,
|
||||
name: "WORKSTATIONS",
|
||||
});
|
||||
});
|
||||
|
||||
it("falls back to lowest ID when no Workstations fleet exists", () => {
|
||||
const fleets = [
|
||||
{ id: 10, name: "Zebra" },
|
||||
{ id: 3, name: "Charlie" },
|
||||
{ id: 7, name: "Mike" },
|
||||
];
|
||||
expect(preferredOrLowestIdFleet(fleets)).toEqual({
|
||||
id: 3,
|
||||
name: "Charlie",
|
||||
});
|
||||
});
|
||||
|
||||
it("returns undefined for an empty array", () => {
|
||||
expect(preferredOrLowestIdFleet([])).toBeUndefined();
|
||||
});
|
||||
});
|
||||
@@ -186,6 +186,17 @@ const getUserTeams = ({
|
||||
: filterUserTeamsByRole(currentUser.teams, permittedAccessByTeamRole);
|
||||
};
|
||||
|
||||
// Prefer a fleet named "Workstations" (with or without emoji prefix),
|
||||
// otherwise fall back to the fleet with the lowest ID.
|
||||
export const preferredOrLowestIdFleet = (fleets: ITeamSummary[]) => {
|
||||
const name = "workstations";
|
||||
const workstations = fleets.find((t) => {
|
||||
const lower = t.name.toLowerCase();
|
||||
return lower === name || lower === `\u{1F4BB} ${name}`;
|
||||
});
|
||||
return workstations ?? sortBy(fleets, (t) => t.id)[0];
|
||||
};
|
||||
|
||||
const getDefaultTeam = ({
|
||||
currentUser,
|
||||
includeAllTeams,
|
||||
@@ -202,6 +213,8 @@ const getDefaultTeam = ({
|
||||
if (!currentUser || !userTeams?.length) {
|
||||
return undefined;
|
||||
}
|
||||
const realFleets = userTeams.filter((t) => t.id > APP_CONTEXT_NO_TEAM_ID);
|
||||
|
||||
if (permissions.isOnGlobalTeam(currentUser)) {
|
||||
let defaultTeam: ITeamSummary | undefined;
|
||||
if (isPrimoMode) {
|
||||
@@ -221,25 +234,22 @@ const getDefaultTeam = ({
|
||||
defaultTeam = userTeams.find((t) => t.id === APP_CONTEXT_ALL_TEAMS_ID);
|
||||
}
|
||||
if (!defaultTeam && includeNoTeam) {
|
||||
// prefer the real fleet with the lowest ID over "Unassigned"
|
||||
const realFleets = userTeams.filter(
|
||||
(t) => t.id > APP_CONTEXT_NO_TEAM_ID
|
||||
);
|
||||
// prefer a real fleet over "Unassigned"
|
||||
if (realFleets.length > 0) {
|
||||
defaultTeam = sortBy(realFleets, (t) => t.id)[0];
|
||||
defaultTeam = preferredOrLowestIdFleet(realFleets);
|
||||
} else {
|
||||
defaultTeam = userTeams.find((t) => t.id === APP_CONTEXT_NO_TEAM_ID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return defaultTeam || userTeams.find((t) => t.id > APP_CONTEXT_NO_TEAM_ID);
|
||||
return defaultTeam || preferredOrLowestIdFleet(realFleets);
|
||||
}
|
||||
|
||||
return (
|
||||
userTeams.find((t) => permissions.isTeamAdmin(currentUser, t.id)) ||
|
||||
userTeams.find((t) => permissions.isTeamMaintainer(currentUser, t.id)) ||
|
||||
userTeams.find((t) => t.id > APP_CONTEXT_NO_TEAM_ID)
|
||||
preferredOrLowestIdFleet(realFleets)
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user