61 lines
1.5 KiB
Ruby
61 lines
1.5 KiB
Ruby
require "spec_helper"
|
|
require_relative "../../app/models/duration_timecode"
|
|
|
|
describe DurationTimecode do
|
|
describe ".parse" do
|
|
it "returns a new instance from a HH:MM:SS formatted string" do
|
|
duration = described_class.parse("00:30:20")
|
|
|
|
expect(duration).to be_a(described_class)
|
|
expect(duration.hours).to be_zero
|
|
expect(duration.minutes).to eq(30)
|
|
expect(duration.seconds).to eq(20)
|
|
end
|
|
|
|
context "with an invalid format" do
|
|
it "raises an error" do
|
|
expect {
|
|
described_class.parse("bad format")
|
|
}.to raise_error(ArgumentError)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe ".from_seconds" do
|
|
it "returns a new instance from total seconds" do
|
|
duration = described_class.from_seconds(3662)
|
|
|
|
expect(duration.hours).to eq(1)
|
|
expect(duration.minutes).to eq(1)
|
|
expect(duration.seconds).to eq(2)
|
|
end
|
|
end
|
|
|
|
describe "#to_i" do
|
|
it "returns the total number of seconds" do
|
|
duration = described_class.parse("01:01:02")
|
|
|
|
expect(duration.to_i).to eq(3662)
|
|
end
|
|
end
|
|
|
|
describe "#to_s" do
|
|
it "returns a string in HH:MM:SS format" do
|
|
duration = described_class.new(0, 15, 30)
|
|
|
|
expect(duration.to_s).to eq("00:15:30")
|
|
end
|
|
end
|
|
|
|
describe "#+" do
|
|
it "returns an instance representing the sum" do
|
|
duration1 = described_class.new(0, 15, 40)
|
|
duration2 = described_class.new(0, 3, 25)
|
|
|
|
sum = duration1 + duration2
|
|
|
|
expect(sum.to_s).to eq("00:19:05")
|
|
end
|
|
end
|
|
end
|