Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package agama-web-ui for openSUSE:Factory checked in at 2025-01-25 19:12:25 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/agama-web-ui (Old) and /work/SRC/openSUSE:Factory/.agama-web-ui.new.2316 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "agama-web-ui" Sat Jan 25 19:12:25 2025 rev:10 rq:1240160 version:0 Changes: -------- --- /work/SRC/openSUSE:Factory/agama-web-ui/agama-web-ui.changes 2025-01-21 21:10:37.507349668 +0100 +++ /work/SRC/openSUSE:Factory/.agama-web-ui.new.2316/agama-web-ui.changes 2025-01-25 19:12:29.640689447 +0100 @@ -1,0 +2,12 @@ +Fri Jan 24 09:34:24 UTC 2025 - Imobach Gonzalez Sosa <igonzalezs...@suse.com> + +- Use the "finish" to decide whether to navigate to the + congratulations screen (gh#agama-project/agama#1616). + +------------------------------------------------------------------- +Fri Jan 24 06:43:52 UTC 2025 - Imobach Gonzalez Sosa <igonzalezs...@suse.com> + +- Use the "missing_registration" issue to determine whether to show + the registration alert (gh#agama-project/agama#1938). + +------------------------------------------------------------------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ agama.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/package/agama-web-ui.changes new/agama/package/agama-web-ui.changes --- old/agama/package/agama-web-ui.changes 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/package/agama-web-ui.changes 2025-01-24 13:44:51.000000000 +0100 @@ -1,4 +1,16 @@ ------------------------------------------------------------------- +Fri Jan 24 09:34:24 UTC 2025 - Imobach Gonzalez Sosa <igonzalezs...@suse.com> + +- Use the "finish" to decide whether to navigate to the + congratulations screen (gh#agama-project/agama#1616). + +------------------------------------------------------------------- +Fri Jan 24 06:43:52 UTC 2025 - Imobach Gonzalez Sosa <igonzalezs...@suse.com> + +- Use the "missing_registration" issue to determine whether to show + the registration alert (gh#agama-project/agama#1938). + +------------------------------------------------------------------- Tue Jan 21 09:44:08 UTC 2025 - Imobach Gonzalez Sosa <igonzalezs...@suse.com> - Do not crash at the end of the installation when using a legacy diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/App.test.tsx new/agama/src/App.test.tsx --- old/agama/src/App.test.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/App.test.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2022-2024] SUSE LLC + * Copyright (c) [2022-2025] SUSE LLC * * All Rights Reserved. * @@ -40,8 +40,8 @@ updateConfig: jest.fn(), })); -const tumbleweed: Product = { id: "openSUSE", name: "openSUSE Tumbleweed", registration: "no" }; -const microos: Product = { id: "Leap Micro", name: "openSUSE Micro", registration: "no" }; +const tumbleweed: Product = { id: "openSUSE", name: "openSUSE Tumbleweed", registration: false }; +const microos: Product = { id: "Leap Micro", name: "openSUSE Micro", registration: false }; // list of available products let mockProducts: Product[]; @@ -203,10 +203,9 @@ }); }); - describe("on the busy installation phase", () => { + describe("on the installation phase", () => { beforeEach(() => { mockClientStatus.phase = InstallationPhase.Install; - mockClientStatus.isBusy = true; mockSelectedProduct = tumbleweed; }); @@ -216,10 +215,9 @@ }); }); - describe("on the idle installation phase", () => { + describe("on the finish phase", () => { beforeEach(() => { - mockClientStatus.phase = InstallationPhase.Install; - mockClientStatus.isBusy = false; + mockClientStatus.phase = InstallationPhase.Finish; mockSelectedProduct = tumbleweed; }); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/App.tsx new/agama/src/App.tsx --- old/agama/src/App.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/App.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -55,11 +55,11 @@ const Content = () => { if (error) return <ServerError />; - if (phase === InstallationPhase.Install && isBusy) { + if (phase === InstallationPhase.Install) { return <Navigate to={ROOT.installationProgress} />; } - if (phase === InstallationPhase.Install && !isBusy) { + if (phase === InstallationPhase.Finish) { return <Navigate to={ROOT.installationFinished} />; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/core/ChangeProductLink.test.tsx new/agama/src/components/core/ChangeProductLink.test.tsx --- old/agama/src/components/core/ChangeProductLink.test.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/core/ChangeProductLink.test.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2024] SUSE LLC + * Copyright (c) [2024-2025] SUSE LLC * * All Rights Reserved. * @@ -33,14 +33,14 @@ name: "openSUSE Tumbleweed", icon: "tumbleweed.svg", description: "Tumbleweed description...", - registration: "no", + registration: false, }; const microos: Product = { id: "MicroOS", name: "openSUSE MicroOS", icon: "MicroOS.svg", description: "MicroOS description", - registration: "no", + registration: false, }; let mockUseProduct: { products: Product[]; selectedProduct?: Product }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/core/InstallButton.test.tsx new/agama/src/components/core/InstallButton.test.tsx --- old/agama/src/components/core/InstallButton.test.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/core/InstallButton.test.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2022-2024] SUSE LLC + * Copyright (c) [2022-2025] SUSE LLC * * All Rights Reserved. * @@ -56,6 +56,7 @@ [ { description: "Fake Issue", + kind: "generic", source: 0, severity: 0, details: "Fake Issue details", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/core/InstallationFinished.test.tsx new/agama/src/components/core/InstallationFinished.test.tsx --- old/agama/src/components/core/InstallationFinished.test.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/core/InstallationFinished.test.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -29,7 +29,7 @@ jest.mock("~/queries/status", () => ({ ...jest.requireActual("~/queries/status"), - useInstallerStatus: () => ({ isBusy: false, useIguana: false, phase: 2, canInstall: false }), + useInstallerStatus: () => ({ isBusy: false, useIguana: false, phase: 3, canInstall: false }), })); type storageConfigType = "guided" | "raw"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/core/InstallationFinished.tsx new/agama/src/components/core/InstallationFinished.tsx --- old/agama/src/components/core/InstallationFinished.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/core/InstallationFinished.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -100,17 +100,13 @@ } function InstallationFinished() { - const { phase, isBusy, useIguana } = useInstallerStatus({ suspense: true }); + const { phase, useIguana } = useInstallerStatus({ suspense: true }); const config = useConfig(); - if (phase !== InstallationPhase.Install) { + if (phase !== InstallationPhase.Finish) { return <Navigate to={PATHS.root} />; } - if (isBusy) { - return <Navigate to={PATHS.installationProgress} />; - } - return ( <Center> <Grid hasGutter> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/core/InstallationProgress.test.tsx new/agama/src/components/core/InstallationProgress.test.tsx --- old/agama/src/components/core/InstallationProgress.test.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/core/InstallationProgress.test.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -27,7 +27,6 @@ import InstallationProgress from "./InstallationProgress"; import { ROOT } from "~/routes/paths"; -let isBusy = false; let phase = InstallationPhase.Install; const mockInstallerStatusChanges = jest.fn(); @@ -35,7 +34,7 @@ jest.mock("~/queries/status", () => ({ ...jest.requireActual("~/queries/status"), - useInstallerStatus: () => ({ isBusy, phase }), + useInstallerStatus: () => ({ phase }), useInstallerStatusChanges: () => mockInstallerStatusChanges(), })); @@ -56,10 +55,9 @@ }); }); - describe("when installer in the installation phase and busy", () => { + describe("when installer in the installation phase", () => { beforeEach(() => { phase = InstallationPhase.Install; - isBusy = true; }); it("renders progress report", () => { @@ -67,16 +65,4 @@ screen.getByText("ProgressReport Mock"); }); }); - - describe("when installer in the installation phase but not busy", () => { - beforeEach(() => { - phase = InstallationPhase.Install; - isBusy = false; - }); - - it("redirect to installation finished path", async () => { - installerRender(<InstallationProgress />); - await screen.findByText(`Navigating to ${ROOT.installationFinished}`); - }); - }); }); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/core/InstallationProgress.tsx new/agama/src/components/core/InstallationProgress.tsx --- old/agama/src/components/core/InstallationProgress.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/core/InstallationProgress.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -29,17 +29,13 @@ import { useInstallerStatus, useInstallerStatusChanges } from "~/queries/status"; function InstallationProgress() { - const { isBusy, phase } = useInstallerStatus({ suspense: true }); + const { phase } = useInstallerStatus({ suspense: true }); useInstallerStatusChanges(); if (phase !== InstallationPhase.Install) { return <Navigate to={PATHS.root} replace />; } - if (!isBusy) { - return <Navigate to={PATHS.installationFinished} replace />; - } - return <ProgressReport title={_("Installing the system, please wait...")} />; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/core/IssuesDrawer.test.tsx new/agama/src/components/core/IssuesDrawer.test.tsx --- old/agama/src/components/core/IssuesDrawer.test.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/core/IssuesDrawer.test.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2024] SUSE LLC + * Copyright (c) [2024-2025] SUSE LLC * * All Rights Reserved. * @@ -63,6 +63,7 @@ [ { description: "Registration Fake Issue", + kind: "generic", source: 0, severity: 0, details: "Registration Fake Issue details", @@ -71,6 +72,7 @@ [ { description: "Software Fake Issue", + kind: "generic", source: 0, severity: 0, details: "Software Fake Issue details", @@ -79,12 +81,14 @@ [ { description: "Storage Fake Issue 1", + kind: "generic", source: 0, severity: 0, details: "Storage Fake Issue 1 details", }, { description: "Storage Fake Issue 2", + kind: "generic", source: 0, severity: 0, details: "Storage Fake Issue 2 details", @@ -93,6 +97,7 @@ [ { description: "Users Fake Issue", + kind: "generic", source: 0, severity: 0, details: "Users Fake Issue details", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/layout/Header.test.tsx new/agama/src/components/layout/Header.test.tsx --- old/agama/src/components/layout/Header.test.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/layout/Header.test.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2024] SUSE LLC + * Copyright (c) [2024-2025] SUSE LLC * * All Rights Reserved. * @@ -31,14 +31,14 @@ id: "Tumbleweed", name: "openSUSE Tumbleweed", description: "Tumbleweed description...", - registration: "no", + registration: false, }; const microos: Product = { id: "MicroOS", name: "openSUSE MicroOS", description: "MicroOS description", - registration: "no", + registration: false, }; let phase: InstallationPhase; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/layout/Sidebar.test.tsx new/agama/src/components/layout/Sidebar.test.tsx --- old/agama/src/components/layout/Sidebar.test.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/layout/Sidebar.test.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2024] SUSE LLC + * Copyright (c) [2024-2025] SUSE LLC * * All Rights Reserved. * @@ -32,13 +32,13 @@ const tw: Product = { id: "Tumbleweed", name: "openSUSE Tumbleweed", - registration: "no", + registration: false, }; const sle: Product = { id: "sle", name: "SLE", - registration: "mandatory", + registration: true, }; let selectedProduct: Product; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/layout/Sidebar.tsx new/agama/src/components/layout/Sidebar.tsx --- old/agama/src/components/layout/Sidebar.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/layout/Sidebar.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2024] SUSE LLC + * Copyright (c) [2024-2025] SUSE LLC * * All Rights Reserved. * @@ -34,7 +34,7 @@ const links = rootRoutes().map((r) => { if (!r.handle) return null; - if (r.handle.needsRegistrableProduct && product.registration === "no") return null; + if (r.handle.needsRegistrableProduct && !product.registration) return null; // eslint-disable-next-line agama-i18n/string-literals const name = _(r.handle.name); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/product/LicenseDialog.test.tsx new/agama/src/components/product/LicenseDialog.test.tsx --- old/agama/src/components/product/LicenseDialog.test.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/product/LicenseDialog.test.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -32,7 +32,7 @@ name: "SUSE Linux Enterprise", icon: "sle.svg", description: "SLE description", - registration: "mandatory", + registration: true, license: "license.sle", }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/product/ProductRegistrationAlert.test.tsx new/agama/src/components/product/ProductRegistrationAlert.test.tsx --- old/agama/src/components/product/ProductRegistrationAlert.test.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/product/ProductRegistrationAlert.test.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2024] SUSE LLC + * Copyright (c) [2024-2025] SUSE LLC * * All Rights Reserved. * @@ -24,30 +24,30 @@ import { screen } from "@testing-library/react"; import { installerRender, mockRoutes } from "~/test-utils"; import ProductRegistrationAlert from "./ProductRegistrationAlert"; -import { Product, RegistrationInfo } from "~/types/software"; -import { useProduct, useRegistration } from "~/queries/software"; +import { Product } from "~/types/software"; +import { useProduct } from "~/queries/software"; +import { useIssues } from "~/queries/issues"; import { PRODUCT, REGISTRATION, ROOT, USER } from "~/routes/paths"; +import { Issue } from "~/types/issues"; jest.mock("~/components/core/ChangeProductLink", () => () => <div>ChangeProductLink Mock</div>); const tw: Product = { id: "Tumbleweed", name: "openSUSE Tumbleweed", - registration: "no", + registration: false, }; const sle: Product = { id: "sle", name: "SLE", - registration: "mandatory", + registration: true, }; let selectedProduct: Product; -let registrationInfoMock: RegistrationInfo; jest.mock("~/queries/software", () => ({ ...jest.requireActual("~/queries/software"), - useRegistration: (): ReturnType<typeof useRegistration> => registrationInfoMock, useProduct: (): ReturnType<typeof useProduct> => { return { products: [tw, sle], @@ -56,6 +56,20 @@ }, })); +let issues: Issue[] = []; +const registrationIssue: Issue = { + description: "Product must be registered", + details: "", + kind: "missing_registration", + source: 0, + severity: 0, +}; + +jest.mock("~/queries/issues", () => ({ + ...jest.requireActual("~/queries/issues"), + useIssues: (): ReturnType<typeof useIssues> => issues, +})); + const rendersNothingInSomePaths = () => { describe.each([ ["login", ROOT.login], @@ -77,10 +91,10 @@ }; describe("ProductRegistrationAlert", () => { - describe("when product is registrable and registration code is not set", () => { + describe("when the registration is missing", () => { beforeEach(() => { + issues = [registrationIssue]; selectedProduct = sle; - registrationInfoMock = { key: "", email: "" }; }); rendersNothingInSomePaths(); @@ -109,21 +123,10 @@ }); }); - describe("when product is registrable and registration code is already set", () => { + describe("when the registration is not needed", () => { beforeEach(() => { + issues = []; selectedProduct = sle; - registrationInfoMock = { key: "INTERNAL-USE-ONLY-1234-5678", email: "" }; - }); - - it("renders nothing", () => { - const { container } = installerRender(<ProductRegistrationAlert />); - expect(container).toBeEmptyDOMElement(); - }); - }); - - describe("when product is not registrable", () => { - beforeEach(() => { - selectedProduct = tw; }); it("renders nothing", () => { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/product/ProductRegistrationAlert.tsx new/agama/src/components/product/ProductRegistrationAlert.tsx --- old/agama/src/components/product/ProductRegistrationAlert.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/product/ProductRegistrationAlert.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2023-2024] SUSE LLC + * Copyright (c) [2023-2025] SUSE LLC * * All Rights Reserved. * @@ -24,11 +24,11 @@ import { Alert } from "@patternfly/react-core"; import { useLocation } from "react-router-dom"; import { Link } from "~/components/core"; -import { useProduct, useRegistration } from "~/queries/software"; +import { useProduct } from "~/queries/software"; import { REGISTRATION, SUPPORTIVE_PATHS } from "~/routes/paths"; -import { isEmpty } from "~/utils"; import { _ } from "~/i18n"; import { sprintf } from "sprintf-js"; +import { useIssues } from "~/queries/issues"; const LinkToRegistration = () => { const location = useLocation(); @@ -45,12 +45,13 @@ export default function ProductRegistrationAlert() { const location = useLocation(); const { selectedProduct: product } = useProduct(); - const registration = useRegistration(); + const issues = useIssues("product"); + const registrationRequired = issues.find((i) => i.kind === "missing_registration"); // NOTE: it shouldn't be mounted in these paths, but let's prevent rendering // if so just in case. if (SUPPORTIVE_PATHS.includes(location.pathname)) return; - if (["no", undefined].includes(product.registration) || !isEmpty(registration.key)) return; + if (!registrationRequired) return; return ( <Alert isInline variant="warning" title={sprintf(_("%s must be registered."), product.name)}> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/product/ProductRegistrationPage.test.tsx new/agama/src/components/product/ProductRegistrationPage.test.tsx --- old/agama/src/components/product/ProductRegistrationPage.test.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/product/ProductRegistrationPage.test.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2024] SUSE LLC + * Copyright (c) [2024-2025] SUSE LLC * * All Rights Reserved. * @@ -30,19 +30,23 @@ const tw: Product = { id: "Tumbleweed", name: "openSUSE Tumbleweed", - registration: "no", + registration: false, }; const sle: Product = { id: "sle", name: "SLE", - registration: "mandatory", + registration: true, }; let selectedProduct: Product; let registrationInfoMock: RegistrationInfo; const registerMutationMock = jest.fn(); +jest.mock("~/components/product/ProductRegistrationAlert", () => () => ( + <div>ProductRegistrationAlert Mock</div> +)); + jest.mock("~/queries/software", () => ({ ...jest.requireActual("~/queries/software"), useRegisterMutation: () => ({ mutate: registerMutationMock }), @@ -74,11 +78,6 @@ registrationInfoMock = { key: "", email: "" }; }); - it("renders ProductRegistrationAlert component", () => { - installerRender(<ProductRegistrationPage />); - screen.getByText("Warning alert:"); - }); - it("renders a form to allow user registering the product", async () => { const { user } = installerRender(<ProductRegistrationPage />); const registrationCodeInput = screen.getByLabelText("Registration code"); @@ -107,11 +106,6 @@ registrationInfoMock = { key: "INTERNAL-USE-ONLY-1234-5678", email: "exam...@company.test" }; }); - it("does not render ProductRegistrationAlert component", () => { - installerRender(<ProductRegistrationPage />); - expect(screen.queryByText("Warning alert:")).toBeNull(); - }); - it("renders registration information with code partially hidden", async () => { const { user } = installerRender(<ProductRegistrationPage />); const visibilityCodeToggler = screen.getByRole("button", { name: "Show" }); @@ -125,42 +119,5 @@ expect(screen.queryByText("INTERNAL-USE-ONLY-1234-5678")).toBeNull(); screen.getByText(/\*?5678/); }); - - // describe("but at registration path already", () => { - // beforeEach(() => { - // mockRoutes(REGISTRATION.root); - // }); - // - // it("does not render the link to registration", () => { - // installerRender(<ProductRegistrationAlert />); - // screen.getByRole("heading", { - // name: /Warning alert:.*must be registered/, - // }); - // expect(screen.queryAllByRole("link")).toEqual([]); - // }); - // }); - // }); - // - // describe("when product is registrable and registration code is already set", () => { - // beforeEach(() => { - // selectedProduct = sle; - // registrationInfoMock = { key: "INTERNAL-USE-ONLY-1234-5678", email: "" }; - // }); - // - // it("renders nothing", () => { - // const { container } = installerRender(<ProductRegistrationAlert />); - // expect(container).toBeEmptyDOMElement(); - // }); - // }); - // - // describe("when product is not registrable", () => { - // beforeEach(() => { - // selectedProduct = tw; - // }); - // - // it("renders nothing", () => { - // const { container } = installerRender(<ProductRegistrationAlert />); - // expect(container).toBeEmptyDOMElement(); - // }); }); }); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/product/ProductRegistrationPage.tsx new/agama/src/components/product/ProductRegistrationPage.tsx --- old/agama/src/components/product/ProductRegistrationPage.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/product/ProductRegistrationPage.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2023-2024] SUSE LLC + * Copyright (c) [2023-2025] SUSE LLC * * All Rights Reserved. * @@ -146,7 +146,7 @@ const registration = useRegistration(); // TODO: render something meaningful instead? "Product not registrable"? - if (product.registration === "no") return; + if (!product.registration) return; return ( <Page> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/product/ProductSelectionPage.test.tsx new/agama/src/components/product/ProductSelectionPage.test.tsx --- old/agama/src/components/product/ProductSelectionPage.test.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/product/ProductSelectionPage.test.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -38,7 +38,7 @@ name: "openSUSE Tumbleweed", icon: "tumbleweed.svg", description: "Tumbleweed description...", - registration: "no", + registration: false, }; const microOs: Product = { @@ -46,7 +46,7 @@ name: "openSUSE MicroOS", icon: "microos.svg", description: "MicroOS description", - registration: "no", + registration: false, license: "fake.license", }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/components/product/ProductSelectionProgress.test.tsx new/agama/src/components/product/ProductSelectionProgress.test.tsx --- old/agama/src/components/product/ProductSelectionProgress.test.tsx 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/components/product/ProductSelectionProgress.test.tsx 2025-01-24 13:44:51.000000000 +0100 @@ -30,7 +30,7 @@ jest.mock("~/components/core/ProgressReport", () => () => <div>ProgressReport Mock</div>); let isBusy = false; -const tumbleweed: Product = { id: "openSUSE", name: "openSUSE Tumbleweed", registration: "no" }; +const tumbleweed: Product = { id: "openSUSE", name: "openSUSE Tumbleweed", registration: false }; jest.mock("~/queries/status", () => ({ ...jest.requireActual("~/queries/status"), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/types/issues.ts new/agama/src/types/issues.ts --- old/agama/src/types/issues.ts 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/types/issues.ts 2025-01-24 13:44:51.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2024] SUSE LLC + * Copyright (c) [2024-2025] SUSE LLC * * All Rights Reserved. * @@ -57,6 +57,8 @@ type Issue = { /** Issue description */ description: string; + /** Issue kind **/ + kind: string; /** Issue details. It is not mandatory. */ details: string | undefined; /** Where the issue comes from */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/types/software.ts new/agama/src/types/software.ts --- old/agama/src/types/software.ts 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/types/software.ts 2025-01-24 13:44:51.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2024] SUSE LLC + * Copyright (c) [2024-2025] SUSE LLC * * All Rights Reserved. * @@ -42,7 +42,7 @@ /** Product icon (e.g., "default.svg") */ icon?: string; /** If product is registrable or not */ - registration: "no" | "optional" | "mandatory"; + registration: boolean; /** The product license id, if any */ license?: string; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agama/src/types/status.ts new/agama/src/types/status.ts --- old/agama/src/types/status.ts 2025-01-21 10:57:35.000000000 +0100 +++ new/agama/src/types/status.ts 2025-01-24 13:44:51.000000000 +0100 @@ -27,6 +27,7 @@ Startup = 0, Config = 1, Install = 2, + Finish = 3, } /* ++++++ agama.obsinfo ++++++ --- /var/tmp/diff_new_pack.6ASGVX/_old 2025-01-25 19:12:30.772735915 +0100 +++ /var/tmp/diff_new_pack.6ASGVX/_new 2025-01-25 19:12:30.776736080 +0100 @@ -1,5 +1,5 @@ name: agama -version: 11+65 -mtime: 1737453455 -commit: fa72f8e26aecd94127b0c4c578180e933f1c799b +version: 11+99 +mtime: 1737722691 +commit: c17204ce3f6b7aa74e670c336581bf8204c8faeb