holidays 2.2.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/README.md +22 -8
- data/Rakefile +26 -8
- data/bin/console +7 -0
- data/bin/setup +5 -0
- data/{data → definitions}/SYNTAX.rdoc +0 -0
- data/{data → definitions}/ar.yaml +0 -0
- data/{data → definitions}/at.yaml +1 -1
- data/{data → definitions}/au.yaml +80 -51
- data/{data → definitions}/be.yaml +0 -0
- data/{data → definitions}/br.yaml +0 -0
- data/{data → definitions}/ca.yaml +0 -0
- data/{data → definitions}/ch.yaml +0 -0
- data/{data → definitions}/cl.yaml +0 -0
- data/{data → definitions}/cr.yaml +0 -0
- data/{data → definitions}/cz.yaml +0 -0
- data/{data → definitions}/de.yaml +25 -34
- data/{data → definitions}/dk.yaml +0 -0
- data/{data → definitions}/ecb_target.yaml +2 -2
- data/{data → definitions}/el.yaml +0 -0
- data/{data → definitions}/es.yaml +37 -26
- data/{data → definitions}/federal_reserve.yaml +0 -0
- data/{data → definitions}/fedex.yaml +9 -3
- data/{data → definitions}/fi.yaml +0 -0
- data/{data → definitions}/fr.yaml +0 -0
- data/{data → definitions}/gb.yaml +19 -19
- data/{data → definitions}/hr.yaml +0 -0
- data/{data → definitions}/hu.yaml +1 -1
- data/{data → definitions}/ie.yaml +0 -0
- data/{data → definitions}/index.yaml +0 -0
- data/{data → definitions}/is.yaml +0 -0
- data/{data → definitions}/it.yaml +0 -0
- data/{data → definitions}/jp.yaml +3 -3
- data/{data → definitions}/li.yaml +3 -3
- data/{data → definitions}/lt.yaml +0 -0
- data/{data → definitions}/ma.yaml +0 -0
- data/{data → definitions}/mx.yaml +0 -0
- data/{data → definitions}/nerc.yaml +0 -0
- data/{data → definitions}/nl.yaml +0 -0
- data/{data → definitions}/no.yaml +0 -0
- data/{data → definitions}/north_america_informal.yaml +0 -0
- data/{data → definitions}/nyse.yaml +0 -0
- data/{data → definitions}/nz.yaml +21 -10
- data/{data → definitions}/ph.yaml +0 -0
- data/{data → definitions}/pl.yaml +0 -0
- data/{data → definitions}/pt.yaml +0 -0
- data/{data → definitions}/ro.yaml +1 -2
- data/{data → definitions}/se.yaml +0 -0
- data/{data → definitions}/sg.yaml +0 -0
- data/{data → definitions}/si.yaml +6 -6
- data/{data → definitions}/sk.yaml +0 -0
- data/{data → definitions}/united_nations.yaml +0 -0
- data/{data → definitions}/ups.yaml +17 -11
- data/{data → definitions}/us.yaml +20 -15
- data/{data → definitions}/ve.yaml +0 -0
- data/{data → definitions}/vi.yaml +0 -0
- data/{data → definitions}/za.yaml +0 -0
- data/holidays.gemspec +2 -1
- data/lib/generated_definitions/MANIFEST +56 -0
- data/lib/generated_definitions/REGIONS.rb +4 -0
- data/lib/{holidays → generated_definitions}/ar.rb +2 -2
- data/lib/{holidays → generated_definitions}/at.rb +2 -2
- data/lib/{holidays → generated_definitions}/au.rb +19 -10
- data/lib/{holidays → generated_definitions}/be.rb +2 -2
- data/lib/{holidays → generated_definitions}/br.rb +2 -2
- data/lib/{holidays → generated_definitions}/ca.rb +2 -2
- data/lib/{holidays → generated_definitions}/ch.rb +2 -2
- data/lib/{holidays → generated_definitions}/cl.rb +2 -2
- data/lib/{holidays → generated_definitions}/cr.rb +2 -2
- data/lib/{holidays → generated_definitions}/cz.rb +2 -2
- data/lib/{holidays → generated_definitions}/de.rb +5 -4
- data/lib/{holidays → generated_definitions}/dk.rb +2 -2
- data/lib/{holidays → generated_definitions}/ecb_target.rb +2 -2
- data/lib/{holidays → generated_definitions}/el.rb +2 -2
- data/lib/{holidays → generated_definitions}/es.rb +6 -6
- data/lib/{holidays → generated_definitions}/europe.rb +7 -6
- data/lib/{holidays → generated_definitions}/fed_ex.rb +8 -3
- data/lib/{holidays → generated_definitions}/federal_reserve.rb +2 -2
- data/lib/{holidays → generated_definitions}/fi.rb +2 -2
- data/lib/{holidays → generated_definitions}/fr.rb +2 -2
- data/lib/{holidays → generated_definitions}/gb.rb +2 -2
- data/lib/{holidays → generated_definitions}/hr.rb +2 -2
- data/lib/{holidays → generated_definitions}/hu.rb +2 -2
- data/lib/{holidays → generated_definitions}/ie.rb +2 -2
- data/lib/{holidays → generated_definitions}/is.rb +2 -2
- data/lib/{holidays → generated_definitions}/it.rb +2 -2
- data/lib/{holidays → generated_definitions}/jp.rb +5 -5
- data/lib/{holidays → generated_definitions}/li.rb +2 -2
- data/lib/{holidays → generated_definitions}/lt.rb +2 -2
- data/lib/{holidays → generated_definitions}/ma.rb +2 -2
- data/lib/{holidays → generated_definitions}/mx.rb +2 -2
- data/lib/{holidays → generated_definitions}/nerc.rb +2 -2
- data/lib/{holidays → generated_definitions}/nl.rb +2 -2
- data/lib/{holidays → generated_definitions}/no.rb +2 -2
- data/lib/{holidays → generated_definitions}/north_america.rb +8 -3
- data/lib/{holidays → generated_definitions}/nyse.rb +2 -2
- data/lib/{holidays → generated_definitions}/nz.rb +5 -5
- data/lib/{holidays → generated_definitions}/ph.rb +2 -2
- data/lib/{holidays → generated_definitions}/pl.rb +2 -2
- data/lib/{holidays → generated_definitions}/pt.rb +2 -2
- data/lib/{holidays → generated_definitions}/ro.rb +2 -2
- data/lib/{holidays → generated_definitions}/scandinavia.rb +2 -2
- data/lib/{holidays → generated_definitions}/se.rb +2 -2
- data/lib/{holidays → generated_definitions}/sg.rb +2 -2
- data/lib/{holidays → generated_definitions}/si.rb +2 -2
- data/lib/{holidays → generated_definitions}/sk.rb +2 -2
- data/lib/{holidays → generated_definitions}/united_nations.rb +2 -2
- data/lib/{holidays → generated_definitions}/ups.rb +8 -3
- data/lib/{holidays → generated_definitions}/us.rb +8 -3
- data/lib/{holidays → generated_definitions}/ve.rb +2 -2
- data/lib/{holidays → generated_definitions}/vi.rb +2 -2
- data/lib/{holidays → generated_definitions}/za.rb +2 -2
- data/lib/holidays.rb +120 -665
- data/lib/holidays/core_extensions/date.rb +39 -0
- data/lib/holidays/date_calculator/day_of_month.rb +68 -0
- data/lib/holidays/date_calculator/easter.rb +58 -0
- data/lib/holidays/date_calculator/weekend_modifier.rb +49 -0
- data/lib/holidays/date_calculator_factory.rb +21 -0
- data/lib/holidays/definition/context/generator.rb +216 -0
- data/lib/holidays/definition/context/merger.rb +26 -0
- data/lib/holidays/definition/repository/cache.rb +33 -0
- data/lib/holidays/definition/repository/holidays_by_month.rb +49 -0
- data/lib/holidays/definition/repository/proc_cache.rb +36 -0
- data/lib/holidays/definition/repository/regions.rb +36 -0
- data/lib/holidays/definition/validator/region.rb +45 -0
- data/lib/holidays/definition_factory.rb +50 -0
- data/lib/holidays/option/context/parse_options.rb +96 -0
- data/lib/holidays/option_factory.rb +14 -0
- data/lib/holidays/use_case/context/between.rb +105 -0
- data/lib/holidays/use_case/context/dates_driver_builder.rb +64 -0
- data/lib/holidays/use_case_factory.rb +20 -0
- data/lib/holidays/version.rb +1 -1
- data/test/defs/test_defs_ar.rb +1 -1
- data/test/defs/test_defs_at.rb +2 -2
- data/test/defs/test_defs_au.rb +61 -43
- data/test/defs/test_defs_be.rb +1 -1
- data/test/defs/test_defs_br.rb +1 -1
- data/test/defs/test_defs_ca.rb +1 -1
- data/test/defs/test_defs_ch.rb +1 -1
- data/test/defs/test_defs_cl.rb +1 -1
- data/test/defs/test_defs_cr.rb +1 -1
- data/test/defs/test_defs_cz.rb +1 -1
- data/test/defs/test_defs_de.rb +18 -30
- data/test/defs/test_defs_dk.rb +1 -1
- data/test/defs/test_defs_ecb_target.rb +3 -3
- data/test/defs/test_defs_el.rb +1 -1
- data/test/defs/test_defs_es.rb +36 -25
- data/test/defs/test_defs_europe.rb +82 -84
- data/test/defs/test_defs_fed_ex.rb +4 -1
- data/test/defs/test_defs_federal_reserve.rb +1 -1
- data/test/defs/test_defs_fi.rb +1 -1
- data/test/defs/test_defs_fr.rb +1 -1
- data/test/defs/test_defs_gb.rb +20 -20
- data/test/defs/test_defs_hr.rb +1 -1
- data/test/defs/test_defs_hu.rb +2 -2
- data/test/defs/test_defs_ie.rb +1 -1
- data/test/defs/test_defs_is.rb +1 -1
- data/test/defs/test_defs_it.rb +1 -1
- data/test/defs/test_defs_jp.rb +1 -1
- data/test/defs/test_defs_li.rb +4 -4
- data/test/defs/test_defs_lt.rb +1 -1
- data/test/defs/test_defs_ma.rb +1 -1
- data/test/defs/test_defs_mx.rb +1 -1
- data/test/defs/test_defs_nerc.rb +1 -1
- data/test/defs/test_defs_nl.rb +1 -1
- data/test/defs/test_defs_no.rb +1 -1
- data/test/defs/test_defs_north_america.rb +5 -3
- data/test/defs/test_defs_nyse.rb +1 -1
- data/test/defs/test_defs_nz.rb +19 -9
- data/test/defs/test_defs_ph.rb +1 -1
- data/test/defs/test_defs_pl.rb +1 -1
- data/test/defs/test_defs_pt.rb +1 -1
- data/test/defs/test_defs_ro.rb +2 -3
- data/test/defs/test_defs_scandinavia.rb +1 -1
- data/test/defs/test_defs_se.rb +1 -1
- data/test/defs/test_defs_sg.rb +1 -1
- data/test/defs/test_defs_si.rb +7 -7
- data/test/defs/test_defs_sk.rb +1 -1
- data/test/defs/test_defs_united_nations.rb +1 -1
- data/test/defs/test_defs_ups.rb +5 -2
- data/test/defs/test_defs_us.rb +5 -3
- data/test/defs/test_defs_ve.rb +1 -1
- data/test/defs/test_defs_vi.rb +1 -1
- data/test/defs/test_defs_za.rb +1 -1
- data/test/{test_date.rb → holidays/core_extensions/test_date.rb} +8 -2
- data/test/holidays/date_calculator/test_day_of_month.rb +27 -0
- data/test/holidays/date_calculator/test_easter.rb +29 -0
- data/test/holidays/date_calculator/test_weekend_modifier.rb +33 -0
- data/test/holidays/definition/context/test_generator.rb +84 -0
- data/test/holidays/definition/context/test_merger.rb +22 -0
- data/test/holidays/definition/repository/test_cache.rb +82 -0
- data/test/holidays/definition/repository/test_holidays_by_month.rb +187 -0
- data/test/holidays/definition/repository/test_proc_cache.rb +29 -0
- data/test/holidays/definition/repository/test_regions.rb +86 -0
- data/test/holidays/definition/validator/test_region.rb +50 -0
- data/test/holidays/option/context/test_parse_options.rb +69 -0
- data/test/holidays/test_date_calculator_factory.rb +21 -0
- data/test/holidays/test_definition_factory.rb +34 -0
- data/test/holidays/test_option_factory.rb +9 -0
- data/test/holidays/test_use_case_factory.rb +13 -0
- data/test/holidays/use_case/context/test_between.rb +75 -0
- data/test/holidays/use_case/context/test_dates_driver_builder.rb +91 -0
- data/test/test_all_regions.rb +14 -3
- data/test/test_helper.rb +2 -1
- data/test/test_holidays.rb +19 -24
- data/test/test_holidays_between.rb +85 -0
- data/test/test_multiple_regions.rb +2 -2
- data/test/test_parse_definitions.rb +10 -4
- metadata +181 -111
- data/.coveralls.yml +0 -1
- data/lib/holidays/MANIFEST +0 -55
data/test/defs/test_defs_za.rb
CHANGED
|
@@ -3,7 +3,7 @@ require File.expand_path(File.dirname(__FILE__)) + '/../test_helper'
|
|
|
3
3
|
|
|
4
4
|
# This file is generated by the Ruby Holiday gem.
|
|
5
5
|
#
|
|
6
|
-
# Definitions loaded:
|
|
6
|
+
# Definitions loaded: definitions/za.yaml
|
|
7
7
|
class ZaDefinitionTests < Test::Unit::TestCase # :nodoc:
|
|
8
8
|
|
|
9
9
|
def test_za
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__)) + '
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + '/../../test_helper'
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require 'holidays/core_extensions/date'
|
|
4
|
+
|
|
5
|
+
class Date
|
|
6
|
+
include Holidays::CoreExtensions::Date
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class CoreExtensionDateTests < Test::Unit::TestCase
|
|
4
10
|
def setup
|
|
5
11
|
@date = Date.civil(2008,1,1)
|
|
6
12
|
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + '/../../test_helper'
|
|
2
|
+
|
|
3
|
+
require 'holidays/date_calculator/day_of_month'
|
|
4
|
+
|
|
5
|
+
class DayOfMonthDateCalculatorTests < Test::Unit::TestCase
|
|
6
|
+
def setup
|
|
7
|
+
@subject = Holidays::DateCalculator::DayOfMonth.new
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_call_returns_expected_results
|
|
11
|
+
assert_equal 7, @subject.call(2008, 1, :first, :monday)
|
|
12
|
+
assert_equal 18, @subject.call(2008, 12, :third, :thursday)
|
|
13
|
+
assert_equal 28, @subject.call(2008, 1, :last, 1)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_returns_argument_error_with_invalid_week_parameter
|
|
17
|
+
assert_raises ArgumentError do
|
|
18
|
+
@subject.call(2008, 1, :wrong_week_argument, :monday)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_returns_argument_error_with_invalid_day_parameter
|
|
23
|
+
assert_raises ArgumentError do
|
|
24
|
+
@subject.call(2008, 1, :first, :bad_wday)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + '/../../test_helper'
|
|
2
|
+
|
|
3
|
+
require 'holidays/date_calculator/easter'
|
|
4
|
+
|
|
5
|
+
class EasterDateCalculatorTests < Test::Unit::TestCase
|
|
6
|
+
def setup
|
|
7
|
+
@subject = Holidays::DateCalculator::Easter.new
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_calculate_easter_for_returns_expected_results
|
|
11
|
+
assert_equal '1800-04-13', @subject.calculate_easter_for(1800).to_s
|
|
12
|
+
assert_equal '1899-04-02', @subject.calculate_easter_for(1899).to_s
|
|
13
|
+
assert_equal '1900-04-15', @subject.calculate_easter_for(1900).to_s
|
|
14
|
+
assert_equal '1999-04-04', @subject.calculate_easter_for(1999).to_s
|
|
15
|
+
assert_equal '2000-04-23', @subject.calculate_easter_for(2000).to_s
|
|
16
|
+
assert_equal '2025-04-20', @subject.calculate_easter_for(2025).to_s
|
|
17
|
+
assert_equal '2035-03-25', @subject.calculate_easter_for(2035).to_s
|
|
18
|
+
assert_equal '2067-04-03', @subject.calculate_easter_for(2067).to_s
|
|
19
|
+
assert_equal '2099-04-12', @subject.calculate_easter_for(2099).to_s
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_calculate_orthodox_easter_for_returns_expects_results
|
|
23
|
+
assert_equal '2000-04-30', @subject.calculate_orthodox_easter_for(2000).to_s
|
|
24
|
+
assert_equal '2008-04-27', @subject.calculate_orthodox_easter_for(2008).to_s
|
|
25
|
+
assert_equal '2009-04-19', @subject.calculate_orthodox_easter_for(2009).to_s
|
|
26
|
+
assert_equal '2011-04-24', @subject.calculate_orthodox_easter_for(2011).to_s
|
|
27
|
+
assert_equal '2020-04-19', @subject.calculate_orthodox_easter_for(2020).to_s
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + '/../../test_helper'
|
|
2
|
+
|
|
3
|
+
require 'holidays/date_calculator/weekend_modifier'
|
|
4
|
+
|
|
5
|
+
class WeekendModifierDateCalculatorTests < Test::Unit::TestCase
|
|
6
|
+
def setup
|
|
7
|
+
@subject = Holidays::DateCalculator::WeekendModifier.new
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_to_monday_if_weekend
|
|
11
|
+
assert_equal Date.civil(2015, 5, 4), @subject.to_monday_if_weekend(Date.civil(2015, 5, 3))
|
|
12
|
+
assert_equal Date.civil(2015, 5, 4), @subject.to_monday_if_weekend(Date.civil(2015, 5, 2))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_to_monday_if_sunday
|
|
16
|
+
assert_equal Date.civil(2015, 5, 4), @subject.to_monday_if_sunday(Date.civil(2015, 5, 3))
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_to_weekday_if_boxing_weekend
|
|
20
|
+
assert_equal Date.civil(2015, 12, 25), @subject.to_weekday_if_boxing_weekend(Date.civil(2015, 12, 25))
|
|
21
|
+
assert_equal Date.civil(2015, 12, 28), @subject.to_weekday_if_boxing_weekend(Date.civil(2015, 12, 26))
|
|
22
|
+
assert_equal Date.civil(2015, 12, 29), @subject.to_weekday_if_boxing_weekend(Date.civil(2015, 12, 27))
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_to_weekday_if_weekend
|
|
26
|
+
assert_equal Date.civil(2015, 5, 4), @subject.to_weekday_if_weekend(Date.civil(2015, 5, 3))
|
|
27
|
+
assert_equal Date.civil(2015, 5, 1), @subject.to_weekday_if_weekend(Date.civil(2015, 5, 2))
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_to_weekday_if_boxing_weekend_from_year
|
|
31
|
+
assert_equal Date.civil(2015, 12, 28), @subject.to_weekday_if_boxing_weekend_from_year(2015)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + '/../../../test_helper'
|
|
2
|
+
|
|
3
|
+
require 'holidays/definition/context/generator'
|
|
4
|
+
|
|
5
|
+
class GeneratorTests < Test::Unit::TestCase
|
|
6
|
+
def setup
|
|
7
|
+
@generator = Holidays::Definition::Context::Generator.new
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_parse_definition_files_raises_error_if_argument_is_nil
|
|
11
|
+
assert_raises ArgumentError do
|
|
12
|
+
@generator.parse_definition_files(nil)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_parse_definition_files_raises_error_if_files_are_empty
|
|
17
|
+
assert_raises ArgumentError do
|
|
18
|
+
@generator.parse_definition_files([])
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_parse_definition_files_correctly_parse_regions
|
|
23
|
+
files = ['test/data/test_single_custom_holiday_defs.yaml']
|
|
24
|
+
regions, rules_by_month, custom_methods, tests = @generator.parse_definition_files(files)
|
|
25
|
+
|
|
26
|
+
assert_equal [:custom_single_file], regions
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_parse_definitions_files_correctly_parse_rules_by_month
|
|
30
|
+
files = ['test/data/test_single_custom_holiday_defs.yaml']
|
|
31
|
+
regions, rules_by_month, custom_methods, tests = @generator.parse_definition_files(files)
|
|
32
|
+
|
|
33
|
+
expected_rules_by_month = {
|
|
34
|
+
6 => [
|
|
35
|
+
{
|
|
36
|
+
:mday => 20,
|
|
37
|
+
:name => "Company Founding",
|
|
38
|
+
:regions => [:custom_single_file]
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
assert_equal expected_rules_by_month, rules_by_month
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_parse_definition_files_correctly_parse_custom_methods
|
|
47
|
+
files = ['test/data/test_single_custom_holiday_defs.yaml']
|
|
48
|
+
regions, rules_by_month, custom_methods, tests = @generator.parse_definition_files(files)
|
|
49
|
+
|
|
50
|
+
expected_custom_methods = {}
|
|
51
|
+
assert_equal expected_custom_methods, custom_methods
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_parse_definition_files_correctly_parse_tests
|
|
55
|
+
files = ['test/data/test_single_custom_holiday_defs.yaml']
|
|
56
|
+
regions, rules_by_month, custom_methods, tests = @generator.parse_definition_files(files)
|
|
57
|
+
|
|
58
|
+
expected_tests = [[
|
|
59
|
+
"{Date.civil(2013,6,20) => 'Company Founding'}.each do |date, name|\n assert_equal name, (Holidays.on(date, :custom_single_file)[0] || {})[:name]\nend"
|
|
60
|
+
]]
|
|
61
|
+
|
|
62
|
+
assert_equal expected_tests, tests
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def test_generate_definition_source_correctly_generate_module_src
|
|
66
|
+
files = ['test/data/test_single_custom_holiday_defs.yaml']
|
|
67
|
+
regions, rules_by_month, custom_methods, tests = @generator.parse_definition_files(files)
|
|
68
|
+
module_src, test_src = @generator.generate_definition_source("test", files, regions, rules_by_month, custom_methods, tests)
|
|
69
|
+
|
|
70
|
+
expected_module_src = "# encoding: utf-8\nmodule Holidays\n # This file is generated by the Ruby Holidays gem.\n #\n # Definitions loaded: test/data/test_single_custom_holiday_defs.yaml\n #\n # To use the definitions in this file, load it right after you load the\n # Holiday gem:\n #\n # require 'holidays'\n # require 'generated_definitions/test'\n #\n # All the definitions are available at https://github.com/alexdunae/holidays\n module TEST # :nodoc:\n def self.defined_regions\n [:custom_single_file]\n end\n\n def self.holidays_by_month\n {\n 6 => [{:mday => 20, :name => \"Company Founding\", :regions => [:custom_single_file]}]\n }\n end\n end\n\n\nend\n\nHolidays.merge_defs(Holidays::TEST.defined_regions, Holidays::TEST.holidays_by_month)\n"
|
|
71
|
+
|
|
72
|
+
assert_equal expected_module_src, module_src
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_generate_definition_source_correctly_genrate_test_src
|
|
76
|
+
files = ['test/data/test_single_custom_holiday_defs.yaml']
|
|
77
|
+
regions, rules_by_month, custom_methods, tests = @generator.parse_definition_files(files)
|
|
78
|
+
module_src, test_src = @generator.generate_definition_source("test", files, regions, rules_by_month, custom_methods, tests)
|
|
79
|
+
|
|
80
|
+
expected_test_src = "# encoding: utf-8\nrequire File.expand_path(File.dirname(__FILE__)) + '/../test_helper'\n\n# This file is generated by the Ruby Holiday gem.\n#\n# Definitions loaded: test/data/test_single_custom_holiday_defs.yaml\nclass TestDefinitionTests < Test::Unit::TestCase # :nodoc:\n\n def test_test\n{Date.civil(2013,6,20) => 'Company Founding'}.each do |date, name|\n assert_equal name, (Holidays.on(date, :custom_single_file)[0] || {})[:name]\nend\n end\nend\n"
|
|
81
|
+
|
|
82
|
+
assert_equal expected_test_src, test_src
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + '/../../../test_helper'
|
|
2
|
+
|
|
3
|
+
require 'holidays/definition/context/merger'
|
|
4
|
+
|
|
5
|
+
class MergerTests < Test::Unit::TestCase
|
|
6
|
+
def setup
|
|
7
|
+
@target_regions = [:new_region]
|
|
8
|
+
@target_holidays = {0 => [:mday => 1, :name => "Test", :regions => [:test2, :test]]}
|
|
9
|
+
|
|
10
|
+
@holidays_repo = mock()
|
|
11
|
+
@regions_repo = mock()
|
|
12
|
+
|
|
13
|
+
@subject = Holidays::Definition::Context::Merger.new(@holidays_repo, @regions_repo)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_repos_are_called_to_add_regions_and_holidays
|
|
17
|
+
@holidays_repo.expects(:add).with(@target_holidays)
|
|
18
|
+
@regions_repo.expects(:add).with(@target_regions)
|
|
19
|
+
|
|
20
|
+
@subject.call(@target_regions, @target_holidays)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + '/../../../test_helper'
|
|
2
|
+
|
|
3
|
+
require 'holidays/definition/repository/cache'
|
|
4
|
+
|
|
5
|
+
class CacheRepoTests < Test::Unit::TestCase
|
|
6
|
+
def setup
|
|
7
|
+
@subject = Holidays::Definition::Repository::Cache.new
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_find_returns_correct_cache_data
|
|
11
|
+
start_date = Date.civil(2015, 1, 1)
|
|
12
|
+
end_date = Date.civil(2015, 1, 1)
|
|
13
|
+
cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
|
|
14
|
+
options = :us
|
|
15
|
+
@subject.cache_between(start_date, end_date, cache_data, options)
|
|
16
|
+
|
|
17
|
+
assert_equal(cache_data, @subject.find(start_date, end_date, options))
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_find_returns_nil_if_no_match_is_found
|
|
21
|
+
start_date = Date.civil(2015, 1, 1)
|
|
22
|
+
end_date = Date.civil(2015, 1, 1)
|
|
23
|
+
cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
|
|
24
|
+
options = :us
|
|
25
|
+
@subject.cache_between(start_date, end_date, cache_data, options)
|
|
26
|
+
|
|
27
|
+
assert_nil(@subject.find(Date.civil(2015, 7, 1), Date.civil(2015, 12, 1), options))
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_cache_between_returns_error_if_dates_are_missing
|
|
31
|
+
start_date = Date.civil(2015, 1, 1)
|
|
32
|
+
end_date = Date.civil(2015, 1, 1)
|
|
33
|
+
cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
|
|
34
|
+
options = :us
|
|
35
|
+
|
|
36
|
+
assert_raise ArgumentError do
|
|
37
|
+
@subject.cache_between(nil, end_date, cache_data, options)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
assert_raise ArgumentError do
|
|
41
|
+
@subject.cache_between(start_date, nil, cache_data, options)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_cache_between_returns_error_if_dates_are_invalid
|
|
46
|
+
start_date = Date.civil(2015, 1, 1)
|
|
47
|
+
end_date = Date.civil(2015, 1, 1)
|
|
48
|
+
cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
|
|
49
|
+
options = :us
|
|
50
|
+
|
|
51
|
+
assert_raise ArgumentError do
|
|
52
|
+
@subject.cache_between("invalid-date", end_date, cache_data, options)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
assert_raise ArgumentError do
|
|
56
|
+
@subject.cache_between(start_date, "invalid-date", cache_data, options)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_cache_between_returns_error_if_cached_data_is_not_present
|
|
61
|
+
start_date = Date.civil(2015, 1, 1)
|
|
62
|
+
end_date = Date.civil(2015, 1, 1)
|
|
63
|
+
options = :us
|
|
64
|
+
|
|
65
|
+
assert_raise ArgumentError do
|
|
66
|
+
@subject.cache_between(start_date, end_date, nil, options)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_reset_clears_cache
|
|
71
|
+
start_date = Date.civil(2015, 1, 1)
|
|
72
|
+
end_date = Date.civil(2015, 1, 1)
|
|
73
|
+
cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
|
|
74
|
+
options = :us
|
|
75
|
+
@subject.cache_between(start_date, end_date, cache_data, options)
|
|
76
|
+
|
|
77
|
+
assert_equal(cache_data, @subject.find(start_date, end_date, options))
|
|
78
|
+
|
|
79
|
+
@subject.reset!
|
|
80
|
+
assert_nil(@subject.find(start_date, end_date, options))
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + '/../../../test_helper'
|
|
2
|
+
|
|
3
|
+
require 'holidays/definition/repository/holidays_by_month'
|
|
4
|
+
|
|
5
|
+
class HolidaysByMonthRepoTests < Test::Unit::TestCase
|
|
6
|
+
def setup
|
|
7
|
+
@existing_holidays_by_month = {0 => [:mday => 1, :name => "Test", :regions => [:test]]}
|
|
8
|
+
|
|
9
|
+
@subject = Holidays::Definition::Repository::HolidaysByMonth.new
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_all_returns_empty_hash_if_no_holidays_have_been_added
|
|
13
|
+
assert_equal({}, @subject.all)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_all_returns_existing_holidays
|
|
17
|
+
@subject.add(@existing_holidays_by_month)
|
|
18
|
+
assert_equal(@existing_holidays_by_month, @subject.all)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_add_does_not_change_data_if_it_already_exists
|
|
22
|
+
target_holidays = {0 => [:mday => 1, :name => "Test", :regions => [:test]]}
|
|
23
|
+
|
|
24
|
+
@subject.add(@existing_holidays_by_month)
|
|
25
|
+
@subject.add(target_holidays)
|
|
26
|
+
|
|
27
|
+
expected = @existing_holidays_by_month
|
|
28
|
+
|
|
29
|
+
assert_equal(expected, @subject.all)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_add_is_successful_if_name_is_different
|
|
33
|
+
target_holidays = {0 => [:mday => 1, :name => "Different", :regions => [:test]]}
|
|
34
|
+
|
|
35
|
+
@subject.add(@existing_holidays_by_month)
|
|
36
|
+
@subject.add(target_holidays)
|
|
37
|
+
|
|
38
|
+
expected = {
|
|
39
|
+
0 => [
|
|
40
|
+
{:mday=>1, :name=>"Test", :regions=>[:test]},
|
|
41
|
+
{:mday=>1, :name=>"Different", :regions=>[:test]}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
assert_equal(expected, @subject.all)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_add_is_successful_if_wday_is_different
|
|
49
|
+
target_holidays = {0 => [:mday => 1, :name => "Test", :wday => 1, :regions => [:test]]}
|
|
50
|
+
|
|
51
|
+
@subject.add(@existing_holidays_by_month)
|
|
52
|
+
@subject.add(target_holidays)
|
|
53
|
+
|
|
54
|
+
expected = {
|
|
55
|
+
0 => [
|
|
56
|
+
{:mday=>1, :name=>"Test", :regions=>[:test]},
|
|
57
|
+
{:mday=>1, :name=>"Test", :wday => 1, :regions=>[:test]}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
assert_equal(expected, @subject.all)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_add_is_successful_if_mday_is_different
|
|
65
|
+
target_holidays = {0 => [:mday => 2, :name => "Test", :regions => [:test]]}
|
|
66
|
+
|
|
67
|
+
@subject.add(@existing_holidays_by_month)
|
|
68
|
+
@subject.add(target_holidays)
|
|
69
|
+
|
|
70
|
+
expected = {
|
|
71
|
+
0 => [
|
|
72
|
+
{:mday=>1, :name=>"Test", :regions=>[:test]},
|
|
73
|
+
{:mday=>2, :name=>"Test", :regions=>[:test]}
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
assert_equal(expected, @subject.all)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_add_is_successful_if_week_is_different
|
|
81
|
+
target_holidays = {0 => [:mday => 1, :name => "Test", :week => :first, :regions => [:test]]}
|
|
82
|
+
|
|
83
|
+
@subject.add(@existing_holidays_by_month)
|
|
84
|
+
@subject.add(target_holidays)
|
|
85
|
+
|
|
86
|
+
expected = {
|
|
87
|
+
0 => [
|
|
88
|
+
{:mday=>1, :name=>"Test", :regions=>[:test]},
|
|
89
|
+
{:mday=>1, :name=>"Test", :week => :first, :regions=>[:test]}
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
assert_equal(expected, @subject.all)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def test_add_is_successful_if_function_id_is_different
|
|
97
|
+
target_holidays = {0 => [:mday => 1, :name => "Test", :function_id => 'test', :regions => [:test]]}
|
|
98
|
+
|
|
99
|
+
@subject.add(@existing_holidays_by_month)
|
|
100
|
+
@subject.add(target_holidays)
|
|
101
|
+
|
|
102
|
+
expected = {
|
|
103
|
+
0 => [
|
|
104
|
+
{:mday=>1, :name=>"Test", :regions=>[:test]},
|
|
105
|
+
{:mday=>1, :name=>"Test", :function_id => 'test', :regions=>[:test]}
|
|
106
|
+
]
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
assert_equal(expected, @subject.all)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def test_add_is_successful_if_type_is_different
|
|
113
|
+
target_holidays = {0 => [:mday => 1, :name => "Test", :type => :informal, :regions => [:test]]}
|
|
114
|
+
|
|
115
|
+
@subject.add(@existing_holidays_by_month)
|
|
116
|
+
@subject.add(target_holidays)
|
|
117
|
+
|
|
118
|
+
expected = {
|
|
119
|
+
0 => [
|
|
120
|
+
{:mday=>1, :name=>"Test", :regions=>[:test]},
|
|
121
|
+
{:mday=>1, :name=>"Test", :type => :informal, :regions=>[:test]}
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
assert_equal(expected, @subject.all)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def test_add_is_successful_if_observed_id_is_different
|
|
129
|
+
target_holidays = {0 => [:mday => 1, :name => "Test", :observed_id => :informal, :regions => [:test]]}
|
|
130
|
+
|
|
131
|
+
@subject.add(@existing_holidays_by_month)
|
|
132
|
+
@subject.add(target_holidays)
|
|
133
|
+
|
|
134
|
+
expected = {
|
|
135
|
+
0 => [
|
|
136
|
+
{:mday=>1, :name=>"Test", :regions=>[:test]},
|
|
137
|
+
{:mday=>1, :name=>"Test", :observed_id => :informal, :regions=>[:test]}
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
assert_equal(expected, @subject.all)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def test_add_is_successful_and_updates_regions_to_existing_matching_definitions
|
|
145
|
+
target_holidays = {0 => [:mday => 1, :name => "Test", :regions => [:test2]]}
|
|
146
|
+
|
|
147
|
+
@subject.add(@existing_holidays_by_month)
|
|
148
|
+
@subject.add(target_holidays)
|
|
149
|
+
|
|
150
|
+
expected = { 0 => [ {:mday=>1, :name=>"Test", :regions=>[:test, :test2]} ] }
|
|
151
|
+
|
|
152
|
+
assert_equal(expected, @subject.all)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def test_add_is_successful_and_updates_regions_to_existing_matching_definitions_and_deduped_correctly
|
|
156
|
+
target_holidays = {0 => [:mday => 1, :name => "Test", :regions => [:test2, :test]]}
|
|
157
|
+
|
|
158
|
+
@subject.add(@existing_holidays_by_month)
|
|
159
|
+
@subject.add(target_holidays)
|
|
160
|
+
|
|
161
|
+
expected = { 0 => [ {:mday=>1, :name=>"Test", :regions=>[:test, :test2]} ] }
|
|
162
|
+
|
|
163
|
+
assert_equal(expected, @subject.all)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def test_find_by_month_returns_nil_if_none_found
|
|
167
|
+
@subject.add(@existing_holidays_by_month)
|
|
168
|
+
|
|
169
|
+
holidays_for_month = @subject.find_by_month(12)
|
|
170
|
+
assert_equal(nil, holidays_for_month)
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def test_find_by_month_returns_array_if_found
|
|
174
|
+
@subject.add(@existing_holidays_by_month)
|
|
175
|
+
|
|
176
|
+
holidays_for_month = @subject.find_by_month(0)
|
|
177
|
+
assert_equal(@existing_holidays_by_month[0], holidays_for_month)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def test_find_by_month_raises_error_if_month_is_not_valid
|
|
181
|
+
@subject.add(@existing_holidays_by_month)
|
|
182
|
+
|
|
183
|
+
assert_raise ArgumentError do
|
|
184
|
+
@subject.find_by_month(-1)
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|