* Add migrations for subscriber_email column * Add new schema * Update relationships, specs, and factory * Use unless index_exists? over if !index_exists? * Fix typo in last fix for migration * Rename authored_user_subscriptions - to source_authored_user_subcriptions * Add factory methods and specs - UserSubscription.make - UserSubscription.make_new - Article.new_user_subscription - Article.create_user_subscription * Remove self and & * Change make_new to build * new_user_subscription --> build_user_subscription * Come on, Travis
53 lines
2.2 KiB
Ruby
53 lines
2.2 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe UserSubscription, type: :model do
|
|
subject { build(:user_subscription) }
|
|
|
|
let(:source) { create(:article) }
|
|
let(:subscriber) { create(:user) }
|
|
|
|
describe "validations" do
|
|
it { is_expected.to validate_presence_of(:user_subscription_sourceable_id) }
|
|
it { is_expected.to validate_presence_of(:user_subscription_sourceable_type) }
|
|
it { is_expected.to validate_presence_of(:subscriber_id) }
|
|
it { is_expected.to validate_presence_of(:subscriber_email) }
|
|
it { is_expected.to validate_presence_of(:author_id) }
|
|
it { is_expected.to validate_inclusion_of(:user_subscription_sourceable_type).in_array(%w[Article]) }
|
|
it { is_expected.to validate_uniqueness_of(:subscriber_id).scoped_to(%i[subscriber_email user_subscription_sourceable_type user_subscription_sourceable_id]) }
|
|
end
|
|
|
|
describe "#build" do
|
|
it "returns a new UserSubcription with the correct attributes" do
|
|
new_user_subscription = described_class.new(
|
|
user_subscription_sourceable: source,
|
|
author_id: source.user_id,
|
|
subscriber_id: subscriber.id,
|
|
subscriber_email: subscriber.email,
|
|
)
|
|
|
|
factory_user_subscription = described_class.build(source: source, subscriber: subscriber)
|
|
|
|
factory_user_subscription.attributes.each do |name, val|
|
|
expect(new_user_subscription[name]).to eq val
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#make" do
|
|
it "returns a created UserSubcription with the correct attributes" do
|
|
user_subscription_fields = %w[author_id subsciber_id subscriber_email user_subscription_sourceable_id user_susbcription_sourceable_type]
|
|
|
|
user_subscription = create(:user_subscription,
|
|
user_subscription_sourceable: source,
|
|
author_id: source.user_id,
|
|
subscriber_id: subscriber.id,
|
|
subscriber_email: subscriber.email)
|
|
|
|
factory_user_subscription = described_class.make(source: source, subscriber: subscriber)
|
|
|
|
user_subscription_fields.each do |field|
|
|
expect(factory_user_subscription[field]).to eq user_subscription[field]
|
|
end
|
|
end
|
|
end
|
|
end
|