Remove WebSub subscriptions (#11303)
parent
4bd58b7f2d
commit
bd87e66679
@ -1,62 +0,0 @@ |
||||
# frozen_string_literal: true |
||||
# == Schema Information |
||||
# |
||||
# Table name: subscriptions |
||||
# |
||||
# id :bigint(8) not null, primary key |
||||
# callback_url :string default(""), not null |
||||
# secret :string |
||||
# expires_at :datetime |
||||
# confirmed :boolean default(FALSE), not null |
||||
# created_at :datetime not null |
||||
# updated_at :datetime not null |
||||
# last_successful_delivery_at :datetime |
||||
# domain :string |
||||
# account_id :bigint(8) not null |
||||
# |
||||
|
||||
class Subscription < ApplicationRecord |
||||
MIN_EXPIRATION = 1.day.to_i |
||||
MAX_EXPIRATION = 30.days.to_i |
||||
|
||||
belongs_to :account |
||||
|
||||
validates :callback_url, presence: true |
||||
validates :callback_url, uniqueness: { scope: :account_id } |
||||
|
||||
scope :confirmed, -> { where(confirmed: true) } |
||||
scope :future_expiration, -> { where(arel_table[:expires_at].gt(Time.now.utc)) } |
||||
scope :expired, -> { where(arel_table[:expires_at].lt(Time.now.utc)) } |
||||
scope :active, -> { confirmed.future_expiration } |
||||
|
||||
def lease_seconds=(value) |
||||
self.expires_at = future_expiration(value) |
||||
end |
||||
|
||||
def lease_seconds |
||||
(expires_at - Time.now.utc).to_i |
||||
end |
||||
|
||||
def expired? |
||||
Time.now.utc > expires_at |
||||
end |
||||
|
||||
before_validation :set_min_expiration |
||||
|
||||
private |
||||
|
||||
def future_expiration(value) |
||||
Time.now.utc + future_offset(value).seconds |
||||
end |
||||
|
||||
def future_offset(seconds) |
||||
[ |
||||
[MIN_EXPIRATION, seconds.to_i].max, |
||||
MAX_EXPIRATION, |
||||
].min |
||||
end |
||||
|
||||
def set_min_expiration |
||||
self.lease_seconds = 0 unless expires_at |
||||
end |
||||
end |
@ -1,7 +0,0 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
class SubscriptionPolicy < ApplicationPolicy |
||||
def index? |
||||
admin? |
||||
end |
||||
end |
@ -0,0 +1,11 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
class DropSubscriptions < ActiveRecord::Migration[5.2] |
||||
def up |
||||
drop_table :subscriptions |
||||
end |
||||
|
||||
def down |
||||
raise ActiveRecord::IrreversibleMigration |
||||
end |
||||
end |
@ -1,7 +0,0 @@ |
||||
Fabricator(:subscription) do |
||||
account |
||||
callback_url "http://example.com/callback" |
||||
secret "foobar" |
||||
expires_at "2016-11-28 11:30:07" |
||||
confirmed false |
||||
end |
@ -1,67 +0,0 @@ |
||||
require 'rails_helper' |
||||
|
||||
RSpec.describe Subscription, type: :model do |
||||
let(:alice) { Fabricate(:account, username: 'alice') } |
||||
|
||||
subject { Fabricate(:subscription, account: alice) } |
||||
|
||||
describe '#expired?' do |
||||
it 'return true when expires_at is past' do |
||||
subject.expires_at = 2.days.ago |
||||
expect(subject.expired?).to be true |
||||
end |
||||
|
||||
it 'return false when expires_at is future' do |
||||
subject.expires_at = 2.days.from_now |
||||
expect(subject.expired?).to be false |
||||
end |
||||
end |
||||
|
||||
describe 'lease_seconds' do |
||||
it 'returns the time remaining until expiration' do |
||||
datetime = 1.day.from_now |
||||
subscription = Subscription.new(expires_at: datetime) |
||||
travel_to(datetime - 12.hours) do |
||||
expect(subscription.lease_seconds).to eq(12.hours) |
||||
end |
||||
end |
||||
end |
||||
|
||||
describe 'lease_seconds=' do |
||||
it 'sets expires_at to min expiration when small value is provided' do |
||||
subscription = Subscription.new |
||||
datetime = 1.day.from_now |
||||
too_low = Subscription::MIN_EXPIRATION - 1000 |
||||
travel_to(datetime) do |
||||
subscription.lease_seconds = too_low |
||||
end |
||||
|
||||
expected = datetime + Subscription::MIN_EXPIRATION.seconds |
||||
expect(subscription.expires_at).to be_within(1.0).of(expected) |
||||
end |
||||
|
||||
it 'sets expires_at to value when valid value is provided' do |
||||
subscription = Subscription.new |
||||
datetime = 1.day.from_now |
||||
valid = Subscription::MIN_EXPIRATION + 1000 |
||||
travel_to(datetime) do |
||||
subscription.lease_seconds = valid |
||||
end |
||||
|
||||
expected = datetime + valid.seconds |
||||
expect(subscription.expires_at).to be_within(1.0).of(expected) |
||||
end |
||||
|
||||
it 'sets expires_at to max expiration when large value is provided' do |
||||
subscription = Subscription.new |
||||
datetime = 1.day.from_now |
||||
too_high = Subscription::MAX_EXPIRATION + 1000 |
||||
travel_to(datetime) do |
||||
subscription.lease_seconds = too_high |
||||
end |
||||
|
||||
expected = datetime + Subscription::MAX_EXPIRATION.seconds |
||||
expect(subscription.expires_at).to be_within(1.0).of(expected) |
||||
end |
||||
end |
||||
end |
@ -1,24 +0,0 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
require 'rails_helper' |
||||
require 'pundit/rspec' |
||||
|
||||
RSpec.describe SubscriptionPolicy do |
||||
let(:subject) { described_class } |
||||
let(:admin) { Fabricate(:user, admin: true).account } |
||||
let(:john) { Fabricate(:user).account } |
||||
|
||||
permissions :index? do |
||||
context 'admin?' do |
||||
it 'permits' do |
||||
expect(subject).to permit(admin, Subscription) |
||||
end |
||||
end |
||||
|
||||
context '!admin?' do |
||||
it 'denies' do |
||||
expect(subject).to_not permit(john, Subscription) |
||||
end |
||||
end |
||||
end |
||||
end |
Loading…
Reference in new issue