@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.
Files changed (70) hide show
  1. package/package.json +7 -12
  2. package/src/context.ts +1 -1
  3. package/src/client/sitecore-astro-client.test.ts +0 -267
  4. package/src/components/AstroImage.astro.test.ts +0 -541
  5. package/src/components/Date.astro.test.ts +0 -197
  6. package/src/components/EditingScripts.astro.test.ts +0 -267
  7. package/src/components/ErrorBoundary.astro.test.ts +0 -252
  8. package/src/components/ErrorComponent.astro.test.ts +0 -31
  9. package/src/components/FieldMetadata.astro.test.ts +0 -40
  10. package/src/components/File.astro.test.ts +0 -68
  11. package/src/components/HiddenRendering.astro.test.ts +0 -36
  12. package/src/components/Image.astro.test.ts +0 -438
  13. package/src/components/Link.astro.test.ts +0 -261
  14. package/src/components/MissingComponent.astro.test.ts +0 -21
  15. package/src/components/Placeholder/Placeholder.astro.test.ts +0 -1088
  16. package/src/components/Placeholder/PlaceholderMetadata.astro.test.ts +0 -228
  17. package/src/components/Placeholder/PlaceholderUtils.astro.test.ts +0 -149
  18. package/src/components/Placeholder/placeholder-utils.test.ts +0 -309
  19. package/src/components/RichText.astro.test.ts +0 -205
  20. package/src/components/Text.astro.test.ts +0 -273
  21. package/src/config/define-config.test.ts +0 -526
  22. package/src/config-cli/define-cli-config.test.ts +0 -67
  23. package/src/editing/editing-config-middleware.test.ts +0 -164
  24. package/src/editing/editing-render-middleware.test.ts +0 -1143
  25. package/src/editing/render-middleware.test.ts +0 -57
  26. package/src/editing/utils.test.ts +0 -1212
  27. package/src/enhancers/WithEmptyFieldEditingComponent.astro.test.ts +0 -380
  28. package/src/enhancers/WithFieldMetadata.astro.test.ts +0 -113
  29. package/src/middleware/middleware.test.ts +0 -520
  30. package/src/middleware/multisite-middleware.test.ts +0 -736
  31. package/src/middleware/robots-middleware.test.ts +0 -129
  32. package/src/middleware/sitemap-middleware.test.ts +0 -184
  33. package/src/tests/astro-helpers.ts +0 -61
  34. package/src/tests/helpers.ts +0 -46
  35. package/src/tests/personalizeData.ts +0 -63
  36. package/src/tests/test-components/CustomErrorComponent.astro +0 -3
  37. package/src/tests/test-components/CustomHiddenRendering.astro +0 -10
  38. package/src/tests/test-components/CustomMissingComponent.astro +0 -9
  39. package/src/tests/test-components/DownloadCallout.astro +0 -12
  40. package/src/tests/test-components/EmptyFieldEditingComponent.astro +0 -5
  41. package/src/tests/test-components/ErrorBoundaryWithError.astro +0 -10
  42. package/src/tests/test-components/Home.astro +0 -12
  43. package/src/tests/test-components/SxaRichText.astro +0 -23
  44. package/src/tests/test-components/SxaRichTextDefault.astro +0 -7
  45. package/src/tests/test-components/SxaRichTextWithTitle.astro +0 -8
  46. package/src/tests/test-components/TestComponent.astro +0 -9
  47. package/src/tests/test-components/TestComponentWithError.astro +0 -4
  48. package/src/tests/test-components/TestComponentWithField.astro +0 -17
  49. package/src/tests/test-components/TestHeader.astro +0 -8
  50. package/src/tests/test-components/TestLogo.astro +0 -5
  51. package/src/tests/test-components/TestParentWrapperComponent.astro +0 -5
  52. package/src/tests/test-components/TestWrapperComponent.astro +0 -5
  53. package/src/tests/test-components/generate-map/Button.astro +0 -4
  54. package/src/tests/test-components/generate-map/Link.astro +0 -4
  55. package/src/tests/test-components/map-components/Bar.astro +0 -0
  56. package/src/tests/test-components/map-components/Baz.astro +0 -0
  57. package/src/tests/test-components/map-components/Foo.astro +0 -0
  58. package/src/tests/test-components/map-components/Hero.variant.astro +0 -0
  59. package/src/tests/test-components/map-components/NotComponent.bsx +0 -0
  60. package/src/tests/test-components/map-components/Qux.astro +0 -0
  61. package/src/tests/test-components/map-components/folded/Folded.astro +0 -0
  62. package/src/tests/test-components/map-components/folded/random-file-2.docx +0 -0
  63. package/src/tests/test-components/map-components/random-file.txt +0 -0
  64. package/src/tests/test-data/metadata-data.ts +0 -86
  65. package/src/tests/test-data/normal-mode-data.ts +0 -466
  66. package/src/tests/vitest.setup.ts +0 -4
  67. package/src/tools/generate-map.test.ts +0 -201
  68. package/src/tools/templating/components.test.ts +0 -318
  69. package/src/tools/templating/default-component.test.ts +0 -31
  70. package/src/utils/utils.test.ts +0 -111
