Fix missing terms of services link (#35115)

This commit is contained in:
David Roetzel 2025-06-21 10:59:47 +02:00 committed by GitHub
parent 3f743b1a07
commit adf812efb3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 60 additions and 3 deletions

View File

@ -15,8 +15,9 @@ class Api::V1::Instances::TermsOfServicesController < Api::V1::Instances::BaseCo
if params[:date].present?
TermsOfService.published.find_by!(effective_date: params[:date])
else
TermsOfService.live.first || TermsOfService.published.first! # For the case when none of the published terms have become effective yet
TermsOfService.current
end
end
not_found if @terms_of_service.nil?
end
end

View File

@ -16,6 +16,7 @@
class TermsOfService < ApplicationRecord
scope :published, -> { where.not(published_at: nil).order(Arel.sql('coalesce(effective_date, published_at) DESC')) }
scope :live, -> { published.where('effective_date IS NULL OR effective_date < now()').limit(1) }
scope :upcoming, -> { published.reorder(effective_date: :asc).where('effective_date IS NOT NULL AND effective_date > now()').limit(1) }
scope :draft, -> { where(published_at: nil).order(id: :desc).limit(1) }
validates :text, presence: true
@ -26,6 +27,10 @@ class TermsOfService < ApplicationRecord
NOTIFICATION_ACTIVITY_CUTOFF = 1.year.freeze
def self.current
live.first || upcoming.first # For the case when none of the published terms have become effective yet
end
def published?
published_at.present?
end

View File

@ -110,7 +110,7 @@ class InitialStateSerializer < ActiveModel::Serializer
trends_as_landing_page: Setting.trends_as_landing_page,
trends_enabled: Setting.trends,
version: instance_presenter.version,
terms_of_service_enabled: TermsOfService.live.exists?,
terms_of_service_enabled: TermsOfService.current.present?,
}
end

View File

@ -61,7 +61,7 @@ class REST::InstanceSerializer < ActiveModel::Serializer
status: object.status_page_url,
about: about_url,
privacy_policy: privacy_policy_url,
terms_of_service: TermsOfService.live.exists? ? terms_of_service_url : nil,
terms_of_service: TermsOfService.current.present? ? terms_of_service_url : nil,
},
vapid: {

View File

@ -24,4 +24,55 @@ RSpec.describe TermsOfService do
expect(subject.pluck(:id)).to match_array(user_before.id)
end
end
describe '::current' do
context 'when no terms exist' do
it 'returns nil' do
expect(described_class.current).to be_nil
end
end
context 'when only unpublished terms exist' do
before do
yesterday = Date.yesterday
travel_to yesterday do
Fabricate(:terms_of_service, published_at: nil, effective_date: yesterday)
end
Fabricate(:terms_of_service, published_at: nil, effective_date: Date.tomorrow)
end
it 'returns nil' do
expect(described_class.current).to be_nil
end
end
context 'when both effective and future terms exist' do
let!(:effective_terms) do
yesterday = Date.yesterday
travel_to yesterday do
Fabricate(:terms_of_service, effective_date: yesterday)
end
end
before do
Fabricate(:terms_of_service, effective_date: Date.tomorrow)
end
it 'returns the effective terms' do
expect(described_class.current).to eq effective_terms
end
end
context 'when only future terms exist' do
let!(:upcoming_terms) { Fabricate(:terms_of_service, effective_date: Date.tomorrow) }
before do
Fabricate(:terms_of_service, effective_date: 10.days.since)
end
it 'returns the terms that are upcoming next' do
expect(described_class.current).to eq upcoming_terms
end
end
end
end