Update install software tooltip in setup experience (#48382)

**Related issue:** Resolves #48368

# Before / After
- Before: "Old tooltip for Windows/Linux"
<img width="591" height="278" alt="image"
src="https://github.com/user-attachments/assets/c413c8a0-4c3b-489c-a046-c65d03452c44"
/>


- After: "Updated tooltip for Windows/Linux"
<img width="629" height="283" alt="image"
src="https://github.com/user-attachments/assets/b9e99430-5d63-470d-801e-2d4c060c112d"
/>

- for Mac and Apple-related OS stays unchanged.
<img width="583" height="273" alt="Screenshot 2026-06-28 at 5 52 50 PM"
src="https://github.com/user-attachments/assets/cac7990d-6212-4b69-9467-73d6a3f7d733"
/>



# Checklist for submitter

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.

## Testing

- [x] Added/updated automated tests
- [x] QA'd all new/changed functionality manually

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

## Summary by CodeRabbit

* **Bug Fixes**
* Updated the “installed during setup” tooltip to clarify installation
order rules.
  * The tooltip now specifies ordering by software name (0–9, then A–Z).
* Added clearer policy sequencing: software without an install policy is
installed before software with a policy.
  * Android setup messaging remains unchanged.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Rahul Raghunathan
2026-06-29 14:08:53 +01:00
committed by GitHub
parent e3050c3463
commit 8b90422038
3 changed files with 52 additions and 5 deletions
@@ -0,0 +1 @@
- Updated the "installed during setup" tooltip on Controls > Setup experience > Install software to clarify that installation order depends on software name (0-9, then A-Z), and that software without a policy is installed before software with a policy.
@@ -87,7 +87,47 @@ describe("InstallSoftware", () => {
await waitFor(() => {
const tooltip = screen.getByText(
/Installation order will depend on software name, starting with 0-9 then A-Z./i
"Installation order will depend on software name, starting with 0-9 then A-Z."
);
expect(tooltip).toBeInTheDocument();
});
});
it("should render the policy-aware order tooltip for Windows and Linux when there are software titles that have been selected to install at setup", async () => {
const { user } = render(
<InstallSoftwareForm
savedRequireAllSoftwareMacOS={false}
currentTeamId={1}
softwareTitles={[
createMockSoftwareTitle({
software_package: createMockSoftwarePackage({
install_during_setup: true,
}),
}),
createMockSoftwareTitle(
createMockSoftwareTitle({
software_package: createMockSoftwarePackage({
install_during_setup: true,
}),
})
),
createMockSoftwareTitle(),
]}
hasManualAgentInstall={false}
platform="windows"
router={createMockRouter()}
refetchSoftwareTitles={noop}
/>
);
expect(screen.getByText(/2 software items/)).toBeVisible();
expect(screen.getByText(/installed during setup/)).toBeVisible();
await user.hover(screen.getByText("installed during setup"));
await waitFor(() => {
const tooltip = screen.getByText(
"Installation order will depend on software name (0-9, then A-Z). Software without a policy is installed first, then software with a policy."
);
expect(tooltip).toBeInTheDocument();
});
@@ -214,10 +214,16 @@ const InstallSoftwareForm = ({
};
const renderCustomCount = () => {
const orderTooltip =
platform === "android"
? "Software order will vary."
: "Installation order will depend on software name, starting with 0-9 then A-Z.";
let orderTooltip: string;
if (platform === "android") {
orderTooltip = "Software order will vary.";
} else if (platform === "windows" || platform === "linux") {
orderTooltip =
"Installation order will depend on software name (0-9, then A-Z). Software without a policy is installed first, then software with a policy.";
} else {
orderTooltip =
"Installation order will depend on software name, starting with 0-9 then A-Z.";
}
return (
<div>