vite_rails 1.0.5 → 1.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -0
  3. data/CONTRIBUTING.md +0 -1
  4. data/README.md +31 -69
  5. data/lib/install/javascript/entrypoints/application.js +8 -4
  6. data/lib/install/template.rb +1 -1
  7. data/lib/tasks/vite/build.rake +2 -6
  8. data/lib/tasks/vite/clean.rake +1 -3
  9. data/lib/tasks/vite/info.rake +0 -1
  10. data/lib/tasks/vite/verify_install.rake +3 -3
  11. data/lib/vite_rails.rb +14 -25
  12. data/lib/vite_rails/builder.rb +11 -13
  13. data/lib/vite_rails/commands.rb +51 -10
  14. data/lib/vite_rails/config.rb +65 -30
  15. data/lib/vite_rails/dev_server_proxy.rb +26 -18
  16. data/lib/vite_rails/helper.rb +15 -8
  17. data/lib/vite_rails/manifest.rb +6 -4
  18. data/lib/vite_rails/runner.rb +3 -6
  19. data/lib/vite_rails/version.rb +1 -1
  20. data/package.json +5 -1
  21. data/package/default.vite.json +2 -1
  22. data/test/builder_test.rb +27 -22
  23. data/test/commands_test.rb +67 -0
  24. data/test/config_test.rb +133 -0
  25. data/test/dev_server_proxy_test.rb +101 -0
  26. data/test/dev_server_test.rb +0 -30
  27. data/test/engine_rake_tasks_test.rb +55 -17
  28. data/test/helper_test.rb +37 -105
  29. data/test/manifest_test.rb +33 -29
  30. data/test/mode_test.rb +6 -11
  31. data/test/mounted_app/test/dummy/config/vite.json +5 -11
  32. data/test/mounted_app/test/dummy/package.json +2 -1
  33. data/test/mounted_app/test/dummy/yarn.lock +208 -0
  34. data/test/rake_tasks_test.rb +5 -19
  35. data/test/runner_test.rb +31 -0
  36. data/test/test_app/app/frontend/entrypoints/application.js +2 -0
  37. data/test/test_app/config/vite.json +0 -2
  38. data/test/test_app/config/vite_additional_paths.json +5 -0
  39. data/test/test_app/config/vite_public_dir.json +5 -0
  40. data/test/test_app/public/vite-production/manifest.json +22 -0
  41. data/test/test_helper.rb +48 -14
  42. metadata +23 -25
  43. data/test/command_test.rb +0 -35
  44. data/test/configuration_test.rb +0 -80
  45. data/test/dev_server_runner_test.rb +0 -83
  46. data/test/test_app/app/javascript/entrypoints/application.js +0 -10
  47. data/test/test_app/app/javascript/entrypoints/multi_entry.css +0 -4
  48. data/test/test_app/app/javascript/entrypoints/multi_entry.js +0 -4
  49. data/test/test_app/config/vite_public_root.yml +0 -20
  50. data/test/test_app/public/vite/manifest.json +0 -36
  51. data/test/vite_runner_test.rb +0 -59
  52. data/test/webpacker_test.rb +0 -15
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class CommandsTest < ViteRails::Test
6
+ def stub_builder(stale:, build_with_vite:)
7
+ ViteRails.builder.stub :stale?, stale do
8
+ ViteRails.builder.stub :build_with_vite, build_with_vite do
9
+ yield
10
+ end
11
+ end
12
+ end
13
+
14
+ def test_bootstrap
15
+ assert ViteRails.bootstrap
16
+ end
17
+
18
+ def test_build_returns_success_status_when_stale
19
+ stub_builder(stale: true, build_with_vite: true) {
20
+ assert_equal true, ViteRails.build
21
+ assert_equal true, ViteRails.build_from_rake
22
+ }
23
+ end
24
+
25
+ def test_build_returns_success_status_when_fresh
26
+ stub_builder(stale: false, build_with_vite: true) {
27
+ assert_equal true, ViteRails.build
28
+ assert_equal true, ViteRails.build_from_rake
29
+ }
30
+ end
31
+
32
+ def test_build_returns_failure_status_when_stale
33
+ stub_builder(stale: true, build_with_vite: false) {
34
+ assert_equal false, ViteRails.build
35
+ }
36
+ end
37
+
38
+ def test_clean
39
+ with_rails_env('test') { |config|
40
+ manifest = config.build_output_dir.join('manifest.json')
41
+
42
+ # Should not clean, the manifest does not exist.
43
+ config.build_output_dir.mkdir unless config.build_output_dir.exist?
44
+ refute ViteRails.clean
45
+
46
+ # Should not clean, the file is recent.
47
+ manifest.write('{}')
48
+ assert ViteRails.clean_from_rake(OpenStruct.new)
49
+ assert manifest.exist?
50
+
51
+ # Should clean if we remove age restrictions.
52
+ assert ViteRails.clean(keep_up_to: 0, age_in_seconds: 0)
53
+ assert config.build_output_dir.exist?
54
+ refute manifest.exist?
55
+ }
56
+ end
57
+
58
+ def test_clobber
59
+ with_rails_env('test') { |config|
60
+ config.build_output_dir.mkdir unless config.build_output_dir.exist?
61
+ config.build_output_dir.join('manifest.json').write('{}')
62
+ assert config.build_output_dir.exist?
63
+ ViteRails.clobber
64
+ refute config.build_output_dir.exist?
65
+ }
66
+ end
67
+ end
@@ -0,0 +1,133 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class ConfigTest < ViteRails::Test
6
+ def expand_path(path)
7
+ File.expand_path(Pathname.new(__dir__).join(path).to_s)
8
+ end
9
+
10
+ def assert_path(expected, actual)
11
+ assert_equal expand_path(expected), actual.to_s
12
+ end
13
+
14
+ def assert_pathname(expected, actual)
15
+ assert_equal Pathname.new(expand_path("test_app/#{ expected }")), actual
16
+ end
17
+
18
+ def resolve_config(mode: 'production', root: test_app_path, **attrs)
19
+ ViteRails::Config.resolve_config(mode: mode, root: root, **attrs)
20
+ end
21
+
22
+ def setup
23
+ @config = resolve_config
24
+ end
25
+
26
+ def test_source_code_dir
27
+ assert_equal 'app/frontend', @config.source_code_dir
28
+ end
29
+
30
+ def test_entrypoints_dir
31
+ assert_path 'test_app/app/frontend/entrypoints', @config.resolved_entrypoints_dir
32
+ end
33
+
34
+ def test_public_dir
35
+ assert_equal 'public', @config.public_dir
36
+ end
37
+
38
+ def test_build_output_dir
39
+ assert_path 'test_app/public/vite-production', @config.build_output_dir
40
+
41
+ @config = resolve_config(config_path: 'config/vite_public_dir.json')
42
+ assert_path 'public/vite', @config.build_output_dir
43
+ end
44
+
45
+ def test_manifest_path
46
+ assert_path 'test_app/public/vite-production/manifest.json', @config.manifest_path
47
+ end
48
+
49
+ def test_build_cache_dir
50
+ assert_path 'test_app/tmp/cache/vite', @config.build_cache_dir
51
+ end
52
+
53
+ def test_watch_additional_paths
54
+ assert_equal [], @config.watch_additional_paths
55
+ @config = resolve_config(config_path: 'config/vite_additional_paths.json')
56
+ assert_equal ['config/*'], @config.watch_additional_paths
57
+ end
58
+
59
+ def test_auto_build
60
+ refute @config.auto_build
61
+
62
+ with_rails_env('development') do |config|
63
+ assert config.auto_build
64
+ end
65
+
66
+ with_rails_env('test') do |config|
67
+ assert config.auto_build
68
+ end
69
+
70
+ with_rails_env('staging') do |config|
71
+ refute config.auto_build
72
+ end
73
+ end
74
+
75
+ def test_protocol
76
+ assert_equal 'http', @config.protocol
77
+ end
78
+
79
+ def test_host_with_port
80
+ assert_equal 3036, @config.port
81
+
82
+ with_rails_env('development') do |config|
83
+ assert_equal 3535, config.port
84
+ assert_equal 'localhost:3535', config.host_with_port
85
+ end
86
+ end
87
+
88
+ def test_to_env
89
+ env = @config.to_env
90
+ assert_nil env['VITE_RUBY_ASSET_HOST']
91
+
92
+ Rails.application.config.action_controller.asset_host = 'assets-cdn.com'
93
+ env = refresh_config.to_env
94
+ assert_equal env['VITE_RUBY_ASSET_HOST'], 'assets-cdn.com'
95
+ ensure
96
+ Rails.application.config.action_controller.asset_host = nil
97
+ end
98
+
99
+ def test_environment_vars
100
+ ViteRails.env = {
101
+ 'VITE_RUBY_AUTO_BUILD' => 'true',
102
+ 'VITE_RUBY_HOST' => 'example.com',
103
+ 'VITE_RUBY_PORT' => '1920',
104
+ 'VITE_RUBY_HTTPS' => 'true',
105
+ 'VITE_RUBY_CONFIG_PATH' => 'config/vite_additional_paths.json',
106
+ 'VITE_RUBY_BUILD_CACHE_DIR' => 'tmp/vitebuild',
107
+ 'VITE_RUBY_PUBLIC_DIR' => 'pb',
108
+ 'VITE_RUBY_PUBLIC_OUTPUT_DIR' => 'ft',
109
+ 'VITE_RUBY_ASSETS_DIR' => 'as',
110
+ 'VITE_RUBY_SOURCE_CODE_DIR' => 'app',
111
+ 'VITE_RUBY_ENTRYPOINTS_DIR' => 'frontend/entrypoints',
112
+ 'VITE_RUBY_HIDE_BUILD_CONSOLE_OUTPUT' => 'true',
113
+ }
114
+ @config = resolve_config
115
+ assert_equal true, @config.auto_build
116
+ assert_equal 'example.com', @config.host
117
+ assert_equal 1920, @config.port
118
+ assert_equal true, @config.https
119
+ assert_equal 'https', @config.protocol
120
+ assert_equal 'config/vite_additional_paths.json', @config.config_path
121
+ assert_pathname 'tmp/vitebuild', @config.build_cache_dir
122
+ assert_equal 'pb', @config.public_dir
123
+ assert_equal Pathname.new('ft'), @config.public_output_dir
124
+ assert_pathname 'pb/ft', @config.build_output_dir
125
+ assert_equal 'as', @config.assets_dir
126
+ assert_equal 'app', @config.source_code_dir
127
+ assert_equal 'frontend/entrypoints', @config.entrypoints_dir
128
+ assert_pathname 'app/frontend/entrypoints', @config.resolved_entrypoints_dir
129
+ assert_equal true, @config.hide_build_console_output
130
+ ensure
131
+ ViteRails.env = {}
132
+ end
133
+ end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class DevServerProxyTest < ViteRails::Test
6
+ include Rack::Test::Methods
7
+
8
+ def app
9
+ # Capture all changes to the env made by the proxy.
10
+ capture_app = Rack::Builder.new.run(->(env) {
11
+ [200, { 'Content-Type' => 'application/json' }, env.to_json]
12
+ })
13
+ # Avoid actually using the proxy.
14
+ Rack::Proxy.define_method(:perform_request) { |env| capture_app.call(env) }
15
+
16
+ ViteRails::DevServerProxy.new(capture_app)
17
+ end
18
+
19
+ def test_non_asset
20
+ get_with_dev_server_running '/'
21
+ assert_not_forwarded
22
+ end
23
+
24
+ def test_non_vite_asset
25
+ get_with_dev_server_running '/example_import.js'
26
+ assert_not_forwarded
27
+ end
28
+
29
+ def test_vite_asset
30
+ get_with_dev_server_running '/vite-production/application.js'
31
+ assert_forwarded to: '/application.js'
32
+ end
33
+
34
+ def test_vite_client
35
+ get_with_dev_server_running '/@vite/client'
36
+ assert_forwarded to: '/@vite/client'
37
+ end
38
+
39
+ def test_vite_import
40
+ get_with_dev_server_running '/@fs//package/example/app/frontend/App.vue?import&t=1611322300214&vue&type=style&index=0&lang.css'
41
+ assert_forwarded to: '/@fs//package/example/app/frontend/App.vue?import&t=1611322300214&vue&type=style&index=0&lang.css'
42
+ end
43
+
44
+ def test_hmr_for_stylesheet
45
+ get_with_dev_server_running '/colored.css?t=1611322562923'
46
+ assert_forwarded to: '/colored.css?t=1611322562923'
47
+ end
48
+
49
+ def test_hmr_for_imported_entrypoint
50
+ get_with_dev_server_running '/colored.css?import&t=1611322562923'
51
+ assert_forwarded to: '/colored.css?import&t=1611322562923'
52
+ end
53
+
54
+ def test_entrypoint_imported_from_entrypoint
55
+ header 'Referer', 'http://localhost:3000/vite-production/application.js'
56
+ get_with_dev_server_running '/example_import.js'
57
+ assert_forwarded to: '/example_import.js'
58
+ end
59
+
60
+ def test_without_dev_server_running
61
+ get '/vite-production/application.js'
62
+ assert_not_forwarded
63
+
64
+ get '/colored.css?import&t=1611322562923'
65
+ assert_not_forwarded
66
+
67
+ header 'Referer', 'http://localhost:3000/vite-production/application.js'
68
+ get '/example_import.js'
69
+ assert_not_forwarded
70
+ end
71
+
72
+ private
73
+
74
+ def get_with_dev_server_running(*args)
75
+ with_dev_server_running {
76
+ get(*args)
77
+ }
78
+ end
79
+
80
+ def assert_not_forwarded
81
+ assert last_response.ok?
82
+ env = JSON.parse(last_response.body)
83
+ assert_nil env['HTTP_X_FORWARDED_HOST']
84
+ assert_nil env['HTTP_X_FORWARDED_PORT']
85
+ end
86
+
87
+ def assert_forwarded(to: nil)
88
+ assert last_response.ok?
89
+ env = JSON.parse(last_response.body)
90
+
91
+ assert_equal ViteRails.config.host, env['HTTP_X_FORWARDED_HOST']
92
+ assert_equal ViteRails.config.port, Integer(env['HTTP_X_FORWARDED_PORT'])
93
+
94
+ return unless to
95
+
96
+ path, query = to.split('?')
97
+ assert_equal path, env['PATH_INFO']
98
+ assert_equal query, env['QUERY_STRING']
99
+ assert_equal to, env['REQUEST_URI']
100
+ end
101
+ end
@@ -6,34 +6,4 @@ class DevServerTest < ViteRails::Test
6
6
  def test_running?
7
7
  refute ViteRails.dev_server.running?
8
8
  end
9
-
10
- def test_host
11
- with_rails_env('development') do
12
- assert_equal ViteRails.config.host, 'localhost'
13
- end
14
- end
15
-
16
- def test_port
17
- with_rails_env('development') do
18
- assert_equal ViteRails.config.port, 3035
19
- end
20
- end
21
-
22
- def test_https?
23
- with_rails_env('development') do
24
- assert_equal ViteRails.config.https, false
25
- end
26
- end
27
-
28
- def test_protocol
29
- with_rails_env('development') do
30
- assert_equal ViteRails.config.protocol, 'http'
31
- end
32
- end
33
-
34
- def test_host_with_port
35
- with_rails_env('development') do
36
- assert_equal ViteRails.config.host_with_port, 'localhost:3035'
37
- end
38
- end
39
9
  end
@@ -4,39 +4,77 @@ require 'test_helper'
4
4
 
5
5
  class EngineRakeTasksTest < Minitest::Test
6
6
  def setup
7
- remove_vite_binstubs
7
+ remove_vite_files
8
8
  end
9
9
 
10
10
  def teardown
11
- remove_vite_binstubs
11
+ remove_vite_files
12
12
  end
13
13
 
14
- def test_task_mounted
15
- output = Dir.chdir(mounted_app_path) { `rake -T` }
14
+ def test_tasks_mounted
15
+ output = within_mounted_app { `bundle exec rake -T` }
16
16
  assert_includes output, 'app:vite'
