Add validation
This commit is contained in:
parent
81da30fb01
commit
0f01d2ad01
@ -74,5 +74,25 @@ module Dayoff::Test
|
||||
expected = 8 * 3 - 10 * 2
|
||||
expected.should eq span.total_hours
|
||||
end
|
||||
|
||||
it "not start twice" do
|
||||
prof = create_profile
|
||||
start_time = t(3, 10, 0)
|
||||
prof.start start_time
|
||||
expect_raises(AlreadyStarted) do
|
||||
prof.start start_time
|
||||
end
|
||||
end
|
||||
|
||||
it "not finish twice" do
|
||||
prof = create_profile
|
||||
start_time = t(3, 10, 0)
|
||||
finish_time = t(3, 20, 0)
|
||||
prof.start start_time
|
||||
prof.finish finish_time
|
||||
expect_raises(StartedRecordNotFound) do
|
||||
prof.finish finish_time
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -4,4 +4,7 @@ module Dayoff
|
||||
|
||||
class StartedRecordNotFound < Exception
|
||||
end
|
||||
|
||||
class AlreadyStarted < Exception
|
||||
end
|
||||
end
|
||||
|
@ -35,6 +35,9 @@ module Dayoff
|
||||
end
|
||||
|
||||
def start(time : Time) : Nil
|
||||
if started_point
|
||||
raise AlreadyStarted.new
|
||||
end
|
||||
@wrecords.each do |wr|
|
||||
if time <= wr.start || time <= wr.finish!
|
||||
raise CrossedTimeSpan.new
|
||||
@ -46,7 +49,7 @@ module Dayoff
|
||||
end
|
||||
|
||||
def finish(time : Time) : Nil
|
||||
started = @wrecords.find { |x| x.started? }
|
||||
started = started_point
|
||||
if started.nil?
|
||||
raise StartedRecordNotFound.new
|
||||
end
|
||||
@ -59,5 +62,9 @@ module Dayoff
|
||||
worked = get_work_hours on_time
|
||||
planned - worked
|
||||
end
|
||||
|
||||
private def started_point
|
||||
@wrecords.find { |x| x.started? }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user