@@ -399,6 +399,163 @@ sites:
399399 b .AssertFileContent ("public/guest/v1.4.0/en/p2/index.html" , "title: EN p2|" )
400400}
401401
402+ func TestContentFilesMountSitesMatrixResourcesVersionsAndLanguages (t * testing.T ) {
403+ // The assertions below seems reasonable, but it's also a constructed and very rare corner case
404+ // that's hard to support without adding too much complexity.
405+ // Keep the test for now in case I can come up with something simple.
406+ t .Skip ("TODO" )
407+ t .Parallel ()
408+
409+ filesTemplate := `
410+ -- hugo.toml --
411+ disableKinds = ["taxonomy", "term", "rss", "sitemap", "section"]
412+ defaultContentLanguage = "en"
413+ defaultContentLanguageInSubDir = true
414+ defaultContentVersion = "v1.2.3"
415+ defaultContentVersionInSubDir = true
416+ [languages]
417+ [languages.en]
418+ weight = 1
419+ [languages.nn]
420+ weight = 2
421+ [versions]
422+ [versions."v1.2.3"]
423+ [versions."v2.0.0"]
424+
425+ [[module.mounts]]
426+ source = 'content/v1'
427+ target = 'content'
428+ [module.mounts.sites.matrix]
429+ versions = ["v1.2.*"]
430+ languages = ["*"]
431+ [[module.mounts]]
432+ source = 'content/v2'
433+ target = 'content'
434+ [module.mounts.sites.matrix]
435+ versions = ["v2.0.*"]
436+ languages = ["*"]
437+ -- content/v1/p1/index.en.md --
438+ ---
439+ title: "Title English v1"
440+ ---
441+ -- content/v2/p1/index.en.md --
442+ ---
443+ title: "Title English v2"
444+ ---
445+ -- content/v1/p1/index.nn.md --
446+ ---
447+ title: "Tittel Nynorsk"
448+ ---
449+ -- content/v2/p1/mytext.nn.txt --
450+ Tekst Nynorsk
451+ -- layouts/all.html --
452+ Resources: {{ range .Resources }}{{ .RelPermalink }}|{{ end }}$
453+ `
454+
455+ b := hugolib .Test (t , filesTemplate )
456+ b .AssertFileContent ("public/v1.2.3/nn/p1/index.html" , "Resources: $" )
457+ b .AssertFileContent ("public/v1.2.3/en/p1/index.html" , "Resources: $" )
458+ b .AssertFileContent ("public/v2.0.0/en/p1/index.html" , "Resources: /v2.0.0/en/p1/mytext.nn.txt|$" )
459+ }
460+
461+ func TestFileMountSitesMatrixResourcesRoles (t * testing.T ) {
462+ filesTemplate := `
463+ -- hugo.toml --
464+ disableKinds = ["taxonomy", "term", "rss", "sitemap", "section"]
465+ defaultContentRole = "guest"
466+ defaultContentRoleInSubDir = true
467+ [roles]
468+ [roles.guest]
469+ weight = 300
470+ [roles.member]
471+ weight = 200
472+ [mounts]
473+ [[module.mounts]]
474+ source = 'content/guest'
475+ target = 'content'
476+ [module.mounts.sites.matrix]
477+ roles = "guest"
478+ [[module.mounts]]
479+ source = 'content/member'
480+ target = 'content'
481+ [module.mounts.sites.matrix]
482+ roles = "member"
483+ -- layouts/all.html --
484+ {{ .Title }}|{{ .RelPermalink }}|Resources: {{ range .Resources }}{{ .RelPermalink }}|{{ end }}$
485+ -- content/guest/p1/index.md --
486+ ---
487+ title: "Guest Gallery"
488+ ---
489+ -- content/member/p1/index.md --
490+ ---
491+ title: "Member Gallery"
492+ ---
493+ -- content/guest/p1/mytext.txt --
494+ Text Guest
495+ -- content/member/p1/mytext2.txt --
496+ Text Member
497+
498+ `
499+
500+ t .Run ("Issue 1" , func (t * testing.T ) {
501+ t .Parallel ()
502+ files := strings .Replace (filesTemplate , "content/member/p1/index.md" , "content/member/p1_removed/index.md" , 1 )
503+ files = strings .Replace (files , `roles = "guest"` , `roles = "*"` , 1 )
504+ b := hugolib .Test (t , files )
505+
506+ // The current behavior is well intended: We avoid copying the same resources to multiple places.
507+ // But for the typical role use case, this typically leads to 404 errors for shared resources in the member section.
508+ b .AssertFileContent ("public/guest/p1/index.html" , "Guest Gallery|/guest/p1/|Resources: /guest/p1/mytext.txt|/guest/p1/mytext2.txt|$" )
509+ b .AssertFileContent ("public/member/p1/index.html" , "Guest Gallery|/member/p1/|Resources: /member/p1/mytext.txt|/member/p1/mytext2.txt|$" )
510+ })
511+
512+ t .Run ("Issue 2" , func (t * testing.T ) {
513+ t .Parallel ()
514+ files := filesTemplate
515+ b := hugolib .Test (t , files )
516+
517+ // This comes from how we handled languages before we added version and role:
518+ // You would typically add 1 image resources and then translate the markdown files to multiple languages.
519+ // To make sure that all languages got a complete set when doing Page.Resources, we pull in missing resources from, in this case, the member section.
520+ // This obviously doesn't work for the role dimension, but it works for the language dimension, and we need to make sure that we don't break that.
521+ b .AssertFileContent ("public/guest/p1/index.html" , "Guest Gallery|/guest/p1/|Resources: /guest/p1/mytext.txt|$" )
522+ b .AssertFileContent ("public/member/p1/index.html" , "Member Gallery|/member/p1/|Resources: /member/p1/mytext2.txt|$" )
523+ })
524+ }
525+
526+ func TestFileMountSitesMatrixResourcesRolesContentAdapter (t * testing.T ) {
527+ files := `
528+ -- hugo.toml --
529+ disableKinds = ["taxonomy", "term", "rss", "sitemap", "section"]
530+ defaultContentRole = "guest"
531+ defaultContentRoleInSubDir = true
532+ [roles]
533+ [roles.guest]
534+ weight = 300
535+ [roles.member]
536+ weight = 200
537+ -- layouts/all.html --
538+ {{ .Title }}|{{ .RelPermalink }}|Resources: {{ range .Resources }}{{ .RelPermalink }}|{{ end }}$
539+ -- content/_content.gotmpl --
540+ {{ $guest := dict "roles" "guest" }}
541+ {{ $member := dict "roles" "member" }}
542+ {{ $contentMarkdownGuest := dict "value" "**Guest**" "mediaType" "text/markdown" }}
543+ {{ $contentMarkdownMember := dict "value" "**Member**" "mediaType" "text/markdown" }}
544+ {{ $contentTextGuest:= dict "value" "Guest" "mediaType" "text/plain" }}
545+ {{ $contentTextMember:= dict "value" "Member" "mediaType" "text/plain" }}
546+ {{ .AddPage (dict "path" "p1" "title" "P1 guest" "content" $contentMarkdownGuest "sites" (dict "matrix" $guest )) }}
547+ {{ .AddPage (dict "path" "p1" "title" "P1 member" "content" $contentMarkdownMember "sites" (dict "matrix" $member )) }}
548+
549+ {{ .AddResource (dict "path" "p1/hello1.txt" "title" "Hello guest" "content" $contentTextGuest "sites" (dict "matrix" $guest )) }}
550+ {{ .AddResource (dict "path" "p1/hello2.txt" "title" "Hello member" "content" $contentTextMember "sites" (dict "matrix" $member )) }}
551+ {{ .AddResource (dict "path" "p1/hello3.txt" "title" "Hello member 2" "content" $contentTextMember "sites" (dict "matrix" $member )) }}
552+
553+ `
554+ b := hugolib .Test (t , files )
555+ b .AssertFileContent ("public/member/p1/index.html" , "P1 member|/member/p1/|Resources: /member/p1/hello2.txt|/member/p1/hello3.txt|$" )
556+ b .AssertFileContent ("public/guest/p1/index.html" , "P1 guest|/guest/p1/|Resources: /guest/p1/hello1.txt|$" )
557+ }
558+
402559func TestGetPageAndRef (t * testing.T ) {
403560 t .Parallel ()
404561
@@ -1605,8 +1762,6 @@ defaultContentVersionInSubDir = true
16051762[versions]
16061763[versions."v1"]
16071764[versions."v2"]
1608-
1609- [module]
16101765[[module.mounts]]
16111766source = 'content'
16121767target = 'content'
0 commit comments