@exdst-sitecore-content-sdk/astro 0.0.23 → 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 (72) hide show
  1. package/package.json +9 -14
  2. package/src/client/sitecore-astro-client.ts +0 -45
  3. package/src/context.ts +14 -16
  4. package/src/env.d.ts +1 -1
  5. package/src/sharedTypes/component-props.ts +0 -10
  6. package/src/tools/generate-map.ts +9 -21
  7. package/src/client/sitecore-astro-client.test.ts +0 -292
  8. package/src/components/AstroImage.astro.test.ts +0 -541
  9. package/src/components/Date.astro.test.ts +0 -197
  10. package/src/components/EditingScripts.astro.test.ts +0 -267
  11. package/src/components/ErrorBoundary.astro.test.ts +0 -252
  12. package/src/components/ErrorComponent.astro.test.ts +0 -31
  13. package/src/components/FieldMetadata.astro.test.ts +0 -40
  14. package/src/components/File.astro.test.ts +0 -68
  15. package/src/components/HiddenRendering.astro.test.ts +0 -36
  16. package/src/components/Image.astro.test.ts +0 -438
  17. package/src/components/Link.astro.test.ts +0 -261
  18. package/src/components/MissingComponent.astro.test.ts +0 -21
  19. package/src/components/Placeholder/Placeholder.astro.test.ts +0 -1088
  20. package/src/components/Placeholder/PlaceholderMetadata.astro.test.ts +0 -228
  21. package/src/components/Placeholder/PlaceholderUtils.astro.test.ts +0 -149
  22. package/src/components/Placeholder/placeholder-utils.test.ts +0 -309
  23. package/src/components/RichText.astro.test.ts +0 -205
  24. package/src/components/Text.astro.test.ts +0 -273
  25. package/src/config/define-config.test.ts +0 -526
  26. package/src/config-cli/define-cli-config.test.ts +0 -88
  27. package/src/editing/editing-config-middleware.test.ts +0 -164
  28. package/src/editing/editing-render-middleware.test.ts +0 -1143
  29. package/src/editing/render-middleware.test.ts +0 -57
  30. package/src/editing/utils.test.ts +0 -1212
  31. package/src/enhancers/WithEmptyFieldEditingComponent.astro.test.ts +0 -380
  32. package/src/enhancers/WithFieldMetadata.astro.test.ts +0 -113
  33. package/src/middleware/middleware.test.ts +0 -520
  34. package/src/middleware/multisite-middleware.test.ts +0 -667
  35. package/src/middleware/robots-middleware.test.ts +0 -129
  36. package/src/middleware/sitemap-middleware.test.ts +0 -184
  37. package/src/services/component-props-service.ts +0 -183
  38. package/src/tests/astro-helpers.ts +0 -61
  39. package/src/tests/helpers.ts +0 -46
  40. package/src/tests/personalizeData.ts +0 -63
  41. package/src/tests/test-components/CustomErrorComponent.astro +0 -3
  42. package/src/tests/test-components/CustomHiddenRendering.astro +0 -10
  43. package/src/tests/test-components/CustomMissingComponent.astro +0 -9
  44. package/src/tests/test-components/DownloadCallout.astro +0 -12
  45. package/src/tests/test-components/EmptyFieldEditingComponent.astro +0 -5
  46. package/src/tests/test-components/ErrorBoundaryWithError.astro +0 -10
  47. package/src/tests/test-components/Home.astro +0 -12
  48. package/src/tests/test-components/SxaRichText.astro +0 -23
  49. package/src/tests/test-components/SxaRichTextDefault.astro +0 -7
  50. package/src/tests/test-components/SxaRichTextWithTitle.astro +0 -8
  51. package/src/tests/test-components/TestComponent.astro +0 -9
  52. package/src/tests/test-components/TestComponentWithError.astro +0 -4
  53. package/src/tests/test-components/TestComponentWithField.astro +0 -17
  54. package/src/tests/test-components/TestHeader.astro +0 -8
  55. package/src/tests/test-components/TestLogo.astro +0 -5
  56. package/src/tests/test-components/TestParentWrapperComponent.astro +0 -5
  57. package/src/tests/test-components/TestWrapperComponent.astro +0 -5
  58. package/src/tests/test-components/map-components/Bar.astro +0 -0
  59. package/src/tests/test-components/map-components/Baz.astro +0 -0
  60. package/src/tests/test-components/map-components/Foo.astro +0 -0
  61. package/src/tests/test-components/map-components/Hero.variant.astro +0 -0
  62. package/src/tests/test-components/map-components/NotComponent.bsx +0 -0
  63. package/src/tests/test-components/map-components/Qux.astro +0 -0
  64. package/src/tests/test-components/map-components/folded/Folded.astro +0 -0
  65. package/src/tests/test-components/map-components/folded/random-file-2.docx +0 -0
  66. package/src/tests/test-components/map-components/random-file.txt +0 -0
  67. package/src/tests/test-data/metadata-data.ts +0 -86
  68. package/src/tests/test-data/normal-mode-data.ts +0 -466
  69. package/src/tests/vitest.setup.ts +0 -4
  70. package/src/tools/templating/components.test.ts +0 -318
  71. package/src/tools/templating/default-component.test.ts +0 -31
  72. package/src/utils/utils.test.ts +0 -48
@@ -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
- });