Fix missing terms of services link (#35115)
This commit is contained in:
		@@ -15,8 +15,9 @@ class Api::V1::Instances::TermsOfServicesController < Api::V1::Instances::BaseCo
 | 
				
			|||||||
      if params[:date].present?
 | 
					      if params[:date].present?
 | 
				
			||||||
        TermsOfService.published.find_by!(effective_date: params[:date])
 | 
					        TermsOfService.published.find_by!(effective_date: params[:date])
 | 
				
			||||||
      else
 | 
					      else
 | 
				
			||||||
        TermsOfService.live.first || TermsOfService.published.first! # For the case when none of the published terms have become effective yet
 | 
					        TermsOfService.current
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					    not_found if @terms_of_service.nil?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,6 +16,7 @@
 | 
				
			|||||||
class TermsOfService < ApplicationRecord
 | 
					class TermsOfService < ApplicationRecord
 | 
				
			||||||
  scope :published, -> { where.not(published_at: nil).order(Arel.sql('coalesce(effective_date, published_at) DESC')) }
 | 
					  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 :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) }
 | 
					  scope :draft, -> { where(published_at: nil).order(id: :desc).limit(1) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  validates :text, presence: true
 | 
					  validates :text, presence: true
 | 
				
			||||||
@@ -26,6 +27,10 @@ class TermsOfService < ApplicationRecord
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  NOTIFICATION_ACTIVITY_CUTOFF = 1.year.freeze
 | 
					  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?
 | 
					  def published?
 | 
				
			||||||
    published_at.present?
 | 
					    published_at.present?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -110,7 +110,7 @@ class InitialStateSerializer < ActiveModel::Serializer
 | 
				
			|||||||
      trends_as_landing_page: Setting.trends_as_landing_page,
 | 
					      trends_as_landing_page: Setting.trends_as_landing_page,
 | 
				
			||||||
      trends_enabled: Setting.trends,
 | 
					      trends_enabled: Setting.trends,
 | 
				
			||||||
      version: instance_presenter.version,
 | 
					      version: instance_presenter.version,
 | 
				
			||||||
      terms_of_service_enabled: TermsOfService.live.exists?,
 | 
					      terms_of_service_enabled: TermsOfService.current.present?,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,7 +61,7 @@ class REST::InstanceSerializer < ActiveModel::Serializer
 | 
				
			|||||||
        status: object.status_page_url,
 | 
					        status: object.status_page_url,
 | 
				
			||||||
        about: about_url,
 | 
					        about: about_url,
 | 
				
			||||||
        privacy_policy: privacy_policy_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: {
 | 
					      vapid: {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,4 +24,55 @@ RSpec.describe TermsOfService do
 | 
				
			|||||||
      expect(subject.pluck(:id)).to match_array(user_before.id)
 | 
					      expect(subject.pluck(:id)).to match_array(user_before.id)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  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
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user