@teambit/tester 0.0.742 → 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.
@@ -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;UACA,MAAMM,SAAS,GAAG,MAAMH,IAAI,CAACI,GAAL,CAASH,WAAT,CAAxB;UACA,IAAI,CAACE,SAAL,EAAgB,OAAO,IAAP;UAChB,MAAME,YAAY,GAAG,MAAMtB,MAAM,CAACuB,eAAP,CAAuBH,SAAvB,CAA3B;UACA,IAAI,CAACE,YAAL,EAAmB,OAAO,IAAP;UACnB,OAAOA,YAAP;QACD;MARY;IAZN;EA5CN,CAAP;AAoED"}
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 componentStatus = await ((_this$workspace = this.workspace) === null || _this$workspace === void 0 ? void 0 : _this$workspace.getComponentStatus(component));
298
+ const isModified = !idHasVersion && (await component.isModified());
301
299
  const data = this.builder.getDataByAspect(component, _tester().TesterAspect.id);
302
300
 
303
- if ((entry || data) && !(componentStatus !== null && componentStatus !== void 0 && (_componentStatus$modi = componentStatus.modifyInfo) !== null && _componentStatus$modi !== void 0 && _componentStatus$modi.hasModifiedFiles)) {
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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"}
@@ -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: component.id.toString()
207
+ id
195
208
  }
196
209
  });
197
210
  const {
198
211
  data
199
212
  } = (0, _client().useQuery)(GET_COMPONENT, {
200
213
  variables: {
201
- id: component.id._legacy.name
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","onTestsChanged","useSubscription","variables","id","toString","data","useQuery","_legacy","name","testData","testsChanged","getHost","getTests","testResults","testsResults","testFiles","loading","env","environment","EmptyStateTemplate","get","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 { 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 component = useContext(ComponentContext);\n const onTestsChanged = useSubscription(TESTS_SUBSCRIPTION_CHANGED, { variables: { id: component.id.toString() } });\n const { data } = useQuery(GET_COMPONENT, {\n variables: { id: component.id._legacy.name },\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":"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"}
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":"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"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/tester",
3
- "version": "0.0.742",
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.742"
9
+ "version": "0.0.743"
10
10
  },
11
11
  "dependencies": {
12
12
  "chalk": "2.4.2",
@@ -25,23 +25,24 @@
25
25
  "@teambit/harmony": "0.3.3",
26
26
  "@teambit/design.ui.separator": "0.0.354",
27
27
  "@teambit/documenter.ui.heading": "4.1.1",
28
- "@teambit/cli": "0.0.492",
29
- "@teambit/logger": "0.0.584",
30
- "@teambit/workspace": "0.0.742",
31
- "@teambit/component": "0.0.742",
32
- "@teambit/graphql": "0.0.742",
33
- "@teambit/builder": "0.0.742",
34
- "@teambit/dev-files": "0.0.742",
35
- "@teambit/envs": "0.0.742",
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",
36
36
  "@teambit/tests-results": "0.0.97",
37
- "@teambit/ui": "0.0.742",
38
- "@teambit/compiler": "0.0.742",
37
+ "@teambit/ui": "0.0.743",
38
+ "@teambit/compiler": "0.0.743",
39
39
  "@teambit/bit-error": "0.0.394",
40
40
  "@teambit/defender.ui.test-loader": "0.0.490",
41
41
  "@teambit/defender.ui.test-table": "0.0.495",
42
42
  "@teambit/design.ui.alert-card": "0.0.16",
43
43
  "@teambit/design.ui.empty-box": "0.0.353",
44
- "@teambit/mdx.ui.mdx-layout": "0.0.499"
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.272",
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.272",
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.742/dist/tester.composition.js')]
2
- export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.defender_tester@0.0.742/dist/tester.docs.mdx')]
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
- const onTestsChanged = useSubscription(TESTS_SUBSCRIPTION_CHANGED, { variables: { id: component.id.toString() } });
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: component.id._legacy.name },
86
+ variables: { id },
76
87
  });
77
88
 
78
89
  const testData = onTestsChanged.data?.testsChanged || data?.getHost?.getTests;