17
17
  end
18
18
 
19
- def test_binstubs
20
- Dir.chdir(mounted_app_path) { `bundle exec rake app:vite:binstubs` }
21
- vite_binstub_paths.each { |path| assert File.exist?(path) }
19
+ def test_rake_tasks
20
+ within_mounted_app { `bundle exec rake app:vite:binstubs` }
21
+ assert vite_binstub_path.exist?
22
+
23
+ within_mounted_app { `bundle exec rake app:vite:install` }
24
+ assert vite_config_ts_path.exist?
25
+ assert app_frontend_dir.exist?
26
+
27
+ within_mounted_app { `bundle exec rake app:vite:build` }
28
+ assert app_public_dir.exist?
29
+ assert app_public_dir.join('manifest.json').exist?
30
+ assert app_public_dir.join('assets').exist?
31
+
32
+ within_mounted_app { `bundle exec rake app:vite:clean` }
33
+ assert app_public_dir.join('manifest.json').exist? # Still fresh
34
+
35
+ within_mounted_app { `bundle exec rake app:vite:clean[0,0]` }
36
+ refute app_public_dir.join('manifest.json').exist?
37
+
38
+ within_mounted_app { `bundle exec rake app:vite:clobber` }
39
+ refute app_public_dir.exist?
40
+ rescue Minitest::Assertion => error
41
+ raise error unless Rails.gem_version >= Gem::Version.new('6.1.0')
22
42
  end
