Skip to content

Commit 596f739

Browse files
authored
fix: project color label on html reporter (#10142)
1 parent f1b1f6c commit 596f739

11 files changed

Lines changed: 91 additions & 30 deletions

File tree

packages/ui/client/composables/client/index.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type {
44
RunnerTaskEventPack,
55
RunnerTaskResultPack,
66
RunnerTestFile,
7-
SerializedConfig,
7+
SerializedRootConfig,
88
TestAnnotation,
99
} from 'vitest'
1010
import type { BrowserRunnerState } from '../../../types'
@@ -67,7 +67,7 @@ export const client = (function createVitestClient() {
6767
}
6868
})()
6969

70-
export const config = shallowRef<Partial<SerializedConfig>>({} as any)
70+
export const config = shallowRef<Partial<SerializedRootConfig>>({} as any)
7171
export const status = ref<WebSocketStatus>('CONNECTING')
7272
export const availableProjects = shallowRef<string[]>([])
7373

@@ -171,12 +171,15 @@ watch(
171171
ws.addEventListener('open', async () => {
172172
status.value = 'OPEN'
173173
client.state.filesMap.clear()
174-
let [files, _config, errors, projects] = await Promise.all([
174+
let [files, _config, errors] = await Promise.all([
175175
client.rpc.getFiles(),
176176
client.rpc.getConfig(),
177177
client.rpc.getUnhandledErrors(),
178-
client.rpc.getResolvedProjectLabels(),
179178
])
179+
const projects = _config.projects.map(project => ({
180+
name: project.name || '',
181+
color: project.color,
182+
}))
180183
if (_config.standalone) {
181184
const filenames = await client.rpc.getTestFiles()
182185
files = filenames.map(([{ name, root }, filepath]) => {

packages/ui/client/composables/client/static.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { BirpcReturn } from 'birpc'
33
import type {
44
ModuleGraphData,
55
RunnerTestFile,
6-
SerializedConfig,
6+
SerializedRootConfig,
77
WebSocketEvents,
88
WebSocketHandlers,
99
} from 'vitest'
@@ -15,8 +15,7 @@ import { StateManager } from '../../../../ws-client/src/state'
1515
interface HTMLReportMetadata {
1616
paths: string[]
1717
files: RunnerTestFile[]
18-
config: SerializedConfig
19-
projects: string[]
18+
config: SerializedRootConfig
2019
moduleGraph: Record<string, Record<string, ModuleGraphData>>
2120
unhandledErrors: unknown[]
2221
// filename -> source
@@ -49,12 +48,6 @@ export function createStaticClient(): VitestClient {
4948
getConfig: () => {
5049
return metadata.config
5150
},
52-
getResolvedProjectNames: () => {
53-
return metadata.projects
54-
},
55-
getResolvedProjectLabels: () => {
56-
return []
57-
},
5851
getModuleGraph: async (projectName, id) => {
5952
return metadata.moduleGraph[projectName]?.[id]
6053
},
@@ -85,7 +78,7 @@ export function createStaticClient(): VitestClient {
8578
saveTestFile: asyncNoop,
8679
getProvidedContext: () => ({}),
8780
getTestFiles: asyncNoop,
88-
} as WebSocketHandlers
81+
} as Omit<WebSocketHandlers, 'getResolvedProjectLabels'>
8982

9083
ctx.rpc = rpc as any as BirpcReturn<WebSocketHandlers, WebSocketEvents>
9184

packages/ui/node/reporter.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { ModuleGraphData, RunnerTestFile, SerializedConfig } from 'vitest'
1+
import type { ModuleGraphData, RunnerTestFile, SerializedRootConfig } from 'vitest'
22
import type { HTMLOptions, Reporter, Vitest } from 'vitest/node'
33
import { existsSync, promises as fs } from 'node:fs'
44
import { fileURLToPath } from 'node:url'
@@ -29,8 +29,7 @@ function getOutputFile(config: PotentialConfig | undefined) {
2929
interface HTMLReportData {
3030
paths: string[]
3131
files: RunnerTestFile[]
32-
config: SerializedConfig
33-
projects: string[]
32+
config: SerializedRootConfig
3433
moduleGraph: Record<string, Record<string, ModuleGraphData>>
3534
unhandledErrors: unknown[]
3635
// filename -> source
@@ -69,9 +68,8 @@ export default class HTMLReporter implements Reporter {
6968
const result: HTMLReportData = {
7069
paths: this.ctx.state.getPaths(),
7170
files: this.ctx.state.getFiles(),
72-
config: this.ctx.getRootProject().serializedConfig,
71+
config: this.ctx.serializedRootConfig,
7372
unhandledErrors: this.ctx.state.getUnhandledErrors(),
74-
projects: this.ctx.projects.map(p => p.name),
7573
moduleGraph: {},
7674
sources: {},
7775
}

packages/vitest/src/api/setup.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ export function setup(ctx: Vitest, _server?: ViteDevServer): void {
9898
await ctx.rerunTask(id)
9999
},
100100
getConfig() {
101-
return ctx.getRootProject().serializedConfig
101+
return ctx.serializedRootConfig
102102
},
103103
getResolvedProjectLabels(): { name: string; color?: LabelColor }[] {
104104
return ctx.projects.map(p => ({ name: p.name, color: p.color }))

packages/vitest/src/api/types.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { File, TaskEventPack, TaskResultPack, TestAnnotation, TestArtifact } from '@vitest/runner'
22
import type { Awaitable } from '@vitest/utils'
33
import type { BirpcReturn } from 'birpc'
4-
import type { SerializedConfig } from '../runtime/config'
4+
import type { SerializedRootConfig } from '../runtime/config'
55
import type { SerializedTestSpecification } from '../runtime/types/utils'
66
import type { LabelColor, ModuleGraphData, UserConsoleLog } from '../types/general'
77
import type { ModuleDefinitionDurationsDiagnostic, UntrackedModuleDefinitionDiagnostic } from '../types/module-locations'
@@ -39,7 +39,10 @@ export interface WebSocketHandlers {
3939
getFiles: () => File[]
4040
getTestFiles: () => Promise<SerializedTestSpecification[]>
4141
getPaths: () => string[]
42-
getConfig: () => SerializedConfig
42+
getConfig: () => SerializedRootConfig
43+
/**
44+
* @deprecated Use `getConfig().projects` instead.
45+
*/
4346
getResolvedProjectLabels: () => { name: string; color?: LabelColor }[]
4447
getModuleGraph: (
4548
projectName: string,

packages/vitest/src/node/config/serializeConfig.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
import type { SerializedConfig } from '../../runtime/config'
12
import type { TestProject } from '../project'
2-
import type { ApiConfig, SerializedConfig } from '../types/config'
3+
import type { ApiConfig } from '../types/config'
34
import { configDefaults } from '../../defaults'
45
import { isAgent } from '../../utils/env'
56

@@ -46,6 +47,7 @@ export function serializeConfig(project: TestProject): SerializedConfig {
4647
disableConsoleIntercept: config.disableConsoleIntercept,
4748
root: config.root,
4849
name: config.name,
50+
color: config.color,
4951
globals: config.globals,
5052
snapshotEnvironment: config.snapshotEnvironment,
5153
passWithNoTests: config.passWithNoTests,

packages/vitest/src/node/core.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { Awaitable } from '@vitest/utils'
33
import type { Writable } from 'node:stream'
44
import type { ViteDevServer } from 'vite'
55
import type { ModuleRunner } from 'vite/module-runner'
6-
import type { SerializedCoverageConfig } from '../runtime/config'
6+
import type { SerializedCoverageConfig, SerializedRootConfig } from '../runtime/config'
77
import type { ArgumentsType, ProvidedContext, UserConsoleLog } from '../types/general'
88
import type { SourceModuleDiagnostic, SourceModuleLocations } from '../types/module-locations'
99
import type { CliOptions } from './cli/cli-api'
@@ -503,6 +503,13 @@ export class Vitest {
503503
return this.coreWorkspaceProject
504504
}
505505

506+
public get serializedRootConfig(): SerializedRootConfig {
507+
return {
508+
...this.getRootProject().serializedConfig,
509+
projects: this.projects.map(project => project.serializedConfig),
510+
}
511+
}
512+
506513
public getProjectByName(name: string): TestProject {
507514
const project = this.projects.find(p => p.name === name)
508515
|| this.coreWorkspaceProject

packages/vitest/src/public/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export type {
4040
RuntimeConfig,
4141
SerializedConfig,
4242
SerializedCoverageConfig,
43+
SerializedRootConfig,
4344
} from '../runtime/config'
4445

4546
export { VitestEvaluatedModules as EvaluatedModules } from '../runtime/moduleRunner/evaluatedModules'

packages/vitest/src/runtime/config.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ import type { PrettyFormatOptions } from '@vitest/pretty-format'
33
import type { SequenceHooks, SequenceSetupFiles, SerializableRetry, TestTagDefinition } from '@vitest/runner'
44
import type { SnapshotEnvironment, SnapshotUpdateState } from '@vitest/snapshot'
55
import type { SerializedDiffOptions } from '@vitest/utils/diff'
6+
import type { LabelColor } from '../types/general'
67

78
/**
89
* Config that tests have access to.
910
*/
1011
export interface SerializedConfig {
1112
name: string | undefined
13+
color?: LabelColor
1214
globals: boolean
1315
base: string | undefined
1416
snapshotEnvironment?: string
@@ -158,6 +160,10 @@ export interface SerializedCoverageConfig {
158160
customProviderModule: string | undefined
159161
}
160162

163+
export interface SerializedRootConfig extends SerializedConfig {
164+
projects: SerializedConfig[]
165+
}
166+
161167
export type RuntimeConfig = Pick<
162168
SerializedConfig,
163169
| 'allowOnly'

test/cli/test/reporters/__snapshots__/html.test.ts.snap

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,6 @@ exports[`html reporter > resolves to "failing" status for test file "json-fail"
109109
"paths": [
110110
"<rootDir>/test/cli/fixtures/reporters/json-fail.test.ts",
111111
],
112-
"projects": [
113-
"",
114-
],
115112
"sources": {
116113
"<rootDir>/test/cli/fixtures/reporters/json-fail.test.ts": "import { expect, test } from 'vitest'
117114
@@ -218,9 +215,6 @@ exports[`html reporter > resolves to "passing" status for test file "all-passing
218215
"paths": [
219216
"<rootDir>/test/cli/fixtures/reporters/all-passing-or-skipped.test.ts",
220217
],
221-
"projects": [
222-
"",
223-
],
224218
"sources": {
225219
"<rootDir>/test/cli/fixtures/reporters/all-passing-or-skipped.test.ts": "import { expect, test } from 'vitest'
226220

0 commit comments

Comments
 (0)