@teambit/tester 0.0.740 → 0.0.743
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tester.graphql.js +14 -1
- package/dist/tester.graphql.js.map +1 -1
- package/dist/tester.main.runtime.d.ts +1 -1
- package/dist/tester.main.runtime.js +3 -5
- package/dist/tester.main.runtime.js.map +1 -1
- package/dist/ui/tests-page.js +15 -2
- package/dist/ui/tests-page.js.map +1 -1
- package/package-tar/teambit-tester-0.0.743.tgz +0 -0
- package/package.json +17 -16
- package/{preview-1653449228788.js → preview-1653708349111.js} +2 -2
- package/ui/tests-page.tsx +13 -2
- package/package-tar/teambit-tester-0.0.740.tgz +0 -0
package/dist/tester.graphql.js
CHANGED
|
@@ -19,6 +19,16 @@ function _graphqlSubscriptions() {
|
|
|
19
19
|
return data;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
+
function _bitId() {
|
|
23
|
+
const data = require("@teambit/legacy/dist/bit-id");
|
|
24
|
+
|
|
25
|
+
_bitId = function () {
|
|
26
|
+
return data;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
return data;
|
|
30
|
+
}
|
|
31
|
+
|
|
22
32
|
function _graphqlTag() {
|
|
23
33
|
const data = _interopRequireDefault(require("graphql-tag"));
|
|
24
34
|
|
|
@@ -97,9 +107,12 @@ function testerSchema(tester, graphql) {
|
|
|
97
107
|
id
|
|
98
108
|
}) => {
|
|
99
109
|
const componentId = await host.resolveComponentId(id);
|
|
110
|
+
|
|
111
|
+
const idHasVersion = _bitId().BitId.parse(id).hasVersion();
|
|
112
|
+
|
|
100
113
|
const component = await host.get(componentId);
|
|
101
114
|
if (!component) return null;
|
|
102
|
-
const testsResults = await tester.getTestsResults(component);
|
|
115
|
+
const testsResults = await tester.getTestsResults(component, idHasVersion);
|
|
103
116
|
if (!testsResults) return null;
|
|
104
117
|
return testsResults;
|
|
105
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["testerSchema","tester","graphql","typeDefs","gql","resolvers","Subscription","testsChanged","subscribe","withFilter","pubsub","asyncIterator","OnTestsChanged","payload","variables","id","ComponentHost","getTests","host","componentId","resolveComponentId","component","get","testsResults","getTestsResults"],"sources":["tester.graphql.ts"],"sourcesContent":["import { GraphqlMain, Schema } from '@teambit/graphql';\nimport { ComponentFactory } from '@teambit/component';\nimport { withFilter } from 'graphql-subscriptions';\nimport gql from 'graphql-tag';\n\nimport { TesterMain } from './tester.main.runtime';\nimport { OnTestsChanged } from './tester.service';\n\nexport function testerSchema(tester: TesterMain, graphql: GraphqlMain): Schema {\n return {\n typeDefs: gql`\n extend type ComponentHost {\n getTests(id: String!): Tests\n }\n\n type Subscription {\n testsChanged(id: String!): Tests\n }\n\n type Tests {\n loading: Boolean!\n testsResults: TestsResults\n }\n\n type TestsChanged {\n testsResults: TestsResults\n }\n\n type TestsResults {\n testFiles: [TestFiles]\n success: Boolean\n start: Int\n }\n\n type TestFiles {\n file: String\n tests: [Tests]\n pass: Int\n failed: Int\n pending: Int\n duration: Int\n slow: Boolean\n errorStr: String\n }\n\n type Tests {\n ancestor: [String]\n name: String\n duration: String\n status: String\n error: String\n }\n `,\n resolvers: {\n Subscription: {\n testsChanged: {\n subscribe: withFilter(\n () => graphql.pubsub.asyncIterator(OnTestsChanged),\n (payload, variables) => {\n return payload.testsChanged.id === variables.id;\n }\n ),\n },\n },\n\n ComponentHost: {\n getTests: async (host: ComponentFactory, { id }: { id: string }) => {\n const componentId = await host.resolveComponentId(id);\n const component = await host.get(componentId);\n if (!component) return null;\n const testsResults = await tester.getTestsResults(component);\n if (!testsResults) return null;\n return testsResults;\n },\n },\n },\n };\n}\n"],"mappings":";;;;;;;;;;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEO,SAASA,YAAT,CAAsBC,MAAtB,EAA0CC,OAA1C,EAAwE;EAC7E,OAAO;IACLC,QAAQ,EAAE,IAAAC,qBAAA,CAAI;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KA3CS;IA4CLC,SAAS,EAAE;MACTC,YAAY,EAAE;QACZC,YAAY,EAAE;UACZC,SAAS,EAAE,IAAAC,kCAAA,EACT,MAAMP,OAAO,CAACQ,MAAR,CAAeC,aAAf,CAA6BC,wBAA7B,CADG,EAET,CAACC,OAAD,EAAUC,SAAV,KAAwB;YACtB,OAAOD,OAAO,CAACN,YAAR,CAAqBQ,EAArB,KAA4BD,SAAS,CAACC,EAA7C;UACD,CAJQ;QADC;MADF,CADL;MAYTC,aAAa,EAAE;QACbC,QAAQ,EAAE,OAAOC,IAAP,EAA+B;UAAEH;QAAF,CAA/B,KAA0D;UAClE,MAAMI,WAAW,GAAG,MAAMD,IAAI,CAACE,kBAAL,CAAwBL,EAAxB,CAA1B
|
|
1
|
+
{"version":3,"names":["testerSchema","tester","graphql","typeDefs","gql","resolvers","Subscription","testsChanged","subscribe","withFilter","pubsub","asyncIterator","OnTestsChanged","payload","variables","id","ComponentHost","getTests","host","componentId","resolveComponentId","idHasVersion","BitId","parse","hasVersion","component","get","testsResults","getTestsResults"],"sources":["tester.graphql.ts"],"sourcesContent":["import { GraphqlMain, Schema } from '@teambit/graphql';\nimport { ComponentFactory } from '@teambit/component';\nimport { withFilter } from 'graphql-subscriptions';\nimport { BitId } from '@teambit/legacy/dist/bit-id';\nimport gql from 'graphql-tag';\n\nimport { TesterMain } from './tester.main.runtime';\nimport { OnTestsChanged } from './tester.service';\n\nexport function testerSchema(tester: TesterMain, graphql: GraphqlMain): Schema {\n return {\n typeDefs: gql`\n extend type ComponentHost {\n getTests(id: String!): Tests\n }\n\n type Subscription {\n testsChanged(id: String!): Tests\n }\n\n type Tests {\n loading: Boolean!\n testsResults: TestsResults\n }\n\n type TestsChanged {\n testsResults: TestsResults\n }\n\n type TestsResults {\n testFiles: [TestFiles]\n success: Boolean\n start: Int\n }\n\n type TestFiles {\n file: String\n tests: [Tests]\n pass: Int\n failed: Int\n pending: Int\n duration: Int\n slow: Boolean\n errorStr: String\n }\n\n type Tests {\n ancestor: [String]\n name: String\n duration: String\n status: String\n error: String\n }\n `,\n resolvers: {\n Subscription: {\n testsChanged: {\n subscribe: withFilter(\n () => graphql.pubsub.asyncIterator(OnTestsChanged),\n (payload, variables) => {\n return payload.testsChanged.id === variables.id;\n }\n ),\n },\n },\n\n ComponentHost: {\n getTests: async (host: ComponentFactory, { id }: { id: string }) => {\n const componentId = await host.resolveComponentId(id);\n const idHasVersion = BitId.parse(id).hasVersion();\n const component = await host.get(componentId);\n if (!component) return null;\n const testsResults = await tester.getTestsResults(component, idHasVersion);\n if (!testsResults) return null;\n return testsResults;\n },\n },\n },\n };\n}\n"],"mappings":";;;;;;;;;;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEO,SAASA,YAAT,CAAsBC,MAAtB,EAA0CC,OAA1C,EAAwE;EAC7E,OAAO;IACLC,QAAQ,EAAE,IAAAC,qBAAA,CAAI;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KA3CS;IA4CLC,SAAS,EAAE;MACTC,YAAY,EAAE;QACZC,YAAY,EAAE;UACZC,SAAS,EAAE,IAAAC,kCAAA,EACT,MAAMP,OAAO,CAACQ,MAAR,CAAeC,aAAf,CAA6BC,wBAA7B,CADG,EAET,CAACC,OAAD,EAAUC,SAAV,KAAwB;YACtB,OAAOD,OAAO,CAACN,YAAR,CAAqBQ,EAArB,KAA4BD,SAAS,CAACC,EAA7C;UACD,CAJQ;QADC;MADF,CADL;MAYTC,aAAa,EAAE;QACbC,QAAQ,EAAE,OAAOC,IAAP,EAA+B;UAAEH;QAAF,CAA/B,KAA0D;UAClE,MAAMI,WAAW,GAAG,MAAMD,IAAI,CAACE,kBAAL,CAAwBL,EAAxB,CAA1B;;UACA,MAAMM,YAAY,GAAGC,cAAA,CAAMC,KAAN,CAAYR,EAAZ,EAAgBS,UAAhB,EAArB;;UACA,MAAMC,SAAS,GAAG,MAAMP,IAAI,CAACQ,GAAL,CAASP,WAAT,CAAxB;UACA,IAAI,CAACM,SAAL,EAAgB,OAAO,IAAP;UAChB,MAAME,YAAY,GAAG,MAAM1B,MAAM,CAAC2B,eAAP,CAAuBH,SAAvB,EAAkCJ,YAAlC,CAA3B;UACA,IAAI,CAACM,YAAL,EAAmB,OAAO,IAAP;UACnB,OAAOA,YAAP;QACD;MATY;IAZN;EA5CN,CAAP;AAqED"}
|
|
@@ -105,7 +105,7 @@ export declare class TesterMain {
|
|
|
105
105
|
*/
|
|
106
106
|
watch(components: Component[], opts?: TesterOptions): Promise<EnvsExecutionResult<Tests>>;
|
|
107
107
|
uiWatch(): Promise<EnvsExecutionResult<Tests>>;
|
|
108
|
-
getTestsResults(component: Component): Promise<{
|
|
108
|
+
getTestsResults(component: Component, idHasVersion?: boolean): Promise<{
|
|
109
109
|
testsResults?: TestsResult;
|
|
110
110
|
loading: boolean;
|
|
111
111
|
} | undefined>;
|
|
@@ -293,14 +293,12 @@ class TesterMain {
|
|
|
293
293
|
});
|
|
294
294
|
}
|
|
295
295
|
|
|
296
|
-
async getTestsResults(component) {
|
|
297
|
-
var _this$workspace, _componentStatus$modi;
|
|
298
|
-
|
|
296
|
+
async getTestsResults(component, idHasVersion = true) {
|
|
299
297
|
const entry = component.state.aspects.get(_tester().TesterAspect.id);
|
|
300
|
-
const
|
|
298
|
+
const isModified = !idHasVersion && (await component.isModified());
|
|
301
299
|
const data = this.builder.getDataByAspect(component, _tester().TesterAspect.id);
|
|
302
300
|
|
|
303
|
-
if ((entry || data) && !
|
|
301
|
+
if ((entry || data) && !isModified) {
|
|
304
302
|
return {
|
|
305
303
|
testsResults: (data === null || data === void 0 ? void 0 : data.tests) || (entry === null || entry === void 0 ? void 0 : entry.data.tests),
|
|
306
304
|
loading: false
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TesterMain","constructor","graphql","envs","workspace","service","task","devFiles","builder","test","components","opts","options","getOptions","envsRuntime","createEnvironment","env","runEnv","results","run","junit","generateJUnit","filePath","testsResults","map","envResult","data","flat","jUnit","testsResultsToJUnitFormat","compact","fs","outputFile","watch","onTestRunComplete","forEach","component","_testsResults","componentId","toString","uiWatch","list","debug","ui","getTestsResults","entry","state","aspects","get","TesterAspect","id","componentStatus","getComponentStatus","getDataByAspect","modifyInfo","hasModifiedFiles","tests","loading","getTestsResultsFromState","getTestFiles","detectTestFiles","defaults","merge","provider","cli","loggerAspect","config","logger","createLogger","testerService","TesterService","patterns","pubsub","registerService","registerDevPattern","tester","TesterTask","consumer","isLegacy","unregister","registerOnStart","watchOnStart","undefined","register","TestCmd","testerSchema","MainRuntime","CLIAspect","EnvsAspect","WorkspaceAspect","LoggerAspect","GraphqlAspect","UIAspect","DevFilesAspect","BuilderAspect","addRuntime"],"sources":["tester.main.runtime.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { Component } from '@teambit/component';\nimport compact from 'lodash.compact';\nimport { EnvsAspect, EnvsExecutionResult, EnvsMain } from '@teambit/envs';\nimport { LoggerAspect, LoggerMain } from '@teambit/logger';\nimport { Workspace, WorkspaceAspect } from '@teambit/workspace';\nimport { GraphqlAspect, GraphqlMain } from '@teambit/graphql';\nimport { BuilderAspect, BuilderMain } from '@teambit/builder';\nimport { UiMain, UIAspect } from '@teambit/ui';\nimport { merge } from 'lodash';\nimport DevFilesAspect, { DevFilesMain } from '@teambit/dev-files';\nimport { TestsResult } from '@teambit/tests-results';\nimport { ComponentsResults, CallbackFn, Tests } from './tester';\nimport { TestCmd } from './test.cmd';\nimport { TesterAspect } from './tester.aspect';\nimport { TesterService } from './tester.service';\nimport { TesterTask } from './tester.task';\nimport { detectTestFiles } from './utils';\nimport { testerSchema } from './tester.graphql';\nimport { testsResultsToJUnitFormat } from './utils/junit-generator';\n\nexport type TesterExtensionConfig = {\n /**\n * regex of the text environment.\n */\n testRegex: string;\n\n /**\n * determine whether to watch on start.\n */\n watchOnStart: boolean;\n patterns: string[];\n};\n\nexport type TesterOptions = {\n /**\n * start the tester in watch mode.\n */\n watch: boolean;\n\n /**\n * start the tester in debug mode.\n */\n debug: boolean;\n\n /**\n * start the tester in debug mode.\n */\n ui?: boolean;\n\n /**\n * initiate the tester on given env.\n */\n env?: string;\n\n /**\n * generate JUnit files on the specified dir\n */\n junit?: string;\n\n /**\n * show code coverage\n */\n coverage?: boolean;\n\n callback?: CallbackFn;\n};\n\nexport class TesterMain {\n static runtime = MainRuntime;\n static dependencies = [\n CLIAspect,\n EnvsAspect,\n WorkspaceAspect,\n LoggerAspect,\n GraphqlAspect,\n UIAspect,\n DevFilesAspect,\n BuilderAspect,\n ];\n\n constructor(\n /**\n * graphql extension.\n */\n private graphql: GraphqlMain,\n\n /**\n * envs extension.\n */\n private envs: EnvsMain,\n\n /**\n * workspace extension.\n */\n private workspace: Workspace,\n\n /**\n * tester service.\n */\n readonly service: TesterService,\n\n /**\n * build task.\n */\n readonly task: TesterTask,\n\n private devFiles: DevFilesMain,\n\n private builder: BuilderMain\n ) {}\n\n _testsResults: { [componentId: string]: ComponentsResults } | undefined[] = [];\n\n async test(components: Component[], opts?: TesterOptions): Promise<EnvsExecutionResult<Tests>> {\n const options = this.getOptions(opts);\n const envsRuntime = await this.envs.createEnvironment(components);\n if (opts?.env) {\n return envsRuntime.runEnv(opts.env, this.service, options);\n }\n const results = await envsRuntime.run(this.service, options);\n if (opts?.junit) {\n await this.generateJUnit(opts?.junit, results);\n }\n return results;\n }\n\n private async generateJUnit(filePath: string, testsResults: EnvsExecutionResult<Tests>) {\n const components = testsResults.results.map((envResult) => envResult.data?.components).flat();\n const jUnit = testsResultsToJUnitFormat(compact(components));\n await fs.outputFile(filePath, jUnit);\n }\n\n /**\n * watch all components for changes and test upon each.\n */\n async watch(components: Component[], opts?: TesterOptions) {\n const options = this.getOptions(opts);\n const envsRuntime = await this.envs.createEnvironment(components);\n if (opts?.env) {\n return envsRuntime.runEnv(opts.env, this.service, options);\n }\n\n this.service.onTestRunComplete((results) => {\n results.components.forEach((component) => {\n this._testsResults[component.componentId.toString()] = component;\n });\n });\n return envsRuntime.run(this.service, options);\n }\n\n async uiWatch() {\n const components = await this.workspace.list();\n return this.watch(components, { watch: true, debug: false, ui: true });\n }\n\n async getTestsResults(component: Component): Promise<{ testsResults?: TestsResult; loading: boolean } | undefined> {\n const entry = component.state.aspects.get(TesterAspect.id);\n const componentStatus = await this.workspace?.getComponentStatus(component);\n const data = this.builder.getDataByAspect(component, TesterAspect.id) as { tests: TestsResult };\n if ((entry || data) && !componentStatus?.modifyInfo?.hasModifiedFiles) {\n return { testsResults: data?.tests || entry?.data.tests, loading: false };\n }\n return this.getTestsResultsFromState(component);\n }\n\n private getTestsResultsFromState(component: Component) {\n const tests = this._testsResults[component.id.toString()];\n return { testsResults: tests?.results, loading: tests?.loading || false };\n }\n\n /**\n * get all test files of a component.\n */\n getTestFiles(component: Component) {\n return detectTestFiles(component, this.devFiles);\n }\n\n private getOptions(options?: TesterOptions): TesterOptions {\n const defaults = {\n watch: false,\n debug: false,\n };\n\n return merge(defaults, options);\n }\n\n static defaultConfig = {\n /**\n * default test regex for which files tester to apply on.\n */\n patterns: ['**/*.spec.+(js|ts|jsx|tsx)', '**/*.test.+(js|ts|jsx|tsx)'],\n\n /**\n * determine whether to watch on start.\n */\n watchOnStart: true,\n };\n\n static async provider(\n [cli, envs, workspace, loggerAspect, graphql, ui, devFiles, builder]: [\n CLIMain,\n EnvsMain,\n Workspace,\n LoggerMain,\n GraphqlMain,\n UiMain,\n DevFilesMain,\n BuilderMain\n ],\n config: TesterExtensionConfig\n ) {\n const logger = loggerAspect.createLogger(TesterAspect.id);\n const testerService = new TesterService(workspace, config.patterns, logger, graphql.pubsub, devFiles);\n envs.registerService(testerService);\n devFiles.registerDevPattern(config.patterns);\n const tester = new TesterMain(\n graphql,\n envs,\n workspace,\n testerService,\n new TesterTask(TesterAspect.id, devFiles),\n devFiles,\n builder\n );\n\n if (workspace && !workspace.consumer.isLegacy) {\n cli.unregister('test');\n ui.registerOnStart(async () => {\n if (!config.watchOnStart) return undefined;\n await tester.uiWatch();\n return undefined;\n });\n\n cli.register(new TestCmd(tester, workspace, logger));\n }\n\n graphql.register(testerSchema(tester, graphql));\n\n return tester;\n }\n}\n\nTesterAspect.addRuntime(TesterMain);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["TesterMain","constructor","graphql","envs","workspace","service","task","devFiles","builder","test","components","opts","options","getOptions","envsRuntime","createEnvironment","env","runEnv","results","run","junit","generateJUnit","filePath","testsResults","map","envResult","data","flat","jUnit","testsResultsToJUnitFormat","compact","fs","outputFile","watch","onTestRunComplete","forEach","component","_testsResults","componentId","toString","uiWatch","list","debug","ui","getTestsResults","idHasVersion","entry","state","aspects","get","TesterAspect","id","isModified","getDataByAspect","tests","loading","getTestsResultsFromState","getTestFiles","detectTestFiles","defaults","merge","provider","cli","loggerAspect","config","logger","createLogger","testerService","TesterService","patterns","pubsub","registerService","registerDevPattern","tester","TesterTask","consumer","isLegacy","unregister","registerOnStart","watchOnStart","undefined","register","TestCmd","testerSchema","MainRuntime","CLIAspect","EnvsAspect","WorkspaceAspect","LoggerAspect","GraphqlAspect","UIAspect","DevFilesAspect","BuilderAspect","addRuntime"],"sources":["tester.main.runtime.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { Component } from '@teambit/component';\nimport compact from 'lodash.compact';\nimport { EnvsAspect, EnvsExecutionResult, EnvsMain } from '@teambit/envs';\nimport { LoggerAspect, LoggerMain } from '@teambit/logger';\nimport { Workspace, WorkspaceAspect } from '@teambit/workspace';\nimport { GraphqlAspect, GraphqlMain } from '@teambit/graphql';\nimport { BuilderAspect, BuilderMain } from '@teambit/builder';\nimport { UiMain, UIAspect } from '@teambit/ui';\nimport { merge } from 'lodash';\nimport DevFilesAspect, { DevFilesMain } from '@teambit/dev-files';\nimport { TestsResult } from '@teambit/tests-results';\nimport { ComponentsResults, CallbackFn, Tests } from './tester';\nimport { TestCmd } from './test.cmd';\nimport { TesterAspect } from './tester.aspect';\nimport { TesterService } from './tester.service';\nimport { TesterTask } from './tester.task';\nimport { detectTestFiles } from './utils';\nimport { testerSchema } from './tester.graphql';\nimport { testsResultsToJUnitFormat } from './utils/junit-generator';\n\nexport type TesterExtensionConfig = {\n /**\n * regex of the text environment.\n */\n testRegex: string;\n\n /**\n * determine whether to watch on start.\n */\n watchOnStart: boolean;\n patterns: string[];\n};\n\nexport type TesterOptions = {\n /**\n * start the tester in watch mode.\n */\n watch: boolean;\n\n /**\n * start the tester in debug mode.\n */\n debug: boolean;\n\n /**\n * start the tester in debug mode.\n */\n ui?: boolean;\n\n /**\n * initiate the tester on given env.\n */\n env?: string;\n\n /**\n * generate JUnit files on the specified dir\n */\n junit?: string;\n\n /**\n * show code coverage\n */\n coverage?: boolean;\n\n callback?: CallbackFn;\n};\n\nexport class TesterMain {\n static runtime = MainRuntime;\n static dependencies = [\n CLIAspect,\n EnvsAspect,\n WorkspaceAspect,\n LoggerAspect,\n GraphqlAspect,\n UIAspect,\n DevFilesAspect,\n BuilderAspect,\n ];\n\n constructor(\n /**\n * graphql extension.\n */\n private graphql: GraphqlMain,\n\n /**\n * envs extension.\n */\n private envs: EnvsMain,\n\n /**\n * workspace extension.\n */\n private workspace: Workspace,\n\n /**\n * tester service.\n */\n readonly service: TesterService,\n\n /**\n * build task.\n */\n readonly task: TesterTask,\n\n private devFiles: DevFilesMain,\n\n private builder: BuilderMain\n ) {}\n\n _testsResults: { [componentId: string]: ComponentsResults } | undefined[] = [];\n\n async test(components: Component[], opts?: TesterOptions): Promise<EnvsExecutionResult<Tests>> {\n const options = this.getOptions(opts);\n const envsRuntime = await this.envs.createEnvironment(components);\n if (opts?.env) {\n return envsRuntime.runEnv(opts.env, this.service, options);\n }\n const results = await envsRuntime.run(this.service, options);\n if (opts?.junit) {\n await this.generateJUnit(opts?.junit, results);\n }\n return results;\n }\n\n private async generateJUnit(filePath: string, testsResults: EnvsExecutionResult<Tests>) {\n const components = testsResults.results.map((envResult) => envResult.data?.components).flat();\n const jUnit = testsResultsToJUnitFormat(compact(components));\n await fs.outputFile(filePath, jUnit);\n }\n\n /**\n * watch all components for changes and test upon each.\n */\n async watch(components: Component[], opts?: TesterOptions) {\n const options = this.getOptions(opts);\n const envsRuntime = await this.envs.createEnvironment(components);\n if (opts?.env) {\n return envsRuntime.runEnv(opts.env, this.service, options);\n }\n\n this.service.onTestRunComplete((results) => {\n results.components.forEach((component) => {\n this._testsResults[component.componentId.toString()] = component;\n });\n });\n return envsRuntime.run(this.service, options);\n }\n\n async uiWatch() {\n const components = await this.workspace.list();\n return this.watch(components, { watch: true, debug: false, ui: true });\n }\n\n async getTestsResults(\n component: Component,\n idHasVersion = true\n ): Promise<{ testsResults?: TestsResult; loading: boolean } | undefined> {\n const entry = component.state.aspects.get(TesterAspect.id);\n const isModified = !idHasVersion && (await component.isModified());\n const data = this.builder.getDataByAspect(component, TesterAspect.id) as { tests: TestsResult };\n if ((entry || data) && !isModified) {\n return { testsResults: data?.tests || entry?.data.tests, loading: false };\n }\n return this.getTestsResultsFromState(component);\n }\n\n private getTestsResultsFromState(component: Component) {\n const tests = this._testsResults[component.id.toString()];\n return { testsResults: tests?.results, loading: tests?.loading || false };\n }\n\n /**\n * get all test files of a component.\n */\n getTestFiles(component: Component) {\n return detectTestFiles(component, this.devFiles);\n }\n\n private getOptions(options?: TesterOptions): TesterOptions {\n const defaults = {\n watch: false,\n debug: false,\n };\n\n return merge(defaults, options);\n }\n\n static defaultConfig = {\n /**\n * default test regex for which files tester to apply on.\n */\n patterns: ['**/*.spec.+(js|ts|jsx|tsx)', '**/*.test.+(js|ts|jsx|tsx)'],\n\n /**\n * determine whether to watch on start.\n */\n watchOnStart: true,\n };\n\n static async provider(\n [cli, envs, workspace, loggerAspect, graphql, ui, devFiles, builder]: [\n CLIMain,\n EnvsMain,\n Workspace,\n LoggerMain,\n GraphqlMain,\n UiMain,\n DevFilesMain,\n BuilderMain\n ],\n config: TesterExtensionConfig\n ) {\n const logger = loggerAspect.createLogger(TesterAspect.id);\n const testerService = new TesterService(workspace, config.patterns, logger, graphql.pubsub, devFiles);\n envs.registerService(testerService);\n devFiles.registerDevPattern(config.patterns);\n const tester = new TesterMain(\n graphql,\n envs,\n workspace,\n testerService,\n new TesterTask(TesterAspect.id, devFiles),\n devFiles,\n builder\n );\n\n if (workspace && !workspace.consumer.isLegacy) {\n cli.unregister('test');\n ui.registerOnStart(async () => {\n if (!config.watchOnStart) return undefined;\n await tester.uiWatch();\n return undefined;\n });\n\n cli.register(new TestCmd(tester, workspace, logger));\n }\n\n graphql.register(testerSchema(tester, graphql));\n\n return tester;\n }\n}\n\nTesterAspect.addRuntime(TesterMain);\n"],"mappings":"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"}
|
package/dist/ui/tests-page.js
CHANGED
|
@@ -27,6 +27,16 @@ function _component() {
|
|
|
27
27
|
return data;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
function _uiFoundationUiReactRouter() {
|
|
31
|
+
const data = require("@teambit/ui-foundation.ui.react-router.use-query");
|
|
32
|
+
|
|
33
|
+
_uiFoundationUiReactRouter = function () {
|
|
34
|
+
return data;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
return data;
|
|
38
|
+
}
|
|
39
|
+
|
|
30
40
|
function _documenterUi() {
|
|
31
41
|
const data = require("@teambit/documenter.ui.heading");
|
|
32
42
|
|
|
@@ -188,17 +198,20 @@ function TestsPage({
|
|
|
188
198
|
}) {
|
|
189
199
|
var _onTestsChanged$data, _data$getHost, _testData$testsResult, _component$environmen;
|
|
190
200
|
|
|
201
|
+
const query = (0, _uiFoundationUiReactRouter().useQuery)();
|
|
191
202
|
const component = (0, _react().useContext)(_component().ComponentContext);
|
|
203
|
+
const queryHasVersion = query.get('version');
|
|
204
|
+
const id = queryHasVersion ? component.id.toString() : component.id.toStringWithoutVersion();
|
|
192
205
|
const onTestsChanged = (0, _client().useSubscription)(TESTS_SUBSCRIPTION_CHANGED, {
|
|
193
206
|
variables: {
|
|
194
|
-
id
|
|
207
|
+
id
|
|
195
208
|
}
|
|
196
209
|
});
|
|
197
210
|
const {
|
|
198
211
|
data
|
|
199
212
|
} = (0, _client().useQuery)(GET_COMPONENT, {
|
|
200
213
|
variables: {
|
|
201
|
-
id
|
|
214
|
+
id
|
|
202
215
|
}
|
|
203
216
|
});
|
|
204
217
|
const testData = ((_onTestsChanged$data = onTestsChanged.data) === null || _onTestsChanged$data === void 0 ? void 0 : _onTestsChanged$data.testsChanged) || (data === null || data === void 0 ? void 0 : (_data$getHost = data.getHost) === null || _data$getHost === void 0 ? void 0 : _data$getHost.getTests);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TESTS_SUBSCRIPTION_CHANGED","gql","GET_COMPONENT","TestsPage","className","emptyState","component","useContext","ComponentContext","
|
|
1
|
+
{"version":3,"names":["TESTS_SUBSCRIPTION_CHANGED","gql","GET_COMPONENT","TestsPage","className","emptyState","query","useRouterQuery","component","useContext","ComponentContext","queryHasVersion","get","id","toString","toStringWithoutVersion","onTestsChanged","useSubscription","variables","data","useQuery","testData","testsChanged","getHost","getTests","testResults","testsResults","testFiles","loading","env","environment","EmptyStateTemplate","host","classNames","styles","testsPage","title","separator","testBlock"],"sources":["tests-page.tsx"],"sourcesContent":["import { useQuery, useSubscription, gql } from '@apollo/client';\nimport { ComponentContext } from '@teambit/component';\nimport { useQuery as useRouterQuery } from '@teambit/ui-foundation.ui.react-router.use-query';\nimport { H1 } from '@teambit/documenter.ui.heading';\nimport { Separator } from '@teambit/design.ui.separator';\nimport { EmptyBox } from '@teambit/design.ui.empty-box';\nimport { MDXLayout } from '@teambit/mdx.ui.mdx-layout';\nimport { AlertCard } from '@teambit/design.ui.alert-card';\nimport { TestLoader } from '@teambit/defender.ui.test-loader';\nimport classNames from 'classnames';\nimport React, { HTMLAttributes, useContext } from 'react';\nimport { TestTable } from '@teambit/defender.ui.test-table';\nimport { EmptyStateSlot } from '../tester.ui.runtime';\nimport styles from './tests-page.module.scss';\n\nconst TESTS_SUBSCRIPTION_CHANGED = gql`\n subscription OnTestsChanged($id: String!) {\n testsChanged(id: $id) {\n testsResults {\n testFiles {\n file\n duration\n pass\n failed\n pending\n errorStr\n tests {\n ancestor\n duration\n status\n name\n error\n }\n }\n }\n }\n }\n`;\n\nconst GET_COMPONENT = gql`\n query ($id: String!) {\n getHost {\n id # for GQL caching\n getTests(id: $id) {\n loading\n testsResults {\n testFiles {\n file\n duration\n pass\n failed\n pending\n errorStr\n tests {\n ancestor\n duration\n status\n name\n error\n }\n }\n }\n }\n }\n }\n`;\n\ntype TestsPageProps = {\n emptyState: EmptyStateSlot;\n} & HTMLAttributes<HTMLDivElement>;\n\nexport function TestsPage({ className, emptyState }: TestsPageProps) {\n const query = useRouterQuery();\n\n const component = useContext(ComponentContext);\n\n const queryHasVersion = query.get('version');\n\n const id = queryHasVersion ? component.id.toString() : component.id.toStringWithoutVersion();\n\n const onTestsChanged = useSubscription(TESTS_SUBSCRIPTION_CHANGED, {\n variables: { id },\n });\n\n const { data } = useQuery(GET_COMPONENT, {\n variables: { id },\n });\n\n const testData = onTestsChanged.data?.testsChanged || data?.getHost?.getTests;\n const testResults = testData?.testsResults?.testFiles;\n\n // TODO: change loading EmptyBox\n if (testData?.loading) return <TestLoader />;\n\n const env = component.environment?.id;\n const EmptyStateTemplate = emptyState.get(env || '');\n\n if (\n (testResults === null || testData?.testsResults === null) &&\n component.host === 'teambit.workspace/workspace' &&\n EmptyStateTemplate\n ) {\n return (\n <div className={classNames(styles.testsPage, className)}>\n <div>\n <H1 className={styles.title}>Tests</H1>\n <Separator isPresentational className={styles.separator} />\n <AlertCard\n level=\"info\"\n title=\"There are no\n tests for this Component. Learn how to add tests:\"\n >\n <MDXLayout>\n <EmptyStateTemplate />\n </MDXLayout>\n </AlertCard>\n </div>\n </div>\n );\n }\n\n // TODO: get the docs domain from the community aspect and pass it here as a prop\n if (testResults === null || testData?.testsResults === null) {\n return (\n <EmptyBox\n title=\"This component doesn’t have any tests.\"\n linkText=\"Learn how to add tests to your components\"\n link={`https://bit.dev/docs/dev-services-overview/tester/tester-overview`}\n />\n );\n }\n\n return (\n <div className={classNames(styles.testsPage, className)}>\n <div>\n <H1 className={styles.title}>Tests</H1>\n <Separator isPresentational className={styles.separator} />\n <TestTable testResults={testResults} className={styles.testBlock} />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;;;;;AAEA,MAAMA,0BAA0B,GAAG,IAAAC,aAAA,CAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAtBA;AAwBA,MAAMC,aAAa,GAAG,IAAAD,aAAA,CAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CA1BA;;AAgCO,SAASE,SAAT,CAAmB;EAAEC,SAAF;EAAaC;AAAb,CAAnB,EAA8D;EAAA;;EACnE,MAAMC,KAAK,GAAG,IAAAC,qCAAA,GAAd;EAEA,MAAMC,SAAS,GAAG,IAAAC,mBAAA,EAAWC,6BAAX,CAAlB;EAEA,MAAMC,eAAe,GAAGL,KAAK,CAACM,GAAN,CAAU,SAAV,CAAxB;EAEA,MAAMC,EAAE,GAAGF,eAAe,GAAGH,SAAS,CAACK,EAAV,CAAaC,QAAb,EAAH,GAA6BN,SAAS,CAACK,EAAV,CAAaE,sBAAb,EAAvD;EAEA,MAAMC,cAAc,GAAG,IAAAC,yBAAA,EAAgBjB,0BAAhB,EAA4C;IACjEkB,SAAS,EAAE;MAAEL;IAAF;EADsD,CAA5C,CAAvB;EAIA,MAAM;IAAEM;EAAF,IAAW,IAAAC,kBAAA,EAASlB,aAAT,EAAwB;IACvCgB,SAAS,EAAE;MAAEL;IAAF;EAD4B,CAAxB,CAAjB;EAIA,MAAMQ,QAAQ,GAAG,yBAAAL,cAAc,CAACG,IAAf,8EAAqBG,YAArB,MAAqCH,IAArC,aAAqCA,IAArC,wCAAqCA,IAAI,CAAEI,OAA3C,kDAAqC,cAAeC,QAApD,CAAjB;EACA,MAAMC,WAAW,GAAGJ,QAAH,aAAGA,QAAH,gDAAGA,QAAQ,CAAEK,YAAb,0DAAG,sBAAwBC,SAA5C,CAlBmE,CAoBnE;;EACA,IAAIN,QAAJ,aAAIA,QAAJ,eAAIA,QAAQ,CAAEO,OAAd,EAAuB,oBAAO,+BAAC,wBAAD,OAAP;EAEvB,MAAMC,GAAG,4BAAGrB,SAAS,CAACsB,WAAb,0DAAG,sBAAuBjB,EAAnC;EACA,MAAMkB,kBAAkB,GAAG1B,UAAU,CAACO,GAAX,CAAeiB,GAAG,IAAI,EAAtB,CAA3B;;EAEA,IACE,CAACJ,WAAW,KAAK,IAAhB,IAAwB,CAAAJ,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ,CAAEK,YAAV,MAA2B,IAApD,KACAlB,SAAS,CAACwB,IAAV,KAAmB,6BADnB,IAEAD,kBAHF,EAIE;IACA,oBACE;MAAK,SAAS,EAAE,IAAAE,qBAAA,EAAWC,0BAAA,CAAOC,SAAlB,EAA6B/B,SAA7B;IAAhB,gBACE,yDACE,+BAAC,kBAAD;MAAI,SAAS,EAAE8B,0BAAA,CAAOE;IAAtB,WADF,eAEE,+BAAC,qBAAD;MAAW,gBAAgB,MAA3B;MAA4B,SAAS,EAAEF,0BAAA,CAAOG;IAA9C,EAFF,eAGE,+BAAC,sBAAD;MACE,KAAK,EAAC,MADR;MAEE,KAAK,EAAC;IAFR,gBAKE,+BAAC,kBAAD,qBACE,+BAAC,kBAAD,OADF,CALF,CAHF,CADF,CADF;EAiBD,CAhDkE,CAkDnE;;;EACA,IAAIZ,WAAW,KAAK,IAAhB,IAAwB,CAAAJ,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ,CAAEK,YAAV,MAA2B,IAAvD,EAA6D;IAC3D,oBACE,+BAAC,qBAAD;MACE,KAAK,EAAC,6CADR;MAEE,QAAQ,EAAC,2CAFX;MAGE,IAAI,EAAG;IAHT,EADF;EAOD;;EAED,oBACE;IAAK,SAAS,EAAE,IAAAO,qBAAA,EAAWC,0BAAA,CAAOC,SAAlB,EAA6B/B,SAA7B;EAAhB,gBACE,yDACE,+BAAC,kBAAD;IAAI,SAAS,EAAE8B,0BAAA,CAAOE;EAAtB,WADF,eAEE,+BAAC,qBAAD;IAAW,gBAAgB,MAA3B;IAA4B,SAAS,EAAEF,0BAAA,CAAOG;EAA9C,EAFF,eAGE,+BAAC,wBAAD;IAAW,WAAW,EAAEZ,WAAxB;IAAqC,SAAS,EAAES,0BAAA,CAAOI;EAAvD,EAHF,CADF,CADF;AASD"}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/tester",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.743",
|
|
4
4
|
"homepage": "https://bit.dev/teambit/defender/tester",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.defender",
|
|
8
8
|
"name": "tester",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.743"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"chalk": "2.4.2",
|
|
@@ -23,25 +23,26 @@
|
|
|
23
23
|
"@babel/runtime": "7.12.18",
|
|
24
24
|
"core-js": "^3.0.0",
|
|
25
25
|
"@teambit/harmony": "0.3.3",
|
|
26
|
+
"@teambit/design.ui.separator": "0.0.354",
|
|
26
27
|
"@teambit/documenter.ui.heading": "4.1.1",
|
|
27
|
-
"@teambit/cli": "0.0.
|
|
28
|
-
"@teambit/logger": "0.0.
|
|
29
|
-
"@teambit/workspace": "0.0.
|
|
30
|
-
"@teambit/component": "0.0.
|
|
31
|
-
"@teambit/graphql": "0.0.
|
|
32
|
-
"@teambit/builder": "0.0.
|
|
33
|
-
"@teambit/dev-files": "0.0.
|
|
34
|
-
"@teambit/envs": "0.0.
|
|
28
|
+
"@teambit/cli": "0.0.493",
|
|
29
|
+
"@teambit/logger": "0.0.585",
|
|
30
|
+
"@teambit/workspace": "0.0.743",
|
|
31
|
+
"@teambit/component": "0.0.743",
|
|
32
|
+
"@teambit/graphql": "0.0.743",
|
|
33
|
+
"@teambit/builder": "0.0.743",
|
|
34
|
+
"@teambit/dev-files": "0.0.743",
|
|
35
|
+
"@teambit/envs": "0.0.743",
|
|
35
36
|
"@teambit/tests-results": "0.0.97",
|
|
36
|
-
"@teambit/ui": "0.0.
|
|
37
|
-
"@teambit/compiler": "0.0.
|
|
37
|
+
"@teambit/ui": "0.0.743",
|
|
38
|
+
"@teambit/compiler": "0.0.743",
|
|
38
39
|
"@teambit/bit-error": "0.0.394",
|
|
39
40
|
"@teambit/defender.ui.test-loader": "0.0.490",
|
|
40
41
|
"@teambit/defender.ui.test-table": "0.0.495",
|
|
41
42
|
"@teambit/design.ui.alert-card": "0.0.16",
|
|
42
43
|
"@teambit/design.ui.empty-box": "0.0.353",
|
|
43
|
-
"@teambit/
|
|
44
|
-
"@teambit/
|
|
44
|
+
"@teambit/mdx.ui.mdx-layout": "0.0.499",
|
|
45
|
+
"@teambit/ui-foundation.ui.react-router.use-query": "0.0.486"
|
|
45
46
|
},
|
|
46
47
|
"devDependencies": {
|
|
47
48
|
"@types/react": "^17.0.8",
|
|
@@ -58,7 +59,7 @@
|
|
|
58
59
|
},
|
|
59
60
|
"peerDependencies": {
|
|
60
61
|
"@apollo/client": "^3.0.0",
|
|
61
|
-
"@teambit/legacy": "1.0.
|
|
62
|
+
"@teambit/legacy": "1.0.273",
|
|
62
63
|
"react-dom": "^16.8.0 || ^17.0.0",
|
|
63
64
|
"react": "^16.8.0 || ^17.0.0"
|
|
64
65
|
},
|
|
@@ -86,7 +87,7 @@
|
|
|
86
87
|
"react": "-"
|
|
87
88
|
},
|
|
88
89
|
"peerDependencies": {
|
|
89
|
-
"@teambit/legacy": "1.0.
|
|
90
|
+
"@teambit/legacy": "1.0.273",
|
|
90
91
|
"react-dom": "^16.8.0 || ^17.0.0",
|
|
91
92
|
"react": "^16.8.0 || ^17.0.0"
|
|
92
93
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const compositions = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.defender_tester@0.0.
|
|
2
|
-
export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.defender_tester@0.0.
|
|
1
|
+
export const compositions = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.defender_tester@0.0.743/dist/tester.composition.js')]
|
|
2
|
+
export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.defender_tester@0.0.743/dist/tester.docs.mdx')]
|
package/ui/tests-page.tsx
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useQuery, useSubscription, gql } from '@apollo/client';
|
|
2
2
|
import { ComponentContext } from '@teambit/component';
|
|
3
|
+
import { useQuery as useRouterQuery } from '@teambit/ui-foundation.ui.react-router.use-query';
|
|
3
4
|
import { H1 } from '@teambit/documenter.ui.heading';
|
|
4
5
|
import { Separator } from '@teambit/design.ui.separator';
|
|
5
6
|
import { EmptyBox } from '@teambit/design.ui.empty-box';
|
|
@@ -69,10 +70,20 @@ type TestsPageProps = {
|
|
|
69
70
|
} & HTMLAttributes<HTMLDivElement>;
|
|
70
71
|
|
|
71
72
|
export function TestsPage({ className, emptyState }: TestsPageProps) {
|
|
73
|
+
const query = useRouterQuery();
|
|
74
|
+
|
|
72
75
|
const component = useContext(ComponentContext);
|
|
73
|
-
|
|
76
|
+
|
|
77
|
+
const queryHasVersion = query.get('version');
|
|
78
|
+
|
|
79
|
+
const id = queryHasVersion ? component.id.toString() : component.id.toStringWithoutVersion();
|
|
80
|
+
|
|
81
|
+
const onTestsChanged = useSubscription(TESTS_SUBSCRIPTION_CHANGED, {
|
|
82
|
+
variables: { id },
|
|
83
|
+
});
|
|
84
|
+
|
|
74
85
|
const { data } = useQuery(GET_COMPONENT, {
|
|
75
|
-
variables: { id
|
|
86
|
+
variables: { id },
|
|
76
87
|
});
|
|
77
88
|
|
|
78
89
|
const testData = onTestsChanged.data?.testsChanged || data?.getHost?.getTests;
|
|
Binary file
|