22require "date"
33
44class TestResult < Minitest ::Test
5+
6+ def build_mock_spec ( name :, version :, date :)
7+ spec = Gem ::Specification . new
8+ spec . name = name
9+ spec . version = Gem ::Version . new ( version )
10+ spec . date = date
11+ spec
12+ end
13+
514 def setup
615 @spec1 = Gem ::Specification . new do |s |
716 s . name = "hi"
@@ -14,6 +23,18 @@ def setup
1423 s . date = DateTime . parse ( "2009-09-02" )
1524 end
1625 @result = GemDating ::Result . new ( [ @spec1 , @spec2 ] )
26+
27+ today = Date . today
28+
29+ @recent_gem = build_mock_spec ( name : "recent" , version : "1.0" , date : today - 10 )
30+ @months_old_gem = build_mock_spec ( name : "months_old" , version : "1.0" , date : today << 2 )
31+ @year_old_gem = build_mock_spec ( name : "year_old" , version : "1.0" , date : today - 400 )
32+
33+ @date_result = GemDating ::Result . new ( [
34+ @recent_gem ,
35+ @months_old_gem ,
36+ @year_old_gem
37+ ] )
1738 end
1839
1940 def test_specs
@@ -51,4 +72,42 @@ def test_table
5172 assert_equal line . strip , table . split [ index ] . strip
5273 end
5374 end
75+
76+ def test_cut_off_parsing_years
77+ @date_result . older_than ( "1y" )
78+
79+ assert_equal @date_result . specs . include? ( @year_old_gem ) , true
80+ assert_equal @date_result . specs . include? ( @months_old_gem ) , false
81+ assert_equal @date_result . specs . include? ( @recent_gem ) , false
82+ end
83+
84+ def test_cut_off_parsing_months
85+ @date_result . older_than ( "1m" )
86+
87+ assert_equal @date_result . specs . include? ( @year_old_gem ) , true
88+ assert_equal @date_result . specs . include? ( @months_old_gem ) , true
89+ assert_equal @date_result . specs . include? ( @recent_gem ) , false
90+ end
91+
92+ def test_cut_off_parsing_weeks
93+ @date_result . older_than ( "3w" )
94+
95+ assert_equal @date_result . specs . include? ( @year_old_gem ) , true
96+ assert_equal @date_result . specs . include? ( @months_old_gem ) , true
97+ assert_equal @date_result . specs . include? ( @recent_gem ) , false
98+ end
99+
100+ def test_cut_off_parsing_days
101+ @date_result . older_than ( "7d" )
102+
103+ assert_equal @date_result . specs . include? ( @year_old_gem ) , true
104+ assert_equal @date_result . specs . include? ( @months_old_gem ) , true
105+ assert_equal @date_result . specs . include? ( @recent_gem ) , true
106+ end
107+
108+ def test_cut_off_invalid_format_raises
109+ assert_raises ( ArgumentError ) { @date_result . older_than ( "5x" ) }
110+ assert_raises ( ArgumentError ) { @date_result . older_than ( "abc" ) }
111+ assert_raises ( ArgumentError ) { @date_result . older_than ( "" ) }
112+ end
54113end
0 commit comments