Files
old-holivud2/spec/controllers/video_analyses_controller_spec.rb
2020-05-31 22:38:19 +02:00

107 lines
4.2 KiB
Ruby

require "rails_helper"
RSpec.describe VideoAnalysesController do
let(:admin) { create(:user, :admin) }
let(:project) { create(:project, account: admin.accounts.first) }
let(:video) { create(:video, project: project) }
before do
allow(AnalyzeVideoJob).to receive(:perform_later)
allow(BrayniacAI::EdlParse).to receive(:create)
sign_in admin
end
render_views
describe "#create" do
it "redirects to video analyses" do
post :create, params: { video_id: video, use_route: video_video_analyses_path(video) }
expect(response).to redirect_to(video_video_analyses_path(video))
end
it "reanalyzes the video" do
expect(AnalyzeVideoJob).to receive(:perform_later).with(video, reanalysis: true)
post :create, params: { video_id: video, use_route: video_video_analyses_path(video) }
end
it "reanalyzes the audio" do
expect(AnalyzeAudioJob).to receive(:perform_later).with(video)
post :create, params: { video_id: video, use_route: video_video_analyses_path(video) }
end
end
describe "#show" do
it "sets video_release_confirmations, talent_releases, appearance_releases, location_releases, acquired_media_releases, music_releases, material_releases, graphics_elements_data, audio_confirmations" do
talent_releases = [create(:talent_release)]
appearance_releases = [create(:appearance_release)]
location_releases = [create(:location_release)]
acquired_media_releases = [create(:acquired_media_release)]
music_releases = [create(:music_release)]
material_releases = [create(:material_release)]
project = create(:project,
name: "All the releases",
account: admin.accounts.first,
talent_releases: talent_releases,
appearance_releases: appearance_releases,
location_releases: location_releases,
acquired_media_releases: acquired_media_releases,
music_releases: music_releases,
material_releases: material_releases,
)
video = create(:video,
project: project,
video_release_confirmations: [
create(:video_release_confirmation, releasable: talent_releases.first),
]
)
create(:audio_confirmation, video: video)
get :show, params: { video_id: video, use_route: video_video_analyses_path(video) }
expect(assigns(:video_release_confirmations)).to eq [VideoReleaseConfirmation.first]
expect(assigns(:talent_releases)).to eq talent_releases
expect(assigns(:appearance_releases)).to eq appearance_releases
expect(assigns(:location_releases)).to eq location_releases
expect(assigns(:acquired_media_releases)).to eq acquired_media_releases
expect(assigns(:music_releases)).to eq music_releases
expect(assigns(:material_releases)).to eq material_releases
expect(assigns(:video_analysis_presenter)).to be_an_instance_of(VideoAnalysisPresenter)
expect(assigns(:graphics_elements_data)).to have_attributes(graphics_elements: [])
expect(assigns(:unreleased_appearances_data)).to have_attributes(unreleased_appearances: [])
expect(assigns(:audio_confirmations)).to eq [AudioConfirmation.last]
end
it "sorts confirmations by appears_at" do
talent_releases = [create(:talent_release), create(:talent_release), create(:talent_release)]
project = create(:project,
name: "All the releases",
account: admin.accounts.first,
talent_releases: talent_releases,
)
video = create(:video,
project: project,
video_release_confirmations: [
create(:video_release_confirmation, releasable: talent_releases.first, time_elapsed: "10"),
create(:video_release_confirmation, releasable: talent_releases.second, time_elapsed: "50"),
create(:video_release_confirmation, releasable: talent_releases.last, time_elapsed: "30"),
]
)
get :show, params: { video_id: video, use_route: video_video_analyses_path(video) }
body = response.body
first = body =~ /00:00:10:00/
second = body =~ /00:00:30:00/
last = body =~ /00:00:50:00/
expect(first < second).to eq true
expect(second < last).to eq true
end
end
end