From ef39398b82449440872d899cc5902b8eb7f7c26c Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 6 Jan 2025 13:23:57 -0500 Subject: [PATCH] Add `urgent` scope and `by_version` method to `SoftwareUpdate` (#33470) --- .../admin/software_updates_controller.rb | 2 +- app/mailers/admin_mailer.rb | 4 ++-- app/models/software_update.rb | 6 +++++ spec/models/software_update_spec.rb | 23 +++++++++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/app/controllers/admin/software_updates_controller.rb b/app/controllers/admin/software_updates_controller.rb index 52d8cb41e..d7b114a10 100644 --- a/app/controllers/admin/software_updates_controller.rb +++ b/app/controllers/admin/software_updates_controller.rb @@ -6,7 +6,7 @@ module Admin def index authorize :software_update, :index? - @software_updates = SoftwareUpdate.all.sort_by(&:gem_version) + @software_updates = SoftwareUpdate.by_version end private diff --git a/app/mailers/admin_mailer.rb b/app/mailers/admin_mailer.rb index fffbbb3c6..cc2a537b3 100644 --- a/app/mailers/admin_mailer.rb +++ b/app/mailers/admin_mailer.rb @@ -48,7 +48,7 @@ class AdminMailer < ApplicationMailer end def new_software_updates - @software_updates = SoftwareUpdate.all.to_a.sort_by(&:gem_version) + @software_updates = SoftwareUpdate.by_version locale_for_account(@me) do mail subject: default_i18n_subject(instance: @instance) @@ -56,7 +56,7 @@ class AdminMailer < ApplicationMailer end def new_critical_software_updates - @software_updates = SoftwareUpdate.where(urgent: true).to_a.sort_by(&:gem_version) + @software_updates = SoftwareUpdate.urgent.by_version locale_for_account(@me) do mail subject: default_i18n_subject(instance: @instance) diff --git a/app/models/software_update.rb b/app/models/software_update.rb index 7e2b15656..4c868f6f5 100644 --- a/app/models/software_update.rb +++ b/app/models/software_update.rb @@ -18,6 +18,8 @@ class SoftwareUpdate < ApplicationRecord enum :type, { patch: 0, minor: 1, major: 2 }, suffix: :type + scope :urgent, -> { where(urgent: true) } + def gem_version Gem::Version.new(version) end @@ -35,6 +37,10 @@ class SoftwareUpdate < ApplicationRecord Rails.configuration.x.mastodon.software_update_url.present? end + def by_version + all.sort_by(&:gem_version) + end + def pending_to_a return [] unless check_enabled? diff --git a/spec/models/software_update_spec.rb b/spec/models/software_update_spec.rb index 43e9cd058..8c698e51b 100644 --- a/spec/models/software_update_spec.rb +++ b/spec/models/software_update_spec.rb @@ -3,6 +3,29 @@ require 'rails_helper' RSpec.describe SoftwareUpdate do + describe 'Scopes' do + describe '.urgent' do + let!(:urgent_update) { Fabricate :software_update, urgent: true } + let!(:non_urgent_update) { Fabricate :software_update, urgent: false } + + it 'returns records that are urgent' do + expect(described_class.urgent) + .to include(urgent_update) + .and not_include(non_urgent_update) + end + end + end + + describe '.by_version' do + let!(:latest_update) { Fabricate :software_update, version: '4.0.0' } + let!(:older_update) { Fabricate :software_update, version: '3.0.0' } + + it 'returns record in gem version order' do + expect(described_class.by_version) + .to eq([older_update, latest_update]) + end + end + describe '#pending?' do subject { described_class.new(version: update_version) }