23
43
 
24
44
  private
25
45
 
46
+ def within_mounted_app
47
+ Dir.chdir(mounted_app_path) { yield }
48
+ end
49
+
26
50
  def mounted_app_path
27
- File.expand_path('mounted_app', __dir__)
51
+ Pathname.new(File.expand_path(__dir__)).join('mounted_app')
52
+ end
53
+
54
+ def root_dir
55
+ mounted_app_path.join('test/dummy')
56
+ end
57
+
58
+ def vite_binstub_path
59
+ root_dir.join('bin/vite')
60
+ end
61
+
62
+ def vite_config_ts_path
63
+ root_dir.join('vite.config.ts')
64
+ end
65
+
66
+ def app_frontend_dir
67
+ root_dir.join('app/frontend')
28
68
  end
29
69
 
30
- def vite_binstub_paths
31
- [
32
- "#{ mounted_app_path }/test/dummy/bin/vite",
33
- "#{ mounted_app_path }/test/dummy/bin/vite-dev-server",
34
- ]
70
+ def app_public_dir
71
+ root_dir.join('public/vite-dev')
35
72
  end
36
73
 
37
- def remove_vite_binstubs
38
- vite_binstub_paths.each do |path|
39
- File.delete(path) if File.exist?(path)
40
- end
74
+ def remove_vite_files
75
+ vite_binstub_path.delete if vite_binstub_path.exist?
76
+ vite_config_ts_path.delete if vite_config_ts_path.exist?
77
+ app_frontend_dir.rmtree if app_frontend_dir.exist?
78
+ app_public_dir.rmtree if app_public_dir.exist?
41
79
  end
