@contentful/field-editor-reference 8.3.1 → 8.3.2-canary.3
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/cjs/common/useEditorPermissions.spec.js +31 -30
- package/dist/cjs/components/CreateEntryLinkButton/CreateEntryLinkButton.spec.js +48 -48
- package/dist/cjs/components/CreateEntryLinkButton/CreateEntryMenuTrigger.spec.js +32 -32
- package/dist/cjs/components/ScheduledIconWithTooltip/formatDateAndTime.spec.js +44 -43
- package/dist/cjs/resources/Cards/ResourceCard.spec.js +50 -50
- package/dist/cjs/resources/MultipleResourceReferenceEditor.spec.js +36 -36
- package/dist/cjs/resources/SingleResourceReferenceEditor.spec.js +26 -26
- package/dist/cjs/resources/testHelpers/resourceEditorHelpers.js +6 -5
- package/dist/cjs/utils/getProviderName.spec.js +6 -5
- package/dist/esm/common/useEditorPermissions.spec.js +3 -2
- package/dist/esm/components/CreateEntryLinkButton/CreateEntryLinkButton.spec.js +7 -7
- package/dist/esm/components/CreateEntryLinkButton/CreateEntryMenuTrigger.spec.js +5 -5
- package/dist/esm/components/ScheduledIconWithTooltip/formatDateAndTime.spec.js +4 -3
- package/dist/esm/resources/Cards/ResourceCard.spec.js +12 -12
- package/dist/esm/resources/MultipleResourceReferenceEditor.spec.js +10 -10
- package/dist/esm/resources/SingleResourceReferenceEditor.spec.js +11 -11
- package/dist/esm/resources/testHelpers/resourceEditorHelpers.js +6 -5
- package/dist/esm/utils/getProviderName.spec.js +1 -0
- package/dist/types/components/CreateEntryLinkButton/CreateEntryLinkButton.spec.d.ts +1 -1
- package/dist/types/components/CreateEntryLinkButton/CreateEntryMenuTrigger.spec.d.ts +1 -1
- package/dist/types/resources/Cards/ResourceCard.spec.d.ts +1 -1
- package/dist/types/resources/MultipleResourceReferenceEditor.spec.d.ts +1 -1
- package/dist/types/resources/SingleResourceReferenceEditor.spec.d.ts +1 -1
- package/package.json +6 -6
|
@@ -4,13 +4,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
});
|
|
5
5
|
const _fieldeditortestutils = require("@contentful/field-editor-test-utils");
|
|
6
6
|
const _reacthooks = require("@testing-library/react-hooks");
|
|
7
|
+
const _vitest = require("vitest");
|
|
7
8
|
const _useEditorPermissions = require("./useEditorPermissions");
|
|
8
|
-
describe('useEditorPermissions', ()=>{
|
|
9
|
+
(0, _vitest.describe)('useEditorPermissions', ()=>{
|
|
9
10
|
const makeFieldAppSDK = (customizeMock)=>({
|
|
10
11
|
field: (0, _fieldeditortestutils.createFakeFieldAPI)(customizeMock)[0],
|
|
11
12
|
access: {
|
|
12
|
-
can:
|
|
13
|
-
canPerformActionOnEntryOfType:
|
|
13
|
+
can: _vitest.vi.fn().mockResolvedValue(true),
|
|
14
|
+
canPerformActionOnEntryOfType: _vitest.vi.fn().mockResolvedValue(true)
|
|
14
15
|
}
|
|
15
16
|
});
|
|
16
17
|
const makeContentType = (id)=>({
|
|
@@ -37,8 +38,8 @@ describe('useEditorPermissions', ()=>{
|
|
|
37
38
|
sdk
|
|
38
39
|
};
|
|
39
40
|
};
|
|
40
|
-
describe(`behaviour on Asset`, ()=>{
|
|
41
|
-
it(`wont check access when turned off via instance params`, async ()=>{
|
|
41
|
+
(0, _vitest.describe)(`behaviour on Asset`, ()=>{
|
|
42
|
+
(0, _vitest.it)(`wont check access when turned off via instance params`, async ()=>{
|
|
42
43
|
const { result, sdk } = await renderEditorPermissions({
|
|
43
44
|
entityType: 'Asset',
|
|
44
45
|
params: {
|
|
@@ -46,34 +47,34 @@ describe('useEditorPermissions', ()=>{
|
|
|
46
47
|
showLinkEntityAction: false
|
|
47
48
|
}
|
|
48
49
|
});
|
|
49
|
-
expect(result.current.canCreateEntity).toBe(false);
|
|
50
|
-
expect(result.current.canLinkEntity).toBe(false);
|
|
51
|
-
expect(sdk.access.can).not.toHaveBeenCalledWith();
|
|
50
|
+
(0, _vitest.expect)(result.current.canCreateEntity).toBe(false);
|
|
51
|
+
(0, _vitest.expect)(result.current.canLinkEntity).toBe(false);
|
|
52
|
+
(0, _vitest.expect)(sdk.access.can).not.toHaveBeenCalledWith();
|
|
52
53
|
});
|
|
53
|
-
it(`checks basic access`, async ()=>{
|
|
54
|
+
(0, _vitest.it)(`checks basic access`, async ()=>{
|
|
54
55
|
const { sdk } = await renderEditorPermissions({
|
|
55
56
|
entityType: 'Asset'
|
|
56
57
|
});
|
|
57
|
-
expect(sdk.access.can).toHaveBeenCalledWith('create', 'Asset');
|
|
58
|
-
expect(sdk.access.can).toHaveBeenCalledWith('read', 'Asset');
|
|
58
|
+
(0, _vitest.expect)(sdk.access.can).toHaveBeenCalledWith('create', 'Asset');
|
|
59
|
+
(0, _vitest.expect)(sdk.access.can).toHaveBeenCalledWith('read', 'Asset');
|
|
59
60
|
});
|
|
60
|
-
it(`defaults link asset action visibility to true`, async ()=>{
|
|
61
|
+
(0, _vitest.it)(`defaults link asset action visibility to true`, async ()=>{
|
|
61
62
|
const { result } = await renderEditorPermissions({
|
|
62
63
|
entityType: 'Asset'
|
|
63
64
|
});
|
|
64
|
-
expect(result.current.canLinkEntity).toBeTruthy();
|
|
65
|
+
(0, _vitest.expect)(result.current.canLinkEntity).toBeTruthy();
|
|
65
66
|
});
|
|
66
|
-
it(`returns empty contentTypes`, async ()=>{
|
|
67
|
+
(0, _vitest.it)(`returns empty contentTypes`, async ()=>{
|
|
67
68
|
const { result } = await renderEditorPermissions({
|
|
68
69
|
entityType: 'Asset',
|
|
69
70
|
allContentTypes: [
|
|
70
71
|
makeContentType('one')
|
|
71
72
|
]
|
|
72
73
|
});
|
|
73
|
-
expect(result.current.creatableContentTypes).toEqual([]);
|
|
74
|
+
(0, _vitest.expect)(result.current.creatableContentTypes).toEqual([]);
|
|
74
75
|
});
|
|
75
76
|
});
|
|
76
|
-
describe(`behaviour on Entry`, ()=>{
|
|
77
|
+
(0, _vitest.describe)(`behaviour on Entry`, ()=>{
|
|
77
78
|
const allowContentTypes = (sdk, allowedAction, ...allowed)=>{
|
|
78
79
|
sdk.access.canPerformActionOnEntryOfType.mockImplementation(async (action, contentTypeId)=>{
|
|
79
80
|
if (allowedAction === action && allowed.includes(contentTypeId)) {
|
|
@@ -82,7 +83,7 @@ describe('useEditorPermissions', ()=>{
|
|
|
82
83
|
return false;
|
|
83
84
|
});
|
|
84
85
|
};
|
|
85
|
-
it(`wont check access when turned off via instance params`, async ()=>{
|
|
86
|
+
(0, _vitest.it)(`wont check access when turned off via instance params`, async ()=>{
|
|
86
87
|
const { result, sdk } = await renderEditorPermissions({
|
|
87
88
|
entityType: 'Entry',
|
|
88
89
|
params: {
|
|
@@ -90,11 +91,11 @@ describe('useEditorPermissions', ()=>{
|
|
|
90
91
|
showLinkEntityAction: false
|
|
91
92
|
}
|
|
92
93
|
});
|
|
93
|
-
expect(result.current.canCreateEntity).toBe(false);
|
|
94
|
-
expect(result.current.canLinkEntity).toBe(false);
|
|
95
|
-
expect(sdk.access.can).not.toHaveBeenCalledWith();
|
|
94
|
+
(0, _vitest.expect)(result.current.canCreateEntity).toBe(false);
|
|
95
|
+
(0, _vitest.expect)(result.current.canLinkEntity).toBe(false);
|
|
96
|
+
(0, _vitest.expect)(sdk.access.can).not.toHaveBeenCalledWith();
|
|
96
97
|
});
|
|
97
|
-
it(`only allows creation when one content-type can be created`, async ()=>{
|
|
98
|
+
(0, _vitest.it)(`only allows creation when one content-type can be created`, async ()=>{
|
|
98
99
|
const allContentTypes = [
|
|
99
100
|
makeContentType('one'),
|
|
100
101
|
makeContentType('two')
|
|
@@ -107,9 +108,9 @@ describe('useEditorPermissions', ()=>{
|
|
|
107
108
|
},
|
|
108
109
|
waitForUpdate: true
|
|
109
110
|
});
|
|
110
|
-
expect(result.current.canCreateEntity).toBe(true);
|
|
111
|
+
(0, _vitest.expect)(result.current.canCreateEntity).toBe(true);
|
|
111
112
|
});
|
|
112
|
-
it.skip(`denies creation when no content-type can be created`, async ()=>{
|
|
113
|
+
_vitest.it.skip(`denies creation when no content-type can be created`, async ()=>{
|
|
113
114
|
const allContentTypes = [
|
|
114
115
|
makeContentType('one'),
|
|
115
116
|
makeContentType('two')
|
|
@@ -121,9 +122,9 @@ describe('useEditorPermissions', ()=>{
|
|
|
121
122
|
allowContentTypes(sdk, 'create');
|
|
122
123
|
}
|
|
123
124
|
});
|
|
124
|
-
expect(result.current.canCreateEntity).toBe(false);
|
|
125
|
+
(0, _vitest.expect)(result.current.canCreateEntity).toBe(false);
|
|
125
126
|
});
|
|
126
|
-
it(`only allows linking when one content-type can be read`, async ()=>{
|
|
127
|
+
(0, _vitest.it)(`only allows linking when one content-type can be read`, async ()=>{
|
|
127
128
|
const allContentTypes = [
|
|
128
129
|
makeContentType('one'),
|
|
129
130
|
makeContentType('two')
|
|
@@ -136,9 +137,9 @@ describe('useEditorPermissions', ()=>{
|
|
|
136
137
|
},
|
|
137
138
|
waitForUpdate: true
|
|
138
139
|
});
|
|
139
|
-
expect(result.current.canLinkEntity).toBe(true);
|
|
140
|
+
(0, _vitest.expect)(result.current.canLinkEntity).toBe(true);
|
|
140
141
|
});
|
|
141
|
-
it.skip(`denies creation when no content-type can be read`, async ()=>{
|
|
142
|
+
_vitest.it.skip(`denies creation when no content-type can be read`, async ()=>{
|
|
142
143
|
const allContentTypes = [
|
|
143
144
|
makeContentType('one'),
|
|
144
145
|
makeContentType('two')
|
|
@@ -150,9 +151,9 @@ describe('useEditorPermissions', ()=>{
|
|
|
150
151
|
allowContentTypes(sdk, 'read');
|
|
151
152
|
}
|
|
152
153
|
});
|
|
153
|
-
expect(result.current.canLinkEntity).toBe(false);
|
|
154
|
+
(0, _vitest.expect)(result.current.canLinkEntity).toBe(false);
|
|
154
155
|
});
|
|
155
|
-
it(`returns creatableContentTypes from validations that can be created`, async ()=>{
|
|
156
|
+
(0, _vitest.it)(`returns creatableContentTypes from validations that can be created`, async ()=>{
|
|
156
157
|
const allContentTypes = [
|
|
157
158
|
makeContentType('one'),
|
|
158
159
|
makeContentType('two')
|
|
@@ -174,7 +175,7 @@ describe('useEditorPermissions', ()=>{
|
|
|
174
175
|
allowContentTypes(sdk, 'create', 'two');
|
|
175
176
|
}
|
|
176
177
|
});
|
|
177
|
-
expect(result.current.creatableContentTypes).toEqual([
|
|
178
|
+
(0, _vitest.expect)(result.current.creatableContentTypes).toEqual([
|
|
178
179
|
allContentTypes[1]
|
|
179
180
|
]);
|
|
180
181
|
});
|
|
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
5
|
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
6
|
-
require("@testing-library/jest-dom");
|
|
7
6
|
const _react1 = require("@testing-library/react");
|
|
8
7
|
const _noop = /*#__PURE__*/ _interop_require_default(require("lodash/noop"));
|
|
8
|
+
const _vitest = require("vitest");
|
|
9
9
|
const _CreateEntryLinkButton = require("./CreateEntryLinkButton");
|
|
10
10
|
function _interop_require_default(obj) {
|
|
11
11
|
return obj && obj.__esModule ? obj : {
|
|
@@ -75,7 +75,7 @@ const CONTENT_TYPE_3 = {
|
|
|
75
75
|
}
|
|
76
76
|
};
|
|
77
77
|
const findButton = (getByTestId)=>getByTestId('create-entry-link-button');
|
|
78
|
-
describe('CreateEntryLinkButton general', ()=>{
|
|
78
|
+
(0, _vitest.describe)('CreateEntryLinkButton general', ()=>{
|
|
79
79
|
const props = {
|
|
80
80
|
contentTypes: [
|
|
81
81
|
CONTENT_TYPE_1,
|
|
@@ -86,46 +86,46 @@ describe('CreateEntryLinkButton general', ()=>{
|
|
|
86
86
|
return Promise.resolve();
|
|
87
87
|
}
|
|
88
88
|
};
|
|
89
|
-
it('renders with multiple content types as list', ()=>{
|
|
89
|
+
(0, _vitest.it)('renders with multiple content types as list', ()=>{
|
|
90
90
|
const { getByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryLinkButton.CreateEntryLinkButton, props));
|
|
91
|
-
expect(getByTestId('create-entry-button-menu-trigger')).toBeDefined();
|
|
91
|
+
(0, _vitest.expect)(getByTestId('create-entry-button-menu-trigger')).toBeDefined();
|
|
92
92
|
const link = findButton(getByTestId);
|
|
93
|
-
expect(link).toBeDefined();
|
|
94
|
-
expect(link.textContent).toBe('Add entry');
|
|
93
|
+
(0, _vitest.expect)(link).toBeDefined();
|
|
94
|
+
(0, _vitest.expect)(link.textContent).toBe('Add entry');
|
|
95
95
|
});
|
|
96
|
-
it('renders dropdown menu on click when with multiple content types', ()=>{
|
|
96
|
+
(0, _vitest.it)('renders dropdown menu on click when with multiple content types', ()=>{
|
|
97
97
|
const { getByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryLinkButton.CreateEntryLinkButton, props));
|
|
98
98
|
_react1.fireEvent.click(findButton(getByTestId));
|
|
99
99
|
const menu = getByTestId('add-entry-menu');
|
|
100
|
-
expect(menu).toBeDefined();
|
|
100
|
+
(0, _vitest.expect)(menu).toBeDefined();
|
|
101
101
|
const menuItems = menu.querySelectorAll('[data-test-id="contentType"]');
|
|
102
|
-
expect(menuItems).toHaveLength(props.contentTypes.length);
|
|
103
|
-
menuItems.forEach((item, index)=>expect(item.textContent).toBe(props.contentTypes[index].name));
|
|
102
|
+
(0, _vitest.expect)(menuItems).toHaveLength(props.contentTypes.length);
|
|
103
|
+
menuItems.forEach((item, index)=>(0, _vitest.expect)(item.textContent).toBe(props.contentTypes[index].name));
|
|
104
104
|
});
|
|
105
|
-
it('renders suggestedContentType as text when given', ()=>{
|
|
105
|
+
(0, _vitest.it)('renders suggestedContentType as text when given', ()=>{
|
|
106
106
|
const suggestedContentTypeId = 'ID_2';
|
|
107
107
|
const { getByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryLinkButton.CreateEntryLinkButton, {
|
|
108
108
|
...props,
|
|
109
109
|
suggestedContentTypeId: suggestedContentTypeId
|
|
110
110
|
}));
|
|
111
|
-
expect(getByTestId('create-entry-button-menu-trigger')).toBeDefined();
|
|
111
|
+
(0, _vitest.expect)(getByTestId('create-entry-button-menu-trigger')).toBeDefined();
|
|
112
112
|
const button = findButton(getByTestId);
|
|
113
|
-
expect(button).toBeDefined();
|
|
114
|
-
expect(button.textContent).toBe(`Add ${CONTENT_TYPE_2.name}`);
|
|
113
|
+
(0, _vitest.expect)(button).toBeDefined();
|
|
114
|
+
(0, _vitest.expect)(button.textContent).toBe(`Add ${CONTENT_TYPE_2.name}`);
|
|
115
115
|
});
|
|
116
|
-
it('renders the name of the content type as part of the text if only 1 content type is given', ()=>{
|
|
116
|
+
(0, _vitest.it)('renders the name of the content type as part of the text if only 1 content type is given', ()=>{
|
|
117
117
|
const { getByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryLinkButton.CreateEntryLinkButton, {
|
|
118
118
|
onSelect: props.onSelect,
|
|
119
119
|
contentTypes: [
|
|
120
120
|
CONTENT_TYPE_1
|
|
121
121
|
]
|
|
122
122
|
}));
|
|
123
|
-
expect(getByTestId('create-entry-button-menu-trigger')).toBeDefined();
|
|
123
|
+
(0, _vitest.expect)(getByTestId('create-entry-button-menu-trigger')).toBeDefined();
|
|
124
124
|
const button = findButton(getByTestId);
|
|
125
|
-
expect(button).toBeDefined();
|
|
126
|
-
expect(button.textContent).toBe(`Add ${CONTENT_TYPE_1.name}`);
|
|
125
|
+
(0, _vitest.expect)(button).toBeDefined();
|
|
126
|
+
(0, _vitest.expect)(button.textContent).toBe(`Add ${CONTENT_TYPE_1.name}`);
|
|
127
127
|
});
|
|
128
|
-
it('renders custom text, icon', ()=>{
|
|
128
|
+
(0, _vitest.it)('renders custom text, icon', ()=>{
|
|
129
129
|
const propsOverrides = {
|
|
130
130
|
text: 'CUSTOM_TEXT',
|
|
131
131
|
hasPlusIcon: true
|
|
@@ -135,11 +135,11 @@ describe('CreateEntryLinkButton general', ()=>{
|
|
|
135
135
|
...propsOverrides
|
|
136
136
|
}));
|
|
137
137
|
const link = findButton(getByTestId);
|
|
138
|
-
expect(link.textContent).toBe(propsOverrides.text);
|
|
139
|
-
expect(link.querySelectorAll('svg')).toHaveLength(2);
|
|
138
|
+
(0, _vitest.expect)(link.textContent).toBe(propsOverrides.text);
|
|
139
|
+
(0, _vitest.expect)(link.querySelectorAll('svg')).toHaveLength(2);
|
|
140
140
|
});
|
|
141
141
|
});
|
|
142
|
-
describe('CreateEntryLinkButton with multiple entries', ()=>{
|
|
142
|
+
(0, _vitest.describe)('CreateEntryLinkButton with multiple entries', ()=>{
|
|
143
143
|
const props = {
|
|
144
144
|
contentTypes: [
|
|
145
145
|
CONTENT_TYPE_1,
|
|
@@ -150,23 +150,23 @@ describe('CreateEntryLinkButton with multiple entries', ()=>{
|
|
|
150
150
|
return Promise.resolve();
|
|
151
151
|
}
|
|
152
152
|
};
|
|
153
|
-
it('should render dropdown items for each content type', ()=>{
|
|
153
|
+
(0, _vitest.it)('should render dropdown items for each content type', ()=>{
|
|
154
154
|
const { getByTestId, getAllByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryLinkButton.CreateEntryLinkButton, props));
|
|
155
155
|
_react1.fireEvent.click(findButton(getByTestId));
|
|
156
|
-
expect(getAllByTestId('contentType')).toHaveLength(props.contentTypes.length);
|
|
156
|
+
(0, _vitest.expect)(getAllByTestId('contentType')).toHaveLength(props.contentTypes.length);
|
|
157
157
|
});
|
|
158
|
-
it('calls onSelect after click on menu item', ()=>{
|
|
159
|
-
const selectSpy =
|
|
158
|
+
(0, _vitest.it)('calls onSelect after click on menu item', ()=>{
|
|
159
|
+
const selectSpy = _vitest.vi.fn();
|
|
160
160
|
const { getByTestId, getAllByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryLinkButton.CreateEntryLinkButton, {
|
|
161
161
|
...props,
|
|
162
162
|
onSelect: selectSpy
|
|
163
163
|
}));
|
|
164
164
|
_react1.fireEvent.click(findButton(getByTestId));
|
|
165
165
|
_react1.fireEvent.click(getAllByTestId('contentType')[1]);
|
|
166
|
-
expect(selectSpy).toHaveBeenCalledWith(CONTENT_TYPE_2.sys.id);
|
|
166
|
+
(0, _vitest.expect)(selectSpy).toHaveBeenCalledWith(CONTENT_TYPE_2.sys.id);
|
|
167
167
|
});
|
|
168
168
|
});
|
|
169
|
-
describe('CreateEntryLinkButton with a single entry', ()=>{
|
|
169
|
+
(0, _vitest.describe)('CreateEntryLinkButton with a single entry', ()=>{
|
|
170
170
|
const props = {
|
|
171
171
|
contentTypes: [
|
|
172
172
|
CONTENT_TYPE_1
|
|
@@ -175,20 +175,20 @@ describe('CreateEntryLinkButton with a single entry', ()=>{
|
|
|
175
175
|
return Promise.resolve();
|
|
176
176
|
}
|
|
177
177
|
};
|
|
178
|
-
it('should fire the onSelect function when clicked', ()=>{
|
|
179
|
-
const onSelectStub =
|
|
178
|
+
(0, _vitest.it)('should fire the onSelect function when clicked', ()=>{
|
|
179
|
+
const onSelectStub = _vitest.vi.fn();
|
|
180
180
|
const { getByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryLinkButton.CreateEntryLinkButton, {
|
|
181
181
|
...props,
|
|
182
182
|
onSelect: onSelectStub
|
|
183
183
|
}));
|
|
184
184
|
_react1.fireEvent.click(findButton(getByTestId));
|
|
185
|
-
expect(onSelectStub).toHaveBeenCalledWith(props.contentTypes[0].sys.id);
|
|
186
|
-
expect(()=>getByTestId('cf-ui-spinner')).toThrow('Unable to find an element by: [data-test-id="cf-ui-spinner"]');
|
|
185
|
+
(0, _vitest.expect)(onSelectStub).toHaveBeenCalledWith(props.contentTypes[0].sys.id);
|
|
186
|
+
(0, _vitest.expect)(()=>getByTestId('cf-ui-spinner')).toThrow('Unable to find an element by: [data-test-id="cf-ui-spinner"]');
|
|
187
187
|
});
|
|
188
188
|
});
|
|
189
|
-
describe('CreateEntryLinkButton common', ()=>{
|
|
190
|
-
it('should render a spinner if onSelect returns a promise', async ()=>{
|
|
191
|
-
const onSelect =
|
|
189
|
+
(0, _vitest.describe)('CreateEntryLinkButton common', ()=>{
|
|
190
|
+
(0, _vitest.it)('should render a spinner if onSelect returns a promise', async ()=>{
|
|
191
|
+
const onSelect = _vitest.vi.fn(()=>new Promise((resolve)=>setTimeout(resolve, 1000)));
|
|
192
192
|
const { getByTestId, container } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryLinkButton.CreateEntryLinkButton, {
|
|
193
193
|
contentTypes: [
|
|
194
194
|
CONTENT_TYPE_1
|
|
@@ -196,15 +196,15 @@ describe('CreateEntryLinkButton common', ()=>{
|
|
|
196
196
|
onSelect: onSelect
|
|
197
197
|
}));
|
|
198
198
|
_react1.fireEvent.click(findButton(getByTestId));
|
|
199
|
-
expect(onSelect).toHaveBeenCalled();
|
|
199
|
+
(0, _vitest.expect)(onSelect).toHaveBeenCalled();
|
|
200
200
|
const spinner = await (0, _react1.waitFor)(()=>getByTestId('cf-ui-spinner'), {
|
|
201
201
|
container
|
|
202
202
|
});
|
|
203
|
-
expect(spinner).toBeDefined();
|
|
204
|
-
expect(spinner.textContent).toMatch(/Loading/g);
|
|
203
|
+
(0, _vitest.expect)(spinner).toBeDefined();
|
|
204
|
+
(0, _vitest.expect)(spinner.textContent).toMatch(/Loading/g);
|
|
205
205
|
});
|
|
206
|
-
it('should hide a spinner after the promise from onSelect resolves', async ()=>{
|
|
207
|
-
const onSelect =
|
|
206
|
+
(0, _vitest.it)('should hide a spinner after the promise from onSelect resolves', async ()=>{
|
|
207
|
+
const onSelect = _vitest.vi.fn(()=>new Promise((resolve)=>setTimeout(resolve, 500)));
|
|
208
208
|
const { getByTestId, container } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryLinkButton.CreateEntryLinkButton, {
|
|
209
209
|
contentTypes: [
|
|
210
210
|
CONTENT_TYPE_1
|
|
@@ -216,12 +216,12 @@ describe('CreateEntryLinkButton common', ()=>{
|
|
|
216
216
|
const spinner = await (0, _react1.waitFor)(getSpinner, {
|
|
217
217
|
container
|
|
218
218
|
});
|
|
219
|
-
expect(spinner).toBeDefined();
|
|
219
|
+
(0, _vitest.expect)(spinner).toBeDefined();
|
|
220
220
|
await (0, _react1.waitForElementToBeRemoved)(()=>document.querySelector('[data-test-id="cf-ui-spinner"]'));
|
|
221
|
-
expect(getSpinner).toThrow('Unable to find an element by: [data-test-id="cf-ui-spinner"]');
|
|
221
|
+
(0, _vitest.expect)(getSpinner).toThrow('Unable to find an element by: [data-test-id="cf-ui-spinner"]');
|
|
222
222
|
});
|
|
223
|
-
it('does not emit onSelect on subsequent click before the promise from onSelect resolves', async ()=>{
|
|
224
|
-
const onSelect =
|
|
223
|
+
(0, _vitest.it)('does not emit onSelect on subsequent click before the promise from onSelect resolves', async ()=>{
|
|
224
|
+
const onSelect = _vitest.vi.fn(()=>new Promise((resolve)=>setTimeout(()=>resolve(undefined), 200)));
|
|
225
225
|
const { getByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryLinkButton.CreateEntryLinkButton, {
|
|
226
226
|
contentTypes: [
|
|
227
227
|
CONTENT_TYPE_1
|
|
@@ -234,10 +234,10 @@ describe('CreateEntryLinkButton common', ()=>{
|
|
|
234
234
|
await (0, _react1.waitFor)(_noop.default, {
|
|
235
235
|
timeout: 1000
|
|
236
236
|
});
|
|
237
|
-
expect(onSelect).toHaveBeenCalledTimes(1);
|
|
237
|
+
(0, _vitest.expect)(onSelect).toHaveBeenCalledTimes(1);
|
|
238
238
|
});
|
|
239
|
-
it('emits onSelect on subsequent click after the promise from onSelect resolves', async ()=>{
|
|
240
|
-
const onSelect =
|
|
239
|
+
(0, _vitest.it)('emits onSelect on subsequent click after the promise from onSelect resolves', async ()=>{
|
|
240
|
+
const onSelect = _vitest.vi.fn(()=>Promise.resolve());
|
|
241
241
|
const { getByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryLinkButton.CreateEntryLinkButton, {
|
|
242
242
|
contentTypes: [
|
|
243
243
|
CONTENT_TYPE_1
|
|
@@ -251,6 +251,6 @@ describe('CreateEntryLinkButton common', ()=>{
|
|
|
251
251
|
});
|
|
252
252
|
_react1.fireEvent.click(findButton(getByTestId));
|
|
253
253
|
});
|
|
254
|
-
expect(onSelect).toHaveBeenCalledTimes(2);
|
|
254
|
+
(0, _vitest.expect)(onSelect).toHaveBeenCalledTimes(2);
|
|
255
255
|
});
|
|
256
256
|
});
|
|
@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
});
|
|
5
5
|
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
6
6
|
const _f36components = require("@contentful/f36-components");
|
|
7
|
-
require("@testing-library/jest-dom/extend-expect");
|
|
8
7
|
const _react1 = require("@testing-library/react");
|
|
9
8
|
const _noop = /*#__PURE__*/ _interop_require_default(require("lodash/noop"));
|
|
9
|
+
const _vitest = require("vitest");
|
|
10
10
|
const _fill = /*#__PURE__*/ _interop_require_default(require("lodash/fill"));
|
|
11
11
|
const _CreateEntryMenuTrigger = require("./CreateEntryMenuTrigger");
|
|
12
12
|
function _interop_require_default(obj) {
|
|
@@ -95,7 +95,7 @@ const EXPERIENCE_TYPE = {
|
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
};
|
|
98
|
-
describe('CreateEntryMenuTrigger general', ()=>{
|
|
98
|
+
(0, _vitest.describe)('CreateEntryMenuTrigger general', ()=>{
|
|
99
99
|
const props = {
|
|
100
100
|
contentTypes: [
|
|
101
101
|
CONTENT_TYPE_1,
|
|
@@ -106,22 +106,22 @@ describe('CreateEntryMenuTrigger general', ()=>{
|
|
|
106
106
|
return Promise.resolve();
|
|
107
107
|
}
|
|
108
108
|
};
|
|
109
|
-
let stub =
|
|
110
|
-
beforeEach(()=>{
|
|
111
|
-
stub =
|
|
109
|
+
let stub = _vitest.vi.fn();
|
|
110
|
+
(0, _vitest.beforeEach)(()=>{
|
|
111
|
+
stub = _vitest.vi.fn().mockImplementation(()=>/*#__PURE__*/ _react.createElement(_f36components.Button, {
|
|
112
112
|
testId: "menu-trigger"
|
|
113
113
|
}));
|
|
114
114
|
});
|
|
115
|
-
it('shares the state and functions for the menu', ()=>{
|
|
115
|
+
(0, _vitest.it)('shares the state and functions for the menu', ()=>{
|
|
116
116
|
const stub = (api)=>{
|
|
117
|
-
expect(api.isOpen).toBe(false);
|
|
118
|
-
expect(api.isSelecting).toBe(false);
|
|
117
|
+
(0, _vitest.expect)(api.isOpen).toBe(false);
|
|
118
|
+
(0, _vitest.expect)(api.isSelecting).toBe(false);
|
|
119
119
|
return /*#__PURE__*/ _react.createElement("span", null);
|
|
120
120
|
};
|
|
121
121
|
(0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryMenuTrigger.CreateEntryMenuTrigger, props, stub));
|
|
122
122
|
});
|
|
123
|
-
it('should set isSelecting to true in case onSelect returns a promise', async ()=>{
|
|
124
|
-
const selectStub =
|
|
123
|
+
(0, _vitest.it)('should set isSelecting to true in case onSelect returns a promise', async ()=>{
|
|
124
|
+
const selectStub = _vitest.vi.fn(()=>new Promise((resolve)=>setTimeout(resolve, 1000)));
|
|
125
125
|
const { getAllByTestId, getByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryMenuTrigger.CreateEntryMenuTrigger, {
|
|
126
126
|
...props,
|
|
127
127
|
onSelect: selectStub
|
|
@@ -132,10 +132,10 @@ describe('CreateEntryMenuTrigger general', ()=>{
|
|
|
132
132
|
(0, _react1.act)(()=>{
|
|
133
133
|
_react1.fireEvent.click(getAllByTestId('contentType')[0]);
|
|
134
134
|
});
|
|
135
|
-
expect(selectStub).toHaveBeenCalled();
|
|
135
|
+
(0, _vitest.expect)(selectStub).toHaveBeenCalled();
|
|
136
136
|
});
|
|
137
|
-
it('should not set isSelecting to true in case onSelect is sync', async ()=>{
|
|
138
|
-
const selectStub =
|
|
137
|
+
(0, _vitest.it)('should not set isSelecting to true in case onSelect is sync', async ()=>{
|
|
138
|
+
const selectStub = _vitest.vi.fn();
|
|
139
139
|
const { getAllByTestId, getByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryMenuTrigger.CreateEntryMenuTrigger, {
|
|
140
140
|
...props,
|
|
141
141
|
onSelect: selectStub
|
|
@@ -146,13 +146,13 @@ describe('CreateEntryMenuTrigger general', ()=>{
|
|
|
146
146
|
(0, _react1.act)(()=>{
|
|
147
147
|
_react1.fireEvent.click(getAllByTestId('contentType')[0]);
|
|
148
148
|
});
|
|
149
|
-
expect(stub).toHaveBeenLastCalledWith({
|
|
149
|
+
(0, _vitest.expect)(stub).toHaveBeenLastCalledWith({
|
|
150
150
|
isOpen: false,
|
|
151
151
|
isSelecting: false
|
|
152
152
|
});
|
|
153
|
-
expect(selectStub).toHaveBeenCalled();
|
|
153
|
+
(0, _vitest.expect)(selectStub).toHaveBeenCalled();
|
|
154
154
|
});
|
|
155
|
-
it('renders text input if contentTypes.length > 20', ()=>{
|
|
155
|
+
(0, _vitest.it)('renders text input if contentTypes.length > 20', ()=>{
|
|
156
156
|
const { getByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryMenuTrigger.CreateEntryMenuTrigger, {
|
|
157
157
|
...props,
|
|
158
158
|
contentTypes: (0, _fill.default)(Array(21), CONTENT_TYPE_3)
|
|
@@ -160,9 +160,9 @@ describe('CreateEntryMenuTrigger general', ()=>{
|
|
|
160
160
|
(0, _react1.act)(()=>{
|
|
161
161
|
_react1.fireEvent.click(getByTestId('menu-trigger'));
|
|
162
162
|
});
|
|
163
|
-
expect(getByTestId('add-entry-menu-search')).toBeDefined();
|
|
163
|
+
(0, _vitest.expect)(getByTestId('add-entry-menu-search')).toBeDefined();
|
|
164
164
|
});
|
|
165
|
-
it('shows the search results if typed in input', ()=>{
|
|
165
|
+
(0, _vitest.it)('shows the search results if typed in input', ()=>{
|
|
166
166
|
const contentTypes = (0, _fill.default)((0, _fill.default)((0, _fill.default)(Array(21), CONTENT_TYPE_1, 0, 10), CONTENT_TYPE_2, 10, 20), CONTENT_TYPE_3, 20);
|
|
167
167
|
const { getByTestId, getAllByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryMenuTrigger.CreateEntryMenuTrigger, {
|
|
168
168
|
...props,
|
|
@@ -178,25 +178,25 @@ describe('CreateEntryMenuTrigger general', ()=>{
|
|
|
178
178
|
},
|
|
179
179
|
preventDefault: _noop.default
|
|
180
180
|
});
|
|
181
|
-
expect(getAllByTestId('contentType')).toHaveLength(10);
|
|
182
|
-
expect(getByTestId('add-entry-menu-search-results').textContent).toBe('10 results');
|
|
181
|
+
(0, _vitest.expect)(getAllByTestId('contentType')).toHaveLength(10);
|
|
182
|
+
(0, _vitest.expect)(getByTestId('add-entry-menu-search-results').textContent).toBe('10 results');
|
|
183
183
|
_react1.fireEvent.change(input, {
|
|
184
184
|
target: {
|
|
185
185
|
value: '3'
|
|
186
186
|
},
|
|
187
187
|
preventDefault: _noop.default
|
|
188
188
|
});
|
|
189
|
-
expect(getAllByTestId('contentType')).toHaveLength(1);
|
|
190
|
-
expect(getByTestId('add-entry-menu-search-results').textContent).toBe('1 result');
|
|
189
|
+
(0, _vitest.expect)(getAllByTestId('contentType')).toHaveLength(1);
|
|
190
|
+
(0, _vitest.expect)(getByTestId('add-entry-menu-search-results').textContent).toBe('1 result');
|
|
191
191
|
_react1.fireEvent.change(input, {
|
|
192
192
|
target: {
|
|
193
193
|
value: '4'
|
|
194
194
|
},
|
|
195
195
|
preventDefault: _noop.default
|
|
196
196
|
});
|
|
197
|
-
expect(getByTestId('add-entry-menu-search-results').textContent).toBe('No results found');
|
|
197
|
+
(0, _vitest.expect)(getByTestId('add-entry-menu-search-results').textContent).toBe('No results found');
|
|
198
198
|
});
|
|
199
|
-
it('shows suggestedContentType in the list', ()=>{
|
|
199
|
+
(0, _vitest.it)('shows suggestedContentType in the list', ()=>{
|
|
200
200
|
const { getByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryMenuTrigger.CreateEntryMenuTrigger, {
|
|
201
201
|
...props,
|
|
202
202
|
suggestedContentTypeId: props.contentTypes[0].sys.id
|
|
@@ -205,10 +205,10 @@ describe('CreateEntryMenuTrigger general', ()=>{
|
|
|
205
205
|
_react1.fireEvent.click(getByTestId('menu-trigger'));
|
|
206
206
|
});
|
|
207
207
|
const suggestedContentType = getByTestId('suggested');
|
|
208
|
-
expect(suggestedContentType).toBeDefined();
|
|
209
|
-
expect(suggestedContentType.textContent).toBe(props.contentTypes[0].name);
|
|
208
|
+
(0, _vitest.expect)(suggestedContentType).toBeDefined();
|
|
209
|
+
(0, _vitest.expect)(suggestedContentType.textContent).toBe(props.contentTypes[0].name);
|
|
210
210
|
});
|
|
211
|
-
it('filters out content types with Contentful:ExperienceType annotation', ()=>{
|
|
211
|
+
(0, _vitest.it)('filters out content types with Contentful:ExperienceType annotation', ()=>{
|
|
212
212
|
const contentTypesWithExperience = [
|
|
213
213
|
CONTENT_TYPE_1,
|
|
214
214
|
CONTENT_TYPE_2,
|
|
@@ -223,11 +223,11 @@ describe('CreateEntryMenuTrigger general', ()=>{
|
|
|
223
223
|
_react1.fireEvent.click(getByTestId('menu-trigger'));
|
|
224
224
|
});
|
|
225
225
|
const contentTypeItems = getAllByTestId('contentType');
|
|
226
|
-
expect(contentTypeItems).toHaveLength(3);
|
|
227
|
-
expect(contentTypeItems[0].textContent).toBe('name-1');
|
|
228
|
-
expect(contentTypeItems[1].textContent).toBe('name-2');
|
|
229
|
-
expect(contentTypeItems[2].textContent).toBe('name-3');
|
|
226
|
+
(0, _vitest.expect)(contentTypeItems).toHaveLength(3);
|
|
227
|
+
(0, _vitest.expect)(contentTypeItems[0].textContent).toBe('name-1');
|
|
228
|
+
(0, _vitest.expect)(contentTypeItems[1].textContent).toBe('name-2');
|
|
229
|
+
(0, _vitest.expect)(contentTypeItems[2].textContent).toBe('name-3');
|
|
230
230
|
const experienceTypeItem = contentTypeItems.find((item)=>item.textContent === 'experience-type');
|
|
231
|
-
expect(experienceTypeItem).toBeUndefined();
|
|
231
|
+
(0, _vitest.expect)(experienceTypeItem).toBeUndefined();
|
|
232
232
|
});
|
|
233
233
|
});
|
|
@@ -2,70 +2,71 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
+
const _vitest = require("vitest");
|
|
5
6
|
const _formatDateAndTime = require("./formatDateAndTime");
|
|
6
7
|
const TODAY = new Date('2024-06-15T12:00:00.000Z');
|
|
7
|
-
beforeEach(()=>{
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
(0, _vitest.beforeEach)(()=>{
|
|
9
|
+
_vitest.vi.useFakeTimers();
|
|
10
|
+
_vitest.vi.setSystemTime(TODAY);
|
|
10
11
|
});
|
|
11
|
-
afterEach(()=>{
|
|
12
|
-
|
|
12
|
+
(0, _vitest.afterEach)(()=>{
|
|
13
|
+
_vitest.vi.useRealTimers();
|
|
13
14
|
});
|
|
14
|
-
describe('formatDate', ()=>{
|
|
15
|
-
it('returns "Today" (short) for a date on the same calendar day', ()=>{
|
|
16
|
-
expect((0, _formatDateAndTime.formatDate)('2024-06-15T08:00:00.000Z', true)).toBe('Today');
|
|
15
|
+
(0, _vitest.describe)('formatDate', ()=>{
|
|
16
|
+
(0, _vitest.it)('returns "Today" (short) for a date on the same calendar day', ()=>{
|
|
17
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatDate)('2024-06-15T08:00:00.000Z', true)).toBe('Today');
|
|
17
18
|
});
|
|
18
|
-
it('returns long form for today', ()=>{
|
|
19
|
-
expect((0, _formatDateAndTime.formatDate)('2024-06-15T08:00:00.000Z')).toBe('Today, 15 Jun 2024');
|
|
19
|
+
(0, _vitest.it)('returns long form for today', ()=>{
|
|
20
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatDate)('2024-06-15T08:00:00.000Z')).toBe('Today, 15 Jun 2024');
|
|
20
21
|
});
|
|
21
|
-
it('returns "Tomorrow" (short) for the next calendar day', ()=>{
|
|
22
|
-
expect((0, _formatDateAndTime.formatDate)('2024-06-16T08:00:00.000Z', true)).toBe('Tomorrow');
|
|
22
|
+
(0, _vitest.it)('returns "Tomorrow" (short) for the next calendar day', ()=>{
|
|
23
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatDate)('2024-06-16T08:00:00.000Z', true)).toBe('Tomorrow');
|
|
23
24
|
});
|
|
24
|
-
it('returns long form for tomorrow', ()=>{
|
|
25
|
-
expect((0, _formatDateAndTime.formatDate)('2024-06-16T08:00:00.000Z')).toBe('Tomorrow, 16 Jun 2024');
|
|
25
|
+
(0, _vitest.it)('returns long form for tomorrow', ()=>{
|
|
26
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatDate)('2024-06-16T08:00:00.000Z')).toBe('Tomorrow, 16 Jun 2024');
|
|
26
27
|
});
|
|
27
|
-
it('returns "Yesterday" (short) for the previous calendar day', ()=>{
|
|
28
|
-
expect((0, _formatDateAndTime.formatDate)('2024-06-14T08:00:00.000Z', true)).toBe('Yesterday');
|
|
28
|
+
(0, _vitest.it)('returns "Yesterday" (short) for the previous calendar day', ()=>{
|
|
29
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatDate)('2024-06-14T08:00:00.000Z', true)).toBe('Yesterday');
|
|
29
30
|
});
|
|
30
|
-
it('returns long form for yesterday', ()=>{
|
|
31
|
-
expect((0, _formatDateAndTime.formatDate)('2024-06-14T08:00:00.000Z')).toBe('Yesterday, 14 Jun 2024');
|
|
31
|
+
(0, _vitest.it)('returns long form for yesterday', ()=>{
|
|
32
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatDate)('2024-06-14T08:00:00.000Z')).toBe('Yesterday, 14 Jun 2024');
|
|
32
33
|
});
|
|
33
|
-
it('returns weekday + date for a past date beyond yesterday', ()=>{
|
|
34
|
-
expect((0, _formatDateAndTime.formatDate)('2024-06-01T08:00:00.000Z')).toBe('Sat, 01 Jun 2024');
|
|
34
|
+
(0, _vitest.it)('returns weekday + date for a past date beyond yesterday', ()=>{
|
|
35
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatDate)('2024-06-01T08:00:00.000Z')).toBe('Sat, 01 Jun 2024');
|
|
35
36
|
});
|
|
36
|
-
it('returns weekday + date for a future date beyond tomorrow', ()=>{
|
|
37
|
-
expect((0, _formatDateAndTime.formatDate)('2024-06-20T08:00:00.000Z')).toBe('Thu, 20 Jun 2024');
|
|
37
|
+
(0, _vitest.it)('returns weekday + date for a future date beyond tomorrow', ()=>{
|
|
38
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatDate)('2024-06-20T08:00:00.000Z')).toBe('Thu, 20 Jun 2024');
|
|
38
39
|
});
|
|
39
|
-
it('accepts a Date object', ()=>{
|
|
40
|
-
expect((0, _formatDateAndTime.formatDate)(new Date('2024-06-15T09:30:00.000Z'), true)).toBe('Today');
|
|
40
|
+
(0, _vitest.it)('accepts a Date object', ()=>{
|
|
41
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatDate)(new Date('2024-06-15T09:30:00.000Z'), true)).toBe('Today');
|
|
41
42
|
});
|
|
42
43
|
});
|
|
43
|
-
describe('formatTime', ()=>{
|
|
44
|
-
it('formats a UTC ISO string to local h:mm AM/PM', ()=>{
|
|
45
|
-
expect((0, _formatDateAndTime.formatTime)('2024-06-15T15:36:45.000Z')).toBe('3:36 PM');
|
|
44
|
+
(0, _vitest.describe)('formatTime', ()=>{
|
|
45
|
+
(0, _vitest.it)('formats a UTC ISO string to local h:mm AM/PM', ()=>{
|
|
46
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatTime)('2024-06-15T15:36:45.000Z')).toBe('3:36 PM');
|
|
46
47
|
});
|
|
47
|
-
it('formats midnight UTC correctly', ()=>{
|
|
48
|
-
expect((0, _formatDateAndTime.formatTime)('2024-06-15T00:00:00.000Z')).toBe('12:00 AM');
|
|
48
|
+
(0, _vitest.it)('formats midnight UTC correctly', ()=>{
|
|
49
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatTime)('2024-06-15T00:00:00.000Z')).toBe('12:00 AM');
|
|
49
50
|
});
|
|
50
|
-
it('formats noon UTC correctly', ()=>{
|
|
51
|
-
expect((0, _formatDateAndTime.formatTime)('2024-06-15T12:00:00.000Z')).toBe('12:00 PM');
|
|
51
|
+
(0, _vitest.it)('formats noon UTC correctly', ()=>{
|
|
52
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatTime)('2024-06-15T12:00:00.000Z')).toBe('12:00 PM');
|
|
52
53
|
});
|
|
53
|
-
it('timezone shift: two UTC times 1 hour apart produce different outputs', ()=>{
|
|
54
|
-
expect((0, _formatDateAndTime.formatTime)('2024-06-15T10:00:00.000Z')).toBe('10:00 AM');
|
|
55
|
-
expect((0, _formatDateAndTime.formatTime)('2024-06-15T11:00:00.000Z')).toBe('11:00 AM');
|
|
54
|
+
(0, _vitest.it)('timezone shift: two UTC times 1 hour apart produce different outputs', ()=>{
|
|
55
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatTime)('2024-06-15T10:00:00.000Z')).toBe('10:00 AM');
|
|
56
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatTime)('2024-06-15T11:00:00.000Z')).toBe('11:00 AM');
|
|
56
57
|
});
|
|
57
|
-
it('accepts a Date object', ()=>{
|
|
58
|
-
expect((0, _formatDateAndTime.formatTime)(new Date('2024-06-15T15:36:45.000Z'))).toBe('3:36 PM');
|
|
58
|
+
(0, _vitest.it)('accepts a Date object', ()=>{
|
|
59
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatTime)(new Date('2024-06-15T15:36:45.000Z'))).toBe('3:36 PM');
|
|
59
60
|
});
|
|
60
61
|
});
|
|
61
|
-
describe('formatDateAndTime', ()=>{
|
|
62
|
-
it('combines date and time with " at " separator', ()=>{
|
|
63
|
-
expect((0, _formatDateAndTime.formatDateAndTime)('2024-06-15T15:36:45.000Z')).toBe('Today, 15 Jun 2024 at 3:36 PM');
|
|
62
|
+
(0, _vitest.describe)('formatDateAndTime', ()=>{
|
|
63
|
+
(0, _vitest.it)('combines date and time with " at " separator', ()=>{
|
|
64
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatDateAndTime)('2024-06-15T15:36:45.000Z')).toBe('Today, 15 Jun 2024 at 3:36 PM');
|
|
64
65
|
});
|
|
65
|
-
it('passes short flag through to date portion', ()=>{
|
|
66
|
-
expect((0, _formatDateAndTime.formatDateAndTime)('2024-06-15T15:36:45.000Z', true)).toBe('Today at 3:36 PM');
|
|
66
|
+
(0, _vitest.it)('passes short flag through to date portion', ()=>{
|
|
67
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatDateAndTime)('2024-06-15T15:36:45.000Z', true)).toBe('Today at 3:36 PM');
|
|
67
68
|
});
|
|
68
|
-
it('works for a past date', ()=>{
|
|
69
|
-
expect((0, _formatDateAndTime.formatDateAndTime)('2024-06-01T08:00:00.000Z')).toBe('Sat, 01 Jun 2024 at 8:00 AM');
|
|
69
|
+
(0, _vitest.it)('works for a past date', ()=>{
|
|
70
|
+
(0, _vitest.expect)((0, _formatDateAndTime.formatDateAndTime)('2024-06-01T08:00:00.000Z')).toBe('Sat, 01 Jun 2024 at 8:00 AM');
|
|
70
71
|
});
|
|
71
72
|
});
|