@exdst-sitecore-content-sdk/astro 0.0.24 → 0.0.25
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/package.json +7 -12
- package/src/context.ts +1 -1
- package/src/client/sitecore-astro-client.test.ts +0 -267
- package/src/components/AstroImage.astro.test.ts +0 -541
- package/src/components/Date.astro.test.ts +0 -197
- package/src/components/EditingScripts.astro.test.ts +0 -267
- package/src/components/ErrorBoundary.astro.test.ts +0 -252
- package/src/components/ErrorComponent.astro.test.ts +0 -31
- package/src/components/FieldMetadata.astro.test.ts +0 -40
- package/src/components/File.astro.test.ts +0 -68
- package/src/components/HiddenRendering.astro.test.ts +0 -36
- package/src/components/Image.astro.test.ts +0 -438
- package/src/components/Link.astro.test.ts +0 -261
- package/src/components/MissingComponent.astro.test.ts +0 -21
- package/src/components/Placeholder/Placeholder.astro.test.ts +0 -1088
- package/src/components/Placeholder/PlaceholderMetadata.astro.test.ts +0 -228
- package/src/components/Placeholder/PlaceholderUtils.astro.test.ts +0 -149
- package/src/components/Placeholder/placeholder-utils.test.ts +0 -309
- package/src/components/RichText.astro.test.ts +0 -205
- package/src/components/Text.astro.test.ts +0 -273
- package/src/config/define-config.test.ts +0 -526
- package/src/config-cli/define-cli-config.test.ts +0 -67
- package/src/editing/editing-config-middleware.test.ts +0 -164
- package/src/editing/editing-render-middleware.test.ts +0 -1143
- package/src/editing/render-middleware.test.ts +0 -57
- package/src/editing/utils.test.ts +0 -1212
- package/src/enhancers/WithEmptyFieldEditingComponent.astro.test.ts +0 -380
- package/src/enhancers/WithFieldMetadata.astro.test.ts +0 -113
- package/src/middleware/middleware.test.ts +0 -520
- package/src/middleware/multisite-middleware.test.ts +0 -736
- package/src/middleware/robots-middleware.test.ts +0 -129
- package/src/middleware/sitemap-middleware.test.ts +0 -184
- package/src/tests/astro-helpers.ts +0 -61
- package/src/tests/helpers.ts +0 -46
- package/src/tests/personalizeData.ts +0 -63
- package/src/tests/test-components/CustomErrorComponent.astro +0 -3
- package/src/tests/test-components/CustomHiddenRendering.astro +0 -10
- package/src/tests/test-components/CustomMissingComponent.astro +0 -9
- package/src/tests/test-components/DownloadCallout.astro +0 -12
- package/src/tests/test-components/EmptyFieldEditingComponent.astro +0 -5
- package/src/tests/test-components/ErrorBoundaryWithError.astro +0 -10
- package/src/tests/test-components/Home.astro +0 -12
- package/src/tests/test-components/SxaRichText.astro +0 -23
- package/src/tests/test-components/SxaRichTextDefault.astro +0 -7
- package/src/tests/test-components/SxaRichTextWithTitle.astro +0 -8
- package/src/tests/test-components/TestComponent.astro +0 -9
- package/src/tests/test-components/TestComponentWithError.astro +0 -4
- package/src/tests/test-components/TestComponentWithField.astro +0 -17
- package/src/tests/test-components/TestHeader.astro +0 -8
- package/src/tests/test-components/TestLogo.astro +0 -5
- package/src/tests/test-components/TestParentWrapperComponent.astro +0 -5
- package/src/tests/test-components/TestWrapperComponent.astro +0 -5
- package/src/tests/test-components/generate-map/Button.astro +0 -4
- package/src/tests/test-components/generate-map/Link.astro +0 -4
- package/src/tests/test-components/map-components/Bar.astro +0 -0
- package/src/tests/test-components/map-components/Baz.astro +0 -0
- package/src/tests/test-components/map-components/Foo.astro +0 -0
- package/src/tests/test-components/map-components/Hero.variant.astro +0 -0
- package/src/tests/test-components/map-components/NotComponent.bsx +0 -0
- package/src/tests/test-components/map-components/Qux.astro +0 -0
- package/src/tests/test-components/map-components/folded/Folded.astro +0 -0
- package/src/tests/test-components/map-components/folded/random-file-2.docx +0 -0
- package/src/tests/test-components/map-components/random-file.txt +0 -0
- package/src/tests/test-data/metadata-data.ts +0 -86
- package/src/tests/test-data/normal-mode-data.ts +0 -466
- package/src/tests/vitest.setup.ts +0 -4
- package/src/tools/generate-map.test.ts +0 -201
- package/src/tools/templating/components.test.ts +0 -318
- package/src/tools/templating/default-component.test.ts +0 -31
- package/src/utils/utils.test.ts +0 -111
|
@@ -1,438 +0,0 @@
|
|
|
1
|
-
import { describe, test, expect } from 'vitest';
|
|
2
|
-
import { renderAstroComponent } from '../tests/astro-helpers';
|
|
3
|
-
import Image, { ImageField } from './Image.astro';
|
|
4
|
-
import DefaultEmptyFieldEditingComponentImage from './DefaultEmptyFieldEditingComponentImage.astro';
|
|
5
|
-
import EmptyFieldEditingComponent from '../tests/test-components/EmptyFieldEditingComponent.astro';
|
|
6
|
-
|
|
7
|
-
describe('<Image />', () => {
|
|
8
|
-
describe('with direct image object, no value', async () => {
|
|
9
|
-
const props = {
|
|
10
|
-
field: {
|
|
11
|
-
src: '/assets/img/test0.png',
|
|
12
|
-
width: '8',
|
|
13
|
-
height: '10',
|
|
14
|
-
},
|
|
15
|
-
id: 'some-id',
|
|
16
|
-
style: {
|
|
17
|
-
width: '100%',
|
|
18
|
-
},
|
|
19
|
-
className: 'the-dude-abides',
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const rendered = (
|
|
23
|
-
await renderAstroComponent(Image, {
|
|
24
|
-
props: { ...props },
|
|
25
|
-
})
|
|
26
|
-
).querySelectorAll('img');
|
|
27
|
-
|
|
28
|
-
test('should render <img /> with url', async () => {
|
|
29
|
-
expect(rendered).to.have.length(1);
|
|
30
|
-
expect(rendered[0]?.getAttribute('src')).to.equal(props.field.src);
|
|
31
|
-
expect(rendered[0]?.getAttribute('width')).to.equal(props.field.width);
|
|
32
|
-
expect(rendered[0]?.getAttribute('height')).to.equal(props.field.height);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
test('should render <img /> with non-media props', async () => {
|
|
36
|
-
expect(rendered[0]?.getAttribute('id')).to.equal(props.id);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
test('should render <img /> with style and className props', async () => {
|
|
40
|
-
expect(rendered[0]?.getAttribute('style')).to.eql('width:100%');
|
|
41
|
-
expect(rendered[0]?.getAttribute('class')).to.eql(props.className);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
describe('with responsive image object', async () => {
|
|
46
|
-
const props = {
|
|
47
|
-
field: {
|
|
48
|
-
src: '/assets/img/test0.png',
|
|
49
|
-
},
|
|
50
|
-
srcSet: [{ mw: 100 }, { mw: 300 }],
|
|
51
|
-
sizes: '(min-width: 960px) 300px, 100px',
|
|
52
|
-
id: 'some-id',
|
|
53
|
-
className: 'the-dude-abides',
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
const rendered = (
|
|
57
|
-
await renderAstroComponent(Image, {
|
|
58
|
-
props: { ...props },
|
|
59
|
-
})
|
|
60
|
-
).querySelectorAll('img');
|
|
61
|
-
|
|
62
|
-
test('should render <img /> with needed img tags', async () => {
|
|
63
|
-
expect(rendered).to.have.length(1);
|
|
64
|
-
expect(rendered[0]?.getAttribute('src')).to.equal(props.field.src);
|
|
65
|
-
expect(rendered[0]?.getAttribute('srcSet')).to.equal(
|
|
66
|
-
'/assets/img/test0.png?mw=100 100w, /assets/img/test0.png?mw=300 300w'
|
|
67
|
-
);
|
|
68
|
-
expect(rendered[0]?.getAttribute('sizes')).to.equal('(min-width: 960px) 300px, 100px');
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
test('should render <img /> with non-media props', async () => {
|
|
72
|
-
expect(rendered[0]?.getAttribute('id')).to.equal(props.id);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
test('should render <img /> with style and className props', async () => {
|
|
76
|
-
expect(rendered[0]?.getAttribute('class')).to.eql(props.className);
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
describe('with "value" property value', async () => {
|
|
81
|
-
const props = {
|
|
82
|
-
field: { value: { src: '/assets/img/test0.png', alt: 'my image' } },
|
|
83
|
-
id: 'some-id',
|
|
84
|
-
style: { width: '100%' },
|
|
85
|
-
className: 'the-dude-abides',
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
const rendered = (
|
|
89
|
-
await renderAstroComponent(Image, {
|
|
90
|
-
props: { ...props },
|
|
91
|
-
})
|
|
92
|
-
).querySelectorAll('img');
|
|
93
|
-
|
|
94
|
-
test('should render <img /> component with "value" properties', async () => {
|
|
95
|
-
expect(rendered).to.have.length(1);
|
|
96
|
-
expect(rendered[0]?.getAttribute('src')).to.eql(props.field.value.src);
|
|
97
|
-
expect(rendered[0]?.getAttribute('alt')).to.eql(props.field.value.alt);
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
test('should render <img /> with non-media props', async () => {
|
|
101
|
-
expect(rendered[0]?.getAttribute('id')).to.equal(props.id);
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
test('should render <img /> with style and className props', async () => {
|
|
105
|
-
expect(rendered[0]?.getAttribute('style')).to.eql('width:100%');
|
|
106
|
-
expect(rendered[0]?.getAttribute('class')).to.eql(props.className);
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
describe('with "class" and "className" property set', async () => {
|
|
111
|
-
const props = {
|
|
112
|
-
field: { value: { src: '/assets/img/test0.png', alt: 'my image' } },
|
|
113
|
-
editable: false,
|
|
114
|
-
style: { width: '100%' },
|
|
115
|
-
className: 'the-dude',
|
|
116
|
-
class: 'abides',
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
const rendered = (
|
|
120
|
-
await renderAstroComponent(Image, {
|
|
121
|
-
props: { ...props },
|
|
122
|
-
})
|
|
123
|
-
).querySelector('img');
|
|
124
|
-
|
|
125
|
-
test('should attach "class" value at the end of class attribute', async () => {
|
|
126
|
-
expect(rendered?.getAttribute('class')).to.eql(`${props.className} ${props.class}`);
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
describe('with "mediaUrlPrefix" property', async () => {
|
|
131
|
-
test('should transform url with "value" property value', async () => {
|
|
132
|
-
const props = {
|
|
133
|
-
field: { value: { src: '/~assets/img/test0.png', alt: 'my image' } },
|
|
134
|
-
id: 'some-id',
|
|
135
|
-
style: { width: '100%' },
|
|
136
|
-
className: 'the-dude-abides',
|
|
137
|
-
imageParams: { foo: 'bar' },
|
|
138
|
-
mediaUrlPrefix: /\/([-~]{1})assets\//i,
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
let rendered = await renderAstroComponent(Image, {
|
|
142
|
-
props: { ...props },
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
expect(rendered.querySelector('img')?.getAttribute('src')).to.equal(
|
|
146
|
-
'/~/jssmedia/img/test0.png?foo=bar'
|
|
147
|
-
);
|
|
148
|
-
|
|
149
|
-
const newProps = {
|
|
150
|
-
...props,
|
|
151
|
-
field: { value: { src: '/-assets/img/test0.png', alt: 'my image' } },
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
rendered = await renderAstroComponent(Image, {
|
|
155
|
-
props: { ...newProps },
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
expect(rendered.querySelector('img')?.getAttribute('src')).to.equal(
|
|
159
|
-
'/-/jssmedia/img/test0.png?foo=bar'
|
|
160
|
-
);
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
test('should transform url with direct image object, no value', async () => {
|
|
164
|
-
const props = {
|
|
165
|
-
field: {
|
|
166
|
-
src: '/~assets/img/test0.png',
|
|
167
|
-
width: 8,
|
|
168
|
-
height: 10,
|
|
169
|
-
},
|
|
170
|
-
id: 'some-id',
|
|
171
|
-
style: {
|
|
172
|
-
width: '100%',
|
|
173
|
-
},
|
|
174
|
-
className: 'the-dude-abides',
|
|
175
|
-
imageParams: { foo: 'bar' },
|
|
176
|
-
mediaUrlPrefix: /\/([-~]{1})assets\//i,
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
let rendered = await renderAstroComponent(Image, {
|
|
180
|
-
props: { ...props },
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
expect(rendered.querySelector('img')?.getAttribute('src')).to.equal(
|
|
184
|
-
'/~/jssmedia/img/test0.png?foo=bar'
|
|
185
|
-
);
|
|
186
|
-
|
|
187
|
-
const newProps = {
|
|
188
|
-
...props,
|
|
189
|
-
field: {
|
|
190
|
-
src: '/-assets/img/test0.png',
|
|
191
|
-
width: 8,
|
|
192
|
-
height: 10,
|
|
193
|
-
},
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
rendered = await renderAstroComponent(Image, {
|
|
197
|
-
props: { ...newProps },
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
expect(rendered.querySelector('img')?.getAttribute('src')).to.equal(
|
|
201
|
-
'/-/jssmedia/img/test0.png?foo=bar'
|
|
202
|
-
);
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
test('should transform url with responsive image object', async () => {
|
|
206
|
-
const props = {
|
|
207
|
-
field: {
|
|
208
|
-
src: '/~assets/img/test0.png',
|
|
209
|
-
},
|
|
210
|
-
srcSet: [{ mw: 100 }, { mw: 300 }],
|
|
211
|
-
sizes: '(min-width: 960px) 300px, 100px',
|
|
212
|
-
id: 'some-id',
|
|
213
|
-
className: 'the-dude-abides',
|
|
214
|
-
mediaUrlPrefix: /\/([-~]{1})assets\//i,
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
let rendered = await renderAstroComponent(Image, {
|
|
218
|
-
props: { ...props },
|
|
219
|
-
});
|
|
220
|
-
expect(rendered.querySelector('img')?.getAttribute('src')).to.equal('/~assets/img/test0.png');
|
|
221
|
-
expect(rendered.querySelector('img')?.getAttribute('srcSet')).to.equal(
|
|
222
|
-
'/~/jssmedia/img/test0.png?mw=100 100w, /~/jssmedia/img/test0.png?mw=300 300w'
|
|
223
|
-
);
|
|
224
|
-
|
|
225
|
-
const newProps = {
|
|
226
|
-
...props,
|
|
227
|
-
field: {
|
|
228
|
-
src: '/-assets/img/test0.png',
|
|
229
|
-
width: 8,
|
|
230
|
-
height: 10,
|
|
231
|
-
},
|
|
232
|
-
imageParams: { foo: 'bar' },
|
|
233
|
-
};
|
|
234
|
-
|
|
235
|
-
rendered = await renderAstroComponent(Image, {
|
|
236
|
-
props: { ...newProps },
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
expect(rendered.querySelector('img')?.getAttribute('src')).to.equal(
|
|
240
|
-
'/-/jssmedia/img/test0.png?foo=bar'
|
|
241
|
-
);
|
|
242
|
-
expect(rendered.querySelector('img')?.getAttribute('srcSet')).to.equal(
|
|
243
|
-
'/-/jssmedia/img/test0.png?foo=bar&mw=100 100w, /-/jssmedia/img/test0.png?foo=bar&mw=300 300w'
|
|
244
|
-
);
|
|
245
|
-
});
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
test('should render no <img /> when media prop is empty', async () => {
|
|
249
|
-
const imgField = '' as ImageField;
|
|
250
|
-
|
|
251
|
-
const rendered = await renderAstroComponent(Image, {
|
|
252
|
-
props: { field: imgField },
|
|
253
|
-
});
|
|
254
|
-
|
|
255
|
-
expect(rendered.querySelectorAll('img')).to.have.length(0);
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
test('should render when field prop is used instead of media prop', async () => {
|
|
259
|
-
const imgField = {
|
|
260
|
-
src: '/assets/img/test0.png',
|
|
261
|
-
width: 8,
|
|
262
|
-
height: 10,
|
|
263
|
-
};
|
|
264
|
-
|
|
265
|
-
const rendered = await renderAstroComponent(Image, {
|
|
266
|
-
props: { field: imgField },
|
|
267
|
-
});
|
|
268
|
-
|
|
269
|
-
expect(rendered.querySelectorAll('img')).to.have.length(1);
|
|
270
|
-
});
|
|
271
|
-
|
|
272
|
-
describe('edit mode', async () => {
|
|
273
|
-
const testMetadata = {
|
|
274
|
-
contextItem: {
|
|
275
|
-
id: '{09A07660-6834-476C-B93B-584248D3003B}',
|
|
276
|
-
language: 'en',
|
|
277
|
-
revision: 'a0b36ce0a7db49418edf90eb9621e145',
|
|
278
|
-
version: 1,
|
|
279
|
-
},
|
|
280
|
-
fieldId: '{414061F4-FBB1-4591-BC37-BFFA67F745EB}',
|
|
281
|
-
fieldType: 'image',
|
|
282
|
-
rawValue: 'Test1',
|
|
283
|
-
};
|
|
284
|
-
|
|
285
|
-
test('should render field metadata component when metadata property is present', async () => {
|
|
286
|
-
const imgField = {
|
|
287
|
-
src: '/assets/img/test0.png',
|
|
288
|
-
width: 8,
|
|
289
|
-
height: 10,
|
|
290
|
-
metadata: testMetadata,
|
|
291
|
-
};
|
|
292
|
-
|
|
293
|
-
const rendered = await renderAstroComponent(Image, {
|
|
294
|
-
props: { field: imgField },
|
|
295
|
-
});
|
|
296
|
-
|
|
297
|
-
expect(rendered.innerHTML).to.equal(
|
|
298
|
-
[
|
|
299
|
-
`<code type="text/sitecore" chrometype="field" class="scpm" kind="open">${JSON.stringify(
|
|
300
|
-
testMetadata
|
|
301
|
-
)}</code>`,
|
|
302
|
-
'<img width="8" height="10" src="/assets/img/test0.png">',
|
|
303
|
-
'<code type="text/sitecore" chrometype="field" class="scpm" kind="close"></code>',
|
|
304
|
-
].join('')
|
|
305
|
-
);
|
|
306
|
-
});
|
|
307
|
-
|
|
308
|
-
test('should render default empty field component for Image when field value src is not present', async () => {
|
|
309
|
-
const imgField = {
|
|
310
|
-
value: { src: undefined },
|
|
311
|
-
metadata: testMetadata,
|
|
312
|
-
};
|
|
313
|
-
|
|
314
|
-
const rendered = await renderAstroComponent(Image, {
|
|
315
|
-
props: { field: imgField },
|
|
316
|
-
});
|
|
317
|
-
|
|
318
|
-
const defaultEmptyImagePlaceholder = await renderAstroComponent(
|
|
319
|
-
DefaultEmptyFieldEditingComponentImage
|
|
320
|
-
);
|
|
321
|
-
|
|
322
|
-
expect(rendered.innerHTML).to.equal(
|
|
323
|
-
[
|
|
324
|
-
`<code type="text/sitecore" chrometype="field" class="scpm" kind="open">${JSON.stringify(
|
|
325
|
-
testMetadata
|
|
326
|
-
)}</code>`,
|
|
327
|
-
defaultEmptyImagePlaceholder.innerHTML,
|
|
328
|
-
'<code type="text/sitecore" chrometype="field" class="scpm" kind="close"></code>',
|
|
329
|
-
].join('')
|
|
330
|
-
);
|
|
331
|
-
});
|
|
332
|
-
|
|
333
|
-
test('should render default empty field component for Image when field src is not present', async () => {
|
|
334
|
-
const imgField = {
|
|
335
|
-
src: undefined,
|
|
336
|
-
metadata: testMetadata,
|
|
337
|
-
};
|
|
338
|
-
|
|
339
|
-
const rendered = await renderAstroComponent(Image, {
|
|
340
|
-
props: { field: imgField, className: 'custom-class' },
|
|
341
|
-
});
|
|
342
|
-
|
|
343
|
-
const defaultEmptyImagePlaceholder = await renderAstroComponent(
|
|
344
|
-
DefaultEmptyFieldEditingComponentImage,
|
|
345
|
-
{
|
|
346
|
-
props: { className: 'custom-class' },
|
|
347
|
-
}
|
|
348
|
-
);
|
|
349
|
-
|
|
350
|
-
expect(rendered.innerHTML).to.equal(
|
|
351
|
-
[
|
|
352
|
-
`<code type="text/sitecore" chrometype="field" class="scpm" kind="open">${JSON.stringify(
|
|
353
|
-
testMetadata
|
|
354
|
-
)}</code>`,
|
|
355
|
-
defaultEmptyImagePlaceholder.innerHTML,
|
|
356
|
-
'<code type="text/sitecore" chrometype="field" class="scpm" kind="close"></code>',
|
|
357
|
-
].join('')
|
|
358
|
-
);
|
|
359
|
-
|
|
360
|
-
expect(rendered.innerHTML).to.contain('custom-class');
|
|
361
|
-
expect(rendered.innerHTML).to.contain('scEmptyImage');
|
|
362
|
-
});
|
|
363
|
-
|
|
364
|
-
test('should render custom empty field component when provided, when field value src is not present', async () => {
|
|
365
|
-
const imgField = {
|
|
366
|
-
value: { src: undefined },
|
|
367
|
-
metadata: testMetadata,
|
|
368
|
-
};
|
|
369
|
-
|
|
370
|
-
const rendered = await renderAstroComponent(Image, {
|
|
371
|
-
props: {
|
|
372
|
-
field: imgField,
|
|
373
|
-
emptyFieldEditingComponent: EmptyFieldEditingComponent,
|
|
374
|
-
},
|
|
375
|
-
});
|
|
376
|
-
|
|
377
|
-
expect(rendered.innerHTML).to.equal(
|
|
378
|
-
[
|
|
379
|
-
`<code type="text/sitecore" chrometype="field" class="scpm" kind="open">${JSON.stringify(
|
|
380
|
-
testMetadata
|
|
381
|
-
)}</code>`,
|
|
382
|
-
'<span class="empty-field-value-placeholder">Custom Empty field value</span>',
|
|
383
|
-
'<code type="text/sitecore" chrometype="field" class="scpm" kind="close"></code>',
|
|
384
|
-
].join('')
|
|
385
|
-
);
|
|
386
|
-
});
|
|
387
|
-
|
|
388
|
-
test('should render custom empty field component when provided, when field src is not present', async () => {
|
|
389
|
-
const imgField = {
|
|
390
|
-
src: undefined,
|
|
391
|
-
metadata: testMetadata,
|
|
392
|
-
};
|
|
393
|
-
|
|
394
|
-
const rendered = await renderAstroComponent(Image, {
|
|
395
|
-
props: {
|
|
396
|
-
field: imgField,
|
|
397
|
-
emptyFieldEditingComponent: EmptyFieldEditingComponent,
|
|
398
|
-
},
|
|
399
|
-
});
|
|
400
|
-
|
|
401
|
-
expect(rendered.innerHTML).to.equal(
|
|
402
|
-
[
|
|
403
|
-
`<code type="text/sitecore" chrometype="field" class="scpm" kind="open">${JSON.stringify(
|
|
404
|
-
testMetadata
|
|
405
|
-
)}</code>`,
|
|
406
|
-
'<span class="empty-field-value-placeholder">Custom Empty field value</span>',
|
|
407
|
-
'<code type="text/sitecore" chrometype="field" class="scpm" kind="close"></code>',
|
|
408
|
-
].join('')
|
|
409
|
-
);
|
|
410
|
-
});
|
|
411
|
-
|
|
412
|
-
test('should render nothing when field value src is not present, when editing is explicitly disabled', async () => {
|
|
413
|
-
const imgField = {
|
|
414
|
-
value: { src: undefined },
|
|
415
|
-
metadata: testMetadata,
|
|
416
|
-
};
|
|
417
|
-
|
|
418
|
-
const rendered = await renderAstroComponent(Image, {
|
|
419
|
-
props: { field: imgField, editable: false },
|
|
420
|
-
});
|
|
421
|
-
|
|
422
|
-
expect(rendered.innerHTML).to.equal('');
|
|
423
|
-
});
|
|
424
|
-
|
|
425
|
-
test('should render nothing when field src is not present, when editing is explicitly disabled', async () => {
|
|
426
|
-
const imgField = {
|
|
427
|
-
src: undefined,
|
|
428
|
-
metadata: testMetadata,
|
|
429
|
-
};
|
|
430
|
-
|
|
431
|
-
const rendered = await renderAstroComponent(Image, {
|
|
432
|
-
props: { field: imgField, editable: false },
|
|
433
|
-
});
|
|
434
|
-
|
|
435
|
-
expect(rendered.innerHTML).to.equal('');
|
|
436
|
-
});
|
|
437
|
-
});
|
|
438
|
-
});
|
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
import { describe, test, expect } from 'vitest';
|
|
2
|
-
import { renderAstroComponent } from '../tests/astro-helpers';
|
|
3
|
-
import Link, { LinkField } from './Link.astro';
|
|
4
|
-
import EmptyFieldEditingComponent from '../tests/test-components/EmptyFieldEditingComponent.astro';
|
|
5
|
-
|
|
6
|
-
describe('<Link />', () => {
|
|
7
|
-
test('should render nothing with missing field', async () => {
|
|
8
|
-
const field = null as unknown as LinkField;
|
|
9
|
-
const rendered = await renderAstroComponent(Link, {
|
|
10
|
-
props: { field: field },
|
|
11
|
-
});
|
|
12
|
-
expect(rendered.innerHTML).to.equal('');
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
test('should render nothing with missing value', async () => {
|
|
16
|
-
const field = {};
|
|
17
|
-
const rendered = await renderAstroComponent(Link, {
|
|
18
|
-
props: { field: field },
|
|
19
|
-
});
|
|
20
|
-
expect(rendered.innerHTML).to.equal('');
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
test('should render value with editing explicitly disabled', async () => {
|
|
24
|
-
const field = {
|
|
25
|
-
value: {
|
|
26
|
-
href: '/lorem',
|
|
27
|
-
text: 'ipsum',
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
const rendered = (
|
|
31
|
-
await renderAstroComponent(Link, {
|
|
32
|
-
props: { field: field, editable: false },
|
|
33
|
-
})
|
|
34
|
-
).querySelector('a');
|
|
35
|
-
expect(rendered?.outerHTML).to.contain(field.value.href);
|
|
36
|
-
expect(rendered?.outerHTML).to.contain(field.value.text);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
test('should render with href directly on provided field', async () => {
|
|
40
|
-
const field = {
|
|
41
|
-
href: '/lorem',
|
|
42
|
-
text: 'ipsum',
|
|
43
|
-
};
|
|
44
|
-
const rendered = (
|
|
45
|
-
await renderAstroComponent(Link, {
|
|
46
|
-
props: { field: field },
|
|
47
|
-
})
|
|
48
|
-
).querySelector('a');
|
|
49
|
-
expect(rendered?.outerHTML).to.contain(field.href);
|
|
50
|
-
expect(rendered?.outerHTML).to.contain(field.text);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
test('should not add extra hash when linktype is anchor', async () => {
|
|
54
|
-
const field = {
|
|
55
|
-
linktype: 'anchor',
|
|
56
|
-
href: '#anchor',
|
|
57
|
-
text: 'anchor link',
|
|
58
|
-
anchor: 'anchor',
|
|
59
|
-
};
|
|
60
|
-
const rendered = (
|
|
61
|
-
await renderAstroComponent(Link, {
|
|
62
|
-
props: { field: field },
|
|
63
|
-
})
|
|
64
|
-
).querySelector('a');
|
|
65
|
-
expect(rendered?.outerHTML).to.contain(`href="${field.href}"`);
|
|
66
|
-
expect(rendered?.text).to.equal(field.text);
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
test('should render all value attributes', async () => {
|
|
70
|
-
const field = {
|
|
71
|
-
value: {
|
|
72
|
-
href: '/lorem',
|
|
73
|
-
anchor: 'foo',
|
|
74
|
-
text: 'ipsum',
|
|
75
|
-
class: 'my-link',
|
|
76
|
-
title: 'My Link',
|
|
77
|
-
target: '_blank',
|
|
78
|
-
querystring: 'foo=bar',
|
|
79
|
-
},
|
|
80
|
-
};
|
|
81
|
-
const rendered = (
|
|
82
|
-
await renderAstroComponent(Link, {
|
|
83
|
-
props: { field: field },
|
|
84
|
-
})
|
|
85
|
-
).querySelector('a');
|
|
86
|
-
expect(rendered?.outerHTML).to.contain(
|
|
87
|
-
`href="${field.value.href}?${field.value.querystring}#${field.value.anchor}"`
|
|
88
|
-
);
|
|
89
|
-
expect(rendered?.outerHTML).to.contain(`class="${field.value.class}"`);
|
|
90
|
-
expect(rendered?.outerHTML).to.contain(`title="${field.value.title}"`);
|
|
91
|
-
expect(rendered?.outerHTML).to.contain(`target="${field.value.target}"`);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
test('should render other attributes with other props provided', async () => {
|
|
95
|
-
const field = {
|
|
96
|
-
value: {
|
|
97
|
-
href: '/lorem',
|
|
98
|
-
text: 'ipsum',
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
const rendered = (
|
|
102
|
-
await renderAstroComponent(Link, {
|
|
103
|
-
props: { field: field, id: 'my-link', accessKey: 'a' },
|
|
104
|
-
})
|
|
105
|
-
).querySelector('a');
|
|
106
|
-
expect(rendered?.outerHTML).to.contain('id="my-link"');
|
|
107
|
-
expect(rendered?.outerHTML).to.contain('accesskey="a"');
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
describe('edit mode', () => {
|
|
111
|
-
const testMetadata = {
|
|
112
|
-
contextItem: {
|
|
113
|
-
id: '{09A07660-6834-476C-B93B-584248D3003B}',
|
|
114
|
-
language: 'en',
|
|
115
|
-
revision: 'a0b36ce0a7db49418edf90eb9621e145',
|
|
116
|
-
version: 1,
|
|
117
|
-
},
|
|
118
|
-
fieldId: '{414061F4-FBB1-4591-BC37-BFFA67F745EB}',
|
|
119
|
-
fieldType: 'single-line',
|
|
120
|
-
rawValue: 'Test1',
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
test('should render field metadata component when metadata property is present', async () => {
|
|
124
|
-
const field = {
|
|
125
|
-
href: '/lorem',
|
|
126
|
-
text: 'ipsum',
|
|
127
|
-
metadata: testMetadata,
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
const rendered = await renderAstroComponent(Link, {
|
|
131
|
-
props: { field: field },
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
expect(rendered.innerHTML).to.equal(
|
|
135
|
-
[
|
|
136
|
-
`<code type="text/sitecore" chrometype="field" class="scpm" kind="open">${JSON.stringify(
|
|
137
|
-
testMetadata
|
|
138
|
-
)}</code>`,
|
|
139
|
-
'<a href="/lorem">ipsum</a>',
|
|
140
|
-
'<code type="text/sitecore" chrometype="field" class="scpm" kind="close"></code>',
|
|
141
|
-
].join('')
|
|
142
|
-
);
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
test('should render default empty field component when field value is not present', async () => {
|
|
146
|
-
const field = {
|
|
147
|
-
value: { href: undefined },
|
|
148
|
-
metadata: testMetadata,
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
const rendered = await renderAstroComponent(Link, {
|
|
152
|
-
props: { field: field },
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
expect(rendered.innerHTML).to.equal(
|
|
156
|
-
[
|
|
157
|
-
`<code type="text/sitecore" chrometype="field" class="scpm" kind="open">${JSON.stringify(
|
|
158
|
-
testMetadata
|
|
159
|
-
)}</code>`,
|
|
160
|
-
'<span>[No text in field]</span>',
|
|
161
|
-
'<code type="text/sitecore" chrometype="field" class="scpm" kind="close"></code>',
|
|
162
|
-
].join('')
|
|
163
|
-
);
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
test('should render default empty field component when field value href is not present', async () => {
|
|
167
|
-
const field = {
|
|
168
|
-
href: undefined,
|
|
169
|
-
metadata: testMetadata,
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
const rendered = await renderAstroComponent(Link, {
|
|
173
|
-
props: { field: field },
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
expect(rendered.innerHTML).to.equal(
|
|
177
|
-
[
|
|
178
|
-
`<code type="text/sitecore" chrometype="field" class="scpm" kind="open">${JSON.stringify(
|
|
179
|
-
testMetadata
|
|
180
|
-
)}</code>`,
|
|
181
|
-
'<span>[No text in field]</span>',
|
|
182
|
-
'<code type="text/sitecore" chrometype="field" class="scpm" kind="close"></code>',
|
|
183
|
-
].join('')
|
|
184
|
-
);
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
test('should render custom empty field component when provided, when field value is not present', async () => {
|
|
188
|
-
const field = {
|
|
189
|
-
value: { href: undefined },
|
|
190
|
-
metadata: testMetadata,
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
const rendered = await renderAstroComponent(Link, {
|
|
194
|
-
props: {
|
|
195
|
-
field: field,
|
|
196
|
-
emptyFieldEditingComponent: EmptyFieldEditingComponent,
|
|
197
|
-
},
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
expect(rendered.innerHTML).to.equal(
|
|
201
|
-
[
|
|
202
|
-
`<code type="text/sitecore" chrometype="field" class="scpm" kind="open">${JSON.stringify(
|
|
203
|
-
testMetadata
|
|
204
|
-
)}</code>`,
|
|
205
|
-
'<span class="empty-field-value-placeholder">Custom Empty field value</span>',
|
|
206
|
-
'<code type="text/sitecore" chrometype="field" class="scpm" kind="close"></code>',
|
|
207
|
-
].join('')
|
|
208
|
-
);
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
test('should render custom empty field component when provided, when field value href is not present', async () => {
|
|
212
|
-
const field = {
|
|
213
|
-
href: undefined,
|
|
214
|
-
metadata: testMetadata,
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
const rendered = await renderAstroComponent(Link, {
|
|
218
|
-
props: {
|
|
219
|
-
field: field,
|
|
220
|
-
emptyFieldEditingComponent: EmptyFieldEditingComponent,
|
|
221
|
-
},
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
expect(rendered.innerHTML).to.equal(
|
|
225
|
-
[
|
|
226
|
-
`<code type="text/sitecore" chrometype="field" class="scpm" kind="open">${JSON.stringify(
|
|
227
|
-
testMetadata
|
|
228
|
-
)}</code>`,
|
|
229
|
-
'<span class="empty-field-value-placeholder">Custom Empty field value</span>',
|
|
230
|
-
'<code type="text/sitecore" chrometype="field" class="scpm" kind="close"></code>',
|
|
231
|
-
].join('')
|
|
232
|
-
);
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
test('should render nothing when field value is not present, when editing is explicitly disabled', async () => {
|
|
236
|
-
const field = {
|
|
237
|
-
value: undefined,
|
|
238
|
-
metadata: testMetadata,
|
|
239
|
-
};
|
|
240
|
-
|
|
241
|
-
const rendered = await renderAstroComponent(Link, {
|
|
242
|
-
props: { field: field, editable: false },
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
expect(rendered.innerHTML).to.equal('');
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
test('should render nothing when field value href is empty, when editing is explicitly disabled', async () => {
|
|
249
|
-
const field = {
|
|
250
|
-
value: { href: undefined },
|
|
251
|
-
metadata: testMetadata,
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
const rendered = await renderAstroComponent(Link, {
|
|
255
|
-
props: { field: field, editable: false },
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
expect(rendered.innerHTML).to.equal('');
|
|
259
|
-
});
|
|
260
|
-
});
|
|
261
|
-
});
|