119 lines
2.7 KiB
Ruby
119 lines
2.7 KiB
Ruby
|
|
require 'spec_helper'
|
||
|
|
|
||
|
|
describe Subscription do
|
||
|
|
let(:subscription) { build(:subscription) }
|
||
|
|
let(:work) { create(:work) }
|
||
|
|
let(:series) { create(:series) }
|
||
|
|
let(:user) { create(:user) }
|
||
|
|
|
||
|
|
context "to a work" do
|
||
|
|
before do
|
||
|
|
subscription.subscribable = work
|
||
|
|
subscription.save!
|
||
|
|
end
|
||
|
|
|
||
|
|
it "has a name" do
|
||
|
|
expect(subscription.name).to eq(work.title)
|
||
|
|
end
|
||
|
|
|
||
|
|
describe "when the work is destroyed" do
|
||
|
|
before do
|
||
|
|
subscription.subscribable.destroy
|
||
|
|
end
|
||
|
|
|
||
|
|
it "should be destroyed" do
|
||
|
|
expect { subscription.reload }.to raise_error ActiveRecord::RecordNotFound
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
context "to a series" do
|
||
|
|
before do
|
||
|
|
subscription.subscribable = series
|
||
|
|
subscription.save!
|
||
|
|
end
|
||
|
|
|
||
|
|
it "has a name" do
|
||
|
|
expect(subscription.name).to eq(series.title)
|
||
|
|
end
|
||
|
|
|
||
|
|
describe "when the series is destroyed" do
|
||
|
|
before do
|
||
|
|
subscription.subscribable.destroy
|
||
|
|
end
|
||
|
|
|
||
|
|
it "should be destroyed" do
|
||
|
|
expect { subscription.reload }.to raise_error ActiveRecord::RecordNotFound
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
context "to a user" do
|
||
|
|
before do
|
||
|
|
subscription.subscribable = user
|
||
|
|
subscription.save!
|
||
|
|
end
|
||
|
|
|
||
|
|
it "has a name" do
|
||
|
|
expect(subscription.name).to eq(user.login)
|
||
|
|
end
|
||
|
|
|
||
|
|
describe "when the user is destroyed" do
|
||
|
|
before do
|
||
|
|
subscription.subscribable.destroy
|
||
|
|
end
|
||
|
|
|
||
|
|
it "should be destroyed" do
|
||
|
|
expect { subscription.reload }.to raise_error ActiveRecord::RecordNotFound
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
context "when subscribable does not exist" do
|
||
|
|
before do
|
||
|
|
work = create(:work)
|
||
|
|
subscription.subscribable_id = work.id
|
||
|
|
subscription.subscribable_type = "Work"
|
||
|
|
work.destroy
|
||
|
|
end
|
||
|
|
|
||
|
|
it "should be invalid" do
|
||
|
|
expect(subscription.valid?).to be_falsey
|
||
|
|
end
|
||
|
|
|
||
|
|
it "has a name" do
|
||
|
|
expect(subscription.name).to eq("Deleted item")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
context "when subscribable is not a valid object to subscribe to" do
|
||
|
|
before do
|
||
|
|
subscription.subscribable_id = 1
|
||
|
|
subscription.subscribable_type = "Pseud"
|
||
|
|
end
|
||
|
|
|
||
|
|
it "should be invalid" do
|
||
|
|
expect(subscription.valid?).to be_falsey
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
context "when subscribable_type is not a real model name" do
|
||
|
|
before do
|
||
|
|
subscription.subscribable_id = 1
|
||
|
|
subscription.subscribable_type = "Серия"
|
||
|
|
end
|
||
|
|
|
||
|
|
it "should be invalid" do
|
||
|
|
expect(subscription.valid?).to be_falsey
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
it "can have an id larger than unsigned int" do
|
||
|
|
subscription = build(:subscription, id: 5_294_967_295, subscribable: work)
|
||
|
|
|
||
|
|
expect(subscription).to be_valid
|
||
|
|
expect(subscription.save).to be_truthy
|
||
|
|
expect(subscription.name).to eq(work.title)
|
||
|
|
end
|
||
|
|
end
|