Files
old-holivud2/spec/models/headshot_collection_spec.rb
2020-06-03 07:24:01 +02:00

103 lines
3.5 KiB
Ruby

require "rails_helper"
describe HeadshotCollection do
describe ".for_project" do
it "generates a collection for a given project" do
project = create(:project,
appearance_releases: create_list(:appearance_release, 1),
talent_releases: create_list(:talent_release, 1),
)
collection = HeadshotCollection.for_project(project)
expect(collection).not_to be_nil
expect(collection).to be_a(HeadshotCollection)
expect(collection.releasables).to include(project.appearance_releases.first)
expect(collection.releasables).to include(project.talent_releases.first)
expect(collection.collection_uid).to eq(project.id)
end
context "when a release has no headshot photo attachment" do
it "excludes that release from the headshot collection" do
project = create(:project,
appearance_releases: build_list(:appearance_release, 1, :without_person_photo),
talent_releases: [],
)
collection = HeadshotCollection.for_project(project)
expect(collection).to be_a(HeadshotCollection)
expect(collection.releasables).not_to include(project.appearance_releases.first)
end
end
end
describe "#as_json" do
it "uses the custom hash format" do
collection = HeadshotCollection.new "uid", []
expect(collection.as_json).to eq(collection.to_hash)
end
end
describe "#to_hash" do
it "includes the name of the bucket where the headshots are stored" do
allow(ENV).to receive(:[]).with("AWS_BUCKET").and_return("test-bucket")
collection = HeadshotCollection.new("uid", [])
bucket_name = collection.to_hash[:bucket_name]
expect(bucket_name).to eq("test-bucket")
end
it "includes the collection UID" do
collection = HeadshotCollection.new("uid", [])
collection_uid = collection.to_hash[:collection_uid]
expect(collection_uid).to eq("uid")
end
it "forces the collection UID to be a string" do
collection = HeadshotCollection.new(10, [])
collection_uid = collection.to_hash[:collection_uid]
expect(collection_uid).to eq("10")
end
it "includes a mapping of IDs to headshot keys" do
releases = build_releases_with_photo_keys(["123", "456"])
collection = HeadshotCollection.new("uid", releases)
mapping = collection.to_hash[:ids_to_images]
expect(mapping["appearance_release_#{releases.first.id}"]).to include("123")
expect(mapping["appearance_release_#{releases.last.id}"]).to include("456")
end
it "differentiates between release types" do
releases = [
build_release_with_photo_key("123", release_type: :appearance_release),
build_release_with_photo_key("456", release_type: :talent_release),
]
collection = HeadshotCollection.new("uid", releases)
mapping = collection.to_hash[:ids_to_images]
expect(mapping["appearance_release_#{releases.first.id}"]).to include("123")
expect(mapping["talent_release_#{releases.last.id}"]).to include("456")
end
end
private
def build_release_with_photo_key(key, release_type: :appearance_release)
build_stubbed(release_type).tap do |release|
photo = double(key: key)
allow(release).to receive(:photo).and_return(photo)
end
end
def build_releases_with_photo_keys(keys)
keys.map { |key| build_release_with_photo_key(key) }
end
end