otwarchive-symphonyarchive/spec/models/collection_spec.rb

117 lines
3.7 KiB
Ruby
Raw Normal View History

2026-03-11 22:22:11 +00:00
require 'spec_helper'
describe Collection do
before do
@collection = FactoryBot.create(:collection)
end
describe "collections with challenges" do
[GiftExchange, PromptMeme].each do |challenge_klass|
["true","false"].each do |moderated_status|
describe "of type #{challenge_klass.name}" do
before do
@collection.challenge = challenge_klass.new
@collection.collection_preference.moderated = moderated_status
@challenge = @collection.challenge
@challenge.signups_open_at = Time.now - 3.days
@challenge.signups_close_at = Time.now + 3.days
@collection.save
end
it "should correctly identify the collection challenge type" do
expect(@collection.gift_exchange?).to eq(@challenge.is_a?(GiftExchange))
expect(@collection.prompt_meme?).to eq(@challenge.is_a?(PromptMeme))
end
describe "with open signup" do
before do
@challenge.signup_open = true
end
describe "and close date in the future" do
before do
@challenge.signups_open_at = Time.now - 3.days
@challenge.signups_close_at = Time.now + 3.days
@challenge.save
end
it "should be listed as open" do
expect(Collection.signup_open(@challenge.class.name)).to include(@collection)
end
end
describe "and close date in the past" do
before do
@challenge.signups_close_at = 2.days.ago
@challenge.signups_open_at = 8.days.ago
@challenge.signup_open = false
@challenge.save
@challenge.signup_open = true
@challenge.save
end
it "should not be listed as open" do
expect(Collection.signup_open(@challenge.class.name)).not_to include(@collection)
end
end
end
describe "with closed signup" do
before do
@challenge.signup_open = false
@challenge.save
end
it "should not be listed as open" do
expect(Collection.signup_open(@challenge.class.name)).not_to include(@collection)
end
end
end
end # moderated_status loop
end # challenges type loop
end
describe "save" do
let(:collection) { create(:collection) }
it "checks the tag limit" do
collection.tag_string = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11"
expect(collection.save).to be_falsey
expect(collection.errors.full_messages).to \
include /Sorry, a collection can only have 10 tags./
end
end
describe "#clear_icon" do
subject { create(:collection, icon_alt_text: "icon alt", icon_comment_text: "icon comment") }
before do
subject.icon.attach(io: File.open(Rails.root.join("features/fixtures/icon.gif")), filename: "icon.gif", content_type: "image/gif")
end
context "when delete_icon is false" do
it "does not clear the icon, icon alt, or icon comment" do
subject.clear_icon
expect(subject.icon.attached?).to be(true)
expect(subject.icon_alt_text).to eq("icon alt")
expect(subject.icon_comment_text).to eq("icon comment")
end
end
context "when delete_icon is true" do
before do
subject.delete_icon = 1
end
it "clears the icon, icon alt, and icon comment" do
subject.clear_icon
expect(subject.icon.attached?).to be(false)
expect(subject.icon_alt_text).to be_nil
expect(subject.icon_comment_text).to be_nil
end
end
end
end