@@ -1,252 +0,0 @@
1
- import { describe, test, expect, vi, beforeAll, afterAll } from 'vitest';
2
- import { mockSitecoreContext, renderAstroComponent } from '../tests/astro-helpers';
3
- import { ComponentRendering, LayoutServicePageState } from '@sitecore-content-sdk/content/layout';
4
- import { Page } from '@sitecore-content-sdk/content/client';
5
- import CustomErrorComponent from '../tests/test-components/CustomErrorComponent.astro';
6
- import ErrorBoundaryWithError from '../tests/test-components/ErrorBoundaryWithError.astro';
7
-
8
- describe('ErrorBoundary', () => {
9
- vi.spyOn(console, 'error').mockImplementation(() => undefined);
10
-
11
- const testComponentProps = {
12
- page: {
13
- locale: 'en',
14
- layout: {
15
- sitecore: {
16
- context: {},
17
- route: null,
18
- },
19
- },
20
- mode: {
21
- name: LayoutServicePageState.Normal,
22
- isPreview: false,
23
- isNormal: false,
24
- isEditing: false,
25
- isDesignLibrary: false,
26
- designLibrary: {
27
- isVariantGeneration: false,
28
- },
29
- },
30
- },
31
- };
32
-
33
- describe('when in page editing or preview mode', () => {
34
- test('Should render custom error component when custom error component is provided and error is thrown', async () => {
35
- const previewContext = { ...testComponentProps };
36
-
37
- previewContext.page.mode.isPreview = true;
38
-
39
- mockSitecoreContext(previewContext.page);
40
-
41
- const testComponentName = 'Test component Name';
42
- const rendering: ComponentRendering = {
43
- componentName: testComponentName,
44
- };
45
-
46
- const rendered = await renderAstroComponent(ErrorBoundaryWithError, {
47
- props: { rendering: rendering, errorComponent: CustomErrorComponent },
48
- });
49
-
50
- expect(rendered.querySelectorAll('div').length).to.equal(1);
51
- expect(rendered.querySelector('div')?.textContent).to.equal(
52
- 'This is a custom error component!'
53
- );
54
- });
55
-
56
- test('Should render errors message and errored component name when error is thrown in edit mode', async () => {
57
- const editingContext = {
58
- ...testComponentProps,
59
- };
60
-
61
- editingContext.page.mode.isEditing = true;
62
- mockSitecoreContext(editingContext.page);
63
-
64
- const testComponentName = 'Test component Name';
65
- const rendering: ComponentRendering = {
66
- componentName: testComponentName,
67
- };
68
-
69
- const errorMessage = 'an error occured';
70
-
71
- const rendered = await renderAstroComponent(ErrorBoundaryWithError, {
72
- props: { rendering: rendering },
73
- });
74
-
75
- const ems = rendered.querySelectorAll('em');
76
- expect(rendered.innerHTML).to.contain('class="sc-content-sdk-placeholder-error"');
77
- expect(rendered.innerHTML).to.contain('A rendering error occurred in component');
78
- expect(ems.length).to.equal(2);
79
- expect(ems[0].textContent).to.equal(testComponentName);
80
- expect(ems[1].textContent).to.equal(errorMessage);
81
- });
82
-
83
- test('Should render errors message and errored component name when error is thrown in preview mode', async () => {
84
- const previewContext = { ...testComponentProps };
85
-
86
- previewContext.page.mode.isPreview = true;
87
- mockSitecoreContext(previewContext.page);
88
-
89
- const testComponentName = 'Test component Name';
90
- const rendering: ComponentRendering = {
91
- componentName: testComponentName,
92
- };
93
-
94
- const errorMessage = 'an error occured';
95
-
96
- const rendered = await renderAstroComponent(ErrorBoundaryWithError, {
97
- props: { rendering: rendering },
98
- });
99
-
100
- const ems = rendered.querySelectorAll('em');
101
-
102
- expect(rendered.innerHTML).to.contain('class="sc-content-sdk-placeholder-error"');
103
- expect(rendered.innerHTML).to.contain('A rendering error occurred in component');
104
- expect(ems.length).to.equal(2);
105
- expect(ems[0].textContent).to.equal(testComponentName);
106
- expect(ems[1].textContent).to.equal(errorMessage);
107
- });
108
- });
109
-
110
- describe('when in development mode', () => {
111
- beforeAll(() => {
112
- process.env.NODE_ENV = 'development';
113
- });
114
-
115
- afterAll(() => {
116
- delete process.env.NODE_ENV;
117
- });
118
-
119
- test('Should render custom error component when custom error component is provided and error is thrown', async () => {
120
- const rendered = await renderAstroComponent(ErrorBoundaryWithError, {
121
- props: { errorComponent: CustomErrorComponent },
122
- });
123
-
124
- expect(rendered.querySelectorAll('div').length).to.equal(1);
125
- expect(rendered.querySelector('div')?.textContent).to.equal(
126
- 'This is a custom error component!'
127
- );
128
- });
129
-
130
- test('Should render errors message and errored component name when error is thrown and is in page editing mode', async () => {
131
- const editingContext = {
132
- ...testComponentProps,
133
- };
134
- editingContext.page.mode.isEditing = true;
135
- mockSitecoreContext(editingContext.page);
136
-
137
- const testComponentName = 'Test component Name';
138
- const rendering: ComponentRendering = {
139
- componentName: testComponentName,
140
- };
141
-
142
- const errorMessage = 'an error occured';
143
-
144
- const rendered = await renderAstroComponent(ErrorBoundaryWithError, {
145
- props: { rendering: rendering },
146
- });
147
-
148
- const ems = rendered.querySelectorAll('em');
149
- expect(rendered.innerHTML).to.contain('class="sc-content-sdk-placeholder-error"');
150
- expect(rendered.innerHTML).to.contain('A rendering error occurred in component');
151
- expect(ems.length).to.equal(2);
152
- expect(ems[0].textContent).to.equal(testComponentName);
153
- expect(ems[1].textContent).to.equal(errorMessage);
154
- });
155
-
156
- test('Should render errors message and errored component name when error is thrown and is not in page editing mode', async () => {
157
- const normalContext = { ...testComponentProps };
158
-
159
- normalContext.page.mode.isNormal = true;
160
- mockSitecoreContext(normalContext.page);
161
-
162
- const testComponentName = 'Test component Name';
163
- const rendering: ComponentRendering = {
164
- componentName: testComponentName,
165
- };
166
-
167
- const errorMessage = 'an error occured';
168
-
169
- const rendered = await renderAstroComponent(ErrorBoundaryWithError, {
170
- props: { rendering: rendering },
171
- });
172
-
173
- const ems = rendered.querySelectorAll('em');
174
-
175
- expect(rendered.innerHTML).to.contain('class="sc-content-sdk-placeholder-error"');
176
- expect(rendered.innerHTML).to.contain('A rendering error occurred in component');
177
- expect(ems.length).to.equal(2);
178
- expect(ems[0].textContent).to.equal(testComponentName);
179
- expect(ems[1].textContent).to.equal(errorMessage);
180
- });
181
- });
182
-
183
- describe('when not in page editing and not in development mode', () => {
184
- test('Should render custom error component when custom error component is provided and error is thrown', async () => {
185
- const page: Page = {
186
- locale: 'en',
187
- layout: {
188
- sitecore: {
189
- context: {},
190
- route: null,
191
- },
192
- },
193
- mode: {
194
- name: LayoutServicePageState.Normal,
195
- isNormal: false,
196
- isPreview: false,
197
- isEditing: false,
198
- isDesignLibrary: false,
199
- designLibrary: {
200
- isVariantGeneration: false,
201
- },
202
- },
203
- };
204
-
205
- mockSitecoreContext(page);
206
-
207
- const rendered = await renderAstroComponent(ErrorBoundaryWithError, {
208
- props: { errorComponent: CustomErrorComponent },
209
- });
210
-
211
- expect(rendered.querySelectorAll('div').length).to.equal(1);
212
- expect(rendered.querySelector('div')?.textContent).to.equal(
213
- 'This is a custom error component!'
214
- );
215
- });
216
-
217
- test('Should render default errors message when error is thrown and custom error component is not provided', async () => {
218
- const errorMessage = 'an error occured';
219
-
220
- const page: Page = {
221
- locale: 'en',
222
- layout: {
223
- sitecore: {
224
- context: {},
225
- route: null,
226
- },
227
- },
228
- mode: {
229
- name: LayoutServicePageState.Normal,
230
- isNormal: false,
231
- isPreview: false,
232
- isEditing: false,
233
- isDesignLibrary: false,
234
- designLibrary: {
235
- isVariantGeneration: false,
236
- },
237
- },
238
- };
239
-
240
- mockSitecoreContext(page);
241
-
242
- const rendered = await renderAstroComponent(ErrorBoundaryWithError);
243
-
244
- expect(rendered.innerHTML).to.contain('class="sc-content-sdk-placeholder-error"');
245
- expect(rendered.innerHTML).to.contain(
246
- 'There was a problem loading this section.' // eslint-disable-line
247
- );
248
- expect(rendered.querySelectorAll('em').length).to.equal(0);
249
- expect(rendered.innerHTML).to.not.contain(errorMessage);
250
- });
251
- });
252
- });
@@ -1,31 +0,0 @@
1
- import { describe, test, expect } from 'vitest';
2
- import { renderAstroComponent } from '../tests/astro-helpers';
3
- import ErrorComponent from './ErrorComponent.astro';
4
-
5
- describe('ErrorComponent', () => {
6
- test('should render message prop with correct CSS class', async () => {
7
- const message = 'Test error message';
8
-
9
- const rendered = await renderAstroComponent(ErrorComponent, {
10
- props: { message: message },
11
- });
12
-
13
- expect(
14
- rendered.querySelector('.sc-content-sdk-placeholder-error')?.textContent?.trim()
15
- ).to.equal(message);
16
- });
17
-
18
- test('should render children when provided without message', async () => {
19
- const content = 'Child error content';
20
-
21
- const rendered = await renderAstroComponent(ErrorComponent, {
22
- slots: {
23
- default: `<span>${content}</span>`,
24
- },
25
- });
26
-
27
- expect(rendered.querySelector('.sc-content-sdk-placeholder-error')?.textContent).to.equal(
28
- content
29
- );
30
- });
31
- });
@@ -1,40 +0,0 @@
1
- import { describe, test, expect } from 'vitest';
2
- import FieldMetadata from './FieldMetadata.astro';
3
- import { renderAstroComponent } from '../tests/astro-helpers';
4
-
5
- describe('<FieldMetadata />', () => {
6
- test('should render field metadata', async () => {
7
- const props = {
8
- metadata: {
9
- contextItem: {
10
- id: '{09A07660-6834-476C-B93B-584248D3003B}',
11
- language: 'en',
12
- revision: 'a0b36ce0a7db49418edf90eb9621e145',
13
- version: 1,
14
- },
15
- fieldId: '{414061F4-FBB1-4591-BC37-BFFA67F745EB}',
16
- fieldType: 'date',
17
- rawValue: 'Test1',
18
- },
19
- };
20
-
21
- const Foo = '<h2>foo</h2>';
22
-
23
- const rendered = await renderAstroComponent(FieldMetadata, {
24
- props: { ...props },
25
- slots: {
26
- default: Foo,
27
- },
28
- });
29
-
30
- expect(rendered.innerHTML).to.equal(
31
- [
32
- `<code type="text/sitecore" chrometype="field" class="scpm" kind="open">${JSON.stringify(
33
- props.metadata
34
- )}</code>`,
35
- '<h2>foo</h2>',
36
- '<code type="text/sitecore" chrometype="field" class="scpm" kind="close"></code>',
37
- ].join('')
38
- );
39
- });
40
- });
@@ -1,68 +0,0 @@
1
- import { describe, test, expect } from 'vitest';
2
- import { renderAstroComponent } from '../tests/astro-helpers';
3
- import File, { FileField } from './File.astro';
4
-
5
- describe('<File />', () => {
6
- test('should render nothing with missing field', async () => {
7
- const field: FileField = null!;
8
- const rendered = await renderAstroComponent(File, {
9
- props: { field: field },
10
- });
11
- expect(rendered.innerHTML).to.equal('');
12
- });
13
-
14
- test('should render nothing with missing value', async () => {
15
- const field = {
16
- editable: 'lorem',
17
- };
18
- const rendered = await renderAstroComponent(File, {
19
- props: { field: field },
20
- });
21
- expect(rendered.innerHTML).to.equal('');
22
- });
23
-
24
- test('should render with src directly on provided field', async () => {
25
- const field = {
26
- src: '/lorem',
27
- title: 'ipsum',
28
- };
29
- const rendered = (
30
- await renderAstroComponent(File, {
31
- props: { field: field },
32
- })
33
- ).querySelector('a');
34
- expect(rendered?.outerHTML).to.contain(field.src);
35
- expect(rendered?.outerHTML).to.contain(field.title);
36
- });
37
-
38
- test('should render display name if no title', async () => {
39
- const field = {
40
- value: {
41
- src: '/lorem',
42
- displayName: 'ipsum',
43
- },
44
- };
45
- const rendered = (
46
- await renderAstroComponent(File, {
47
- props: { field: field },
48
- })
49
- ).querySelector('a');
50
- expect(rendered?.outerHTML).to.contain(field.value.displayName);
51
- });
52
-
53
- test('should render other attributes with other props provided', async () => {
54
- const field = {
55
- value: {
56
- src: '/lorem',
57
- title: 'ipsum',
58
- },
59
- };
60
- const rendered = (
61
- await renderAstroComponent(File, {
62
- props: { field: field, id: 'my-file', class: 'my-css' },
63
- })
64
- ).querySelector('a');
65
- expect(rendered?.outerHTML).to.contain('id="my-file"');
66
- expect(rendered?.outerHTML).to.contain('class="my-css"');
67
- });
68
- });
@@ -1,36 +0,0 @@
1
- import { describe, test, expect } from 'vitest';
2
- import { renderAstroComponent } from '../tests/astro-helpers';
3
- import HiddenRendering from './HiddenRendering.astro';
4
-
5
- describe('<HiddenRendering />', () => {
6
- test('should render', async () => {
7
- const rendered = await renderAstroComponent(HiddenRendering, {
8
- props: { container: document.body },
9
- });
10
-
11
- expect(rendered.querySelectorAll('div > *')).to.have.length(1);
12
-
13
- const style = rendered
14
- .querySelector('div')
15
- ?.getAttribute('style')
16
- ?.trim()
17
- ?.split(';')
18
- .reduce<Record<string, string>>((acc, style) => {
19
- if (style.split(':')[0]) acc[style.split(':')[0].trim()] = style.split(':')[1].trim();
20
- return acc;
21
- }, {});
22
-
23
- // Instead of checking exact equality, we'll verify required styles are present
24
- expect(style).to.include({
25
- 'background-size': '3px 3px',
26
- display: 'flex',
27
- 'justify-content': 'center',
28
- 'align-items': 'center',
29
- padding: '30px',
30
- color: '#aaa',
31
- });
32
-
33
- // Verify the div contains the expected text
34
- expect(rendered.textContent).to.equal('The component is hidden');
35
- });
36
- });