Created
October 25, 2011 15:45
-
-
Save madrobby/1313203 to your computer and use it in GitHub Desktop.
Freckle accepted time formats (in API)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require File.expand_path('../../test_helper', __FILE__) | |
describe Freckle::Time do | |
it "should parse hh:mm" do | |
assert_equal 15, Freckle::Time.parse(':15') | |
assert_equal 15, Freckle::Time.parse('0:15') | |
assert_equal 60, Freckle::Time.parse('1:00') | |
assert_equal 60, Freckle::Time.parse('01:00') | |
assert_equal 660, Freckle::Time.parse('11:00') | |
assert_equal 150, Freckle::Time.parse('2:30') | |
assert_equal 165, Freckle::Time.parse('2:45') | |
end | |
it "should choose between minutes and hours" do | |
assert_equal 15, Freckle::Time.parse('15') | |
assert_equal 60, Freckle::Time.parse('1') | |
assert_equal 120, Freckle::Time.parse('2') | |
assert_equal 540, Freckle::Time.parse('9') | |
assert_equal 90, Freckle::Time.parse('1.5') | |
end | |
it "should honor billing increments" do | |
assert_equal 15, Freckle::Time.parse('10') | |
assert_equal 15, Freckle::Time.parse('14') | |
assert_equal 30, Freckle::Time.parse('30') | |
assert_equal 180, Freckle::Time.parse('2:49') | |
assert_equal 180, Freckle::Time.parse('2:59') | |
assert_equal 179, Freckle::Time.parse('2:59',1) | |
end | |
it "should handle integers" do | |
assert_equal 15, Freckle::Time.parse(10) | |
assert_equal 180, Freckle::Time.parse(180) | |
end | |
it "should default to a 15 minute billing increment" do | |
1.upto(15){|n| assert_equal 15, Freckle::Time.parse(n) } | |
46.upto(60){|n| assert_equal 60, Freckle::Time.parse(n) } | |
end | |
it "should handle arbitrary billing increments" do | |
assert_equal 7, Freckle::Time.parse(6, 7) | |
assert_equal 33, Freckle::Time.parse(27, 11) | |
assert_equal 10, Freckle::Time.parse(9, 5) | |
assert_equal 20, Freckle::Time.parse(19, 20) | |
assert_equal 888, Freckle::Time.parse(631, 444) | |
end | |
it 'should handle minutes with no billing increment' do | |
assert_equal 0, Freckle::Time.parse('0:00',1) | |
assert_equal 1, Freckle::Time.parse('0:01',1) | |
assert_equal 2, Freckle::Time.parse('0:02',1) | |
assert_equal 3, Freckle::Time.parse('0:03',1) | |
assert_equal 4, Freckle::Time.parse('0:04',1) | |
assert_equal 5, Freckle::Time.parse('0:05',1) | |
assert_equal 6, Freckle::Time.parse('0:06',1) | |
assert_equal 7, Freckle::Time.parse('0:07',1) | |
assert_equal 8, Freckle::Time.parse('0:08',1) | |
assert_equal 9, Freckle::Time.parse('0:09',1) | |
assert_equal 60+0, Freckle::Time.parse('1:00',1) | |
assert_equal 60+1, Freckle::Time.parse('1:01',1) | |
assert_equal 60+2, Freckle::Time.parse('1:02',1) | |
assert_equal 60+3, Freckle::Time.parse('1:03',1) | |
assert_equal 60+4, Freckle::Time.parse('1:04',1) | |
assert_equal 60+5, Freckle::Time.parse('1:05',1) | |
assert_equal 60+6, Freckle::Time.parse('1:06',1) | |
assert_equal 60+7, Freckle::Time.parse('1:07',1) | |
assert_equal 60+8, Freckle::Time.parse('1:08',1) | |
assert_equal 60+9, Freckle::Time.parse('1:09',1) | |
end | |
it "should recognize units" do | |
assert_equal 600, Freckle::Time.parse('10h') | |
assert_equal 600, Freckle::Time.parse('10hours') | |
assert_equal 600, Freckle::Time.parse('10 hours') | |
assert_equal 600, Freckle::Time.parse("10\t\s\r\nh") | |
assert_equal 600, Freckle::Time.parse('10hrs') | |
assert_equal 480, Freckle::Time.parse('1d') | |
assert_equal 480, Freckle::Time.parse('1days') | |
assert_equal 480, Freckle::Time.parse('1day') | |
assert_equal 15, Freckle::Time.parse('10m') | |
assert_equal 15, Freckle::Time.parse('9m') | |
assert_equal 15, Freckle::Time.parse('10min') | |
assert_equal 15, Freckle::Time.parse('9minutes') | |
assert_equal 75, Freckle::Time.parse('1h15m') | |
assert_equal 15, Freckle::Time.parse('9M') | |
assert_equal 600, Freckle::Time.parse('10H') | |
assert_equal 480, Freckle::Time.parse('1D') | |
assert_equal 270, Freckle::Time.parse('4h30') | |
assert_equal 75, Freckle::Time.parse('1H15') | |
end | |
it "should parse fractions" do | |
assert_equal 6, Freckle::Time.parse('.10',1) | |
assert_equal 12, Freckle::Time.parse(',2h',1) | |
assert_equal 18, Freckle::Time.parse('.3',6) | |
assert_equal 24, Freckle::Time.parse(' .4',1) | |
assert_equal 30, Freckle::Time.parse('.5',1) | |
assert_equal 36, Freckle::Time.parse('0.6 ',1) | |
assert_equal 42, Freckle::Time.parse('.7',1) | |
assert_equal 48, Freckle::Time.parse('.80',1) | |
assert_equal 54, Freckle::Time.parse(',9',6) | |
assert_equal 15, Freckle::Time.parse('.25',1) | |
assert_equal 30, Freckle::Time.parse('.50',1) | |
assert_equal 45, Freckle::Time.parse(',75',1) | |
assert_equal 45, Freckle::Time.parse('.75',15) | |
assert_equal 59, Freckle::Time.parse('.99',1) | |
assert_equal 60+54, Freckle::Time.parse('1.9',1) | |
assert_equal 60+15, Freckle::Time.parse('1.25',1) | |
assert_equal 60+30, Freckle::Time.parse('1.50',1) | |
assert_equal 60+30, Freckle::Time.parse('1.50',1) | |
assert_equal 60+60+20, Freckle::Time.parse('2.33333',1) | |
assert_equal 240, Freckle::Time.parse('.5d',60) | |
assert_equal 1, Freckle::Time.parse('0.5m',1) | |
end | |
it "should ignore leading or trailing whitespace" do | |
assert_equal 15, Freckle::Time.parse(' 15') | |
assert_equal 15, Freckle::Time.parse(' 15 ') | |
assert_equal 15, Freckle::Time.parse('15 ') | |
assert_equal 15, Freckle::Time.parse(" 15\t\t\t\r\n\t ") | |
end | |
it "should return nil if it can't parse something" do | |
assert_equal nil, Freckle::Time.parse(nil) | |
assert_equal nil, Freckle::Time.parse('') | |
assert_equal nil, Freckle::Time.parse('m') | |
assert_equal nil, Freckle::Time.parse('h') | |
assert_equal nil, Freckle::Time.parse('d') | |
end | |
it "should not choke on floats" do | |
assert_equal 15, Freckle::Time.parse(15.0) | |
assert_equal 30, Freckle::Time.parse('30.0') | |
assert_equal 120, Freckle::Time.parse('2.0') | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment