{"version":3,"file":"ngx-com-components-confirm-testing.mjs","sources":["../../../projects/com/components/confirm/testing/confirm.harness.ts","../../../projects/com/components/confirm/testing/index.ts","../../../projects/com/components/confirm/testing/ngx-com-components-confirm-testing.ts"],"sourcesContent":["import {\n  ComponentHarness,\n  HarnessPredicate,\n  TestKey,\n} from '@angular/cdk/testing';\nimport type { BaseHarnessFilters } from '@angular/cdk/testing';\n\n/** Harness filters for ComConfirmPanelHarness. */\nexport type ComConfirmPanelHarnessFilters = BaseHarnessFilters;\n\n/** Harness filters for ComConfirmTriggerHarness. */\nexport interface ComConfirmTriggerHarnessFilters extends BaseHarnessFilters {\n  /** Filter by the trigger element's text. */\n  text?: string | RegExp;\n}\n\n/**\n * Harness for interacting with a confirm panel in tests.\n *\n * The panel renders inside a CDK overlay with `role=\"alertdialog\"`.\n * Obtain via `TestbedHarnessEnvironment.documentRootLoader(fixture)` or\n * through `ComConfirmTriggerHarness.getPanel()`.\n */\nexport class ComConfirmPanelHarness extends ComponentHarness {\n  static hostSelector = 'com-confirm-panel';\n\n  private readonly alertdialog = this.locatorFor('[role=\"alertdialog\"]');\n  private readonly title = this.locatorForOptional('[role=\"alertdialog\"] h2');\n  private readonly message = this.locatorFor('[role=\"alertdialog\"] p');\n  private readonly cancelButton = this.locatorFor('[role=\"alertdialog\"] button:first-of-type');\n  private readonly confirmButton = this.locatorFor('[role=\"alertdialog\"] button:last-of-type');\n\n  /**\n   * Gets a HarnessPredicate for matching confirm panels.\n   * @param options Filter options.\n   */\n  static with(\n    options: ComConfirmPanelHarnessFilters = {},\n  ): HarnessPredicate<ComConfirmPanelHarness> {\n    return new HarnessPredicate(ComConfirmPanelHarness, options);\n  }\n\n  /** Gets the title text, or null if no title is present. */\n  async getTitleText(): Promise<string | null> {\n    const el = await this.title();\n    return el ? el.text() : null;\n  }\n\n  /** Gets the message text. */\n  async getMessageText(): Promise<string> {\n    const el = await this.message();\n    return el.text();\n  }\n\n  /** Gets the confirm button text. */\n  async getConfirmButtonText(): Promise<string> {\n    const el = await this.confirmButton();\n    return el.text();\n  }\n\n  /** Gets the cancel button text. */\n  async getCancelButtonText(): Promise<string> {\n    const el = await this.cancelButton();\n    return el.text();\n  }\n\n  /** Clicks the confirm button. */\n  async confirm(): Promise<void> {\n    const el = await this.confirmButton();\n    return el.click();\n  }\n\n  /** Clicks the cancel button. */\n  async cancel(): Promise<void> {\n    const el = await this.cancelButton();\n    return el.click();\n  }\n\n  /** Gets the `data-state` attribute on the alertdialog element. */\n  async getState(): Promise<string | null> {\n    const el = await this.alertdialog();\n    return el.getAttribute('data-state');\n  }\n}\n\n/**\n * Harness for interacting with a confirm trigger in tests.\n */\nexport class ComConfirmTriggerHarness extends ComponentHarness {\n  static hostSelector = '[comConfirm]';\n\n  private readonly documentRootLocator = this.documentRootLocatorFactory();\n\n  /**\n   * Gets a HarnessPredicate for matching confirm triggers.\n   * @param options Filter options.\n   */\n  static with(\n    options: ComConfirmTriggerHarnessFilters = {},\n  ): HarnessPredicate<ComConfirmTriggerHarness> {\n    return new HarnessPredicate(ComConfirmTriggerHarness, options)\n      .addOption('text', options.text, async (harness, text) => {\n        const triggerText = await harness.getText();\n        return HarnessPredicate.stringMatches(triggerText, text);\n      });\n  }\n\n  /** Gets the trigger element's text. */\n  async getText(): Promise<string> {\n    const host = await this.host();\n    return host.text();\n  }\n\n  /** Whether the confirm panel is currently open. */\n  async isOpen(): Promise<boolean> {\n    const host = await this.host();\n    return (await host.getAttribute('aria-expanded')) === 'true';\n  }\n\n  /** Opens the confirm panel if it's closed. */\n  async open(): Promise<void> {\n    if (!(await this.isOpen())) {\n      const host = await this.host();\n      await host.click();\n    }\n  }\n\n  /** Closes the confirm panel if it's open. */\n  async close(): Promise<void> {\n    if (await this.isOpen()) {\n      const host = await this.host();\n      await host.sendKeys(TestKey.ESCAPE);\n    }\n  }\n\n  /** Gets the confirm panel harness, or null if the panel is closed. */\n  async getPanel(): Promise<ComConfirmPanelHarness | null> {\n    if (!(await this.isOpen())) {\n      return null;\n    }\n    return this.documentRootLocator.locatorForOptional(ComConfirmPanelHarness.with({}))();\n  }\n\n  /** Opens the panel and clicks the confirm button. */\n  async confirm(): Promise<void> {\n    await this.open();\n    const panel = await this.getPanel();\n    if (!panel) {\n      throw new Error(\n        'Could not find confirm panel. Is the confirm directive correctly configured?',\n      );\n    }\n    return panel.confirm();\n  }\n\n  /** Opens the panel and clicks the cancel button. */\n  async cancel(): Promise<void> {\n    await this.open();\n    const panel = await this.getPanel();\n    if (!panel) {\n      throw new Error(\n        'Could not find confirm panel. Is the confirm directive correctly configured?',\n      );\n    }\n    return panel.cancel();\n  }\n\n  /** Focuses the trigger element. */\n  async focus(): Promise<void> {\n    const host = await this.host();\n    return host.focus();\n  }\n\n  /** Blurs the trigger element. */\n  async blur(): Promise<void> {\n    const host = await this.host();\n    return host.blur();\n  }\n\n  /** Whether the trigger element is focused. */\n  async isFocused(): Promise<boolean> {\n    const host = await this.host();\n    return host.isFocused();\n  }\n}\n","// Testing utilities for the confirm component\n\nexport {\n  ComConfirmPanelHarness,\n  ComConfirmTriggerHarness,\n} from './confirm.harness';\n\nexport type {\n  ComConfirmPanelHarnessFilters,\n  ComConfirmTriggerHarnessFilters,\n} from './confirm.harness';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}