From e451184210b16395051fa7133a4335ae7204864a Mon Sep 17 00:00:00 2001 From: Nishiki Liu Date: Tue, 16 Feb 2021 17:36:40 -0800 Subject: [PATCH 1/6] Add `with_preview_paths` test helper --- test/test_helper.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/test_helper.rb b/test/test_helper.rb index 61996e03d..06434c639 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -21,6 +21,18 @@ require File.expand_path("../config/environment.rb", __FILE__) require "rails/test_help" +# Sets custom preview paths in tests. +# +# @param new_value [Array] List of preview paths +# @yield Test code to run +# @return [void] +def with_preview_paths(new_value) + old_value = Rails.application.config.view_component.preview_paths + Rails.application.config.view_component.preview_paths = new_value + yield + Rails.application.config.view_component.preview_paths = old_value +end + def with_preview_route(new_value) old_value = Rails.application.config.view_component.preview_route Rails.application.config.view_component.preview_route = new_value From 817517f8ff62af214743a7036753bacb33019673 Mon Sep 17 00:00:00 2001 From: Nishiki Liu Date: Tue, 16 Feb 2021 17:37:08 -0800 Subject: [PATCH 2/6] Add tests for one and two overridden preview paths --- test/generators/component_generator_test.rb | 22 +++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/test/generators/component_generator_test.rb b/test/generators/component_generator_test.rb index 6068ee416..22d6a1a54 100644 --- a/test/generators/component_generator_test.rb +++ b/test/generators/component_generator_test.rb @@ -40,6 +40,28 @@ def test_component_preview end end + def test_component_preview_with_one_overridden_preview_path + with_preview_paths(%w[spec/components/previews]) do + run_generator %w[user --preview] + + assert_file "spec/components/previews/user_component_preview.rb" do |component| + assert_match(/class UserComponentPreview < /, component) + assert_match(/render\(UserComponent.new\)/, component) + end + end + end + + def test_component_preview_with_two_overridden_preview_paths + with_preview_paths(%w[spec/components/previews some/other/directory]) do + run_generator %w[user --preview] + + assert_file "test/components/previews/user_component_preview.rb" do |component| + assert_match(/class UserComponentPreview < /, component) + assert_match(/render\(UserComponent.new\)/, component) + end + end + end + def test_component_with_arguments run_generator %w[user name] From b243a343f4ce320568f73d5afaa43cc1a92272d2 Mon Sep 17 00:00:00 2001 From: Nishiki Liu Date: Tue, 16 Feb 2021 17:37:51 -0800 Subject: [PATCH 3/6] Get tests green --- lib/rails/generators/preview/component_generator.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/rails/generators/preview/component_generator.rb b/lib/rails/generators/preview/component_generator.rb index 440afcaf5..ed21168e9 100644 --- a/lib/rails/generators/preview/component_generator.rb +++ b/lib/rails/generators/preview/component_generator.rb @@ -8,7 +8,9 @@ class ComponentGenerator < ::Rails::Generators::NamedBase check_class_collision suffix: "ComponentPreview" def create_preview_file - template "component_preview.rb", File.join("test/components/previews", class_path, "#{file_name}_component_preview.rb") + preview_paths = Rails.application.config.view_component.preview_paths + path_prefix = preview_paths.one? ? preview_paths.first : "test/components/previews" + template "component_preview.rb", File.join(path_prefix, class_path, "#{file_name}_component_preview.rb") end private From 43b1074f471ccbd4a948d69060fc3680c21001f0 Mon Sep 17 00:00:00 2001 From: Nishiki Liu Date: Tue, 16 Feb 2021 17:46:30 -0800 Subject: [PATCH 4/6] Update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd8f8e93d..3daacead0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## main +* Generate preview at overridden path if one exists when using `--preview` flag. + + *Nishiki Liu* + * Do not generate template when using `--inline` flag. *Hans Lemuet* From 83bfcf6a3c77542b01c10ffb333565f22dd7525c Mon Sep 17 00:00:00 2001 From: Nishiki Liu Date: Tue, 16 Feb 2021 17:46:47 -0800 Subject: [PATCH 5/6] Add self to contributors list --- docs/index.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/index.md b/docs/index.md index 8817e1c98..33ea88809 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1247,3 +1247,8 @@ ViewComponent is built by: |:---:|:---:|:---:|:---:|:---:| |@mixergtz|@jules2689|@g13ydson|@swanson|@bobmaerten| |Medellin, Colombia|Toronto, Canada|João Pessoa, Brazil|Indianapolis, IN|Valenciennes, France| + +|nshki| +|:---:| +|@nshki| +|Los Angeles, CA| From b15026f9835258240054aa53817ba799a88878b8 Mon Sep 17 00:00:00 2001 From: Nishiki Liu Date: Wed, 17 Feb 2021 17:04:26 -0800 Subject: [PATCH 6/6] Add guard clause for preview generation We want to disable preview files getting generated in the case that more than one preview path exists. --- .../generators/preview/component_generator.rb | 2 ++ test/generators/component_generator_test.rb | 27 ++++++++++--------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/lib/rails/generators/preview/component_generator.rb b/lib/rails/generators/preview/component_generator.rb index ed21168e9..9dde66dd2 100644 --- a/lib/rails/generators/preview/component_generator.rb +++ b/lib/rails/generators/preview/component_generator.rb @@ -9,6 +9,8 @@ class ComponentGenerator < ::Rails::Generators::NamedBase def create_preview_file preview_paths = Rails.application.config.view_component.preview_paths + return if preview_paths.count > 1 + path_prefix = preview_paths.one? ? preview_paths.first : "test/components/previews" template "component_preview.rb", File.join(path_prefix, class_path, "#{file_name}_component_preview.rb") end diff --git a/test/generators/component_generator_test.rb b/test/generators/component_generator_test.rb index 22d6a1a54..f29b842b6 100644 --- a/test/generators/component_generator_test.rb +++ b/test/generators/component_generator_test.rb @@ -32,11 +32,13 @@ def test_component_tests end def test_component_preview - run_generator %w[user --preview] + with_preview_paths([]) do + run_generator %w[user --preview] - assert_file "test/components/previews/user_component_preview.rb" do |component| - assert_match(/class UserComponentPreview < /, component) - assert_match(/render\(UserComponent.new\)/, component) + assert_file "test/components/previews/user_component_preview.rb" do |component| + assert_match(/class UserComponentPreview < /, component) + assert_match(/render\(UserComponent.new\)/, component) + end end end @@ -55,10 +57,9 @@ def test_component_preview_with_two_overridden_preview_paths with_preview_paths(%w[spec/components/previews some/other/directory]) do run_generator %w[user --preview] - assert_file "test/components/previews/user_component_preview.rb" do |component| - assert_match(/class UserComponentPreview < /, component) - assert_match(/render\(UserComponent.new\)/, component) - end + assert_no_file "test/components/previews/user_component_preview.rb" + assert_no_file "spec/components/previews/user_component_preview.rb" + assert_no_file "some/other/directory/user_component_preview.rb" end end @@ -98,11 +99,13 @@ def test_component_tests_with_namespace end def test_component_preview_with_namespace - run_generator %w[admins/user --preview] + with_preview_paths([]) do + run_generator %w[admins/user --preview] - assert_file "test/components/previews/admins/user_component_preview.rb" do |component| - assert_match(/class Admins::UserComponentPreview < /, component) - assert_match(/render\(Admins::UserComponent.new\)/, component) + assert_file "test/components/previews/admins/user_component_preview.rb" do |component| + assert_match(/class Admins::UserComponentPreview < /, component) + assert_match(/render\(Admins::UserComponent.new\)/, component) + end end end