shakapacker 6.5.5 → 6.5.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +11 -7
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +21 -0
  4. data/.github/workflows/ruby.yml +3 -1
  5. data/.gitignore +3 -3
  6. data/.rspec +1 -0
  7. data/CHANGELOG.md +18 -2
  8. data/CONTRIBUTING.md +11 -1
  9. data/Gemfile.development_dependencies +3 -1
  10. data/README.md +41 -8
  11. data/Rakefile +4 -5
  12. data/gemfiles/Gemfile-rails-edge +1 -1
  13. data/gemfiles/Gemfile-rails.5.2.x +1 -1
  14. data/gemfiles/Gemfile-rails.6.0.x +1 -1
  15. data/gemfiles/Gemfile-rails.6.1.x +1 -1
  16. data/gemfiles/Gemfile-rails.7.0.x +1 -1
  17. data/lib/install/template.rb +21 -16
  18. data/lib/tasks/webpacker/compile.rake +5 -10
  19. data/lib/webpacker/helper.rb +20 -9
  20. data/lib/webpacker/version.rb +1 -1
  21. data/package/rules/__tests__/__utils__/webpack.js +50 -0
  22. data/package/rules/__tests__/babel.js +63 -0
  23. data/package/rules/__tests__/esbuild.js +64 -0
  24. data/package/rules/__tests__/index.js +0 -4
  25. data/package/rules/__tests__/swc.js +64 -0
  26. data/package/rules/babel.js +3 -14
  27. data/package/rules/esbuild.js +2 -13
  28. data/package/rules/jscommon.js +26 -0
  29. data/package/rules/swc.js +2 -13
  30. data/package/utils/helpers.js +1 -1
  31. data/package.json +8 -2
  32. data/spec/command_spec.rb +114 -0
  33. data/spec/compiler_spec.rb +57 -0
  34. data/spec/compiler_strategy_spec.rb +20 -0
  35. data/spec/configuration_spec.rb +281 -0
  36. data/{test/dev_server_runner_test.rb → spec/dev_server_runner_spec.rb} +30 -40
  37. data/spec/dev_server_spec.rb +45 -0
  38. data/spec/digest_strategy_spec.rb +33 -0
  39. data/{test/engine_rake_tasks_test.rb → spec/engine_rake_tasks_spec.rb} +17 -9
  40. data/spec/env_spec.rb +21 -0
  41. data/{test → spec}/fixtures/beta_package-lock.v1.json +0 -0
  42. data/{test → spec}/fixtures/beta_package-lock.v2.json +0 -0
  43. data/{test → spec}/fixtures/beta_package.json +0 -0
  44. data/{test → spec}/fixtures/beta_yarn.v1.lock +0 -0
  45. data/{test → spec}/fixtures/beta_yarn.v2.lock +0 -0
  46. data/{test → spec}/fixtures/git_url_package-lock.v1.json +0 -0
  47. data/{test → spec}/fixtures/git_url_package-lock.v2.json +0 -0
  48. data/{test → spec}/fixtures/git_url_package.json +0 -0
  49. data/{test → spec}/fixtures/git_url_yarn.v1.lock +0 -0
  50. data/{test → spec}/fixtures/git_url_yarn.v2.lock +0 -0
  51. data/{test → spec}/fixtures/github_url_package-lock.v1.json +0 -0
  52. data/{test → spec}/fixtures/github_url_package-lock.v2.json +0 -0
  53. data/{test → spec}/fixtures/github_url_package.json +0 -0
  54. data/{test → spec}/fixtures/github_url_yarn.v1.lock +0 -0
  55. data/{test → spec}/fixtures/github_url_yarn.v2.lock +0 -0
  56. data/{test → spec}/fixtures/relative_path_package-lock.v1.json +0 -0
  57. data/{test → spec}/fixtures/relative_path_package-lock.v2.json +0 -0
  58. data/{test → spec}/fixtures/relative_path_package.json +0 -0
  59. data/{test → spec}/fixtures/relative_path_yarn.v1.lock +0 -0
  60. data/{test → spec}/fixtures/relative_path_yarn.v2.lock +0 -0
  61. data/{test → spec}/fixtures/semver_caret_package-lock.v1.json +0 -0
  62. data/{test → spec}/fixtures/semver_caret_package-lock.v2.json +0 -0
  63. data/{test → spec}/fixtures/semver_caret_package.json +0 -0
  64. data/{test → spec}/fixtures/semver_caret_yarn.v1.lock +0 -0
  65. data/{test → spec}/fixtures/semver_caret_yarn.v2.lock +0 -0
  66. data/{test → spec}/fixtures/semver_exact_package-lock.v1.json +0 -0
  67. data/{test → spec}/fixtures/semver_exact_package-lock.v2.json +0 -0
  68. data/{test → spec}/fixtures/semver_exact_package.json +0 -0
  69. data/{test → spec}/fixtures/semver_exact_yarn.v1.lock +0 -0
  70. data/{test → spec}/fixtures/semver_exact_yarn.v2.lock +0 -0
  71. data/{test → spec}/fixtures/semver_tilde_package-lock.v1.json +0 -0
  72. data/{test → spec}/fixtures/semver_tilde_package-lock.v2.json +0 -0
  73. data/{test → spec}/fixtures/semver_tilde_package.json +0 -0
  74. data/{test → spec}/fixtures/semver_tilde_yarn.v1.lock +0 -0
  75. data/{test → spec}/fixtures/semver_tilde_yarn.v2.lock +0 -0
  76. data/{test → spec}/fixtures/without_package-lock.v1.json +0 -0
  77. data/{test → spec}/fixtures/without_package-lock.v2.json +0 -0
  78. data/{test → spec}/fixtures/without_package.json +0 -0
  79. data/{test → spec}/fixtures/without_yarn.v1.lock +0 -0
  80. data/{test → spec}/fixtures/without_yarn.v2.lock +0 -0
  81. data/spec/helper_spec.rb +241 -0
  82. data/spec/manifest_spec.rb +98 -0
  83. data/{test → spec}/mounted_app/Rakefile +0 -0
  84. data/{test → spec}/mounted_app/test/dummy/Rakefile +0 -0
  85. data/{test → spec}/mounted_app/test/dummy/bin/rails +0 -0
  86. data/{test → spec}/mounted_app/test/dummy/bin/rake +0 -0
  87. data/{test → spec}/mounted_app/test/dummy/config/application.rb +0 -0
  88. data/{test → spec}/mounted_app/test/dummy/config/environment.rb +0 -0
  89. data/{test → spec}/mounted_app/test/dummy/config/webpacker.yml +0 -0
  90. data/{test → spec}/mounted_app/test/dummy/config.ru +0 -0
  91. data/{test → spec}/mounted_app/test/dummy/package.json +0 -0
  92. data/spec/mtime_strategy_spec.rb +53 -0
  93. data/spec/rake_tasks_spec.rb +32 -0
  94. data/spec/spec_helper.rb +123 -0
  95. data/{test → spec}/test_app/Rakefile +0 -0
  96. data/{test → spec}/test_app/app/packs/entrypoints/application.js +0 -0
  97. data/{test → spec}/test_app/app/packs/entrypoints/generated/something.js +0 -0
  98. data/{test → spec}/test_app/app/packs/entrypoints/multi_entry.css +0 -0
  99. data/{test → spec}/test_app/app/packs/entrypoints/multi_entry.js +0 -0
  100. data/{test → spec}/test_app/bin/webpacker +0 -0
  101. data/{test → spec}/test_app/bin/webpacker-dev-server +0 -0
  102. data/{test → spec}/test_app/config/application.rb +0 -0
  103. data/{test → spec}/test_app/config/environment.rb +0 -0
  104. data/{test → spec}/test_app/config/initializers/inspect_autoload_paths.rb +0 -0
  105. data/{test → spec}/test_app/config/webpack/webpack.config.js +0 -0
  106. data/{test → spec}/test_app/config/webpacker.yml +0 -0
  107. data/{test → spec}/test_app/config/webpacker_css_extract_ignore_order_warnings.yml +0 -0
  108. data/{test → spec}/test_app/config/webpacker_defaults_fallback.yml +0 -0
  109. data/{test → spec}/test_app/config/webpacker_manifest_path.yml +0 -0
  110. data/{test → spec}/test_app/config/webpacker_nested_entries.yml +0 -0
  111. data/{test → spec}/test_app/config/webpacker_no_precompile.yml +0 -0
  112. data/{test → spec}/test_app/config/webpacker_other_location.yml +0 -0
  113. data/{test → spec}/test_app/config/webpacker_public_root.yml +0 -0
  114. data/{test → spec}/test_app/config.ru +0 -0
  115. data/{test → spec}/test_app/package.json +0 -0
  116. data/{test → spec}/test_app/public/packs/manifest.json +8 -0
  117. data/{test → spec}/test_app/some.config.js +0 -0
  118. data/{test → spec}/test_app/yarn.lock +0 -0
  119. data/spec/version_checker_spec.rb +950 -0
  120. data/{test/webpack_runner_test.rb → spec/webpack_runner_spec.rb} +12 -15
  121. data/spec/webpacker_spec.rb +39 -0
  122. data/yarn.lock +846 -844
  123. metadata +102 -187
  124. data/.github/ISSUE_TEMPLATE/feature-request.md +0 -18
  125. data/lib/tasks/yarn.rake +0 -44
  126. data/test/command_test.rb +0 -109
  127. data/test/compiler_strategy_test.rb +0 -27
  128. data/test/compiler_test.rb +0 -60
  129. data/test/configuration_test.rb +0 -186
  130. data/test/dev_server_test.rb +0 -47
  131. data/test/digest_strategy_test.rb +0 -33
  132. data/test/env_test.rb +0 -23
  133. data/test/helper_test.rb +0 -248
  134. data/test/manifest_test.rb +0 -89
  135. data/test/mtime_strategy_test.rb +0 -42
  136. data/test/rake_tasks_test.rb +0 -37
  137. data/test/test_helper.rb +0 -33
  138. data/test/version_checker_test.rb +0 -826
  139. data/test/webpacker_test.rb +0 -49
