From 0a9cd154a9097e68ceee4a80dfb7f596744f3576 Mon Sep 17 00:00:00 2001
From: Mauricio Gomes <mauricio@edge14.com>
Date: Fri, 24 May 2024 18:02:16 -0400
Subject: [PATCH] Don't render signup link if registration feature is disabled
 (#374)

---
 app/views/sessions/new.html.erb |  8 +++++---
 test/models/feature_test.rb     | 20 ++------------------
 test/support/feature_helpers.rb | 20 ++++++++++++++++++++
 test/system/users_test.rb       |  9 +++++++++
 test/test_helper.rb             |  4 +++-
 5 files changed, 39 insertions(+), 22 deletions(-)
 create mode 100644 test/support/feature_helpers.rb

diff --git a/app/views/sessions/new.html.erb b/app/views/sessions/new.html.erb
index a0f1e77a0..4df5ca90a 100644
--- a/app/views/sessions/new.html.erb
+++ b/app/views/sessions/new.html.erb
@@ -6,9 +6,11 @@
 
   <h2 class='text-3xl font-semibold'>Welcome back</h2>
 
-  <span class='text-sm text-center'>
-    Don't have an account? <%= link_to "Sign up", register_path, class: "underline" %>
-  </span>
+  <% if Feature.registration? %>
+    <span class='text-sm text-center'>
+      Don't have an account? <%= link_to "Sign up", register_path, class: "underline" %>
+    </span>
+  <% end %>
 
   <%= form_with(url: login_path, method: :post, class: "flex flex-col space-y-4 w-80") do |f| %>
     <%= f.email_field :email,
diff --git a/test/models/feature_test.rb b/test/models/feature_test.rb
index 76f40685c..8e73c1a28 100644
--- a/test/models/feature_test.rb
+++ b/test/models/feature_test.rb
@@ -1,6 +1,8 @@
 require "test_helper"
 
 class FeatureTest < ActiveSupport::TestCase
+  include FeatureHelpers
+
   test "should return value of feature" do
     stub_features(my_feature: true) do
       assert Feature.enabled?(:my_feature)
@@ -65,22 +67,4 @@ class FeatureTest < ActiveSupport::TestCase
       refute Feature.google_authentication?
     end
   end
-
-  private
-
-  def stub_features(hash, &block)
-    Feature.features_hash = nil
-    Feature.stub :features, hash do
-      yield
-    end
-    Feature.features_hash = nil
-  end
-
-  def stub_raw_features(hash, &block)
-    Feature.features_hash = nil
-    Feature.stub :raw_features, hash do
-      yield
-    end
-    Feature.features_hash = nil
-  end
 end
diff --git a/test/support/feature_helpers.rb b/test/support/feature_helpers.rb
new file mode 100644
index 000000000..92ee39f1f
--- /dev/null
+++ b/test/support/feature_helpers.rb
@@ -0,0 +1,20 @@
+module FeatureHelpers
+
+  private
+
+  def stub_features(hash, &block)
+    Feature.features_hash = nil
+    Feature.stub :features, hash do
+      yield
+    end
+    Feature.features_hash = nil
+  end
+
+  def stub_raw_features(hash, &block)
+    Feature.features_hash = nil
+    Feature.stub :raw_features, hash do
+      yield
+    end
+    Feature.features_hash = nil
+  end
+end
diff --git a/test/system/users_test.rb b/test/system/users_test.rb
index 54be73102..2f0afb6c5 100644
--- a/test/system/users_test.rb
+++ b/test/system/users_test.rb
@@ -1,6 +1,8 @@
 require "application_system_test_case"
 
 class UsersTest < ApplicationSystemTestCase
+  include FeatureHelpers
+
   setup do
     @user = users(:keith)
     visit root_url
@@ -37,6 +39,13 @@ class UsersTest < ApplicationSystemTestCase
     assert_text "can't be blank"
   end
 
+  test "should hide the Sign Up link if the registration feature is disabled" do
+    stub_features(registration: false) do
+      visit root_url
+      assert_no_text 'Sign up'
+    end
+  end
+
   test "should create a new user" do
     click_text "Sign up", match: :first
 
diff --git a/test/test_helper.rb b/test/test_helper.rb
index 3e83876b5..19ac21112 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -4,6 +4,8 @@
 require "minitest/autorun"
 require "pry"
 
+require_relative 'support/feature_helpers'
+
 class Capybara::Node::Element
   def obsolete?
     inspect.include?('Obsolete')
@@ -57,4 +59,4 @@ class TestCase
       ActiveStorage::Current.reset
     end
   end
-end
\ No newline at end of file
+end