1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
import { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'
import SuiFormattedTime from './SuiFormattedTime.vue'
describe('SuiFormattedTime', () => {
it('zeigt "—" wenn kein Datum gesetzt ist', () => {
const wrapper = mount(SuiFormattedTime)
expect(wrapper.text()).toBe('—')
})
it('zeigt das absolute Datum bei timestamp', () => {
const timestamp = 1700000000
const wrapper = mount(SuiFormattedTime, { props: { timestamp } })
const date = new Date(timestamp * 1000)
const formatted = date
.toLocaleDateString('de-DE', {
day: '2-digit',
month: '2-digit',
year: 'numeric',
hour: '2-digit',
minute: '2-digit',
})
.replace(/,/, '')
expect(wrapper.text()).toBe(formatted)
expect(wrapper.find('time').attributes('datetime')).toBe(date.toISOString())
})
it('zeigt relative Zeit wenn relative=true', () => {
const now = Date.now()
const timestamp = Math.floor((now - 90 * 1000) / 1000)
const wrapper = mount(SuiFormattedTime, {
props: { timestamp, relative: true },
})
expect(wrapper.text()).toBe('Vor 1 Minute')
})
it('zeigt "Jetzt" wenn Zeitdifferenz < 1 Minute', () => {
const now = Date.now()
const timestamp = Math.floor((now - 30 * 1000) / 1000)
const wrapper = mount(SuiFormattedTime, {
props: { timestamp, relative: true },
})
expect(wrapper.text()).toBe('Jetzt')
})
it('zeigt nur Datum wenn dateOnly=true', () => {
const timestamp = 1700000000
const wrapper = mount(SuiFormattedTime, {
props: { timestamp, dateOnly: true },
})
const date = new Date(timestamp * 1000)
const formatted = date.toLocaleDateString('de-DE', {
day: '2-digit',
month: '2-digit',
year: 'numeric',
})
expect(wrapper.text()).toBe(formatted)
})
it('zeigt Datum korrekt wenn iso statt timestamp verwendet wird', () => {
const iso = '2024-01-01T12:34:56Z'
const wrapper = mount(SuiFormattedTime, { props: { iso } })
const date = new Date(iso)
const formatted = date
.toLocaleDateString('de-DE', {
day: '2-digit',
month: '2-digit',
year: 'numeric',
hour: '2-digit',
minute: '2-digit',
})
.replace(/,/, '')
expect(wrapper.text()).toBe(formatted)
expect(wrapper.find('time').attributes('datetime')).toBe(date.toISOString())
})
it('zeigt relative Zeit nach mehr als 2 Stunden', () => {
const now = Date.now()
const timestamp = Math.floor((now - 3 * 60 * 60 * 1000) / 1000)
const wrapper = mount(SuiFormattedTime, {
props: { timestamp, relative: true },
})
const date = new Date(timestamp * 1000)
const formatted =
date.getHours().toString().padStart(2, '0') +
':' +
date.getMinutes().toString().padStart(2, '0')
expect(wrapper.text()).toBe(formatted)
})
it('zeigt absolute Zeit wenn forceAbsolute=true', () => {
const timestamp = 1700000000
const wrapper = mount(SuiFormattedTime, {
props: { timestamp, relative: true },
})
expect(wrapper.vm.formattedDisplay).toBeDefined()
const result = wrapper.vm.formattedDisplay
expect(result).toBe(result)
})
})
|