@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,520 +0,0 @@
1
- /* eslint-disable dot-notation */
2
- /* eslint-disable no-unused-expressions, @typescript-eslint/no-unused-expressions */
3
- import * as chai from 'chai';
4
- import { use } from 'chai';
5
- import sinonChai from 'sinon-chai';
6
- import sinon from 'sinon';
7
- import chaiString from 'chai-string';
8
- import { MiddlewareBase, REWRITE_HEADER_NAME } from './middleware';
9
- import { SiteResolver } from '../site';
10
- import { PreviewCookies } from '../editing';
11
- import { APIContext, AstroCookieSetOptions, MiddlewareHandler, RewritePayload } from 'astro';
12
-
13
- use(sinonChai);
14
- const expect = chai.use(chaiString).expect;
15
-
16
- class MockSiteResolver extends SiteResolver {
17
- getByName = sinon.stub().callsFake((siteName: string) => ({
18
- name: siteName,
19
- language: 'en',
20
- hostName: 'foo.net',
21
- }));
22
-
23
- getByHost = sinon.stub().callsFake((hostName: string) => ({
24
- name: 'foo',
25
- language: 'en',
26
- hostName,
27
- }));
28
- }
29
-
30
- const createContext = (props: any = {}) => {
31
- const context = {
32
- request: {
33
- url: props?.url,
34
- headers: {
35
- get(key: string) {
36
- const headers = {
37
- ...context.request.headers,
38
- ...props?.headerValues,
39
- };
40
- return headers[key];
41
- },
42
- append(key: string, value: string | Record<string, any>) {
43
- context.request.headers[key] = value;
44
- },
45
- },
46
- },
47
- cookies: {
48
- get(cookieName: string) {
49
- const cookies = { ...props?.cookieValues };
50
- return cookies[cookieName] ? { value: cookies[cookieName] } : undefined;
51
- },
52
- set(
53
- cookieName: string,
54
- value: string | Record<string, any>,
55
- options?: AstroCookieSetOptions
56
- ) {
57
- context.cookies[cookieName] = { value, ...options };
58
- },
59
- ...props?.cookies,
60
- ...props.cookieValues,
61
- },
62
- locals: props.locals || {},
63
- url: props?.url,
64
- currentLocale: props.currentLocale,
65
- preferredLocale: props.preferredLocale,
66
- // eslint-disable-next-line no-unused-vars
67
- rewrite: (_) => props.response,
68
- } as APIContext;
69
-
70
- return context;
71
- };
72
-
73
- const createResponse = (props: any = {}) => {
74
- const response = {
75
- ...props,
76
- url: props.url,
77
- headers: {
78
- get(key: string) {
79
- const headers = {
80
- ...response.headers,
81
- ...props.headerValues,
82
- };
83
- return headers[key];
84
- },
85
- append(key: string, value: string | Record<string, any>) {
86
- response.headers[key] = value;
87
- },
88
- ...props.headers,
89
- },
90
- } as Response;
91
-
92
- return response;
93
- };
94
-
95
- describe('MiddlewareBase', () => {
96
- class SampleMiddleware extends MiddlewareBase {
97
- handle: MiddlewareHandler = () => {};
98
- }
99
-
100
- describe('defaultHostname', () => {
101
- it('should set default hostname', () => {
102
- const middleware = new SampleMiddleware({ sites: [] });
103
-
104
- expect(middleware['defaultHostname']).to.equal('localhost');
105
- });
106
-
107
- it('should set custom hostname', () => {
108
- const middleware = new SampleMiddleware({
109
- sites: [],
110
- defaultHostname: 'foo',
111
- });
112
-
113
- expect(middleware['defaultHostname']).to.equal('foo');
114
- });
115
- });
116
-
117
- describe('isPreview', () => {
118
- it('should return true when preview data cookie is provided', () => {
119
- const middleware = new SampleMiddleware({ sites: [] });
120
- const context = createContext({
121
- cookieValues: {
122
- [PreviewCookies.PREVIEW_DATA]: 'value',
123
- },
124
- });
125
-
126
- expect(middleware['isPreview'](context)).to.equal(true);
127
- });
128
-
129
- it('should return false when required cookie is not provided', () => {
130
- const middleware = new SampleMiddleware({ sites: [] });
131
- const context = createContext({});
132
-
133
- expect(middleware['isPreview'](context)).to.equal(false);
134
- });
135
- });
136
- /*
137
- describe('isPrefetch', () => {
138
- it('should return true when purpose header is prefetch', () => {
139
- const middleware = new SampleMiddleware({ sites: [] });
140
- const req = createReq({
141
- headerValues: {
142
- purpose: 'prefetch',
143
- },
144
- });
145
-
146
- expect(middleware['isPrefetch'](req)).to.equal(true);
147
- });
148
-
149
- it('should return true when Next-Router-Prefetch header is 1', () => {
150
- const middleware = new SampleMiddleware({ sites: [] });
151
- const req = createReq({
152
- headerValues: {
153
- 'Next-Router-Prefetch': '1',
154
- },
155
- });
156
-
157
- expect(middleware['isPrefetch'](req)).to.equal(true);
158
- });
159
-
160
- it('should return true when x-middleware-prefetch header is 1', () => {
161
- const middleware = new SampleMiddleware({ sites: [] });
162
- const req = createReq({
163
- headerValues: {
164
- 'x-middleware-prefetch': '1',
165
- },
166
- });
167
-
168
- expect(middleware['isPrefetch'](req)).to.equal(true);
169
- });
170
-
171
- it('should return false when required header is not provided', () => {
172
- const middleware = new SampleMiddleware({ sites: [] });
173
- const req = createReq();
174
-
175
- expect(middleware['isPrefetch'](req)).to.equal(false);
176
- });
177
-
178
- it('returns false for known device with x-middleware-prefetch header', () => {
179
- const middleware = new SampleMiddleware({ sites: [] });
180
- const req = createReq({
181
- headerValues: {
182
- 'x-middleware-prefetch': '1',
183
- 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X)',
184
- },
185
- });
186
-
187
- expect(middleware['isPrefetch'](req)).to.equal(false);
188
- });
189
-
190
- it('should return true when it is a desktop device and purpose is prefetch', () => {
191
- const middleware = new SampleMiddleware({ sites: [] });
192
- const req = createReq({
193
- headerValues: {
194
- purpose: 'prefetch',
195
- 'sec-ch-ua-mobile': '?0',
196
- },
197
- });
198
-
199
- expect(middleware['isPrefetch'](req)).to.equal(true);
200
- });
201
- });
202
- */
203
- describe('disabled / skip', () => {
204
- it('default', () => {
205
- const middleware = new SampleMiddleware({ sites: [] });
206
-
207
- expect(
208
- middleware['disabled'](
209
- createContext({
210
- url: {
211
- pathname: '/api/layout/render',
212
- },
213
- }),
214
- createResponse()
215
- )
216
- ).to.equal(true);
217
-
218
- expect(
219
- middleware['disabled'](
220
- createContext({
221
- url: {
222
- pathname: '/sitecore/render',
223
- },
224
- }),
225
- createResponse()
226
- )
227
- ).to.equal(true);
228
- });
229
-
230
- it('custom function', () => {
231
- const middleware = new SampleMiddleware({
232
- sites: [],
233
- skip(context: APIContext) {
234
- return context.url.pathname === 'foo';
235
- },
236
- });
237
-
238
- expect(
239
- middleware['disabled'](
240
- createContext({
241
- url: {
242
- pathname: 'bar',
243
- },
244
- }),
245
- createResponse()
246
- )
247
- ).to.equal(false);
248
- expect(
249
- middleware['disabled'](
250
- createContext({
251
- url: {
252
- pathname: 'foo',
253
- },
254
- }),
255
- createResponse()
256
- )
257
- ).to.equal(true);
258
- });
259
- });
260
-
261
- describe('disabled in chain', () => {
262
- it('should return false if skipMiddleware local variable is not set or false', () => {
263
- const middleware = new SampleMiddleware({ sites: [] });
264
-
265
- expect(
266
- middleware['disabledInChain'](
267
- createContext({
268
- url: {
269
- pathname: '/api/layout/render',
270
- },
271
- locals: {
272
- skipMiddleware: false,
273
- },
274
- }),
275
- createResponse()
276
- )
277
- ).to.equal(false);
278
-
279
- expect(
280
- middleware['disabledInChain'](
281
- createContext({
282
- url: {
283
- pathname: '/api/layout/render',
284
- },
285
- }),
286
- createResponse()
287
- )
288
- ).to.equal(false);
289
- });
290
-
291
- it('should return true if skipMiddleware local variable is true', () => {
292
- const middleware = new SampleMiddleware({ sites: [] });
293
-
294
- expect(
295
- middleware['disabledInChain'](
296
- createContext({
297
- url: {
298
- pathname: '/api/layout/render',
299
- },
300
- locals: {
301
- skipMiddleware: true,
302
- },
303
- }),
304
- createResponse()
305
- )
306
- ).to.equal(true);
307
- });
308
- });
309
-
310
- it('extractDebugHeaders', () => {
311
- const middleware = new SampleMiddleware({ sites: [] });
312
-
313
- const headers = new Headers({});
314
- headers.set('foo', 'net');
315
- headers.set('bar', 'one');
316
-
317
- expect(middleware['extractDebugHeaders'](headers)).to.deep.equal({
318
- foo: 'net',
319
- bar: 'one',
320
- });
321
- });
322
-
323
- describe('getHostHeader', () => {
324
- it('should return default hostname when header is not present', () => {
325
- const middleware = new SampleMiddleware({ sites: [] });
326
- const context = createContext({
327
- headerValues: {
328
- foo: 'one',
329
- },
330
- });
331
-
332
- expect(middleware['getHostHeader'](context)).to.equal(undefined);
333
- });
334
-
335
- it('should return host header', () => {
336
- const middleware = new SampleMiddleware({ sites: [] });
337
- const context = createContext({
338
- headerValues: {
339
- foo: 'one',
340
- host: 'bar.net:9999',
341
- },
342
- });
343
-
344
- expect(middleware['getHostHeader'](context)).to.equal('bar.net');
345
- });
346
-
347
- it('should return x-forwarded-host header when present', () => {
348
- const middleware = new SampleMiddleware({ sites: [] });
349
-
350
- const context = createContext({
351
- headerValues: {
352
- 'x-forwarded-host': 'proxy.forwarded.com',
353
- host: 'localhost:3000',
354
- },
355
- });
356
-
357
- expect(middleware['getHostHeader'](context)).to.equal('proxy.forwarded.com');
358
- });
359
- });
360
-
361
- describe('getLanguage', () => {
362
- it('should return defined language', () => {
363
- const middleware = new SampleMiddleware({ sites: [] });
364
- const context = createContext({
365
- currentLocale: 'be',
366
- preferredLocale: 'fr',
367
- });
368
-
369
- expect(middleware['getLanguage'](context)).to.equal('be');
370
- });
371
-
372
- it('should return defined default language', () => {
373
- const middleware = new SampleMiddleware({ sites: [] });
374
- const context = createContext({
375
- preferredLocale: 'fr',
376
- });
377
-
378
- expect(middleware['getLanguage'](context)).to.equal('fr');
379
- });
380
-
381
- it('should use fallback language from config when present', () => {
382
- const middleware = new SampleMiddleware({
383
- sites: [],
384
- defaultLanguage: 'es-ES',
385
- });
386
- const context = createContext();
387
-
388
- expect(middleware['getLanguage'](context)).to.equal('es-ES');
389
- });
390
-
391
- it('should return fallback language', () => {
392
- const middleware = new SampleMiddleware({ sites: [] });
393
- const context = createContext();
394
-
395
- expect(middleware['getLanguage'](context)).to.equal('en');
396
- });
397
- });
398
-
399
- describe('getSite', () => {
400
- it('should get site by name when site cookie is provided', () => {
401
- const context = createContext();
402
-
403
- const res = createResponse({
404
- headers: {
405
- 'Set-Cookie': 'sc_site=xxx',
406
- },
407
- });
408
-
409
- const middleware = new SampleMiddleware({ sites: [] });
410
- middleware['siteResolver'] = new MockSiteResolver([]);
411
-
412
- expect(middleware['getSite'](context, res).name).to.equal('xxx');
413
- expect(middleware['siteResolver'].getByName).to.be.calledWith('xxx');
414
- });
415
-
416
- it('should get default site info when site cookie is provided', () => {
417
- class MockSiteResolver extends SiteResolver {
418
- // eslint-disable-next-line no-unused-vars
419
- getByName = sinon.stub().callsFake((_siteName: string) => undefined);
420
- }
421
-
422
- const context = createContext();
423
-
424
- const res = createResponse({
425
- headers: {
426
- 'Set-Cookie': 'sc_site=xxx',
427
- },
428
- });
429
-
430
- const middleware = new SampleMiddleware({ sites: [] });
431
- middleware['siteResolver'] = new MockSiteResolver([]);
432
-
433
- expect(middleware['getSite'](context, res)).deep.equal({
434
- name: 'xxx',
435
- language: 'en',
436
- hostName: '*',
437
- });
438
- expect(middleware['siteResolver'].getByName).to.be.calledWith('xxx');
439
- });
440
- });
441
-
442
- it('should get site by host header', () => {
443
- const context = createContext({
444
- headerValues: {
445
- host: 'xxx.net:9999',
446
- },
447
- });
448
- const middleware = new SampleMiddleware({ sites: [] });
449
- middleware['siteResolver'] = new MockSiteResolver([]);
450
-
451
- expect(middleware['getSite'](context).hostName).to.equal('xxx.net');
452
- expect(middleware['siteResolver'].getByHost).to.be.calledWith('xxx.net');
453
- });
454
-
455
- it('should get site by default host', () => {
456
- const context = createContext();
457
- const middleware = new SampleMiddleware({ sites: [] });
458
- middleware['siteResolver'] = new MockSiteResolver([]);
459
-
460
- expect(middleware['getSite'](context).hostName).to.equal('localhost');
461
- expect(middleware['siteResolver'].getByHost).to.be.calledWith('localhost');
462
- });
463
-
464
- it('should get site by custom default host', () => {
465
- const context = createContext();
466
-
467
- const middleware = new SampleMiddleware({
468
- sites: [],
469
- defaultHostname: 'yyy.net',
470
- });
471
- middleware['siteResolver'] = new MockSiteResolver([]);
472
-
473
- expect(middleware['getSite'](context).hostName).to.equal('yyy.net');
474
- expect(middleware['siteResolver'].getByHost).to.be.calledWith('yyy.net');
475
- });
476
-
477
- describe('rewrite', () => {
478
- it('should add header by default', async () => {
479
- const middleware = new SampleMiddleware({ sites: [] });
480
- const url = new URL('http://localhost:3000/not-found');
481
-
482
- const context = createContext({
483
- url: url,
484
- });
485
-
486
- const mockNext = async (rewritePath?: RewritePayload) => {
487
- return createResponse({
488
- url: rewritePath,
489
- headers: [],
490
- });
491
- };
492
-
493
- const response = await middleware['rewrite']('/new', context, mockNext);
494
-
495
- expect(response.headers.get(REWRITE_HEADER_NAME)).to.equal('/new');
496
- expect(response.url.toString()).to.endWith('/new');
497
- });
498
-
499
- it('should not rewrite header when skipHeader is true', async () => {
500
- const middleware = new SampleMiddleware({ sites: [] });
501
- const url = new URL('http://localhost:3000/not-found');
502
-
503
- const context = createContext({
504
- url: url,
505
- });
506
-
507
- const mockNext = async (rewritePath?: RewritePayload) => {
508
- return createResponse({
509
- url: rewritePath,
510
- headers: [],
511
- });
512
- };
513
-
514
- const response = await middleware['rewrite']('/new', context, mockNext, true);
515
-
516
- expect(response.headers.get(REWRITE_HEADER_NAME)).to.be.undefined;
517
- expect(response.url.toString()).to.endWith('/new');
518
- });
519
- });
520
- });