@@ -3194,20 +3194,73 @@ describe('domain-based routing', () => {
3194
3194
describe ( 'custom prefixes with pathnames' , ( ) => {
3195
3195
const middlewareWithPrefixes = createMiddleware ( {
3196
3196
defaultLocale : 'en' ,
3197
- locales : [ 'en' , 'en-gb' ] ,
3197
+ locales : [ 'en' , 'en-gb' , 'sv-SE' , 'en-SE' , 'no-NO' , 'en-NO' ] ,
3198
3198
localePrefix : {
3199
3199
mode : 'as-needed' ,
3200
3200
prefixes : {
3201
- 'en-gb' : '/uk'
3201
+ 'en-gb' : '/uk' ,
3202
+ 'en-SE' : '/en' ,
3203
+ 'en-NO' : '/en'
3202
3204
}
3203
3205
} ,
3204
3206
pathnames : {
3205
3207
'/' : '/' ,
3206
3208
'/about' : {
3207
3209
en : '/about' ,
3208
- 'en-gb' : '/about'
3210
+ 'en-gb' : '/about' ,
3211
+ 'en-SE' : '/about' ,
3212
+ 'en-NO' : '/about' ,
3213
+ 'sv-SE' : '/about' ,
3214
+ 'no-NO' : '/about'
3209
3215
}
3210
- } satisfies Pathnames < ReadonlyArray < 'en' | 'en-gb' > >
3216
+ } satisfies Pathnames <
3217
+ ReadonlyArray < 'en' | 'en-gb' | 'sv-SE' | 'en-SE' | 'no-NO' | 'en-NO' >
3218
+ > ,
3219
+ domains : [
3220
+ {
3221
+ defaultLocale : 'en-gb' ,
3222
+ domain : 'example.co.uk' ,
3223
+ locales : [ 'en-gb' ]
3224
+ } ,
3225
+ {
3226
+ defaultLocale : 'sv-SE' ,
3227
+ domain : 'example.se' ,
3228
+ locales : [ 'sv-SE' , 'en-SE' ]
3229
+ } ,
3230
+ {
3231
+ defaultLocale : 'no-NO' ,
3232
+ domain : 'example.no' ,
3233
+ locales : [ 'no-NO' , 'en-NO' ]
3234
+ } ,
3235
+ {
3236
+ defaultLocale : 'en' ,
3237
+ domain : 'example.com' ,
3238
+ locales : [ 'en' ]
3239
+ }
3240
+ ]
3241
+ } ) ;
3242
+
3243
+ it ( 'serves requests for overlapping prefixes' , ( ) => {
3244
+ middlewareWithPrefixes (
3245
+ createMockRequest ( '/' , undefined , 'http://example.com' )
3246
+ ) ;
3247
+ middlewareWithPrefixes (
3248
+ createMockRequest ( '/en' , undefined , 'http://example.no' )
3249
+ ) ;
3250
+ middlewareWithPrefixes (
3251
+ createMockRequest ( '/en' , undefined , 'http://example.se' )
3252
+ ) ;
3253
+ expect ( MockedNextResponse . redirect ) . not . toHaveBeenCalled ( ) ;
3254
+ expect ( MockedNextResponse . rewrite ) . toHaveBeenCalledTimes ( 3 ) ;
3255
+ expect ( MockedNextResponse . rewrite . mock . calls [ 0 ] [ 0 ] . toString ( ) ) . toBe (
3256
+ 'http://example.com/en'
3257
+ ) ;
3258
+ expect ( MockedNextResponse . rewrite . mock . calls [ 1 ] [ 0 ] . toString ( ) ) . toBe (
3259
+ 'http://example.no/en-NO'
3260
+ ) ;
3261
+ expect ( MockedNextResponse . rewrite . mock . calls [ 2 ] [ 0 ] . toString ( ) ) . toBe (
3262
+ 'http://example.se/en-SE'
3263
+ ) ;
3211
3264
} ) ;
3212
3265
3213
3266
it ( 'serves requests for the default locale at the root' , ( ) => {
@@ -3257,24 +3310,33 @@ describe('domain-based routing', () => {
3257
3310
3258
3311
[ '/' , '/uk' ] . forEach ( ( pathname ) => {
3259
3312
expect ( getLinks ( createMockRequest ( pathname ) ) ) . toEqual ( [
3260
- '<http://localhost:3000/>; rel="alternate"; hreflang="en"' ,
3261
- '<http://localhost:3000/uk>; rel="alternate"; hreflang="en-gb"' ,
3262
- '<http://localhost:3000/>; rel="alternate"; hreflang="x-default"'
3313
+ '<http://example.com/>; rel="alternate"; hreflang="en"' ,
3314
+ '<http://example.co.uk/>; rel="alternate"; hreflang="en-gb"' ,
3315
+ '<http://example.se/>; rel="alternate"; hreflang="sv-SE"' ,
3316
+ '<http://example.se/en>; rel="alternate"; hreflang="en-SE"' ,
3317
+ '<http://example.no/>; rel="alternate"; hreflang="no-NO"' ,
3318
+ '<http://example.no/en>; rel="alternate"; hreflang="en-NO"'
3263
3319
] ) ;
3264
3320
} ) ;
3265
3321
3266
3322
[ '/about' , '/uk/about' ] . forEach ( ( pathname ) => {
3267
3323
expect ( getLinks ( createMockRequest ( pathname ) ) ) . toEqual ( [
3268
- '<http://localhost:3000/about>; rel="alternate"; hreflang="en"' ,
3269
- '<http://localhost:3000/uk/about>; rel="alternate"; hreflang="en-gb"' ,
3270
- '<http://localhost:3000/about>; rel="alternate"; hreflang="x-default"'
3324
+ '<http://example.com/about>; rel="alternate"; hreflang="en"' ,
3325
+ '<http://example.co.uk/about>; rel="alternate"; hreflang="en-gb"' ,
3326
+ '<http://example.se/about>; rel="alternate"; hreflang="sv-SE"' ,
3327
+ '<http://example.se/en/about>; rel="alternate"; hreflang="en-SE"' ,
3328
+ '<http://example.no/about>; rel="alternate"; hreflang="no-NO"' ,
3329
+ '<http://example.no/en/about>; rel="alternate"; hreflang="en-NO"'
3271
3330
] ) ;
3272
3331
} ) ;
3273
3332
3274
3333
expect ( getLinks ( createMockRequest ( '/unknown' ) ) ) . toEqual ( [
3275
- '<http://localhost:3000/unknown>; rel="alternate"; hreflang="en"' ,
3276
- '<http://localhost:3000/uk/unknown>; rel="alternate"; hreflang="en-gb"' ,
3277
- '<http://localhost:3000/unknown>; rel="alternate"; hreflang="x-default"'
3334
+ '<http://example.com/unknown>; rel="alternate"; hreflang="en"' ,
3335
+ '<http://example.co.uk/unknown>; rel="alternate"; hreflang="en-gb"' ,
3336
+ '<http://example.se/unknown>; rel="alternate"; hreflang="sv-SE"' ,
3337
+ '<http://example.se/en/unknown>; rel="alternate"; hreflang="en-SE"' ,
3338
+ '<http://example.no/unknown>; rel="alternate"; hreflang="no-NO"' ,
3339
+ '<http://example.no/en/unknown>; rel="alternate"; hreflang="en-NO"'
3278
3340
] ) ;
3279
3341
} ) ;
3280
3342
} ) ;
0 commit comments