@@ -1,186 +0,0 @@
1
- require "test_helper"
2
-
3
- class ConfigurationTest < Webpacker::Test
4
- def setup
5
- @config = Webpacker::Configuration.new(
6
- root_path: Pathname.new(File.expand_path("test_app", __dir__)),
7
- config_path: Pathname.new(File.expand_path("./test_app/config/webpacker.yml", __dir__)),
8
- env: "production"
9
- )
10
- end
11
-
12
- def test_source_path
13
- source_path = File.expand_path File.join(File.dirname(__FILE__), "test_app/app/packs").to_s
14
- assert_equal source_path, @config.source_path.to_s
15
- end
16
-
17
- def test_source_entry_path
18
- source_entry_path = File.expand_path File.join(File.dirname(__FILE__), "test_app/app/packs", "entrypoints").to_s
19
- assert_equal @config.source_entry_path.to_s, source_entry_path
20
- end
21
-
22
- def test_public_root_path
23
- public_root_path = File.expand_path File.join(File.dirname(__FILE__), "test_app/public").to_s
24
- assert_equal @config.public_path.to_s, public_root_path
25
- end
26
-
27
- def test_public_output_path
28
- public_output_path = File.expand_path File.join(File.dirname(__FILE__), "test_app/public/packs").to_s
29
- assert_equal @config.public_output_path.to_s, public_output_path
30
-
31
- @public_root_config = Webpacker::Configuration.new(
32
- root_path: @config.root_path,
33
- config_path: Pathname.new(File.expand_path("./test_app/config/webpacker_public_root.yml", __dir__)),
34
- env: "production"
35
- )
36
-
37
- public_output_path = File.expand_path File.join(File.dirname(__FILE__), "public/packs").to_s
38
- assert_equal @public_root_config.public_output_path.to_s, public_output_path
39
- end
40
-
41
- def test_public_manifest_path
42
- public_manifest_path = File.expand_path File.join(File.dirname(__FILE__), "test_app/public/packs", "manifest.json").to_s
43
- assert_equal @config.public_manifest_path.to_s, public_manifest_path
44
- end
45
-
46
- def test_manifest_path
47
- manifest_path = File.expand_path File.join(File.dirname(__FILE__), "test_app/public/packs", "manifest.json").to_s
48
- assert_equal @config.manifest_path.to_s, manifest_path
49
-
50
- @manifest_config = Webpacker::Configuration.new(
51
- root_path: @config.root_path,
52
- config_path: Pathname.new(File.expand_path("./test_app/config/webpacker_manifest_path.yml", __dir__)),
53
- env: "production"
54
- )
55
-
56
- manifest_path = File.expand_path File.join(File.dirname(__FILE__), "test_app/app/packs", "manifest.json").to_s
57
- assert_equal @manifest_config.manifest_path.to_s, manifest_path
58
- end
59
-
60
- def test_cache_path
61
- cache_path = File.expand_path File.join(File.dirname(__FILE__), "test_app/tmp/webpacker").to_s
62
- assert_equal @config.cache_path.to_s, cache_path
63
- end
64
-
65
- def test_additional_paths
66
- assert_equal @config.additional_paths, ["app/assets", "/etc/yarn", "some.config.js", "app/elm"]
67
- end
68
-
69
- def test_cache_manifest?
70
- assert @config.cache_manifest?
71
-
72
- with_rails_env("development") do
73
- refute Webpacker.config.cache_manifest?
74
- end
75
-
76
- with_rails_env("test") do
77
- refute Webpacker.config.cache_manifest?
78
- end
79
- end
80
-
81
- def test_compile?
82
- refute @config.compile?
83
-
84
- with_rails_env("development") do
85
- assert Webpacker.config.compile?
86
- end
87
-
88
- with_rails_env("test") do
89
- assert Webpacker.config.compile?
90
- end
91
- end
92
-
93
- def test_nested_entries?
94
- refute @config.nested_entries?
95
-
96
- with_rails_env("development") do
97
- refute Webpacker.config.nested_entries?
98
- end
99
-
100
- with_rails_env("test") do
101
- refute Webpacker.config.nested_entries?
102
- end
103
- end
104
-
105
- def test_ensure_consistent_versioning?
106
- refute @config.ensure_consistent_versioning?
107
-
108
- with_rails_env("development") do
109
- assert Webpacker.config.ensure_consistent_versioning?
110
- end
111
-
112
- with_rails_env("test") do
113
- refute Webpacker.config.ensure_consistent_versioning?
114
- end
115
- end
116
-
117
- def test_webpacker_precompile
118
- assert @config.webpacker_precompile?
119
-
120
- ENV["WEBPACKER_PRECOMPILE"] = "no"
121
- refute Webpacker.config.webpacker_precompile?
122
-
123
- ENV["WEBPACKER_PRECOMPILE"] = "yes"
124
- assert Webpacker.config.webpacker_precompile?
125
-
126
- ENV["WEBPACKER_PRECOMPILE"] = "false"
127
- refute Webpacker.config.webpacker_precompile?
128
-
129
- ENV["WEBPACKER_PRECOMPILE"] = "true"
130
- assert Webpacker.config.webpacker_precompile?
131
-
132
- ENV["WEBPACKER_PRECOMPILE"] = "n"
133
- refute Webpacker.config.webpacker_precompile?
134
-
135
- ENV["WEBPACKER_PRECOMPILE"] = "y"
136
- assert Webpacker.config.webpacker_precompile?
137
-
138
- ENV["WEBPACKER_PRECOMPILE"] = "f"
139
- refute Webpacker.config.webpacker_precompile?
140
-
141
- ENV["WEBPACKER_PRECOMPILE"] = "t"
142
- assert Webpacker.config.webpacker_precompile?
143
-
144
- @no_precompile_config = Webpacker::Configuration.new(
145
- root_path: @config.root_path,
146
- config_path: Pathname.new(File.expand_path("./test_app/config/webpacker_no_precompile.yml", __dir__)),
147
- env: "production"
148
- )
149
-
150
- assert @no_precompile_config.webpacker_precompile?
151
-
152
- ENV["WEBPACKER_PRECOMPILE"] = nil
153
-
154
- refute @no_precompile_config.webpacker_precompile?
155
-
156
- @invalid_path_config = Webpacker::Configuration.new(
157
- root_path: @config.root_path,
158
- config_path: Pathname.new(File.expand_path("./test_app/config/invalid_path.yml", __dir__)),
159
- env: "default"
160
- )
161
-
162
- refute @invalid_path_config.webpacker_precompile?
163
- end
164
-
165
- def test_fall_back_to_bundled_config_with_the_same_name_for_standard_environments
166
- @no_default_config = Webpacker::Configuration.new(
167
- root_path: @config.root_path,
168
- config_path: Pathname.new(File.expand_path("./test_app/config/webpacker_defaults_fallback.yml", __dir__)),
169
- env: "default"
170
- )
171
-
172
- refute @no_default_config.cache_manifest? # fall back to "default" config from bundled file
173
- refute @no_default_config.webpacker_precompile? # use "default" config from custom file
174
- end
175
-
176
- def test_fall_back_to_bundled_production_config_for_custom_environments
177
- @no_env_config = Webpacker::Configuration.new(
178
- root_path: @config.root_path,
179
- config_path: Pathname.new(File.expand_path("./test_app/config/webpacker_defaults_fallback.yml", __dir__)),
180
- env: "staging"
181
- )
182
-
183
- assert @no_env_config.cache_manifest? # fall back to "production" config from bundled file
184
- refute @no_env_config.webpacker_precompile? # use "staging" config from custom file
185
- end
186
- end
@@ -1,47 +0,0 @@
1
- require "test_helper"
2
-
3
- class DevServerTest < Webpacker::Test
4
- def test_running?
5
- refute Webpacker.dev_server.running?
6
- end
7
-
8
- def test_host
9
- with_rails_env("development") do
10
- assert_equal Webpacker.dev_server.host, "localhost"
11
- end
12
- end
13
-
14
- def test_port
15
- with_rails_env("development") do
16
- assert_equal Webpacker.dev_server.port, 3035
17
- end
18
- end
19
-
20
- def test_https?
21
- with_rails_env("development") do
22
- assert_equal Webpacker.dev_server.https?, false
23
- end
24
- end
25
-
26
- def test_protocol
27
- with_rails_env("development") do
28
- assert_equal Webpacker.dev_server.protocol, "http"
29
- end
30
- end
31
-
32
- def test_host_with_port
33
- with_rails_env("development") do
34
- assert_equal Webpacker.dev_server.host_with_port, "localhost:3035"
35
- end
36
- end
37
-
38
- def test_pretty?
39
- with_rails_env("development") do
40
- refute Webpacker.dev_server.pretty?
41
- end
42
- end
43
-
44
- def test_default_env_prefix
45
- assert_equal Webpacker::DevServer::DEFAULT_ENV_PREFIX, "WEBPACKER_DEV_SERVER"
46
- end
47
- end
@@ -1,33 +0,0 @@
1
- require "test_helper"
2
-
3
- class DigestStrategyTest < Minitest::Test
4
- def remove_compilation_digest_path
5
- @digest_strategy.send(:compilation_digest_path).tap do |path|
6
- path.delete if path.exist?
7
- end
8
- end
9
-
10
- def setup
11
- @digest_strategy = Webpacker::DigestStrategy.new
12
- remove_compilation_digest_path
13
- end
14
-
15
- def teardown
16
- remove_compilation_digest_path
17
- end
18
-
19
- def test_freshness
20
- assert @digest_strategy.stale?
21
- assert !@digest_strategy.fresh?
22
- end
23
-
24
- def test_freshness_after_compilation_hook
25
- @digest_strategy.after_compile_hook
26
- assert @digest_strategy.fresh?
27
- assert !@digest_strategy.stale?
28
- end
29
-
30
- def test_compilation_digest_path
31
- assert_equal @digest_strategy.send(:compilation_digest_path).basename.to_s, "last-compilation-digest-#{Webpacker.env}"
32
- end
33
- end
data/test/env_test.rb DELETED
@@ -1,23 +0,0 @@
1
- require "test_helper"
2
-
3
- class EnvTest < Webpacker::Test
4
- def test_current
5
- assert_equal Webpacker.env, Rails.env
6
- end
7
-
8
- def test_custom_without_config
9
- with_rails_env("foo") do
10
- assert_equal Webpacker.env, "production"
11
- end
12
- end
13
-
14
- def test_custom_with_config
15
- with_rails_env("staging") do
16
- assert_equal Webpacker.env, "staging"
17
- end
18
- end
19
-
20
- def test_default
21
- assert_equal Webpacker::DEFAULT_ENV, "production"
22
- end
23
- end
data/test/helper_test.rb DELETED
@@ -1,248 +0,0 @@
1
- require "test_helper"
2
-
3
- class HelperTest < ActionView::TestCase
4
- tests Webpacker::Helper
5
-
6
- attr_reader :request
7
-
8
- def setup
9
- @request = Class.new do
10
- def send_early_hints(links) end
11
- def base_url
12
- "https://example.com"
13
- end
14
- end.new
15
-
16
- @javascript_pack_tag_loaded = nil
17
- end
18
-
19
- def test_asset_pack_path
20
- assert_equal "/packs/bootstrap-300631c4f0e0f9c865bc.js", asset_pack_path("bootstrap.js")
21
- assert_equal "/packs/bootstrap-c38deda30895059837cf.css", asset_pack_path("bootstrap.css")
22
- end
23
-
24
- def test_asset_pack_url
25
- assert_equal "https://example.com/packs/bootstrap-300631c4f0e0f9c865bc.js", asset_pack_url("bootstrap.js")
26
- assert_equal "https://example.com/packs/bootstrap-c38deda30895059837cf.css", asset_pack_url("bootstrap.css")
27
- end
28
-
29
- def test_image_pack_path
30
- assert_equal "/packs/application-k344a6d59eef8632c9d1.png", image_pack_path("application.png")
31
- assert_equal "/packs/static/image-c38deda30895059837cf.jpg", image_pack_path("image.jpg")
32
- assert_equal "/packs/static/image-c38deda30895059837cf.jpg", image_pack_path("static/image.jpg")
33
- assert_equal "/packs/static/nested/image-c38deda30895059837cf.jpg", image_pack_path("nested/image.jpg")
34
- assert_equal "/packs/static/nested/image-c38deda30895059837cf.jpg", image_pack_path("static/nested/image.jpg")
35
- end
36
-
37
- def test_image_pack_url
38
- assert_equal "https://example.com/packs/application-k344a6d59eef8632c9d1.png", image_pack_url("application.png")
39
- assert_equal "https://example.com/packs/static/image-c38deda30895059837cf.jpg", image_pack_url("image.jpg")
40
- assert_equal "https://example.com/packs/static/image-c38deda30895059837cf.jpg", image_pack_url("static/image.jpg")
41
- assert_equal "https://example.com/packs/static/nested/image-c38deda30895059837cf.jpg", image_pack_url("nested/image.jpg")
42
- assert_equal "https://example.com/packs/static/nested/image-c38deda30895059837cf.jpg", image_pack_url("static/nested/image.jpg")
43
- end
44
-
45
- def test_image_pack_tag
46
- assert_equal \
47
- "<img alt=\"Edit Entry\" src=\"/packs/application-k344a6d59eef8632c9d1.png\" width=\"16\" height=\"10\" />",
48
- image_pack_tag("application.png", size: "16x10", alt: "Edit Entry")
49
- assert_equal \
50
- "<img alt=\"Edit Entry\" src=\"/packs/static/image-c38deda30895059837cf.jpg\" width=\"16\" height=\"10\" />",
51
- image_pack_tag("image.jpg", size: "16x10", alt: "Edit Entry")
52
- assert_equal \
53
- "<img alt=\"Edit Entry\" src=\"/packs/static/image-c38deda30895059837cf.jpg\" width=\"16\" height=\"10\" />",
54
- image_pack_tag("static/image.jpg", size: "16x10", alt: "Edit Entry")
55
- assert_equal \
56
- "<img alt=\"Edit Entry\" src=\"/packs/static/nested/image-c38deda30895059837cf.jpg\" width=\"16\" height=\"10\" />",
57
- image_pack_tag("nested/image.jpg", size: "16x10", alt: "Edit Entry")
58
- assert_equal \
59
- "<img alt=\"Edit Entry\" src=\"/packs/static/nested/image-c38deda30895059837cf.jpg\" width=\"16\" height=\"10\" />",
60
- image_pack_tag("static/nested/image.jpg", size: "16x10", alt: "Edit Entry")
61
- assert_equal \
62
- "<img srcset=\"/packs/static/image-2x-7cca48e6cae66ec07b8e.jpg 2x\" src=\"/packs/static/image-c38deda30895059837cf.jpg\" />",
63
- image_pack_tag("static/image.jpg", srcset: { "static/image-2x.jpg" => "2x" })
64
- end
65
-
66
- def test_favicon_pack_tag
67
- assert_equal \
68
- "<link rel=\"apple-touch-icon\" type=\"image/png\" href=\"/packs/application-k344a6d59eef8632c9d1.png\" />",
69
- favicon_pack_tag("application.png", rel: "apple-touch-icon", type: "image/png")
70
- assert_equal \
71
- "<link rel=\"apple-touch-icon\" type=\"image/png\" href=\"/packs/static/mb-icon-c38deda30895059837cf.png\" />",
72
- favicon_pack_tag("mb-icon.png", rel: "apple-touch-icon", type: "image/png")
73
- assert_equal \
74
- "<link rel=\"apple-touch-icon\" type=\"image/png\" href=\"/packs/static/mb-icon-c38deda30895059837cf.png\" />",
75
- favicon_pack_tag("static/mb-icon.png", rel: "apple-touch-icon", type: "image/png")
76
- assert_equal \
77
- "<link rel=\"apple-touch-icon\" type=\"image/png\" href=\"/packs/static/nested/mb-icon-c38deda30895059837cf.png\" />",
78
- favicon_pack_tag("nested/mb-icon.png", rel: "apple-touch-icon", type: "image/png")
79
- assert_equal \
80
- "<link rel=\"apple-touch-icon\" type=\"image/png\" href=\"/packs/static/nested/mb-icon-c38deda30895059837cf.png\" />",
81
- favicon_pack_tag("static/nested/mb-icon.png", rel: "apple-touch-icon", type: "image/png")
82
- end
83
-
84
- def test_preload_pack_asset
85
- if self.class.method_defined?(:preload_link_tag)
86
- assert_equal \
87
- %(<link rel="preload" href="/packs/fonts/fa-regular-400-944fb546bd7018b07190a32244f67dc9.woff2" as="font" type="font/woff2" crossorigin="anonymous">),
88
- preload_pack_asset("fonts/fa-regular-400.woff2")
89
- else
90
- error = assert_raises do
91
- preload_pack_asset("fonts/fa-regular-400.woff2")
92
- end
93
-
94
- assert_equal \
95
- "You need Rails >= 5.2 to use this tag.",
96
- error.message
97
- end
98
- end
99
-
100
- def test_javascript_pack_tag
101
- assert_equal \
102
- %(<script src="/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js" defer="defer"></script>\n) +
103
- %(<script src="/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js" defer="defer"></script>\n) +
104
- %(<script src="/packs/application-k344a6d59eef8632c9d1.js" defer="defer"></script>\n) +
105
- %(<script src="/packs/bootstrap-300631c4f0e0f9c865bc.js" defer="defer"></script>),
106
- javascript_pack_tag("application", "bootstrap")
107
- end
108
-
109
- def test_javascript_pack_with_no_defer_tag
110
- assert_equal \
111
- %(<script src="/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js"></script>\n) +
112
- %(<script src="/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js"></script>\n) +
113
- %(<script src="/packs/application-k344a6d59eef8632c9d1.js"></script>\n) +
114
- %(<script src="/packs/bootstrap-300631c4f0e0f9c865bc.js"></script>),
115
- javascript_pack_tag("application", "bootstrap", defer: false)
116
- end
117
-
118
- def test_javascript_pack_with_append
119
- append_javascript_pack_tag("bootstrap", defer: false)
120
- assert_equal \
121
- %(<script src="/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js" defer="defer"></script>\n) +
122
- %(<script src="/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js" defer="defer"></script>\n) +
123
- %(<script src="/packs/application-k344a6d59eef8632c9d1.js" defer="defer"></script>\n) +
124
- %(<script src="/packs/bootstrap-300631c4f0e0f9c865bc.js"></script>),
125
- javascript_pack_tag("application")
126
- end
127
-
128
- def test_append_javascript_pack_tag_raises
129
- error = assert_raises do
130
- javascript_pack_tag("application")
131
- append_javascript_pack_tag("bootstrap", defer: false)
132
- end
133
-
134
- assert_equal \
135
- "You can only call append_javascript_pack_tag before javascript_pack_tag helper. " +
136
- "Please refer to https://github.com/shakacode/shakapacker/blob/master/README.md#view-helper-append_javascript_pack_tag-and-append_stylesheet_pack_tag for the usage guide",
137
- error.message
138
- end
139
-
140
- def test_javascript_pack_tag_splat
141
- assert_equal \
142
- %(<script src="/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js" defer="defer"></script>\n) +
143
- %(<script src="/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js" defer="defer"></script>\n) +
144
- %(<script src="/packs/application-k344a6d59eef8632c9d1.js" defer="defer"></script>),
145
- javascript_pack_tag("application", defer: true)
146
- end
147
-
148
- def test_javascript_pack_tag_symbol
149
- assert_equal \
150
- %(<script src="/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js" defer="defer"></script>\n) +
151
- %(<script src="/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js" defer="defer"></script>\n) +
152
- %(<script src="/packs/application-k344a6d59eef8632c9d1.js" defer="defer"></script>),
153
- javascript_pack_tag(:application)
154
- end
155
-
156
- def test_javascript_pack_tag_multiple_invocations
157
- error = assert_raises do
158
- javascript_pack_tag(:application)
159
- javascript_pack_tag(:bootstrap)
160
- end
161
-
162
- assert_equal \
163
- "To prevent duplicated chunks on the page, you should call javascript_pack_tag only once on the page. " +
164
- "Please refer to https://github.com/shakacode/shakapacker/blob/master/README.md#view-helpers-javascript_pack_tag-and-stylesheet_pack_tag for the usage guide",
165
- error.message
166
- end
167
-
168
- def application_stylesheet_chunks
169
- %w[/packs/1-c20632e7baf2c81200d3.chunk.css /packs/application-k344a6d59eef8632c9d1.chunk.css]
170
- end
171
-
172
- def hello_stimulus_stylesheet_chunks
173
- %w[/packs/1-c20632e7baf2c81200d3.chunk.css /packs/hello_stimulus-k344a6d59eef8632c9d1.chunk.css]
174
- end
175
-
176
- def test_stylesheet_pack_tag
177
- assert_equal \
178
- (application_stylesheet_chunks + hello_stimulus_stylesheet_chunks).uniq
179
- .map { |chunk| stylesheet_link_tag(chunk) }.join("\n"),
180
- stylesheet_pack_tag("application", "hello_stimulus")
181
- end
182
-
183
- def test_stylesheet_pack_tag_symbol
184
- assert_equal \
185
- (application_stylesheet_chunks + hello_stimulus_stylesheet_chunks).uniq
186
- .map { |chunk| stylesheet_link_tag(chunk) }.join("\n"),
187
- stylesheet_pack_tag(:application, :hello_stimulus)
188
- end
189
-
190
- def test_stylesheet_pack_tag_splat
191
- assert_equal \
192
- (application_stylesheet_chunks).map { |chunk| stylesheet_link_tag(chunk, media: "all") }.join("\n"),
193
- stylesheet_pack_tag("application", media: "all")
194
- end
195
-
196
- def test_stylesheet_pack_tag_multiple_invocations_are_allowed
197
- app_style = stylesheet_pack_tag(:application)
198
- stimulus_style = stylesheet_pack_tag(:hello_stimulus)
199
-
200
- assert_equal \
201
- application_stylesheet_chunks.map { |chunk| stylesheet_link_tag(chunk) }.join("\n"),
202
- app_style
203
-
204
- assert_equal \
205
- hello_stimulus_stylesheet_chunks.map { |chunk| stylesheet_link_tag(chunk) }.join("\n"),
206
- stimulus_style
207
-
208
- assert_nothing_raised do
209
- stylesheet_pack_tag(:application)
210
- stylesheet_pack_tag(:hello_stimulus)
211
- end
212
- end
213
-
214
- def test_stylesheet_pack_with_append
215
- append_stylesheet_pack_tag(:hello_stimulus)
216
-
217
- assert_equal \
218
- (application_stylesheet_chunks + hello_stimulus_stylesheet_chunks).uniq.map { |chunk| stylesheet_link_tag(chunk) }.join("\n"),
219
- stylesheet_pack_tag(:application)
220
- end
221
-
222
- def test_stylesheet_pack_with_duplicate_append
223
- append_stylesheet_pack_tag(:hello_stimulus)
224
- append_stylesheet_pack_tag(:application)
225
-
226
- assert_equal \
227
- (application_stylesheet_chunks + hello_stimulus_stylesheet_chunks).uniq.map { |chunk| stylesheet_link_tag(chunk) }.join("\n"),
228
- stylesheet_pack_tag(:application)
229
- end
230
-
231
- def test_multiple_stylesheet_pack_with_different_media_attr
232
- app_style = stylesheet_pack_tag(:application)
233
- app_style_with_media = stylesheet_pack_tag(:application, media: "print")
234
- hello_stimulus_style_with_media = stylesheet_pack_tag(:hello_stimulus, media: "all")
235
-
236
- assert_equal \
237
- application_stylesheet_chunks.map { |chunk| stylesheet_link_tag(chunk) }.join("\n"),
238
- app_style
239
-
240
- assert_equal \
241
- application_stylesheet_chunks.map { |chunk| stylesheet_link_tag(chunk, media: "print") }.join("\n"),
242
- app_style_with_media
243
-
244
- assert_equal \
245
- hello_stimulus_stylesheet_chunks.map { |chunk| stylesheet_link_tag(chunk, media: "all") }.join("\n"),
246
- hello_stimulus_style_with_media
247
- end
248
- end
@@ -1,89 +0,0 @@
1
- require "test_helper"
2
-
3
- class ManifestTest < Minitest::Test
4
- def test_lookup_exception!
5
- asset_file = "calendar.js"
6
-
7
- error = assert_raises_manifest_missing_entry_error do
8
- Webpacker.manifest.lookup!(asset_file)
9
- end
10
-
11
- assert_match "Shakapacker can't find #{asset_file} in #{manifest_path}", error.message
12
- end
13
-
14
- def test_lookup_with_type_exception!
15
- asset_file = "calendar"
16
-
17
- error = assert_raises_manifest_missing_entry_error do
18
- Webpacker.manifest.lookup!(asset_file, type: :javascript)
19
- end
20
-
21
- assert_match "Shakapacker can't find #{asset_file}.js in #{manifest_path}", error.message
22
- end
23
-
24
- def test_lookup_success!
25
- assert_equal Webpacker.manifest.lookup!("bootstrap.js"), "/packs/bootstrap-300631c4f0e0f9c865bc.js"
26
- end
27
-
28
- def test_lookup_with_chunks_without_extension_success!
29
- assert_equal ["/packs/bootstrap-300631c4f0e0f9c865bc.js"], Webpacker.manifest.lookup_pack_with_chunks!("bootstrap", type: :javascript)
30
- end
31
-
32
- def test_lookup_with_chunks_with_extension_success!
33
- assert_equal ["/packs/bootstrap-300631c4f0e0f9c865bc.js"], Webpacker.manifest.lookup_pack_with_chunks!("bootstrap.js", type: :javascript)
34
- end
35
-
36
- def test_lookup_with_chunks_without_extension_subdir_success!
37
- assert_equal ["/packs/print/application-983b6c164a47f7ed49cd.css"], Webpacker.manifest.lookup_pack_with_chunks!("print/application", type: :css)
38
- end
39
-
40
- def test_lookup_with_chunks_with_extension_subdir_success!
41
- assert_equal ["/packs/print/application-983b6c164a47f7ed49cd.css"], Webpacker.manifest.lookup_pack_with_chunks!("print/application.css", type: :css)
42
- end
43
-
44
- def test_lookup_nil
45
- assert_nil Webpacker.manifest.lookup("foo.js")
46
- end
47
-
48
- def test_lookup_chunks_nil
49
- assert_nil Webpacker.manifest.lookup_pack_with_chunks("foo.js")
50
- end
51
-
52
- def test_lookup_success
53
- assert_equal Webpacker.manifest.lookup("bootstrap.js"), "/packs/bootstrap-300631c4f0e0f9c865bc.js"
54
- end
55
-
56
- def test_lookup_entrypoint_exception!
57
- asset_file = "calendar"
58
-
59
- error = assert_raises_manifest_missing_entry_error do
60
- Webpacker.manifest.lookup_pack_with_chunks!(asset_file, type: :javascript)
61
- end
62
-
63
- assert_match "Shakapacker can't find #{asset_file}.js in #{manifest_path}", error.message
64
- end
65
-
66
- def test_lookup_entrypoint
67
- application_entrypoints = [
68
- "/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js",
69
- "/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js",
70
- "/packs/application-k344a6d59eef8632c9d1.js"
71
- ]
72
-
73
- assert_equal Webpacker.manifest.lookup_pack_with_chunks!("application", type: :javascript), application_entrypoints
74
- end
75
-
76
- private
77
-
78
- def assert_raises_manifest_missing_entry_error(&block)
79
- error = nil
80
- Webpacker.config.stub :compile?, false do
81
- error = assert_raises Webpacker::Manifest::MissingEntryError, &block
82
- end
83
- error
84
- end
85
-
86
- def manifest_path
87
- File.expand_path File.join(File.dirname(__FILE__), "test_app/public/packs", "manifest.json").to_s
88
- end
89
- end
@@ -1,42 +0,0 @@
1
- require "test_helper"
2
-
3
- class MtimeStrategyTest < Minitest::Test
4
- def setup
5
- @mtime_strategy = Webpacker::MtimeStrategy.new
6
- @manifest_timestamp = Time.parse("2021-01-01 12:34:56 UTC")
7
- end
8
-
9
- def with_stubs(latest_timestamp:, manifest_exists: true)
10
- @mtime_strategy.stub :latest_modified_timestamp, latest_timestamp do
11
- FileTest.stub :exist?, manifest_exists do
12
- File.stub :mtime, @manifest_timestamp do
13
- yield
14
- end
15
- end
16
- end
17
- end
18
-
19
- def test_freshness_when_manifest_missing
20
- latest_timestamp = @manifest_timestamp + 3600
21
-
22
- with_stubs(latest_timestamp: latest_timestamp.to_i, manifest_exists: false) do
23
- assert @mtime_strategy.stale?
24
- end
25
- end
26
-
27
- def test_freshness_when_manifest_older
28
- latest_timestamp = @manifest_timestamp + 3600
29
-
30
- with_stubs(latest_timestamp: latest_timestamp.to_i) do
31
- assert @mtime_strategy.stale?
32
- end
33
- end
34
-
35
- def test_freshness_when_manifest_newer
36
- latest_timestamp = @manifest_timestamp - 3600
37
-
38
- with_stubs(latest_timestamp: latest_timestamp.to_i) do
39
- assert @mtime_strategy.fresh?
40
- end
41
- end
42
- end