import React, { useEffect, useState, ReactElement, useContext } from "react"; import TestSuiteComponent from "./components/TestSuite"; import TestSuiteCard from "./components/TestSuiteCard"; import { TestSuite, Test } from "./types"; import { basicTests } from "./testSuites/Basic"; import "./TestSuiteRunner.scss"; import SASjs from "@sasjs/adapter"; import { AppContext } from "./context/AppContext"; import { sendArrTests, sendObjTests } from "./testSuites/RequestData"; import { specialCaseTests } from "./testSuites/SpecialCases"; import { sasjsRequestTests } from "./testSuites/SasjsRequests"; interface TestSuiteRunnerProps { adapter: SASjs; } const TestSuiteRunner = ( props: TestSuiteRunnerProps ): ReactElement => { const { adapter } = props; const { config } = useContext(AppContext); const [testSuites, setTestSuites] = useState([]); const [runTests, setRunTests] = useState(false); const [completedTestSuites, setCompletedTestSuites] = useState< { name: string; completedTests: { test: Test; result: boolean; error: Error | null; executionTime: number; }[]; }[] >([]); const [currentTestSuite, setCurrentTestSuite] = useState( (null as unknown) as TestSuite ); useEffect(() => { if (adapter) { setTestSuites([ basicTests(adapter, config.userName, config.password), sendArrTests(adapter), sendObjTests(adapter), specialCaseTests(adapter), sasjsRequestTests(adapter), ]); setCompletedTestSuites([]); } }, [adapter]); useEffect(() => { if (testSuites.length) { setCurrentTestSuite(testSuites[0]); } }, [testSuites]); useEffect(() => { if (runTests) { setCompletedTestSuites([]); setCurrentTestSuite(testSuites[0]); } }, [runTests, testSuites]); return ( <>
{completedTestSuites.map((completedTestSuite, index) => { return ( ); })} {currentTestSuite && runTests && ( { const currentIndex = testSuites.indexOf(currentTestSuite); const nextIndex = currentIndex < testSuites.length - 1 ? currentIndex + 1 : -1; if (nextIndex >= 0) { setCurrentTestSuite(testSuites[nextIndex]); } else { setCurrentTestSuite(null); } const newCompletedTestSuites = [ ...completedTestSuites, { name, completedTests }, ]; setCompletedTestSuites(newCompletedTestSuites); if (newCompletedTestSuites.length === testSuites.length) { setRunTests(false); } }} /> )} ); }; export default TestSuiteRunner;