@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,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
- });