42
80
  end
@@ -3,6 +3,8 @@
3
3
  require 'test_helper'
4
4
 
5
5
  class HelperTest < ActionView::TestCase
6
+ include ViteRailsTestHelpers
7
+
6
8
  tests ViteRails::Helper
7
9
 
8
10
  attr_reader :request
@@ -17,122 +19,52 @@ class HelperTest < ActionView::TestCase
17
19
  end.new
18
20
  end
19
21
 
20
- def test_asset_pack_path
21
- assert_equal '/packs/bootstrap-300631c4f0e0f9c865bc.js', asset_pack_path('bootstrap.js')
22
- assert_equal '/packs/bootstrap-c38deda30895059837cf.css', asset_pack_path('bootstrap.css')
23
- end
24
-
25
- def test_asset_pack_url
26
- assert_equal 'https://example.com/packs/bootstrap-300631c4f0e0f9c865bc.js', asset_pack_url('bootstrap.js')
27
- assert_equal 'https://example.com/packs/bootstrap-c38deda30895059837cf.css', asset_pack_url('bootstrap.css')
22
+ def test_vite_client_tag
23
+ assert_nil vite_client_tag
24
+ with_dev_server_running {
25
+ assert_equal '<script src="/@vite/client" type="module"></script>', vite_client_tag
26
+ }
28
27
  end
29
28
 
30
- def test_image_pack_path
31
- assert_equal '/packs/application-k344a6d59eef8632c9d1.png', image_pack_path('application.png')
32
- assert_equal '/packs/media/images/image-c38deda30895059837cf.jpg', image_pack_path('image.jpg')
33
- assert_equal '/packs/media/images/image-c38deda30895059837cf.jpg', image_pack_path('media/images/image.jpg')
34
- assert_equal '/packs/media/images/nested/image-c38deda30895059837cf.jpg', image_pack_path('nested/image.jpg')
35
- assert_equal '/packs/media/images/nested/image-c38deda30895059837cf.jpg', image_pack_path('media/images/nested/image.jpg')
29
+ def test_vite_asset_path
30
+ assert_equal '/vite-production/assets/colored.1173bfe0.js', vite_asset_path('colored.js')
31
+ assert_equal '/vite-production/assets/colored.84277fd6.css', vite_asset_path('colored.css')
32
+ with_dev_server_running {
33
+ assert_equal '/vite-production/colored.js', vite_asset_path('colored.js')
34
+ assert_equal '/vite-production/colored.css', vite_asset_path('colored.css')
35
+ }
36
36
  end
