From 82d2ce293d98a2b9e024bc5396c3586904d46ae5 Mon Sep 17 00:00:00 2001
From: Matt Jankowski <matt@jankowski.online>
Date: Mon, 6 Jan 2025 13:24:54 -0500
Subject: [PATCH] Convert `admin/warning_presets` spec controller->system
 (#33474)

---
 .../admin/warning_presets_controller_spec.rb  | 85 -------------------
 spec/system/admin/warning_presets_spec.rb     | 81 ++++++++++++++++++
 2 files changed, 81 insertions(+), 85 deletions(-)
 delete mode 100644 spec/controllers/admin/warning_presets_controller_spec.rb
 create mode 100644 spec/system/admin/warning_presets_spec.rb

diff --git a/spec/controllers/admin/warning_presets_controller_spec.rb b/spec/controllers/admin/warning_presets_controller_spec.rb
deleted file mode 100644
index d416b9c3cf1..00000000000
--- a/spec/controllers/admin/warning_presets_controller_spec.rb
+++ /dev/null
@@ -1,85 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Admin::WarningPresetsController do
-  render_views
-
-  let(:user) { Fabricate(:admin_user) }
-
-  before do
-    sign_in user, scope: :user
-  end
-
-  describe 'GET #index' do
-    it 'returns http success' do
-      get :index
-
-      expect(response).to have_http_status(:success)
-    end
-  end
-
-  describe 'GET #edit' do
-    let(:account_warning_preset) { Fabricate(:account_warning_preset) }
-
-    it 'returns http success and renders edit' do
-      get :edit, params: { id: account_warning_preset.id }
-
-      expect(response).to have_http_status(:success)
-      expect(response).to render_template(:edit)
-    end
-  end
-
-  describe 'POST #create' do
-    context 'with valid data' do
-      it 'creates a new account_warning_preset and redirects' do
-        expect do
-          post :create, params: { account_warning_preset: { text: 'The account_warning_preset text.' } }
-        end.to change(AccountWarningPreset, :count).by(1)
-
-        expect(response).to redirect_to(admin_warning_presets_path)
-      end
-    end
-
-    context 'with invalid data' do
-      it 'does creates a new account_warning_preset and renders index' do
-        expect do
-          post :create, params: { account_warning_preset: { text: '' } }
-        end.to_not change(AccountWarningPreset, :count)
-
-        expect(response).to render_template(:index)
-      end
-    end
-  end
-
-  describe 'PUT #update' do
-    let(:account_warning_preset) { Fabricate(:account_warning_preset, text: 'Original text') }
-
-    context 'with valid data' do
-      it 'updates the account_warning_preset and redirects' do
-        put :update, params: { id: account_warning_preset.id, account_warning_preset: { text: 'Updated text.' } }
-
-        expect(response).to redirect_to(admin_warning_presets_path)
-      end
-    end
-
-    context 'with invalid data' do
-      it 'does not update the account_warning_preset and renders index' do
-        put :update, params: { id: account_warning_preset.id, account_warning_preset: { text: '' } }
-
-        expect(response).to render_template(:edit)
-      end
-    end
-  end
-
-  describe 'DELETE #destroy' do
-    let!(:account_warning_preset) { Fabricate(:account_warning_preset) }
-
-    it 'destroys the account_warning_preset and redirects' do
-      delete :destroy, params: { id: account_warning_preset.id }
-
-      expect { account_warning_preset.reload }.to raise_error(ActiveRecord::RecordNotFound)
-      expect(response).to redirect_to(admin_warning_presets_path)
-    end
-  end
-end
diff --git a/spec/system/admin/warning_presets_spec.rb b/spec/system/admin/warning_presets_spec.rb
new file mode 100644
index 00000000000..f1ab6909812
--- /dev/null
+++ b/spec/system/admin/warning_presets_spec.rb
@@ -0,0 +1,81 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Admin Warning Presets' do
+  describe 'Managing warning presets' do
+    before { sign_in Fabricate(:admin_user) }
+
+    describe 'Viewing warning presets' do
+      let!(:account_warning_preset) { Fabricate :account_warning_preset, text: 'This is a preset' }
+
+      it 'lists existing records' do
+        visit admin_warning_presets_path
+
+        expect(page)
+          .to have_content(I18n.t('admin.warning_presets.title'))
+          .and have_content(account_warning_preset.text)
+      end
+    end
+
+    describe 'Creating a new account warning preset' do
+      it 'creates new record with valid attributes' do
+        visit admin_warning_presets_path
+
+        # Invalid submission
+        fill_in 'account_warning_preset_text', with: ''
+        expect { submit_form }
+          .to_not change(AccountWarningPreset, :count)
+        expect(page)
+          .to have_content(/error below/)
+
+        # Valid submission
+        fill_in 'account_warning_preset_text', with: 'You cant do that here'
+        expect { submit_form }
+          .to change(AccountWarningPreset, :count).by(1)
+        expect(page)
+          .to have_content(I18n.t('admin.warning_presets.title'))
+      end
+
+      def submit_form
+        click_on I18n.t('admin.warning_presets.add_new')
+      end
+    end
+
+    describe 'Editing an existing account warning preset' do
+      let!(:account_warning_preset) { Fabricate :account_warning_preset, text: 'Preset text' }
+
+      it 'updates with valid attributes' do
+        visit admin_warning_presets_path
+
+        # Invalid submission
+        click_on account_warning_preset.text
+        fill_in 'account_warning_preset_text', with: ''
+        expect { submit_form }
+          .to_not change(account_warning_preset.reload, :updated_at)
+
+        # Valid update
+        fill_in 'account_warning_preset_text', with: 'Updated text'
+        expect { submit_form }
+          .to(change { account_warning_preset.reload.text })
+      end
+
+      def submit_form
+        click_on I18n.t('generic.save_changes')
+      end
+    end
+
+    describe 'Destroy an account warning preset' do
+      let!(:account_warning_preset) { Fabricate :account_warning_preset }
+
+      it 'removes the record' do
+        visit admin_warning_presets_path
+
+        expect { click_on I18n.t('admin.warning_presets.delete') }
+          .to change(AccountWarningPreset, :count).by(-1)
+        expect { account_warning_preset.reload }
+          .to raise_error(ActiveRecord::RecordNotFound)
+      end
+    end
+  end
+end