shoelace-rails 0.4.1 → 0.6.0
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.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +11 -61
- data/.gitignore +1 -6
- data/Appraisals +6 -0
- data/CHANGELOG.md +22 -5
- data/Gemfile +0 -3
- data/Rakefile +2 -17
- data/app/helpers/shoelace/form_helper.rb +63 -14
- data/gemfiles/rails_60.gemfile +0 -1
- data/gemfiles/rails_61.gemfile +0 -1
- data/gemfiles/rails_70.gemfile +0 -1
- data/gemfiles/rails_71.gemfile +10 -0
- data/gemfiles/rails_edge.gemfile +0 -1
- data/lib/shoelace/rails/version.rb +1 -1
- data/shoelace-rails.gemspec +1 -1
- data/test/helpers/form_helper_test.rb +40 -11
- data/test/helpers/translation_test.rb +160 -0
- metadata +7 -58
- data/dist/.keep +0 -0
- data/dist/types/.keep +0 -0
- data/package.json +0 -50
- data/rollup.config.js +0 -49
- data/src/index.ts +0 -2
- data/src/turbo/index.ts +0 -6
- data/src/turbo/polyfills/formdata-event.js +0 -27
- data/src/turbo/sl-turbo-form.ts +0 -110
- data/src/turbolinks/features/confirm.ts +0 -42
- data/src/turbolinks/features/disable.ts +0 -94
- data/src/turbolinks/features/remote.ts +0 -107
- data/src/turbolinks/index.ts +0 -6
- data/src/turbolinks/selectors.ts +0 -38
- data/src/turbolinks/start.ts +0 -38
- data/src/turbolinks/turbolinks.ts +0 -78
- data/src/turbolinks/utils/ajax.ts +0 -146
- data/src/turbolinks/utils/csp.ts +0 -20
- data/src/turbolinks/utils/csrf.ts +0 -33
- data/src/turbolinks/utils/dom.ts +0 -40
- data/src/turbolinks/utils/event.ts +0 -57
- data/src/turbolinks/utils/form.ts +0 -58
- data/test/dummy_app/Gemfile +0 -19
- data/test/dummy_app/Rakefile +0 -6
- data/test/dummy_app/app/controllers/hotwire_forms_controller.rb +0 -46
- data/test/dummy_app/app/controllers/turbolinks_forms_controller.rb +0 -37
- data/test/dummy_app/app/models/user.rb +0 -16
- data/test/dummy_app/app/packs/entrypoints/hotwire.js +0 -1
- data/test/dummy_app/app/packs/entrypoints/turbolinks.js +0 -5
- data/test/dummy_app/app/views/hotwire_forms/form.html.erb +0 -45
- data/test/dummy_app/app/views/hotwire_forms/show.html.erb +0 -5
- data/test/dummy_app/app/views/layouts/application.html.erb +0 -39
- data/test/dummy_app/app/views/turbolinks_forms/form.html.erb +0 -44
- data/test/dummy_app/app/views/turbolinks_forms/show.html.erb +0 -5
- data/test/dummy_app/bin/rails +0 -5
- data/test/dummy_app/bin/webpack +0 -18
- data/test/dummy_app/bin/yarn +0 -18
- data/test/dummy_app/config/application.rb +0 -16
- data/test/dummy_app/config/boot.rb +0 -4
- data/test/dummy_app/config/environment.rb +0 -2
- data/test/dummy_app/config/environments/development.rb +0 -10
- data/test/dummy_app/config/environments/test.rb +0 -18
- data/test/dummy_app/config/routes.rb +0 -4
- data/test/dummy_app/config/webpack/development.js +0 -5
- data/test/dummy_app/config/webpack/production.js +0 -1
- data/test/dummy_app/config/webpack/test.js +0 -5
- data/test/dummy_app/config/webpacker.yml +0 -33
- data/test/dummy_app/config.ru +0 -6
- data/test/dummy_app/package.json +0 -24
- data/test/dummy_app/test/system/hotwire_form_test.rb +0 -63
- data/test/dummy_app/test/system/turbolinks_form_test.rb +0 -38
- data/test/dummy_app/test/test_helper.rb +0 -68
- data/tsconfig.json +0 -19
- data/yarn.lock +0 -249
@@ -1,58 +0,0 @@
|
|
1
|
-
// This code was heavily inspired by the rails-ujs project.
|
2
|
-
// Copyright (c) 2007-2021 Rails Core team.
|
3
|
-
import { matches } from "./dom"
|
4
|
-
|
5
|
-
const toArray = (e) => Array.prototype.slice.call(e)
|
6
|
-
|
7
|
-
export const serializeElement = (element, additionalParam) => {
|
8
|
-
let inputs = [element]
|
9
|
-
if (matches(element, "form")) {
|
10
|
-
inputs = toArray(element.elements)
|
11
|
-
}
|
12
|
-
const params = []
|
13
|
-
|
14
|
-
inputs.forEach(function (input) {
|
15
|
-
if (!input.name || input.disabled) {
|
16
|
-
return
|
17
|
-
}
|
18
|
-
|
19
|
-
if (matches(input, "fieldset[disabled] *")) {
|
20
|
-
return
|
21
|
-
}
|
22
|
-
|
23
|
-
if (matches(input, "select")) {
|
24
|
-
return toArray(input.options).forEach(function (option) {
|
25
|
-
if (option.selected) {
|
26
|
-
return params.push({ name: input.name, value: option.value })
|
27
|
-
}
|
28
|
-
})
|
29
|
-
} else if (input.checked || ["radio", "checkbox", "submit"].indexOf(input.type) === -1) {
|
30
|
-
return params.push({ name: input.name, value: input.value })
|
31
|
-
}
|
32
|
-
})
|
33
|
-
|
34
|
-
if (additionalParam) {
|
35
|
-
params.push(additionalParam)
|
36
|
-
}
|
37
|
-
|
38
|
-
return params
|
39
|
-
.map(function (param) {
|
40
|
-
if (param.name != null) {
|
41
|
-
return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`
|
42
|
-
} else {
|
43
|
-
return param
|
44
|
-
}
|
45
|
-
})
|
46
|
-
.join("&")
|
47
|
-
}
|
48
|
-
|
49
|
-
// Helper function that returns form elements that match the specified CSS selector
|
50
|
-
// If form is actually a "form" element this will return associated elements outside the from that have
|
51
|
-
// the html form attribute set
|
52
|
-
export const formElements = (form, selector) => {
|
53
|
-
if (matches(form, "form")) {
|
54
|
-
return toArray(form.elements).filter((el) => matches(el, selector))
|
55
|
-
} else {
|
56
|
-
return toArray(form.querySelectorAll(selector))
|
57
|
-
}
|
58
|
-
}
|
data/test/dummy_app/Gemfile
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
gem 'rails', '~> 7.0.0'
|
4
|
-
gem 'webrick'
|
5
|
-
gem 'bootsnap', '>= 1.4.4', require: false
|
6
|
-
gem 'rexml'
|
7
|
-
gem 'shoelace-rails', path: '../../../shoelace-rails'
|
8
|
-
gem 'webpacker', '6.0.0.rc.5'
|
9
|
-
|
10
|
-
group :development, :test do
|
11
|
-
gem 'pry-byebug'
|
12
|
-
end
|
13
|
-
|
14
|
-
group :test do
|
15
|
-
gem 'capybara', '>= 3.26'
|
16
|
-
gem 'capybara-shadowdom'
|
17
|
-
gem 'selenium-webdriver', '>= 4.0.0.rc3'
|
18
|
-
gem 'webdrivers'
|
19
|
-
end
|
data/test/dummy_app/Rakefile
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
class HotwireFormsController < ActionController::Base
|
2
|
-
layout "application"
|
3
|
-
|
4
|
-
def show
|
5
|
-
@user = User.new(session[:user])
|
6
|
-
end
|
7
|
-
|
8
|
-
# GET /users/new
|
9
|
-
def new
|
10
|
-
@user = User.new(params[:user]&.permit!)
|
11
|
-
|
12
|
-
render 'form'
|
13
|
-
end
|
14
|
-
|
15
|
-
# GET /users/1/edit
|
16
|
-
def edit
|
17
|
-
@user = User.new(name: "Yuki Nishijima")
|
18
|
-
|
19
|
-
render 'form'
|
20
|
-
end
|
21
|
-
|
22
|
-
# POST /users
|
23
|
-
def create
|
24
|
-
@user = User.new(user_params)
|
25
|
-
|
26
|
-
if @user.valid?
|
27
|
-
session[:user] = user_params.to_h
|
28
|
-
redirect_to hotwire_form_path(1)
|
29
|
-
else
|
30
|
-
render 'form', status: 422
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
# PATCH/PUT /users/1
|
35
|
-
def update
|
36
|
-
@user = User.new(user_params)
|
37
|
-
|
38
|
-
render(@user.valid? ? 'show' : 'form')
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def user_params
|
44
|
-
params.require(:user).permit!
|
45
|
-
end
|
46
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
class TurbolinksFormsController < ActionController::Base
|
2
|
-
layout "application"
|
3
|
-
|
4
|
-
# GET /users/new
|
5
|
-
def new
|
6
|
-
@user = User.new
|
7
|
-
|
8
|
-
render 'form'
|
9
|
-
end
|
10
|
-
|
11
|
-
# GET /users/1/edit
|
12
|
-
def edit
|
13
|
-
@user = User.new(name: "Yuki Nishijima")
|
14
|
-
|
15
|
-
render 'form'
|
16
|
-
end
|
17
|
-
|
18
|
-
# POST /users
|
19
|
-
def create
|
20
|
-
@user = User.new(user_params)
|
21
|
-
|
22
|
-
render(@user.valid? ? 'show' : 'form')
|
23
|
-
end
|
24
|
-
|
25
|
-
# PATCH/PUT /users/1
|
26
|
-
def update
|
27
|
-
@user = User.new(user_params)
|
28
|
-
|
29
|
-
render(@user.valid? ? 'show' : 'form')
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
def user_params
|
35
|
-
params.require(:user).permit!
|
36
|
-
end
|
37
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
class User
|
2
|
-
include ActiveModel::Model
|
3
|
-
include ActiveModel::Attributes
|
4
|
-
|
5
|
-
attribute :name
|
6
|
-
attribute :description
|
7
|
-
attribute :color
|
8
|
-
attribute :score
|
9
|
-
attribute :current_city
|
10
|
-
attribute :previous_city
|
11
|
-
attribute :past_cities
|
12
|
-
attribute :remember_me
|
13
|
-
attribute :subscribe_to_emails
|
14
|
-
|
15
|
-
validates :name, presence: true
|
16
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
import "@hotwired/turbo-rails"
|
@@ -1,45 +0,0 @@
|
|
1
|
-
<% locations = { tokyo: "Tokyo", new_york: "New York", london: "London" } %>
|
2
|
-
<%= sl_form_for(@user, url: hotwire_forms_path) do |form| %>
|
3
|
-
<div>
|
4
|
-
<%= form.text_field :name do %>
|
5
|
-
<span slot="help-text" style="color: rgb(var(--sl-color-danger-600));">
|
6
|
-
<%= @user.errors.full_messages_for(:name).first %>
|
7
|
-
</span>
|
8
|
-
<% end %>
|
9
|
-
</div>
|
10
|
-
|
11
|
-
<div>
|
12
|
-
<%= form.color_field :color %>
|
13
|
-
</div>
|
14
|
-
|
15
|
-
<div>
|
16
|
-
<%= form.range_field :score, min: 0, max: 100, step: 1 %>
|
17
|
-
</div>
|
18
|
-
|
19
|
-
<div>
|
20
|
-
<%= form.collection_radio_buttons :current_city, locations, :first, :last %>
|
21
|
-
</div>
|
22
|
-
|
23
|
-
<div>
|
24
|
-
<%= form.collection_select :previous_city, locations, :first, :last, {}, { placeholder: "Select one" } %>
|
25
|
-
</div>
|
26
|
-
|
27
|
-
<div>
|
28
|
-
<%= form.collection_select :past_cities, locations, :first, :last, {}, { placeholder: "Select two or more", multiple: true, clearable: true } %>
|
29
|
-
</div>
|
30
|
-
|
31
|
-
<div>
|
32
|
-
<%= form.check_box :remember_me %>
|
33
|
-
</div>
|
34
|
-
|
35
|
-
<div>
|
36
|
-
<%= form.switch_field :subscribe_to_emails, value: "1" %>
|
37
|
-
</div>
|
38
|
-
|
39
|
-
<div>
|
40
|
-
<%= form.text_area :description %>
|
41
|
-
</div>
|
42
|
-
|
43
|
-
<%= form.submit %>
|
44
|
-
<%= form.submit "Submit without Turbo", data: { turbo: false } %>
|
45
|
-
<% end %>
|
@@ -1,39 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<title>Shoelace Test</title>
|
5
|
-
<meta name="viewport" content="width=device-width,initial-scale=1">
|
6
|
-
<%= csrf_meta_tags %>
|
7
|
-
<%= csp_meta_tag %>
|
8
|
-
|
9
|
-
<style>
|
10
|
-
body {
|
11
|
-
font-family: var(--sl-font-sans);
|
12
|
-
font-size: var(--sl-font-size-medium);
|
13
|
-
font-weight: var(--sl-font-weight-normal);
|
14
|
-
letter-spacing: var(--sl-letter-spacing-normal);
|
15
|
-
color: var(--sl-color-gray-800);
|
16
|
-
line-height: var(--sl-line-height-normal);
|
17
|
-
}
|
18
|
-
|
19
|
-
sl-form div, sl-turbo-form div {
|
20
|
-
margin-bottom: 2em;
|
21
|
-
}
|
22
|
-
</style>
|
23
|
-
|
24
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.0.0-beta.88/dist/themes/light.css">
|
25
|
-
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.0.0-beta.88/dist/shoelace.js"></script>
|
26
|
-
|
27
|
-
<% if request.path.include?("hotwire") %>
|
28
|
-
<%= javascript_pack_tag 'hotwire' %>
|
29
|
-
<% else %>
|
30
|
-
<%= javascript_pack_tag 'turbolinks' %>
|
31
|
-
<% end %>
|
32
|
-
</head>
|
33
|
-
|
34
|
-
<body>
|
35
|
-
<div style="width: 950px; margin: auto">
|
36
|
-
<%= yield %>
|
37
|
-
</div>
|
38
|
-
</body>
|
39
|
-
</html>
|
@@ -1,44 +0,0 @@
|
|
1
|
-
<% locations = { tokyo: "Tokyo", new_york: "New York", london: "London" } %>
|
2
|
-
<%= sl_form_for(@user, url: turbolinks_forms_path) do |form| %>
|
3
|
-
<div>
|
4
|
-
<%= form.text_field :name do %>
|
5
|
-
<span slot="help-text" style="color: rgb(var(--sl-color-danger-600));">
|
6
|
-
<%= @user.errors.full_messages_for(:name).first %>
|
7
|
-
</span>
|
8
|
-
<% end %>
|
9
|
-
</div>
|
10
|
-
|
11
|
-
<div>
|
12
|
-
<%= form.color_field :color %>
|
13
|
-
</div>
|
14
|
-
|
15
|
-
<div>
|
16
|
-
<%= form.range_field :score, min: 0, max: 100, step: 1 %>
|
17
|
-
</div>
|
18
|
-
|
19
|
-
<div>
|
20
|
-
<%= form.collection_radio_buttons :current_city, locations, :first, :last %>
|
21
|
-
</div>
|
22
|
-
|
23
|
-
<div>
|
24
|
-
<%= form.collection_select :previous_city, locations, :first, :last, {}, { placeholder: "Select one" } %>
|
25
|
-
</div>
|
26
|
-
|
27
|
-
<div>
|
28
|
-
<%= form.collection_select :past_cities, locations, :first, :last, {}, { placeholder: "Select two or more", multiple: true, clearable: true } %>
|
29
|
-
</div>
|
30
|
-
|
31
|
-
<div>
|
32
|
-
<%= form.check_box :remember_me %>
|
33
|
-
</div>
|
34
|
-
|
35
|
-
<div>
|
36
|
-
<%= form.switch_field :subscribe_to_emails, value: "1" %>
|
37
|
-
</div>
|
38
|
-
|
39
|
-
<div>
|
40
|
-
<%= form.text_area :description %>
|
41
|
-
</div>
|
42
|
-
|
43
|
-
<%= form.submit %>
|
44
|
-
<% end %>
|
data/test/dummy_app/bin/rails
DELETED
data/test/dummy_app/bin/webpack
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development"
|
4
|
-
ENV["NODE_ENV"] ||= "development"
|
5
|
-
|
6
|
-
require "pathname"
|
7
|
-
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
8
|
-
Pathname.new(__FILE__).realpath)
|
9
|
-
|
10
|
-
require "bundler/setup"
|
11
|
-
|
12
|
-
require "webpacker"
|
13
|
-
require "webpacker/webpack_runner"
|
14
|
-
|
15
|
-
APP_ROOT = File.expand_path("..", __dir__)
|
16
|
-
Dir.chdir(APP_ROOT) do
|
17
|
-
Webpacker::WebpackRunner.run(ARGV)
|
18
|
-
end
|
data/test/dummy_app/bin/yarn
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
APP_ROOT = File.expand_path("..", __dir__)
|
4
|
-
Dir.chdir(APP_ROOT) do
|
5
|
-
yarn = ENV["PATH"].split(File::PATH_SEPARATOR).
|
6
|
-
select { |dir| File.expand_path(dir) != __dir__ }.
|
7
|
-
product(["yarn", "yarnpkg", "yarn.cmd", "yarn.ps1"]).
|
8
|
-
map { |dir, file| File.expand_path(file, dir) }.
|
9
|
-
find { |file| File.executable?(file) }
|
10
|
-
|
11
|
-
if yarn
|
12
|
-
exec yarn, *ARGV
|
13
|
-
else
|
14
|
-
$stderr.puts "Yarn executable was not detected in the system."
|
15
|
-
$stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install"
|
16
|
-
exit 1
|
17
|
-
end
|
18
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
require_relative "boot"
|
2
|
-
|
3
|
-
require "rails"
|
4
|
-
require "active_model/railtie"
|
5
|
-
require "action_controller/railtie"
|
6
|
-
require "action_view/railtie"
|
7
|
-
require "rails/test_unit/railtie"
|
8
|
-
|
9
|
-
Bundler.require(*Rails.groups)
|
10
|
-
|
11
|
-
module ShoelaceTest
|
12
|
-
class Application < Rails::Application
|
13
|
-
config.load_defaults 6.1
|
14
|
-
Rails.backtrace_cleaner.remove_silencers! if ENV["BACKTRACE"]
|
15
|
-
end
|
16
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
Rails.application.configure do
|
2
|
-
config.cache_classes = false
|
3
|
-
config.eager_load = false
|
4
|
-
config.consider_all_requests_local = true
|
5
|
-
config.action_controller.perform_caching = false
|
6
|
-
config.cache_store = :null_store
|
7
|
-
config.active_support.deprecation = :log
|
8
|
-
config.active_support.disallowed_deprecation = :raise
|
9
|
-
config.active_support.disallowed_deprecation_warnings = []
|
10
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require "active_support/core_ext/integer/time"
|
2
|
-
|
3
|
-
Rails.application.configure do
|
4
|
-
config.cache_classes = true
|
5
|
-
config.eager_load = false
|
6
|
-
config.public_file_server.enabled = true
|
7
|
-
config.public_file_server.headers = {
|
8
|
-
'Cache-Control' => "public, max-age=#{1.hour.to_i}"
|
9
|
-
}
|
10
|
-
config.consider_all_requests_local = true
|
11
|
-
config.action_controller.perform_caching = false
|
12
|
-
config.cache_store = :null_store
|
13
|
-
config.action_dispatch.show_exceptions = false
|
14
|
-
config.action_controller.allow_forgery_protection = false
|
15
|
-
config.active_support.deprecation = :stderr
|
16
|
-
config.active_support.disallowed_deprecation = :raise
|
17
|
-
config.active_support.disallowed_deprecation_warnings = []
|
18
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
test.js
|
@@ -1,33 +0,0 @@
|
|
1
|
-
default: &default
|
2
|
-
source_path: app/packs
|
3
|
-
source_entry_path: entrypoints
|
4
|
-
public_root_path: public
|
5
|
-
public_output_path: packs
|
6
|
-
cache_path: tmp/webpacker
|
7
|
-
webpack_compile_output: true
|
8
|
-
additional_paths: []
|
9
|
-
cache_manifest: false
|
10
|
-
|
11
|
-
development:
|
12
|
-
<<: *default
|
13
|
-
compile: true
|
14
|
-
dev_server:
|
15
|
-
https: false
|
16
|
-
host: localhost
|
17
|
-
port: 3035
|
18
|
-
hmr: false
|
19
|
-
client:
|
20
|
-
overlay: true
|
21
|
-
compress: true
|
22
|
-
allowed_hosts: "all"
|
23
|
-
pretty: true
|
24
|
-
headers:
|
25
|
-
'Access-Control-Allow-Origin': '*'
|
26
|
-
static:
|
27
|
-
watch:
|
28
|
-
ignored: '**/node_modules/**'
|
29
|
-
|
30
|
-
test:
|
31
|
-
<<: *default
|
32
|
-
compile: false
|
33
|
-
public_output_path: packs-test
|
data/test/dummy_app/config.ru
DELETED
data/test/dummy_app/package.json
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"name": "app",
|
3
|
-
"private": true,
|
4
|
-
"babel": {
|
5
|
-
"presets": [
|
6
|
-
"./node_modules/@rails/webpacker/package/babel/preset.js"
|
7
|
-
]
|
8
|
-
},
|
9
|
-
"browserslist": [
|
10
|
-
"defaults"
|
11
|
-
],
|
12
|
-
"dependencies": {
|
13
|
-
"@hotwired/turbo-rails": "^7.0.1",
|
14
|
-
"@rails/ujs": "^7.0.2",
|
15
|
-
"@rails/webpacker": "^6.0.0-rc.5",
|
16
|
-
"@yuki24/shoelace-rails": "file:./../../../shoelace-rails",
|
17
|
-
"turbolinks": "^5.2.0",
|
18
|
-
"webpack": "^5.51.1",
|
19
|
-
"webpack-cli": "^4.8.0"
|
20
|
-
},
|
21
|
-
"devDependencies": {
|
22
|
-
"@webpack-cli/serve": "^1.5.2"
|
23
|
-
}
|
24
|
-
}
|
@@ -1,63 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
class HotwireFormTest < ApplicationSystemTestCase
|
4
|
-
setup do
|
5
|
-
visit new_hotwire_form_path
|
6
|
-
end
|
7
|
-
|
8
|
-
test "It can submit a form with a POST method" do
|
9
|
-
shadow_fill_in 'sl-input[label="Name"]', with: "Yuki Nishijima"
|
10
|
-
shadow_fill_in 'sl-range[name="user[score]"]', with: "50"
|
11
|
-
|
12
|
-
find('sl-radio', text: "New York").click # Selecting a radio button does not work...
|
13
|
-
|
14
|
-
sl_select "Tokyo", from: "Select one"
|
15
|
-
sl_multi_select "Tokyo", "New York", from: "Select two or more"
|
16
|
-
sl_check "Remember me"
|
17
|
-
sl_toggle "Subscribe to emails"
|
18
|
-
shadow_fill_in 'sl-textarea[name="user[description]"]', "textarea", with: "I am a human."
|
19
|
-
|
20
|
-
find("sl-button", text: "Create User").click
|
21
|
-
|
22
|
-
assert_current_path hotwire_form_path(1)
|
23
|
-
assert_text "Name: Yuki Nishijima"
|
24
|
-
assert_text "Description: I am a human."
|
25
|
-
assert_text "Score: 50"
|
26
|
-
# assert_text "Current City:"
|
27
|
-
assert_text "Previous City: tokyo"
|
28
|
-
assert_text 'Past Cities: ["tokyo", "new_york"]'
|
29
|
-
assert_text "Remember Me: 1"
|
30
|
-
assert_text "Subscribe To Emails: 1"
|
31
|
-
end
|
32
|
-
|
33
|
-
test "It can submit a form with a POST method without asynchronous submission" do
|
34
|
-
shadow_fill_in 'sl-input[label="Name"]', with: "Yuki Nishijima"
|
35
|
-
shadow_fill_in 'sl-range[name="user[score]"]', with: "50"
|
36
|
-
|
37
|
-
find('sl-radio', text: "New York").click # Selecting a radio button does not work...
|
38
|
-
|
39
|
-
sl_select "Tokyo", from: "Select one"
|
40
|
-
sl_multi_select "Tokyo", "New York", from: "Select two or more"
|
41
|
-
sl_check "Remember me"
|
42
|
-
sl_toggle "Subscribe to emails"
|
43
|
-
shadow_fill_in 'sl-textarea[name="user[description]"]', "textarea", with: "I am a human."
|
44
|
-
|
45
|
-
find("sl-button", text: "Submit without Turbo").click
|
46
|
-
|
47
|
-
assert_current_path hotwire_form_path(1)
|
48
|
-
assert_text "Name: Yuki Nishijima"
|
49
|
-
assert_text "Description: I am a human."
|
50
|
-
assert_text "Score: 50"
|
51
|
-
# assert_text "Current City:"
|
52
|
-
assert_text "Previous City: tokyo"
|
53
|
-
assert_text 'Past Cities: ["tokyo", "new_york"]'
|
54
|
-
assert_text "Remember Me: 1"
|
55
|
-
assert_text "Subscribe To Emails: 1"
|
56
|
-
end
|
57
|
-
|
58
|
-
test "It can handle an error form submission" do
|
59
|
-
find("sl-button", text: "Create User").click
|
60
|
-
|
61
|
-
assert_text "Name can't be blank"
|
62
|
-
end
|
63
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
class TurbolinksFormTest < ApplicationSystemTestCase
|
4
|
-
setup do
|
5
|
-
visit new_turbolinks_form_path
|
6
|
-
end
|
7
|
-
|
8
|
-
test "It can submit a form with a POST method" do
|
9
|
-
shadow_fill_in 'sl-input[label="Name"]', with: "Yuki Nishijima"
|
10
|
-
shadow_fill_in 'sl-range[name="user[score]"]', with: "50"
|
11
|
-
|
12
|
-
find('sl-radio', text: "New York").click # Selecting a radio button does not work...
|
13
|
-
|
14
|
-
sl_select "Tokyo", from: "Select one"
|
15
|
-
sl_multi_select "Tokyo", "New York", from: "Select two or more"
|
16
|
-
sl_check "Remember me"
|
17
|
-
sl_toggle "Subscribe to emails"
|
18
|
-
shadow_fill_in 'sl-textarea[name="user[description]"]', "textarea", with: "I am a human."
|
19
|
-
|
20
|
-
find("sl-button", text: "Create User").click
|
21
|
-
|
22
|
-
assert_current_path turbolinks_forms_path
|
23
|
-
assert_text "Name: Yuki Nishijima"
|
24
|
-
assert_text "Description: I am a human."
|
25
|
-
assert_text "Score: 50"
|
26
|
-
# assert_text "Current City:"
|
27
|
-
assert_text "Previous City: tokyo"
|
28
|
-
assert_text 'Past Cities: ["tokyo", "new_york"]'
|
29
|
-
assert_text "Remember Me: 1"
|
30
|
-
assert_text "Subscribe To Emails: 1"
|
31
|
-
end
|
32
|
-
|
33
|
-
test "It can handle an error form submission" do
|
34
|
-
find("sl-button", text: "Create User").click
|
35
|
-
|
36
|
-
assert_text "Name can't be blank"
|
37
|
-
end
|
38
|
-
end
|