95 lines
3.1 KiB
Ruby
95 lines
3.1 KiB
Ruby
|
|
require "spec_helper"
|
||
|
|
|
||
|
|
describe CollectionItem, :ready do
|
||
|
|
it "can be created" do
|
||
|
|
expect(create(:collection_item)).to be_valid
|
||
|
|
end
|
||
|
|
|
||
|
|
context "belonging to a bookmark" do
|
||
|
|
it "can be revealed without erroring" do
|
||
|
|
ci = CollectionItem.create(
|
||
|
|
item_id: 1,
|
||
|
|
item_type: "Bookmark",
|
||
|
|
collection_id: create(:collection).id,
|
||
|
|
unrevealed: true
|
||
|
|
)
|
||
|
|
ci.unrevealed = false
|
||
|
|
expect(ci.save).to be_truthy
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
describe "#save" do
|
||
|
|
let(:collection) { create(:collection) }
|
||
|
|
let(:work) { create(:work) }
|
||
|
|
|
||
|
|
context "as an archivist" do
|
||
|
|
let(:archivist) { create(:archivist) }
|
||
|
|
|
||
|
|
before do
|
||
|
|
User.current_user = archivist
|
||
|
|
end
|
||
|
|
|
||
|
|
context "when the archivist maintains the collection" do
|
||
|
|
let(:collection) { create(:collection, owner: archivist.default_pseud) }
|
||
|
|
|
||
|
|
it "automatically approves the item" do
|
||
|
|
item = create(:collection_item, item: work, collection: collection)
|
||
|
|
expect(item.approved?).to be true
|
||
|
|
end
|
||
|
|
|
||
|
|
it "sends an archivist added email" do
|
||
|
|
message_double = instance_double(ActionMailer::MessageDelivery, deliver_later: true)
|
||
|
|
expect(UserMailer).to receive(:archivist_added_to_collection_notification)
|
||
|
|
.and_return(message_double)
|
||
|
|
create(:collection_item, item: work, collection: collection)
|
||
|
|
end
|
||
|
|
|
||
|
|
context "when the item's creator has collection emails turned off" do
|
||
|
|
before do
|
||
|
|
work.users.first.preference.update!(collection_emails_off: true)
|
||
|
|
end
|
||
|
|
|
||
|
|
it "does not send an archivist added email" do
|
||
|
|
expect(UserMailer).not_to receive(:archivist_added_to_collection_notification)
|
||
|
|
create(:collection_item, item: work, collection: collection)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
context "when the archivist does not maintain the collection" do
|
||
|
|
it "does not automatically approve the item" do
|
||
|
|
item = create(:collection_item, item: work, collection: collection)
|
||
|
|
expect(item.approved?).to be false
|
||
|
|
end
|
||
|
|
|
||
|
|
it "does not send an archivist added email" do
|
||
|
|
expect(UserMailer).not_to receive(:archivist_added_to_collection_notification)
|
||
|
|
create(:collection_item, item: work, collection: collection)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
context "with no current user" do
|
||
|
|
it "does not send an archivist added email" do
|
||
|
|
expect(UserMailer).not_to receive(:archivist_added_to_collection_notification)
|
||
|
|
create(:collection_item, item: work, collection: collection)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
describe "include_for_works scope" do
|
||
|
|
let(:collection) { create(:collection) }
|
||
|
|
let(:work) { create(:work, id: 63) }
|
||
|
|
let(:bookmark) { create(:bookmark, id: 63) }
|
||
|
|
|
||
|
|
before { bookmark.collections << collection }
|
||
|
|
|
||
|
|
it "returns the correct type item for bookmarks" do
|
||
|
|
expect(work.id).to eq(bookmark.id)
|
||
|
|
expect(collection.collection_items).not_to be_empty
|
||
|
|
expect(collection.collection_items.first.item_type).to eq("Bookmark")
|
||
|
|
expect(collection.collection_items.include_for_works.first.item_type).to eq("Bookmark")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|