import { describe, expect, vi, it, beforeEach } from 'vitest'import { AssertionError } from 'node:assert'import TestStats from '../../src/stats/test.js'describe('TestStats', () => {let stat: TestStatsbeforeEach(() => {stat = new TestStats({type: 'test:start',title: 'should can do something',parent: 'My awesome feature',fullTitle: 'My awesome feature should can do something',pending: false,cid: '0-0',specs: ['/path/to/test/specs/sync.spec.js'],uid: 'should can do something3',argument: { rows: [{ cells: ['hello'] }] }})})beforeEach(() => {vi.resetAllMocks()})it('defines a start date', () => {expect(stat.type).toBe('test')expect(stat.start instanceof Date).toBe(true)})it('should be initialized with correct values', () => {stat.complete = vi.fn()expect(stat.type).toBe('test')expect(stat.cid).toBe('0-0')expect(stat.argument).toEqual({ rows: [{ cells: ['hello'] }] })expect(stat.uid).toBe('should can do something3')expect(stat.state).toBe('pending')})it('can get skipped', () => {stat.complete = vi.fn()stat.skip('for no reason')expect(stat.state).toBe('skipped')expect(stat.pendingReason).toBe('for no reason')expect(vi.mocked(stat.complete).mock.calls).toHaveLength(0)})it('can pass', () => {stat.complete = vi.fn()stat.pass()expect(stat.state).toBe('passed')expect(vi.mocked(stat.complete).mock.calls).toHaveLength(1)})it('can fail', () => {stat.complete = vi.fn()stat.fail([new Error('oh oh')])expect(stat.state).toBe('failed')expect(stat.errors!.length).toBe(1)expect(stat.errors![0].message).toBe('oh oh')expect(stat.error!.message).toBe('oh oh')expect(vi.mocked(stat.complete).mock.calls).toHaveLength(1)})it('should not throw if it fails with no errors somehow', () => {stat.complete = vi.fn()stat.fail([])expect(stat.errors!.length).toBe(0)expect(stat.state).toBe('failed')})it('should not throw if it fails with undefined errors somehow', () => {stat.complete = vi.fn()stat.fail(undefined)expect(stat.state).toBe('failed')})it('should show diff of error', () => {stat.fail([new AssertionError({ message: 'foobar', actual: 'true', expected: 'false' })])expect(stat.error?.message).toContain('actual')expect(stat.error?.message).toContain('expected')})it('should not diff if "actual" and "expected" are empty', () => {stat.fail([new AssertionError({ message: 'foobar', actual: '', expected: '' })])expect(stat.error?.message).not.toContain('actual')expect(stat.error?.message).not.toContain('expected')})it('should not diff if error is already diffed', () => {stat.fail([new AssertionError({ message: 'foobar\nExpected: foo\nReceived: bar42', actual: 'true', expected: 'false' })])expect(stat.error?.message).toContain('bar42')})it('should not call stringifyDiffObjs if actual is a Proxy', () => {const TestStatsSpy = vi.spyOn(TestStats.prototype as any, '_stringifyDiffObjs')stat.fail([new AssertionError({message: 'Expect $(`#flash`) to be existing\n\nExpected \u001b[32m"existing"\u001b[39m\nReceived \u001b[31m"\u001b[7mnot \u001b[27mexisting"\u001b[39m',expected: 'hi',actual: new Proxy(new Promise(()=>{}), {})})])expect(TestStatsSpy).not.toHaveBeenCalled()})it('should call stringifyDiffObjs if actual is not a Proxy', () => {const TestStatsSpy = vi.spyOn(TestStats.prototype as any, '_stringifyDiffObjs')stat.fail([new AssertionError({message: 'Expect $(`#flash`) to be existing\n\nExpected \u001b[32m"existing"\u001b[39m\nReceived \u001b[31m"\u001b[7mnot \u001b[27mexisting"\u001b[39m',expected: 'hi',actual: 'false'})])expect(TestStatsSpy).toHaveBeenCalled()})})