107 lines
4.2 KiB
Ruby
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
|