From 67faaf555723e8b202620725b7144a183543809e Mon Sep 17 00:00:00 2001
From: Matt Jankowski <matt@jankowski.online>
Date: Tue, 3 Sep 2024 11:30:57 -0400
Subject: [PATCH] Simplify account model username presence validation spec
 (#31013)

---
 Gemfile                          | 2 ++
 Gemfile.lock                     | 3 +++
 spec/models/account_spec.rb      | 6 +-----
 spec/support/shoulda_matchers.rb | 8 ++++++++
 4 files changed, 14 insertions(+), 5 deletions(-)
 create mode 100644 spec/support/shoulda_matchers.rb

diff --git a/Gemfile b/Gemfile
index 6538067cf..4c808fa48 100644
--- a/Gemfile
+++ b/Gemfile
@@ -151,6 +151,8 @@ group :test do
   # Test harness fo rack components
   gem 'rack-test', '~> 2.1'
 
+  gem 'shoulda-matchers'
+
   # Coverage formatter for RSpec test if DISABLE_SIMPLECOV is false
   gem 'simplecov', '~> 0.22', require: false
   gem 'simplecov-lcov', '~> 0.8', require: false
diff --git a/Gemfile.lock b/Gemfile.lock
index 2e9037d8a..461a2d43a 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -790,6 +790,8 @@ GEM
       rubyzip (>= 1.2.2, < 3.0)
       websocket (~> 1.0)
     semantic_range (3.0.0)
+    shoulda-matchers (6.3.1)
+      activesupport (>= 5.2.0)
     sidekiq (6.5.12)
       connection_pool (>= 2.2.5, < 3)
       rack (~> 2.0)
@@ -1035,6 +1037,7 @@ DEPENDENCIES
   sanitize (~> 6.0)
   scenic (~> 1.7)
   selenium-webdriver
+  shoulda-matchers
   sidekiq (~> 6.5)
   sidekiq-bulk (~> 0.2.0)
   sidekiq-scheduler (~> 5.0)
diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb
index 8e5648a0b..14528ed17 100644
--- a/spec/models/account_spec.rb
+++ b/spec/models/account_spec.rb
@@ -722,11 +722,7 @@ RSpec.describe Account do
   end
 
   describe 'validations' do
-    it 'is invalid without a username' do
-      account = Fabricate.build(:account, username: nil)
-      account.valid?
-      expect(account).to model_have_error_on_field(:username)
-    end
+    it { is_expected.to validate_presence_of(:username) }
 
     it 'squishes the username before validation' do
       account = Fabricate(:account, domain: nil, username: " \u3000bob \t \u00a0 \n ")
diff --git a/spec/support/shoulda_matchers.rb b/spec/support/shoulda_matchers.rb
new file mode 100644
index 000000000..edcf9dd85
--- /dev/null
+++ b/spec/support/shoulda_matchers.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+Shoulda::Matchers.configure do |config|
+  config.integrate do |with|
+    with.test_framework :rspec
+    with.library :rails
+  end
+end