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

266 lines
8.2 KiB
Ruby

require "rails_helper"
RSpec.describe EdlEventGateway do
let(:files_for_request) do
instance_double(FilesForRequest,
file_object_name: "file_object_name",
edl_file_object_name: "edl_file_object_name",
aws_bucket_name: "aws_bucket_name",
start_timecode_offset: nil,
job_id: "video_analysis_uid",
)
end
describe "#edl_events" do
it "filters edl events by channel_filter" do
video_event = BrayniacAI::EdlParseResult.new({
"channel" => "V",
"start_time" => 0,
"timecode_in" => "00:00:00:00",
"timecode_out" => "00:00:01:00",
"duration" => 1,
"source_file_name" => "my_file.mp4",
"clip_name" => "my_clip.mp4",
"description" => "This is a great clip",
"matches" => [1, 2],
})
audio_event = BrayniacAI::EdlParseResult.new({
"channel" => "A1",
"start_time" => 0,
"timecode_in" => "00:00:00:00",
"timecode_out" => "00:00:01:00",
"duration" => 1,
"source_file_name" => "my_file.mp3",
"clip_name" => "my_clip.mp3",
"description" => "This is a great clip",
"matches" => [1, 2],
})
allow(BrayniacAI::EdlParse).to receive(:create).and_return(
BrayniacAI::EdlParse.new({ results: [video_event, audio_event] })
)
edl_events = EdlEventGateway.new(
files_for_request,
"00:00:02:00",
"00:00:02:00",
channel_filter: "A",
).edl_events
expect(edl_events.size).to eq(1)
expect(edl_events).to include(EdlEvent.new({
"channel" => "A1",
"start_time" => 0,
"timecode_in" => "00:00:00:00",
"timecode_out" => "00:00:01:00",
"duration" => 1,
"source_file_name" => "my_file.mp3",
"clip_name" => "my_clip.mp3",
"description" => "This is a great clip",
"matches" => [1, 2],
}))
end
describe "calling the API" do
it "includes location information about the video file and EDL file" do
allow(ENV).to receive(:[]).with("AWS_BUCKET").and_return("test-bucket")
allow(BrayniacAI::EdlParse).to receive(:create)
EdlEventGateway.new(
files_for_request,
"00:00:02:00",
"00:00:02:00",
).edl_events
expect(BrayniacAI::EdlParse).to have_received(:create).with(
job_id: "video_analysis_uid",
video_bucket_name: "aws_bucket_name",
video_object_name: "file_object_name",
edl_bucket_name: "aws_bucket_name",
edl_object_name: "edl_file_object_name",
timecode_start: "00:00:02:00",
timecode_end: "00:00:02:00",
collection: {},
)
end
it "includes collection when provided" do
allow(ENV).to receive(:[]).with("AWS_BUCKET").and_return("test-bucket")
allow(BrayniacAI::EdlParse).to receive(:create)
EdlEventGateway.new(
files_for_request,
"00:00:02:00",
"00:00:02:00",
collection: { 1 => "source file name" },
).edl_events
expect(BrayniacAI::EdlParse).to have_received(:create).with(
job_id: "video_analysis_uid",
video_bucket_name: "aws_bucket_name",
video_object_name: "file_object_name",
edl_bucket_name: "aws_bucket_name",
edl_object_name: "edl_file_object_name",
timecode_start: "00:00:02:00",
timecode_end: "00:00:02:00",
collection: { 1 => "source file name" },
)
end
it "includes start_timecode_offset when provided" do
allow(files_for_request).to receive(:start_timecode_offset).and_return("start_timecode_offset")
allow(BrayniacAI::EdlParse).to receive(:create)
EdlEventGateway.new(
files_for_request,
"00:00:02:00",
"00:00:02:00",
).edl_events
expect(BrayniacAI::EdlParse).to have_received(:create).with(
job_id: "video_analysis_uid",
video_bucket_name: "aws_bucket_name",
video_object_name: "file_object_name",
edl_bucket_name: "aws_bucket_name",
edl_object_name: "edl_file_object_name",
timecode_start: "00:00:02:00",
timecode_end: "00:00:02:00",
collection: {},
edl_timecode_start: "start_timecode_offset",
)
end
it "does not include timecode_end, edl_timecode_start, job_id when given nil" do
allow(ENV).to receive(:[]).with("AWS_BUCKET").and_return("test-bucket")
allow(BrayniacAI::EdlParse).to receive(:create)
allow(files_for_request).to receive(:job_id).and_return(nil)
EdlEventGateway.new(
files_for_request,
"00:00:02:00",
nil,
collection: { 1 => "source file name" },
).edl_events
expect(BrayniacAI::EdlParse).to have_received(:create).with(
video_bucket_name: "aws_bucket_name",
video_object_name: "file_object_name",
edl_bucket_name: "aws_bucket_name",
edl_object_name: "edl_file_object_name",
timecode_start: "00:00:02:00",
collection: { 1 => "source file name" },
)
end
end
it "returns the collection of edl events from response" do
edl_event = BrayniacAI::EdlParseResult.new({
"channel" => "V",
"start_time" => 0,
"timecode_in" => "00:00:00:00",
"timecode_out" => "00:00:01:00",
"duration" => 1,
"source_file_name" => "my_file.mp4",
"clip_name" => "my_clip.mp4",
"description" => "This is a great clip",
"matches" => [1, 2],
})
allow(BrayniacAI::EdlParse).to receive(:create).and_return(
BrayniacAI::EdlParse.new({ results: [edl_event] })
)
edl_events = EdlEventGateway.new(
files_for_request,
"00:00:02:00",
"00:00:02:00",
).edl_events
expect(edl_events.size).to eq(1)
expect(edl_events).to include(EdlEvent.new({
"channel" => "V",
"start_time" => 0,
"timecode_in" => "00:00:00:00",
"timecode_out" => "00:00:01:00",
"duration" => 1,
"source_file_name" => "my_file.mp4",
"clip_name" => "my_clip.mp4",
"description" => "This is a great clip",
"matches" => [1, 2],
}))
end
end
describe "#edl_timecode_start" do
it "returns edl_timecode_start from response" do
allow(BrayniacAI::EdlParse).to receive(:create).and_return(BrayniacAI::EdlParse.new(edl_timecode_start: "edl_timecode_start"))
expect(described_class.new(
files_for_request,
"00:00:00:00",
"00:00:00:00"
).edl_timecode_start).to eq "edl_timecode_start"
end
context "when response nil" do
it "returns edl_timecode_start from response" do
allow(BrayniacAI::EdlParse).to receive(:create).and_return(nil)
expect(described_class.new(
files_for_request,
"00:00:00:00",
"00:00:00:00"
).edl_timecode_start).to be_nil
end
end
end
describe "#fps" do
it "returns fps from response" do
allow(BrayniacAI::EdlParse).to receive(:create).and_return(BrayniacAI::EdlParse.new(fps: 29.97))
expect(described_class.new(
files_for_request,
"00:00:00:00",
"00:00:00:00"
).fps).to eq 29.97
end
context "when response nil" do
it "returns nil" do
allow(BrayniacAI::EdlParse).to receive(:create).and_return(nil)
expect(described_class.new(
files_for_request,
"00:00:00:00",
"00:00:00:00"
).fps).to be_nil
end
end
end
describe "#edl_offset_seconds" do
it "returns edl_offset_seconds from response" do
allow(BrayniacAI::EdlParse).to receive(:create).and_return(BrayniacAI::EdlParse.new(edl_offset_seconds: 100))
expect(described_class.new(
files_for_request,
"00:00:00:00",
"00:00:00:00"
).edl_offset_seconds).to eq 100
end
context "when response nil" do
it "returns edl_offset_seconds from response" do
allow(BrayniacAI::EdlParse).to receive(:create).and_return(nil)
expect(described_class.new(
files_for_request,
"00:00:00:00",
"00:00:00:00"
).edl_offset_seconds).to be_nil
end
end
end
end