37
37
 
38
- def test_image_pack_url
39
- assert_equal 'https://example.com/packs/application-k344a6d59eef8632c9d1.png', image_pack_url('application.png')
40
- assert_equal 'https://example.com/packs/media/images/image-c38deda30895059837cf.jpg', image_pack_url('image.jpg')
41
- assert_equal 'https://example.com/packs/media/images/image-c38deda30895059837cf.jpg', image_pack_url('media/images/image.jpg')
42
- assert_equal 'https://example.com/packs/media/images/nested/image-c38deda30895059837cf.jpg', image_pack_url('nested/image.jpg')
43
- assert_equal 'https://example.com/packs/media/images/nested/image-c38deda30895059837cf.jpg', image_pack_url('media/images/nested/image.jpg')
44
- end
38
+ def test_vite_stylesheet_tag
39
+ assert_equal %(<link rel="stylesheet" media="screen" href="/vite-production/assets/colored.84277fd6.css" />),
40
+ vite_stylesheet_tag('colored')
45
41
 
46
- def test_image_pack_tag
47
- assert_equal \
48
- '<img alt="Edit Entry" src="/packs/application-k344a6d59eef8632c9d1.png" width="16" height="10" />',
49
- image_pack_tag('application.png', size: '16x10', alt: 'Edit Entry')
50
- assert_equal \
51
- '<img alt="Edit Entry" src="/packs/media/images/image-c38deda30895059837cf.jpg" width="16" height="10" />',
52
- image_pack_tag('image.jpg', size: '16x10', alt: 'Edit Entry')
53
- assert_equal \
54
- '<img alt="Edit Entry" src="/packs/media/images/image-c38deda30895059837cf.jpg" width="16" height="10" />',
55
- image_pack_tag('media/images/image.jpg', size: '16x10', alt: 'Edit Entry')
56
- assert_equal \
57
- '<img alt="Edit Entry" src="/packs/media/images/nested/image-c38deda30895059837cf.jpg" width="16" height="10" />',
58
- image_pack_tag('nested/image.jpg', size: '16x10', alt: 'Edit Entry')
59
- assert_equal \
60
- '<img alt="Edit Entry" src="/packs/media/images/nested/image-c38deda30895059837cf.jpg" width="16" height="10" />',
61
- image_pack_tag('media/images/nested/image.jpg', size: '16x10', alt: 'Edit Entry')
62
- assert_equal \
63
- '<img srcset="/packs/media/images/image-2x-7cca48e6cae66ec07b8e.jpg 2x" src="/packs/media/images/image-c38deda30895059837cf.jpg" />',
64
- image_pack_tag('media/images/image.jpg', srcset: { 'media/images/image-2x.jpg' => '2x' })
65
- end
42
+ assert_equal vite_stylesheet_tag('colored'), vite_stylesheet_tag('colored.css')
66
43
 
67
- def test_favicon_pack_tag
68
- assert_equal \
69
- '<link rel="apple-touch-icon" type="image/png" href="/packs/application-k344a6d59eef8632c9d1.png" />',
70
- favicon_pack_tag('application.png', rel: 'apple-touch-icon', type: 'image/png')
71
- assert_equal \
72
- '<link rel="apple-touch-icon" type="image/png" href="/packs/media/images/mb-icon-c38deda30895059837cf.png" />',
73
- favicon_pack_tag('mb-icon.png', rel: 'apple-touch-icon', type: 'image/png')
74
- assert_equal \
75
- '<link rel="apple-touch-icon" type="image/png" href="/packs/media/images/mb-icon-c38deda30895059837cf.png" />',
76
- favicon_pack_tag('media/images/mb-icon.png', rel: 'apple-touch-icon', type: 'image/png')
77
- assert_equal \
78
- '<link rel="apple-touch-icon" type="image/png" href="/packs/media/images/nested/mb-icon-c38deda30895059837cf.png" />',
79
- favicon_pack_tag('nested/mb-icon.png', rel: 'apple-touch-icon', type: 'image/png')
80
- assert_equal \
81
- '<link rel="apple-touch-icon" type="image/png" href="/packs/media/images/nested/mb-icon-c38deda30895059837cf.png" />',
82
- favicon_pack_tag('media/images/nested/mb-icon.png', rel: 'apple-touch-icon', type: 'image/png')
83
- end
44
+ with_dev_server_running {
45
+ assert_equal %(<link rel="stylesheet" media="screen" href="/vite-production/colored.css" />),
46
+ vite_stylesheet_tag('colored')
84
47
 
85
- def test_javascript_pack_tag
86
- assert_equal \
87
- %(<script src="/packs/bootstrap-300631c4f0e0f9c865bc.js"></script>),
88
- javascript_pack_tag('bootstrap.js')
48
+ assert_equal vite_stylesheet_tag('colored'), vite_stylesheet_tag('colored.css')
49
+ }
89
50
  end
