import assert from "node:assert/strict" import test from "node:test" import { selectTutorialHighlightRule, type TutorialHighlightRule } from "../../src/renderer/src/state/tutorial-highlight" import type { TutorialStepId } from "../../src/renderer/src/state/tutorial" function selectTarget( step: TutorialStepId, visibleSelectors: string[], targetSelectors = visibleSelectors ): string | null { const visible = new Set(visibleSelectors) const targets = new Set(targetSelectors) const rule: TutorialHighlightRule | null = selectTutorialHighlightRule( step, (selector) => visible.has(selector), (selector) => targets.has(selector) ) return rule?.target ?? null } test("provider tutorial highlights the next settings step from visible UI state", () => { assert.equal( selectTarget("providers", ['[data-tutorial-target="settings-button"]']), '[data-tutorial-target="settings-button"]' ) assert.equal( selectTarget("providers", [ '[data-tutorial-surface="settings"]', '[data-tutorial-target="settings-providers-tab"]' ]), '[data-tutorial-target="settings-providers-tab"]' ) assert.equal( selectTarget("providers", [ '[data-tutorial-surface="settings"]', '[data-tutorial-state="settings-providers-active"]', '[data-tutorial-target="settings-provider-ovh"]' ]), null ) }) test("non-provider tutorials close settings before workspace actions", () => { assert.equal( selectTarget("server", [ '[data-tutorial-surface="settings"]', '[data-tutorial-target="settings-close"]', '[data-tutorial-target="add-server"]' ]), '[data-tutorial-target="settings-close"]' ) }) test("admin tutorial highlights the settings admin flow", () => { assert.equal( selectTarget("admins", ['[data-tutorial-target="settings-button"]']), '[data-tutorial-target="settings-button"]' ) assert.equal( selectTarget("admins", [ '[data-tutorial-surface="settings"]', '[data-tutorial-target="settings-admins-tab"]' ]), '[data-tutorial-target="settings-admins-tab"]' ) assert.equal( selectTarget("admins", [ '[data-tutorial-surface="settings"]', '[data-tutorial-state="settings-admins-active"]', '[data-tutorial-target="create-human-admin"]' ]), '[data-tutorial-target="create-human-admin"]' ) }) test("workspace tutorials fall back from missing action targets to navigation", () => { assert.equal( selectTarget("server", ['[data-tutorial-target="workspace-tab-instances"]']), '[data-tutorial-target="workspace-tab-instances"]' ) assert.equal( selectTarget("dns-zone", [ '[data-tutorial-state="workspace-instances-active"]', '[data-tutorial-target="add-zone"]' ]), '[data-tutorial-target="add-zone"]' ) assert.equal( selectTarget("domain", [ '[data-tutorial-surface="domain-dialog"]', '[data-tutorial-target="save-domain"]' ]), '[data-tutorial-target="save-domain"]' ) })