0e97e9ef33
Replace the old profile-era settings flow with online human-admin CRUD backed by the Tribes admin API. Derive the first-admin tutorial step from transient live admin state and remove ACME email plumbing from Legion deployment inputs.
107 lines
3.0 KiB
TypeScript
107 lines
3.0 KiB
TypeScript
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"]'
|
|
)
|
|
})
|