UNPKG

testeranto

Version:

the AI powered BDD test framework for typescript projects

163 lines (151 loc) 5.9 kB
import { assert } from "chai"; import * as React from "react"; import * as ReactDom from "react-dom/client"; import { ITestImplementation } from "../../../CoreTypes"; import { IInput, ISelection, IStore, ISubject, O } from "./types"; import { ITTestResourceConfiguration, IPM } from "../../../lib"; export const implementation: ITestImplementation< { iinput: IInput; isubject: ISubject; istore: IStore; iselection: ISelection; given: (props: IInput) => ISelection; when: (sel: ISelection, tr: ITTestResourceConfiguration, utils: IPM) => Promise<(sel: ISelection) => ISelection>; then: (sel: ISelection, tr: ITTestResourceConfiguration, utils: IPM) => Promise<(sel: ISelection) => ISelection>; }, O, {} > = { suites: { Default: "TestPageView basic rendering", Navigation: "TestPageView navigation behavior", ErrorStates: "TestPageView error handling", }, givens: { Default: () => (props: IInput) => { // Create a container and render the component const container = document.createElement('div'); document.body.appendChild(container); const reactElement = React.createElement(props); const domRoot = ReactDom.createRoot(container); domRoot.render(reactElement); return { container, reactElement, domRoot, ...props }; }, WithErrors: () => (props: IInput) => { const container = document.createElement('div'); document.body.appendChild(container); const reactElement = React.createElement(props); const domRoot = ReactDom.createRoot(container); domRoot.render(reactElement); return { container, reactElement, domRoot, ...props, errorCounts: { runTimeErrors: 1, typeErrors: 1, staticErrors: 1 } }; }, WithLogs: () => (props: IInput) => { const container = document.createElement('div'); document.body.appendChild(container); const reactElement = React.createElement(props); const domRoot = ReactDom.createRoot(container); domRoot.render(reactElement); return { container, reactElement, domRoot, ...props, logs: { 'tests.json': '{}', 'stdout.log': 'test log content' } }; }, }, whens: { SwitchToTab: (tabName: string) => async (selection: ISelection, tr: ITTestResourceConfiguration, utils: IPM) => { // Update the props to switch tabs const newProps = { ...selection, activeTab: tabName }; const newReactElement = React.createElement(selection.reactElement.type, newProps); selection.domRoot.render(newReactElement); return (sel: ISelection) => ({ ...sel, reactElement: newReactElement, activeTab: tabName }); }, ClickAiderButton: () => async (selection: ISelection, tr: ITTestResourceConfiguration, utils: IPM) => { // Find and click the Aider button const button = selection.container.querySelector('button'); if (button) { button.click(); } return (sel: ISelection) => sel; }, }, thens: { takeScreenshot: (name: string) => async (ssel: ISelection, utils: IPM) => (sel: ISelection) => { // Screenshot functionality would be implemented here return Promise.resolve(sel); }, RendersNavBar: () => async (ssel: ISelection, utils: IPM) => (sel: ISelection) => { const navBar = sel.container.querySelector(".navbar"); assert.isNotNull(navBar, "Navbar should be rendered"); return Promise.resolve(sel); }, ShowsActiveTab: (tabName: string) => async (ssel: ISelection, utils: IPM) => (sel: ISelection) => { // Check if the active tab matches assert.equal(sel.activeTab, tabName, `Active tab should be ${tabName}`); return Promise.resolve(sel); }, ShowsErrorCounts: () => async (ssel: ISelection, utils: IPM) => (sel: ISelection) => { // Check for error badges const badges = sel.container.querySelectorAll(".badge"); assert.isAtLeast(badges.length, 0, "Should show at least one badge"); return Promise.resolve(sel); }, ShowsTestResults: () => async (ssel: ISelection, utils: IPM) => (sel: ISelection) => { // Check if test results are shown if (sel.testsExist) { const testResults = sel.container.querySelector(".test-results"); assert.isNotNull(testResults, "Test results should be shown when tests exist"); } return Promise.resolve(sel); }, ShowsLogs: () => async (ssel: ISelection, utils: IPM) => (sel: ISelection) => { // Check if logs are shown const logs = sel.container.querySelector("pre"); assert.isNotNull(logs, "Logs should be shown"); return Promise.resolve(sel); }, ShowsTypeErrors: () => async (ssel: ISelection, utils: IPM) => (sel: ISelection) => { // Check if type errors are shown const typeErrors = sel.container.querySelector('[data-testid="type-errors"]'); assert.isNotNull(typeErrors, "Type errors should be shown"); return Promise.resolve(sel); }, ShowsLintErrors: () => async (ssel: ISelection, utils: IPM) => (sel: ISelection) => { // Check if lint errors are shown const lintErrors = sel.container.querySelector('[data-testid="lint-errors"]'); assert.isNotNull(lintErrors, "Lint errors should be shown"); return Promise.resolve(sel); }, AiderButtonCopiesCommand: () => async (ssel: ISelection, utils: IPM) => (sel: ISelection) => { // Check if Aider button exists const aiderButton = sel.container.querySelector('button[title*="AI Assistant"]'); assert.isNotNull(aiderButton, "Aider button should be present"); return Promise.resolve(sel); }, }, };