diff --git a/web/package/agama-web-ui.changes b/web/package/agama-web-ui.changes index 459f734d17..c6dad3d877 100644 --- a/web/package/agama-web-ui.changes +++ b/web/package/agama-web-ui.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Fri Feb 27 23:00:35 UTC 2026 - Imobach Gonzalez Sosa + +- Do not reset the configuration on product selection (bsc#1258032). + ------------------------------------------------------------------- Fri Feb 27 14:39:08 UTC 2026 - David Diaz diff --git a/web/src/components/product/ProductSelectionPage.test.tsx b/web/src/components/product/ProductSelectionPage.test.tsx index c1842e74b8..c6e7f6aeb6 100644 --- a/web/src/components/product/ProductSelectionPage.test.tsx +++ b/web/src/components/product/ProductSelectionPage.test.tsx @@ -28,6 +28,7 @@ import { useSystem as useSystemSoftware } from "~/hooks/model/system/software"; import { ROOT } from "~/routes/paths"; import ProductSelectionPage from "./ProductSelectionPage"; import { Product } from "~/model/system"; +import { useConfig } from "~/hooks/model/config"; const tumbleweed: Product = { id: "Tumbleweed", @@ -60,7 +61,10 @@ const productWithModes: Product = { ], }; +const oldConfig = { hostname: { static: "agama" } }; + const mockPutConfigFn = jest.fn(); +const mockUseConfigFn: jest.Mock> = jest.fn(); const mockUseSystemFn: jest.Mock> = jest.fn(); const mockUseSystemSoftwareFn: jest.Mock> = jest.fn(); @@ -76,6 +80,11 @@ jest.mock("~/api", () => ({ putConfig: (payload) => mockPutConfigFn(payload), })); +jest.mock("~/hooks/model/config", () => ({ + ...jest.requireActual("~/hooks/model/config"), + useConfig: () => mockUseConfigFn(), +})); + jest.mock("~/hooks/model/system", () => ({ ...jest.requireActual("~/hooks/model/system"), useSystem: () => mockUseSystemFn(), @@ -97,6 +106,8 @@ describe("ProductSelectionPage", () => { patterns: [], repositories: [], }); + + mockUseConfigFn.mockReturnValue(oldConfig); }); it("renders available products excluding the selected one unless it has modes", () => { @@ -222,7 +233,7 @@ describe("ProductSelectionPage", () => { const selectButton = screen.getByRole("button", { name: "Select" }); await user.click(productOption); await user.click(selectButton); - expect(mockPutConfigFn).toHaveBeenCalledWith({ product: { id: tumbleweed.id } }); + expect(mockPutConfigFn).toHaveBeenCalledWith({ ...oldConfig, product: { id: tumbleweed.id } }); }); it("does not trigger the product selection if user selects a product but clicks o cancel button", async () => { @@ -316,6 +327,7 @@ describe("ProductSelectionPage", () => { await user.click(selectButton); expect(mockPutConfigFn).toHaveBeenCalledWith({ + ...oldConfig, product: { id: productWithModes.id, mode: "standard" }, }); }); diff --git a/web/src/components/product/ProductSelectionPage.tsx b/web/src/components/product/ProductSelectionPage.tsx index 3512e8d040..178573f517 100644 --- a/web/src/components/product/ProductSelectionPage.tsx +++ b/web/src/components/product/ProductSelectionPage.tsx @@ -65,6 +65,7 @@ import { n_, _ } from "~/i18n"; import pfTextStyles from "@patternfly/react-styles/css/utilities/Text/text"; import { useInstallerL10n } from "~/context/installerL10n"; +import { useConfig } from "~/hooks/model/config"; /** * Props for ProductFormProductOption component @@ -686,6 +687,7 @@ const ProductSelectionContent = () => { const navigate = useNavigate(); const product = useProduct(); const { products } = useSystem(); + const config = useConfig(); const currentProduct = useProductInfo(); const [submittedSelection, setSubmmitedSelection] = useState(); const [isSubmitted, setIsSubmmited] = useState(false); @@ -702,7 +704,7 @@ const ProductSelectionContent = () => { const onSubmit = async (selectedProduct: Product, selectedMode: string) => { setIsSubmmited(true); setSubmmitedSelection(selectedProduct); - putConfig({ product: { id: selectedProduct.id, mode: selectedMode } }); + putConfig({ ...config, product: { id: selectedProduct.id, mode: selectedMode } }); }; return (