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