90
51
 
91
- def test_javascript_pack_tag_symbol
92
- assert_equal \
93
- %(<script src="/packs/bootstrap-300631c4f0e0f9c865bc.js"></script>),
94
- javascript_pack_tag(:bootstrap)
95
- end
52
+ def test_vite_javascript_tag
53
+ assert_equal [
54
+ %(<script src="/vite-production/assets/application.a0ba047e.js" crossorigin="anonymous" type="module"></script>),
55
+ %(<link rel="preload" href="/vite-production/assets/example_import.8e1fddc0.js" as="script" type="text/javascript" crossorigin="anonymous">),
56
+ %(<link rel="stylesheet" media="screen" href="/vite-production/assets/application.cccfef34.css" />),
57
+ ].join, vite_javascript_tag('application')
96
58
 
97
- def test_javascript_pack_tag_splat
98
- assert_equal \
99
- %(<script src="/packs/bootstrap-300631c4f0e0f9c865bc.js" defer="defer"></script>\n) +
100
- %(<script src="/packs/application-k344a6d59eef8632c9d1.js" defer="defer"></script>),
101
- javascript_pack_tag('bootstrap.js', 'application.js', defer: true)
102
- end
59
+ assert_equal vite_javascript_tag('application'), vite_javascript_tag('application.js')
60
+ assert_equal vite_javascript_tag('application'), vite_typescript_tag('application')
103
61
 
104
- def test_javascript_pack_tag_split_chunks
105
- assert_equal \
106
- %(<script src="/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js"></script>\n) +
107
- %(<script src="/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js"></script>\n) +
108
- %(<script src="/packs/application-k344a6d59eef8632c9d1.js"></script>),
109
- javascript_packs_with_chunks_tag('application')
110
- end
111
-
112
- def test_stylesheet_pack_tag_split_chunks
113
- assert_equal \
114
- %(<link rel="stylesheet" media="screen" href="/packs/1-c20632e7baf2c81200d3.chunk.css" />\n) +
115
- %(<link rel="stylesheet" media="screen" href="/packs/application-k344a6d59eef8632c9d1.chunk.css" />\n) +
116
- %(<link rel="stylesheet" media="screen" href="/packs/hello_stimulus-k344a6d59eef8632c9d1.chunk.css" />),
117
- stylesheet_packs_with_chunks_tag('application', 'hello_stimulus')
118
- end
119
-
120
- def test_stylesheet_pack_tag
121
- assert_equal \
122
- %(<link rel="stylesheet" media="screen" href="/packs/bootstrap-c38deda30895059837cf.css" />),
123
- stylesheet_pack_tag('bootstrap.css')
124
- end
125
-
126
- def test_stylesheet_pack_tag_symbol
127
- assert_equal \
128
- %(<link rel="stylesheet" media="screen" href="/packs/bootstrap-c38deda30895059837cf.css" />),
129
- stylesheet_pack_tag(:bootstrap)
130
- end
62
+ with_dev_server_running {
63
+ assert_equal %(<script src="/vite-production/application.js" crossorigin="anonymous" type="module"></script>),
64
+ vite_javascript_tag('application')
131
65
 
132
- def test_stylesheet_pack_tag_splat
133
- assert_equal \
134
- %(<link rel="stylesheet" media="all" href="/packs/bootstrap-c38deda30895059837cf.css" />\n) +
135
- %(<link rel="stylesheet" media="all" href="/packs/application-dd6b1cd38bfa093df600.css" />),
136
- stylesheet_pack_tag('bootstrap.css', 'application.css', media: 'all')
66
+ assert_equal %(<script src="/vite-production/application.ts" crossorigin="anonymous" type="module"></script>),
67
+ vite_typescript_tag('application')
68
+ }
137
69
  end
138
70
  end