revised_holidays 9.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 +7 -0
- data/.github/workflows/ruby.yml +25 -0
- data/CHANGELOG.md +446 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +3 -0
- data/LICENSE +21 -0
- data/Makefile +45 -0
- data/README.md +337 -0
- data/Rakefile +109 -0
- data/bin/console +7 -0
- data/bin/setup +6 -0
- data/definitions/.github/workflows/ruby.yml +25 -0
- data/definitions/.gitignore +5 -0
- data/definitions/CHANGELOG.md +352 -0
- data/definitions/Gemfile +6 -0
- data/definitions/LICENSE +21 -0
- data/definitions/METHODS.yml +26 -0
- data/definitions/Makefile +9 -0
- data/definitions/README.md +22 -0
- data/definitions/ar.yaml +268 -0
- data/definitions/at.yaml +116 -0
- data/definitions/au.yaml +907 -0
- data/definitions/be_fr.yaml +153 -0
- data/definitions/be_nl.yaml +153 -0
- data/definitions/bg.yaml +186 -0
- data/definitions/br.yaml +178 -0
- data/definitions/ca.yaml +969 -0
- data/definitions/ch.yaml +277 -0
- data/definitions/cl.yaml +294 -0
- data/definitions/co.yaml +437 -0
- data/definitions/cr.yaml +100 -0
- data/definitions/cz.yaml +137 -0
- data/definitions/de.yaml +401 -0
- data/definitions/dk.yaml +220 -0
- data/definitions/doc/CONTRIBUTING.md +44 -0
- data/definitions/doc/MAINTAINERS.md +39 -0
- data/definitions/doc/SYNTAX.md +435 -0
- data/definitions/doc/architecture/README.md +15 -0
- data/definitions/doc/architecture/adr-001.md +86 -0
- data/definitions/doc/architecture/adr-002.md +64 -0
- data/definitions/ecbtarget.yaml +74 -0
- data/definitions/ee.yaml +123 -0
- data/definitions/es.yaml +495 -0
- data/definitions/federalreserve.yaml +389 -0
- data/definitions/federalreservebanks.yaml +821 -0
- data/definitions/fedex.yaml +102 -0
- data/definitions/fi.yaml +234 -0
- data/definitions/fr.yaml +157 -0
- data/definitions/gb.yaml +565 -0
- data/definitions/ge.yaml +158 -0
- data/definitions/gr.yaml +158 -0
- data/definitions/hk.yaml +287 -0
- data/definitions/hr.yaml +171 -0
- data/definitions/hu.yaml +156 -0
- data/definitions/ie.yaml +172 -0
- data/definitions/index.yaml +80 -0
- data/definitions/is.yaml +247 -0
- data/definitions/it.yaml +246 -0
- data/definitions/jp.yaml +761 -0
- data/definitions/ke.yaml +107 -0
- data/definitions/kr.yaml +166 -0
- data/definitions/kz.yaml +128 -0
- data/definitions/li.yaml +154 -0
- data/definitions/lib/validation/custom_method_validator.rb +38 -0
- data/definitions/lib/validation/definition_validator.rb +35 -0
- data/definitions/lib/validation/error.rb +11 -0
- data/definitions/lib/validation/month_validator.rb +58 -0
- data/definitions/lib/validation/run.rb +66 -0
- data/definitions/lib/validation/test_validator.rb +83 -0
- data/definitions/lt.yaml +198 -0
- data/definitions/lu.yaml +123 -0
- data/definitions/lv.yaml +229 -0
- data/definitions/ma.yaml +96 -0
- data/definitions/mt_en.yaml +131 -0
- data/definitions/mt_mt.yaml +131 -0
- data/definitions/mx.yaml +160 -0
- data/definitions/my.yaml +79 -0
- data/definitions/nerc.yaml +94 -0
- data/definitions/ng.yaml +97 -0
- data/definitions/nl.yaml +127 -0
- data/definitions/no.yaml +169 -0
- data/definitions/northamericainformal.yaml +105 -0
- data/definitions/nyse.yaml +137 -0
- data/definitions/nz.yaml +346 -0
- data/definitions/pe.yaml +208 -0
- data/definitions/ph.yaml +130 -0
- data/definitions/pl.yaml +796 -0
- data/definitions/pt.yaml +187 -0
- data/definitions/ro.yaml +240 -0
- data/definitions/rs_cyrl.yaml +129 -0
- data/definitions/rs_la.yaml +129 -0
- data/definitions/ru.yaml +108 -0
- data/definitions/se.yaml +238 -0
- data/definitions/sg.yaml +89 -0
- data/definitions/si.yaml +162 -0
- data/definitions/sk.yaml +154 -0
- data/definitions/spec/coverage_report.rb +7 -0
- data/definitions/spec/data/invalid/months/malformed/bad.yaml +15 -0
- data/definitions/spec/data/invalid/months/missing/no_months.yaml +9 -0
- data/definitions/spec/data/valid/simple.yaml +15 -0
- data/definitions/spec/spec_helper.rb +7 -0
- data/definitions/spec/validation/custom_method_validator_spec.rb +60 -0
- data/definitions/spec/validation/definition_validator_spec.rb +43 -0
- data/definitions/spec/validation/month_validator_spec.rb +175 -0
- data/definitions/spec/validation/test_validator_spec.rb +169 -0
- data/definitions/th.yaml +111 -0
- data/definitions/tn.yaml +83 -0
- data/definitions/tr.yaml +174 -0
- data/definitions/ua.yaml +161 -0
- data/definitions/unitednations.yaml +189 -0
- data/definitions/ups.yaml +102 -0
- data/definitions/us.yaml +965 -0
- data/definitions/ve.yaml +118 -0
- data/definitions/vi.yaml +54 -0
- data/definitions/za.yaml +139 -0
- data/doc/CONTRIBUTING.md +72 -0
- data/doc/MAINTAINERS.md +81 -0
- data/doc/REFERENCES +19 -0
- data/lib/generated_definitions/MANIFEST +83 -0
- data/lib/generated_definitions/REGIONS.rb +6 -0
- data/lib/generated_definitions/ar.rb +60 -0
- data/lib/generated_definitions/at.rb +37 -0
- data/lib/generated_definitions/au.rb +177 -0
- data/lib/generated_definitions/be.rb +42 -0
- data/lib/generated_definitions/be_fr.rb +36 -0
- data/lib/generated_definitions/be_nl.rb +36 -0
- data/lib/generated_definitions/bg.rb +53 -0
- data/lib/generated_definitions/br.rb +37 -0
- data/lib/generated_definitions/ca.rb +88 -0
- data/lib/generated_definitions/ch.rb +95 -0
- data/lib/generated_definitions/cl.rb +71 -0
- data/lib/generated_definitions/co.rb +121 -0
- data/lib/generated_definitions/cr.rb +35 -0
- data/lib/generated_definitions/cz.rb +37 -0
- data/lib/generated_definitions/de.rb +65 -0
- data/lib/generated_definitions/dk.rb +48 -0
- data/lib/generated_definitions/ecbtarget.rb +30 -0
- data/lib/generated_definitions/ee.rb +36 -0
- data/lib/generated_definitions/el.rb +38 -0
- data/lib/generated_definitions/es.rb +56 -0
- data/lib/generated_definitions/europe.rb +638 -0
- data/lib/generated_definitions/federalreserve.rb +35 -0
- data/lib/generated_definitions/federalreservebanks.rb +35 -0
- data/lib/generated_definitions/fedex.rb +36 -0
- data/lib/generated_definitions/fi.rb +61 -0
- data/lib/generated_definitions/fr.rb +39 -0
- data/lib/generated_definitions/gb.rb +51 -0
- data/lib/generated_definitions/ge.rb +41 -0
- data/lib/generated_definitions/gr.rb +38 -0
- data/lib/generated_definitions/hk.rb +106 -0
- data/lib/generated_definitions/hr.rb +40 -0
- data/lib/generated_definitions/hu.rb +35 -0
- data/lib/generated_definitions/ie.rb +33 -0
- data/lib/generated_definitions/is.rb +60 -0
- data/lib/generated_definitions/it.rb +45 -0
- data/lib/generated_definitions/jp.rb +166 -0
- data/lib/generated_definitions/ke.rb +34 -0
- data/lib/generated_definitions/kr.rb +40 -0
- data/lib/generated_definitions/kz.rb +38 -0
- data/lib/generated_definitions/li.rb +44 -0
- data/lib/generated_definitions/lt.rb +38 -0
- data/lib/generated_definitions/lu.rb +35 -0
- data/lib/generated_definitions/lv.rb +56 -0
- data/lib/generated_definitions/ma.rb +33 -0
- data/lib/generated_definitions/mt_en.rb +38 -0
- data/lib/generated_definitions/mt_mt.rb +38 -0
- data/lib/generated_definitions/mx.rb +54 -0
- data/lib/generated_definitions/my.rb +30 -0
- data/lib/generated_definitions/nerc.rb +30 -0
- data/lib/generated_definitions/ng.rb +33 -0
- data/lib/generated_definitions/nl.rb +37 -0
- data/lib/generated_definitions/no.rb +40 -0
- data/lib/generated_definitions/northamerica.rb +229 -0
- data/lib/generated_definitions/nyse.rb +34 -0
- data/lib/generated_definitions/nz.rb +105 -0
- data/lib/generated_definitions/pe.rb +43 -0
- data/lib/generated_definitions/ph.rb +50 -0
- data/lib/generated_definitions/pl.rb +73 -0
- data/lib/generated_definitions/pt.rb +40 -0
- data/lib/generated_definitions/ro.rb +39 -0
- data/lib/generated_definitions/rs_cyrl.rb +39 -0
- data/lib/generated_definitions/rs_la.rb +39 -0
- data/lib/generated_definitions/ru.rb +37 -0
- data/lib/generated_definitions/scandinavia.rb +166 -0
- data/lib/generated_definitions/se.rb +53 -0
- data/lib/generated_definitions/sg.rb +31 -0
- data/lib/generated_definitions/si.rb +39 -0
- data/lib/generated_definitions/sk.rb +39 -0
- data/lib/generated_definitions/southamerica.rb +248 -0
- data/lib/generated_definitions/th.rb +36 -0
- data/lib/generated_definitions/tn.rb +32 -0
- data/lib/generated_definitions/tr.rb +64 -0
- data/lib/generated_definitions/ua.rb +37 -0
- data/lib/generated_definitions/unitednations.rb +81 -0
- data/lib/generated_definitions/ups.rb +36 -0
- data/lib/generated_definitions/us.rb +153 -0
- data/lib/generated_definitions/ve.rb +36 -0
- data/lib/generated_definitions/vi.rb +29 -0
- data/lib/generated_definitions/za.rb +36 -0
- data/lib/holidays/core_extensions/date.rb +57 -0
- data/lib/holidays/core_extensions/time.rb +23 -0
- data/lib/holidays/date_calculator/day_of_month.rb +68 -0
- data/lib/holidays/date_calculator/easter.rb +91 -0
- data/lib/holidays/date_calculator/lunar_date.rb +371 -0
- data/lib/holidays/date_calculator/weekend_modifier.rb +80 -0
- data/lib/holidays/definition/context/function_processor.rb +91 -0
- data/lib/holidays/definition/context/generator.rb +209 -0
- data/lib/holidays/definition/context/load.rb +29 -0
- data/lib/holidays/definition/context/merger.rb +22 -0
- data/lib/holidays/definition/decorator/custom_method_proc.rb +28 -0
- data/lib/holidays/definition/decorator/custom_method_source.rb +30 -0
- data/lib/holidays/definition/decorator/test.rb +37 -0
- data/lib/holidays/definition/entity/custom_method.rb +11 -0
- data/lib/holidays/definition/entity/test.rb +11 -0
- data/lib/holidays/definition/generator/module.rb +54 -0
- data/lib/holidays/definition/generator/regions.rb +55 -0
- data/lib/holidays/definition/generator/test.rb +51 -0
- data/lib/holidays/definition/parser/custom_method.rb +67 -0
- data/lib/holidays/definition/parser/test.rb +86 -0
- data/lib/holidays/definition/repository/cache.rb +47 -0
- data/lib/holidays/definition/repository/custom_methods.rb +27 -0
- data/lib/holidays/definition/repository/holidays_by_month.rb +57 -0
- data/lib/holidays/definition/repository/proc_result_cache.rb +51 -0
- data/lib/holidays/definition/repository/regions.rb +46 -0
- data/lib/holidays/definition/validator/custom_method.rb +31 -0
- data/lib/holidays/definition/validator/region.rb +36 -0
- data/lib/holidays/definition/validator/test.rb +71 -0
- data/lib/holidays/errors.rb +11 -0
- data/lib/holidays/factory/date_calculator.rb +42 -0
- data/lib/holidays/factory/definition.rb +143 -0
- data/lib/holidays/factory/finder.rb +70 -0
- data/lib/holidays/finder/context/between.rb +45 -0
- data/lib/holidays/finder/context/dates_driver_builder.rb +64 -0
- data/lib/holidays/finder/context/next_holiday.rb +57 -0
- data/lib/holidays/finder/context/parse_options.rb +104 -0
- data/lib/holidays/finder/context/search.rb +111 -0
- data/lib/holidays/finder/context/year_holiday.rb +57 -0
- data/lib/holidays/finder/rules/in_region.rb +31 -0
- data/lib/holidays/finder/rules/year_range.rb +58 -0
- data/lib/holidays/load_all_definitions.rb +56 -0
- data/lib/holidays/version.rb +3 -0
- data/lib/holidays.rb +130 -0
- data/lib/revised_holidays.rb +1 -0
- data/revised_holidays.gemspec +31 -0
- data/test/coverage_report.rb +26 -0
- data/test/data/test_custom_govt_holiday_defs.yaml +5 -0
- data/test/data/test_custom_informal_holidays_defs.yaml +11 -0
- data/test/data/test_custom_year_range_holiday_defs.yaml +31 -0
- data/test/data/test_invalid_region.rb +15 -0
- data/test/data/test_multiple_custom_holiday_defs.yaml +12 -0
- data/test/data/test_multiple_regions_with_conflicts_region_1.yaml +38 -0
- data/test/data/test_multiple_regions_with_conflicts_region_2.yaml +38 -0
- data/test/data/test_region.rb +15 -0
- data/test/data/test_single_custom_holiday_defs.yaml +12 -0
- data/test/data/test_single_custom_holiday_with_custom_procs.yaml +28 -0
- data/test/defs/test_defs_ar.rb +69 -0
- data/test/defs/test_defs_at.rb +31 -0
- data/test/defs/test_defs_au.rb +233 -0
- data/test/defs/test_defs_be_fr.rb +45 -0
- data/test/defs/test_defs_be_nl.rb +45 -0
- data/test/defs/test_defs_bg.rb +41 -0
- data/test/defs/test_defs_br.rb +49 -0
- data/test/defs/test_defs_ca.rb +289 -0
- data/test/defs/test_defs_ch.rb +51 -0
- data/test/defs/test_defs_cl.rb +69 -0
- data/test/defs/test_defs_co.rb +113 -0
- data/test/defs/test_defs_cr.rb +29 -0
- data/test/defs/test_defs_cz.rb +37 -0
- data/test/defs/test_defs_de.rb +89 -0
- data/test/defs/test_defs_dk.rb +47 -0
- data/test/defs/test_defs_ecbtarget.rb +27 -0
- data/test/defs/test_defs_ee.rb +41 -0
- data/test/defs/test_defs_es.rb +137 -0
- data/test/defs/test_defs_europe.rb +1522 -0
- data/test/defs/test_defs_fed_ex.rb +24 -0
- data/test/defs/test_defs_federalreserve.rb +119 -0
- data/test/defs/test_defs_federalreservebanks.rb +251 -0
- data/test/defs/test_defs_fedex.rb +31 -0
- data/test/defs/test_defs_fi.rb +59 -0
- data/test/defs/test_defs_fr.rb +43 -0
- data/test/defs/test_defs_gb.rb +159 -0
- data/test/defs/test_defs_ge.rb +53 -0
- data/test/defs/test_defs_gr.rb +41 -0
- data/test/defs/test_defs_hk.rb +59 -0
- data/test/defs/test_defs_hr.rb +45 -0
- data/test/defs/test_defs_hu.rb +47 -0
- data/test/defs/test_defs_ie.rb +53 -0
- data/test/defs/test_defs_is.rb +51 -0
- data/test/defs/test_defs_it.rb +55 -0
- data/test/defs/test_defs_jp.rb +159 -0
- data/test/defs/test_defs_ke.rb +31 -0
- data/test/defs/test_defs_kr.rb +37 -0
- data/test/defs/test_defs_kz.rb +39 -0
- data/test/defs/test_defs_li.rb +35 -0
- data/test/defs/test_defs_lt.rb +65 -0
- data/test/defs/test_defs_lu.rb +35 -0
- data/test/defs/test_defs_lv.rb +98 -0
- data/test/defs/test_defs_ma.rb +29 -0
- data/test/defs/test_defs_mt_en.rb +41 -0
- data/test/defs/test_defs_mt_mt.rb +41 -0
- data/test/defs/test_defs_mx.rb +49 -0
- data/test/defs/test_defs_my.rb +23 -0
- data/test/defs/test_defs_nerc.rb +29 -0
- data/test/defs/test_defs_ng.rb +29 -0
- data/test/defs/test_defs_nl.rb +33 -0
- data/test/defs/test_defs_no.rb +43 -0
- data/test/defs/test_defs_northamerica.rb +667 -0
- data/test/defs/test_defs_nyse.rb +46 -0
- data/test/defs/test_defs_nz.rb +67 -0
- data/test/defs/test_defs_pe.rb +47 -0
- data/test/defs/test_defs_ph.rb +29 -0
- data/test/defs/test_defs_pl.rb +229 -0
- data/test/defs/test_defs_pt.rb +47 -0
- data/test/defs/test_defs_ro.rb +65 -0
- data/test/defs/test_defs_rs_cyrl.rb +46 -0
- data/test/defs/test_defs_rs_la.rb +46 -0
- data/test/defs/test_defs_ru.rb +34 -0
- data/test/defs/test_defs_scandinavia.rb +215 -0
- data/test/defs/test_defs_se.rb +59 -0
- data/test/defs/test_defs_sg.rb +25 -0
- data/test/defs/test_defs_si.rb +105 -0
- data/test/defs/test_defs_sk.rb +41 -0
- data/test/defs/test_defs_southamerica.rb +327 -0
- data/test/defs/test_defs_th.rb +33 -0
- data/test/defs/test_defs_tn.rb +27 -0
- data/test/defs/test_defs_tr.rb +60 -0
- data/test/defs/test_defs_ua.rb +41 -0
- data/test/defs/test_defs_unitednations.rb +11 -0
- data/test/defs/test_defs_ups.rb +31 -0
- data/test/defs/test_defs_us.rb +387 -0
- data/test/defs/test_defs_ve.rb +35 -0
- data/test/defs/test_defs_vi.rb +22 -0
- data/test/defs/test_defs_za.rb +35 -0
- data/test/holidays/core_extensions/test_date.rb +122 -0
- data/test/holidays/core_extensions/test_date_time.rb +60 -0
- data/test/holidays/date_calculator/test_day_of_month.rb +27 -0
- data/test/holidays/date_calculator/test_easter_gregorian.rb +30 -0
- data/test/holidays/date_calculator/test_easter_julian.rb +36 -0
- data/test/holidays/date_calculator/test_lunar_date.rb +89 -0
- data/test/holidays/date_calculator/test_weekend_modifier.rb +54 -0
- data/test/holidays/definition/context/test_function_processor.rb +199 -0
- data/test/holidays/definition/context/test_generator.rb +226 -0
- data/test/holidays/definition/context/test_load.rb +37 -0
- data/test/holidays/definition/context/test_merger.rb +25 -0
- data/test/holidays/definition/decorator/test_custom_method_proc.rb +113 -0
- data/test/holidays/definition/decorator/test_custom_method_source.rb +96 -0
- data/test/holidays/definition/decorator/test_test.rb +123 -0
- data/test/holidays/definition/generator/test_module.rb +268 -0
- data/test/holidays/definition/generator/test_regions.rb +97 -0
- data/test/holidays/definition/generator/test_test.rb +113 -0
- data/test/holidays/definition/parser/test_custom_method.rb +79 -0
- data/test/holidays/definition/parser/test_test.rb +142 -0
- data/test/holidays/definition/repository/test_cache.rb +123 -0
- data/test/holidays/definition/repository/test_custom_methods.rb +43 -0
- data/test/holidays/definition/repository/test_holidays_by_month.rb +275 -0
- data/test/holidays/definition/repository/test_proc_result_cache.rb +91 -0
- data/test/holidays/definition/repository/test_regions.rb +104 -0
- data/test/holidays/definition/validator/test_custom_method.rb +94 -0
- data/test/holidays/definition/validator/test_region.rb +54 -0
- data/test/holidays/definition/validator/test_test.rb +60 -0
- data/test/holidays/finder/context/test_between.rb +172 -0
- data/test/holidays/finder/context/test_dates_driver_builder.rb +91 -0
- data/test/holidays/finder/context/test_next_holiday.rb +156 -0
- data/test/holidays/finder/context/test_parse_options.rb +141 -0
- data/test/holidays/finder/context/test_search.rb +232 -0
- data/test/holidays/finder/context/test_year_holiday.rb +202 -0
- data/test/holidays/finder/rules/test_in_region.rb +42 -0
- data/test/holidays/finder/rules/test_year_range.rb +166 -0
- data/test/integration/README.md +9 -0
- data/test/integration/test_all_regions.rb +49 -0
- data/test/integration/test_any_holidays_during_work_week.rb +90 -0
- data/test/integration/test_available_regions.rb +23 -0
- data/test/integration/test_custom_holidays.rb +41 -0
- data/test/integration/test_custom_informal_holidays.rb +15 -0
- data/test/integration/test_custom_year_range_holidays.rb +35 -0
- data/test/integration/test_holidays.rb +243 -0
- data/test/integration/test_holidays_between.rb +87 -0
- data/test/integration/test_multiple_regions.rb +71 -0
- data/test/integration/test_multiple_regions_with_conflict.rb +29 -0
- data/test/integration/test_nonstandard_regions.rb +25 -0
- data/test/test_helper.rb +37 -0
- metadata +649 -0
data/definitions/sk.yaml
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Slovak holiday definitions for the Ruby Holiday gem.
|
|
2
|
+
#
|
|
3
|
+
# Updated: 2013-12-26.
|
|
4
|
+
# Sources:
|
|
5
|
+
# - http://sk.wikipedia.org/wiki/Slovensk%C3%A9_%C5%A1t%C3%A1tne_sviatky
|
|
6
|
+
---
|
|
7
|
+
months:
|
|
8
|
+
0:
|
|
9
|
+
- name: Veľkonočný pondelok
|
|
10
|
+
regions: [sk]
|
|
11
|
+
function: easter(year)
|
|
12
|
+
function_modifier: 1
|
|
13
|
+
- name: Veľký piatok
|
|
14
|
+
regions: [sk]
|
|
15
|
+
function: easter(year)
|
|
16
|
+
function_modifier: -2
|
|
17
|
+
1:
|
|
18
|
+
- name: Nový rok
|
|
19
|
+
regions: [sk]
|
|
20
|
+
mday: 1
|
|
21
|
+
- name: Zjavenie Pána (Traja králi)
|
|
22
|
+
regions: [sk]
|
|
23
|
+
mday: 6
|
|
24
|
+
5:
|
|
25
|
+
- name: Sviatok práce
|
|
26
|
+
regions: [sk]
|
|
27
|
+
mday: 1
|
|
28
|
+
- name: Deň víťazstva nad fašizmom
|
|
29
|
+
regions: [sk]
|
|
30
|
+
mday: 8
|
|
31
|
+
7:
|
|
32
|
+
- name: Sviatok svätého Cyrila a svätého Metoda
|
|
33
|
+
regions: [sk]
|
|
34
|
+
mday: 5
|
|
35
|
+
8:
|
|
36
|
+
- name: Výročie Slovenského národného povstania
|
|
37
|
+
regions: [sk]
|
|
38
|
+
mday: 29
|
|
39
|
+
9:
|
|
40
|
+
- name: Deň Ústavy Slovenskej republiky
|
|
41
|
+
regions: [sk]
|
|
42
|
+
mday: 1
|
|
43
|
+
- name: Sedembolestná Panna Mária
|
|
44
|
+
regions: [sk]
|
|
45
|
+
mday: 15
|
|
46
|
+
11:
|
|
47
|
+
- name: Sviatok všetkých svätých
|
|
48
|
+
regions: [sk]
|
|
49
|
+
mday: 1
|
|
50
|
+
- name: Deň boja za slobodu a demokraciu
|
|
51
|
+
regions: [sk]
|
|
52
|
+
mday: 17
|
|
53
|
+
12:
|
|
54
|
+
- name: Štedrý deň
|
|
55
|
+
regions: [sk]
|
|
56
|
+
mday: 24
|
|
57
|
+
- name: 1. sviatok vianočný
|
|
58
|
+
regions: [sk]
|
|
59
|
+
mday: 25
|
|
60
|
+
- name: 2. sviatok vianočný
|
|
61
|
+
regions: [sk]
|
|
62
|
+
mday: 26
|
|
63
|
+
|
|
64
|
+
tests:
|
|
65
|
+
- given:
|
|
66
|
+
date: '2013-01-01'
|
|
67
|
+
regions: ["sk"]
|
|
68
|
+
options: ["informal"]
|
|
69
|
+
expect:
|
|
70
|
+
name: "Nový rok"
|
|
71
|
+
- given:
|
|
72
|
+
date: '2013-01-06'
|
|
73
|
+
regions: ["sk"]
|
|
74
|
+
options: ["informal"]
|
|
75
|
+
expect:
|
|
76
|
+
name: "Zjavenie Pána (Traja králi)"
|
|
77
|
+
- given:
|
|
78
|
+
date: '2013-03-29'
|
|
79
|
+
regions: ["sk"]
|
|
80
|
+
options: ["informal"]
|
|
81
|
+
expect:
|
|
82
|
+
name: "Veľký piatok"
|
|
83
|
+
- given:
|
|
84
|
+
date: '2013-04-01'
|
|
85
|
+
regions: ["sk"]
|
|
86
|
+
options: ["informal"]
|
|
87
|
+
expect:
|
|
88
|
+
name: "Veľkonočný pondelok"
|
|
89
|
+
- given:
|
|
90
|
+
date: '2013-05-01'
|
|
91
|
+
regions: ["sk"]
|
|
92
|
+
options: ["informal"]
|
|
93
|
+
expect:
|
|
94
|
+
name: "Sviatok práce"
|
|
95
|
+
- given:
|
|
96
|
+
date: '2013-05-08'
|
|
97
|
+
regions: ["sk"]
|
|
98
|
+
options: ["informal"]
|
|
99
|
+
expect:
|
|
100
|
+
name: "Deň víťazstva nad fašizmom"
|
|
101
|
+
- given:
|
|
102
|
+
date: '2013-07-05'
|
|
103
|
+
regions: ["sk"]
|
|
104
|
+
options: ["informal"]
|
|
105
|
+
expect:
|
|
106
|
+
name: "Sviatok svätého Cyrila a svätého Metoda"
|
|
107
|
+
- given:
|
|
108
|
+
date: '2013-08-29'
|
|
109
|
+
regions: ["sk"]
|
|
110
|
+
options: ["informal"]
|
|
111
|
+
expect:
|
|
112
|
+
name: "Výročie Slovenského národného povstania"
|
|
113
|
+
- given:
|
|
114
|
+
date: '2013-09-01'
|
|
115
|
+
regions: ["sk"]
|
|
116
|
+
options: ["informal"]
|
|
117
|
+
expect:
|
|
118
|
+
name: "Deň Ústavy Slovenskej republiky"
|
|
119
|
+
- given:
|
|
120
|
+
date: '2013-09-15'
|
|
121
|
+
regions: ["sk"]
|
|
122
|
+
options: ["informal"]
|
|
123
|
+
expect:
|
|
124
|
+
name: "Sedembolestná Panna Mária"
|
|
125
|
+
- given:
|
|
126
|
+
date: '2013-11-01'
|
|
127
|
+
regions: ["sk"]
|
|
128
|
+
options: ["informal"]
|
|
129
|
+
expect:
|
|
130
|
+
name: "Sviatok všetkých svätých"
|
|
131
|
+
- given:
|
|
132
|
+
date: '2013-11-17'
|
|
133
|
+
regions: ["sk"]
|
|
134
|
+
options: ["informal"]
|
|
135
|
+
expect:
|
|
136
|
+
name: "Deň boja za slobodu a demokraciu"
|
|
137
|
+
- given:
|
|
138
|
+
date: '2013-12-24'
|
|
139
|
+
regions: ["sk"]
|
|
140
|
+
options: ["informal"]
|
|
141
|
+
expect:
|
|
142
|
+
name: "Štedrý deň"
|
|
143
|
+
- given:
|
|
144
|
+
date: '2013-12-25'
|
|
145
|
+
regions: ["sk"]
|
|
146
|
+
options: ["informal"]
|
|
147
|
+
expect:
|
|
148
|
+
name: "1. sviatok vianočný"
|
|
149
|
+
- given:
|
|
150
|
+
date: '2013-12-26'
|
|
151
|
+
regions: ["sk"]
|
|
152
|
+
options: ["informal"]
|
|
153
|
+
expect:
|
|
154
|
+
name: "2. sviatok vianočný"
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'validation/custom_method_validator'
|
|
3
|
+
|
|
4
|
+
describe Definitions::Validation::CustomMethod do
|
|
5
|
+
let(:methods) {
|
|
6
|
+
{
|
|
7
|
+
'test' => {
|
|
8
|
+
'arguments' => "date,year,month,day",
|
|
9
|
+
'ruby' => "some source",
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
subject { described_class.new }
|
|
15
|
+
|
|
16
|
+
context 'success' do
|
|
17
|
+
it 'returns true' do
|
|
18
|
+
expect(subject.call(methods)).to be true
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context 'failure' do
|
|
23
|
+
context 'name' do
|
|
24
|
+
it 'returns false if empty' do
|
|
25
|
+
methods = {}
|
|
26
|
+
methods[""] = {}
|
|
27
|
+
expect { subject.call(methods) }.to raise_error(Definitions::Errors::InvalidCustomMethod)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context 'arguments' do
|
|
32
|
+
it 'returns false if nil' do
|
|
33
|
+
methods['test']['arguments'] = nil
|
|
34
|
+
expect { subject.call(methods) }.to raise_error(Definitions::Errors::InvalidCustomMethod)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'returns false if empty' do
|
|
38
|
+
methods['test']['arguments'] = ""
|
|
39
|
+
expect { subject.call(methods) }.to raise_error(Definitions::Errors::InvalidCustomMethod)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'returns false if contains unknown variable' do
|
|
43
|
+
methods['test']['arguments'] = "unknown"
|
|
44
|
+
expect { subject.call(methods) }.to raise_error(Definitions::Errors::InvalidCustomMethod)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
context 'source' do
|
|
49
|
+
it 'returns false if nil' do
|
|
50
|
+
methods['test']['ruby'] = nil
|
|
51
|
+
expect { subject.call(methods) }.to raise_error(Definitions::Errors::InvalidCustomMethod)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it 'returns false if empty' do
|
|
55
|
+
methods['test']['ruby'] = ""
|
|
56
|
+
expect { subject.call(methods) }.to raise_error(Definitions::Errors::InvalidCustomMethod)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'validation/definition_validator'
|
|
3
|
+
|
|
4
|
+
describe Definitions::Validation::Definition do
|
|
5
|
+
let(:custom_method_validator) { double(:custom_method_validator, :call => true) }
|
|
6
|
+
let(:months_validator) { double(:months_validator, :call => nil) }
|
|
7
|
+
let(:test_validator) { double(:test_validator, :call => true) }
|
|
8
|
+
|
|
9
|
+
let(:definition) { {
|
|
10
|
+
"months" => { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1}] },
|
|
11
|
+
"methods" =>{ "test" => {"arguments"=>"year", "source"=>"true"} },
|
|
12
|
+
"tests" => "test"
|
|
13
|
+
} }
|
|
14
|
+
|
|
15
|
+
subject { described_class.new(custom_method_validator, months_validator, test_validator) }
|
|
16
|
+
|
|
17
|
+
context 'definition is valid' do
|
|
18
|
+
it 'reports success' do
|
|
19
|
+
expect(subject.call(definition)).to be true
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context 'invalid months' do
|
|
24
|
+
it 'raises error if months validator raises error' do
|
|
25
|
+
expect(months_validator).to receive(:call).with(definition['months']).and_raise(StandardError)
|
|
26
|
+
expect { subject.call(definition) }.to raise_error(StandardError)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
context 'no methods' do
|
|
31
|
+
it 'returns success' do
|
|
32
|
+
definition["methods"] = nil
|
|
33
|
+
expect(subject.call(definition)).to be true
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context 'no tests' do
|
|
38
|
+
it 'raises error' do
|
|
39
|
+
expect(test_validator).to receive(:call).with(definition['tests']).and_raise(StandardError)
|
|
40
|
+
expect { subject.call(definition) }.to raise_error(StandardError)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'validation/month_validator'
|
|
3
|
+
|
|
4
|
+
describe Definitions::Validation::Month do
|
|
5
|
+
subject { described_class.new }
|
|
6
|
+
|
|
7
|
+
context 'months are valid' do
|
|
8
|
+
it 'reports success' do
|
|
9
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1}] }
|
|
10
|
+
expect(subject.call(months)).to be true
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context 'invalid months' do
|
|
15
|
+
it 'returns error if missing' do
|
|
16
|
+
expect { subject.call(nil) }.to raise_error(Definitions::Errors::NoMonths)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'returns error if empty' do
|
|
20
|
+
expect { subject.call({}) }.to raise_error(Definitions::Errors::NoMonths)
|
|
21
|
+
expect { subject.call([]) }.to raise_error(Definitions::Errors::NoMonths)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'returns error if month not an integer' do
|
|
25
|
+
months = { 'january' => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1}] }
|
|
26
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
27
|
+
expect(e.message).to eq("All months must be an integer, received: #{months}")
|
|
28
|
+
}
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'returns error if months not 0 through 12' do
|
|
32
|
+
months = { -1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1}] }
|
|
33
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
34
|
+
expect(e.message).to eq("All months must be between 0 and 12, received: #{months}")
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
months = { 13 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1}] }
|
|
38
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
39
|
+
expect(e.message).to eq("All months must be between 0 and 12, received: #{months}")
|
|
40
|
+
}
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'returns error if month has no name' do
|
|
44
|
+
months = { 1 => [{""=>"Test Holiday", "regions"=>["test"], "mday"=>1}] }
|
|
45
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
46
|
+
expect(e.message).to eq("All months must have a name, received: #{months}")
|
|
47
|
+
}
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'returns error if month has no regions' do
|
|
51
|
+
months = { 1 => [{"name"=>"Test Holiday", "mday"=>1}] }
|
|
52
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidRegions) { |e|
|
|
53
|
+
expect(e.message).to eq("A month must contain at least one region, received: #{months}")
|
|
54
|
+
}
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'returns error if month has empty regions' do
|
|
58
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions" => [], "mday"=>1}] }
|
|
59
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidRegions) { |e|
|
|
60
|
+
expect(e.message).to eq("A month must contain at least one region, received: #{months}")
|
|
61
|
+
}
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'returns error if month has empty regions' do
|
|
65
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>[""], "mday"=>1}] }
|
|
66
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidRegions) { |e|
|
|
67
|
+
expect(e.message).to eq("A month must contain at least one region, received: #{months}")
|
|
68
|
+
}
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
context 'year_ranges' do
|
|
72
|
+
it 'returns error if year_ranges contains unknown subkey' do
|
|
73
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1, "year_ranges" => {"blah" => [2018]} }] }
|
|
74
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
75
|
+
expect(e.message).to eq("The :year_ranges value only accepts the following: :until, :from, :limited, :between, received: #{months}")
|
|
76
|
+
}
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it 'returns error if :until value is not a single integer' do
|
|
80
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1, "year_ranges" => {"until" => [2018]} }] }
|
|
81
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
82
|
+
expect(e.message).to eq("The year_ranges.until value must contain a single 'year' integer, ex. 2018, received: #{months}")
|
|
83
|
+
}
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it 'returns error if :from value is not a single integer' do
|
|
87
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1, "year_ranges" => {"from" => [2018]} }] }
|
|
88
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
89
|
+
expect(e.message).to eq("The year_ranges.from value must contain a single 'year' integer, ex. 2018, received: #{months}")
|
|
90
|
+
}
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it 'returns error if :limited value is not an array' do
|
|
94
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1, "year_ranges" => {"limited" => 2018} }] }
|
|
95
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
96
|
+
expect(e.message).to eq("The year_ranges.limited value must contain an array of 'year' integers, ex. [2018], received: #{months}")
|
|
97
|
+
}
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it 'returns error if :limited value is not an array of integers' do
|
|
101
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1, "year_ranges" => {"limited" => ["blah"]} }] }
|
|
102
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
103
|
+
expect(e.message).to eq("The year_ranges.limited value must contain an array of 'year' integers, ex. [2018], received: #{months}")
|
|
104
|
+
}
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
context 'between' do
|
|
108
|
+
it 'returns error if not a hash' do
|
|
109
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1, "year_ranges" => {"between" => "2008..2012" } }] }
|
|
110
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
111
|
+
expect(e.message).to eq("year_ranges.between must contain both a 'start' and 'end' key, received: #{months}")
|
|
112
|
+
}
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it 'returns error if start is missing' do
|
|
116
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1, "year_ranges" => {"between" => {"end" => 2018} } }] }
|
|
117
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
118
|
+
expect(e.message).to eq("year_ranges.between must contain both a 'start' and 'end' key, received: #{months}")
|
|
119
|
+
}
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it 'returns error if end is missing' do
|
|
123
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1, "year_ranges" => {"between" => {"start" => 2016} } }] }
|
|
124
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
125
|
+
expect(e.message).to eq("year_ranges.between must contain both a 'start' and 'end' key, received: #{months}")
|
|
126
|
+
}
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it 'returns an error if start value is not an integer' do
|
|
130
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1, "year_ranges" => {"between" => {"start" => "2016", "end" => 2018} } }] }
|
|
131
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
132
|
+
expect(e.message).to eq("The year_ranges.between.start value must contain a single 'year' integer, ex. 2018, received: #{months}")
|
|
133
|
+
}
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it 'returns an error if end value is not an integer' do
|
|
137
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1, "year_ranges" => {"between" => {"start" => 2016, "end" => "2018"} } }] }
|
|
138
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
139
|
+
expect(e.message).to eq("The year_ranges.between.end value must contain a single 'year' integer, ex. 2018, received: #{months}")
|
|
140
|
+
}
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it 'returns an error if end value is before start' do
|
|
144
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1, "year_ranges" => {"between" => {"start" => 2016, "end" => 2015} } }] }
|
|
145
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
146
|
+
expect(e.message).to eq("The year_ranges.between.end value cannot be before the start value, received: #{months}")
|
|
147
|
+
}
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it 'returns an error if the start and end values are the same' do
|
|
151
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1, "year_ranges" => {"between" => {"start" => 2016, "end" => 2016} } }] }
|
|
152
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
153
|
+
expect(e.message).to eq("The year_ranges.between start and end values cannot be the same, received: #{months}")
|
|
154
|
+
}
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
context 'with multiple selectors' do
|
|
159
|
+
it 'returns an error if provided an array' do
|
|
160
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1, "year_ranges" => [{"from" => 2019}, {"between" => {"start" => 2014, "end" => 2016} }] }] }
|
|
161
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
162
|
+
expect(e.message).to eq("year_ranges only supports a single selector at this time, received: #{months}")
|
|
163
|
+
}
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
it 'returns an error if there is more than 1 sub key' do
|
|
167
|
+
months = { 1 => [{"name"=>"Test Holiday", "regions"=>["test"], "mday"=>1, "year_ranges" => {"from" => 2019, "between" => {"start" => 2014, "end" => 2016} } }] }
|
|
168
|
+
expect { subject.call(months) }.to raise_error(Definitions::Errors::InvalidMonth) { |e|
|
|
169
|
+
expect(e.message).to eq("year_ranges only supports a single selector at this time, received: #{months}")
|
|
170
|
+
}
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
end
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'validation/test_validator'
|
|
3
|
+
|
|
4
|
+
describe Definitions::Validation::Test do
|
|
5
|
+
subject { described_class.new }
|
|
6
|
+
|
|
7
|
+
context 'success' do
|
|
8
|
+
it 'returns true if single valid test' do
|
|
9
|
+
tests = [{ "given" => { "date" => "2016-01-01", "regions" => ['us'] }, "expect" => { "name" => "Test Holiday" } } ]
|
|
10
|
+
expect(subject.call(tests)).to be true
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it 'returns true if multiple valid tests' do
|
|
14
|
+
tests = [
|
|
15
|
+
{ "given" => { "date" => "2016-01-01", "regions" => ['us'] }, "expect" => { "name" => "Test Holiday" } },
|
|
16
|
+
{ "given" => { "date" => "2016-02-02", "regions" => ['us'] }, "expect" => { "name" => "Test 2" } }
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
expect(subject.call(tests)).to be true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'returns true if single test has informal option' do
|
|
23
|
+
tests = [{ "given" => { "date" => "2016-01-01", "regions" => ['us'], "options" => "informal" }, "expect" => { "name" => "Test Holiday" } } ]
|
|
24
|
+
expect(subject.call(tests)).to be true
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'returns true if single test has single valid option' do
|
|
28
|
+
tests = [{ "given" => { "date" => "2016-01-01", "regions" => ['us'], "options" => "observed" }, "expect" => { "name" => "Test Holiday" } } ]
|
|
29
|
+
expect(subject.call(tests)).to be true
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'returns true if single test has multiple valid options' do
|
|
33
|
+
tests = [{ "given" => { "date" => "2016-01-01", "regions" => ['us'], "options" => ["informal", "observed"] }, "expect" => { "name" => "Test Holiday" } } ]
|
|
34
|
+
expect(subject.call(tests)).to be true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'returns true if regions is an array' do
|
|
38
|
+
tests = [{ "given" => { "date" => "2016-01-01", "regions" => ['us', 'us_dc']}, "expect" => { "name" => "Test Holiday" } } ]
|
|
39
|
+
expect(subject.call(tests)).to be true
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'returns true if dates are an array and all are valid dates' do
|
|
43
|
+
tests = [{ "given" => { "date" => ["2016-01-01", "2016-01-02", "2017-01-02"], "regions" => ['us', 'us_dc']}, "expect" => { "name" => "Test Holiday" } } ]
|
|
44
|
+
expect(subject.call(tests)).to be true
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
context 'failure' do
|
|
49
|
+
it 'raises error if tests are nil' do
|
|
50
|
+
expect { subject.call(nil) }.to raise_error(Definitions::Errors::InvalidTest) { |e|
|
|
51
|
+
expect(e.message).to eq "Tests cannot be nil"
|
|
52
|
+
}
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'raises error if tests are empty array' do
|
|
56
|
+
expect { subject.call([]) }.to raise_error(Definitions::Errors::InvalidTest) { |e|
|
|
57
|
+
expect(e.message).to eq "Tests cannot be empty. They are too important to leave out!"
|
|
58
|
+
}
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'raises error if tests are not an array' do
|
|
62
|
+
expect { subject.call("blah") }.to raise_error(Definitions::Errors::InvalidTest) { |e|
|
|
63
|
+
expect(e.message).to eq "Tests must be an array"
|
|
64
|
+
}
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context 'single test' do
|
|
68
|
+
let(:tests) {
|
|
69
|
+
[
|
|
70
|
+
{
|
|
71
|
+
"given" => {
|
|
72
|
+
"date" => "2016-01-01",
|
|
73
|
+
"regions" => ['us', 'us_dc']
|
|
74
|
+
},
|
|
75
|
+
"expect" => { "name" => "Test Holiday" }
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
context 'given' do
|
|
81
|
+
it 'raises error if no given value' do
|
|
82
|
+
tests.first.delete("given")
|
|
83
|
+
expect { subject.call(tests) }.to raise_error(Definitions::Errors::InvalidTest) { |e|
|
|
84
|
+
expect(e.message).to include "Test must contain given key"
|
|
85
|
+
}
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it 'raises error if nil regions' do
|
|
89
|
+
tests.first["given"]["regions"] = nil
|
|
90
|
+
expect { subject.call(tests) }.to raise_error(Definitions::Errors::InvalidTest) { |e|
|
|
91
|
+
expect(e.message).to include "Test contains invalid regions (must be an array of strings)"
|
|
92
|
+
}
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it 'raises error if empty regions' do
|
|
96
|
+
tests.first["given"]["regions"] = []
|
|
97
|
+
expect { subject.call(tests) }.to raise_error(Definitions::Errors::InvalidTest) { |e|
|
|
98
|
+
expect(e.message).to include "Test must contain at least one region"
|
|
99
|
+
}
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it 'raises error if regions not an array' do
|
|
103
|
+
tests.first["given"]["regions"] = "invalid"
|
|
104
|
+
expect { subject.call(tests) }.to raise_error(Definitions::Errors::InvalidTest) { |e|
|
|
105
|
+
expect(e.message).to include "Test contains invalid regions (must be an array of strings)"
|
|
106
|
+
}
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it 'raises error if regions is array of empty strings' do
|
|
110
|
+
tests.first["given"]["regions"] = [""]
|
|
111
|
+
expect { subject.call(tests) }.to raise_error(Definitions::Errors::InvalidTest) { |e|
|
|
112
|
+
expect(e.message).to include "Test cannot contain empty regions"
|
|
113
|
+
}
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it 'raises error if single invalid option' do
|
|
117
|
+
tests.first["given"]["options"] = "blah"
|
|
118
|
+
expect { subject.call(tests) }.to raise_error(Definitions::Errors::InvalidTest) { |e|
|
|
119
|
+
expect(e.message).to include "Test contains invalid option(s)"
|
|
120
|
+
}
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it 'raises error if array of options with single invalid' do
|
|
124
|
+
tests.first["given"]["options"] = ["informal", "blah"]
|
|
125
|
+
expect { subject.call(tests) }.to raise_error(Definitions::Errors::InvalidTest) { |e|
|
|
126
|
+
expect(e.message).to include "Test contains invalid option(s)"
|
|
127
|
+
}
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it 'raises error if no date or year range keys' do
|
|
131
|
+
tests.first["given"].delete("date")
|
|
132
|
+
expect { subject.call(tests) }.to raise_error(Definitions::Errors::InvalidTest) { |e|
|
|
133
|
+
expect(e.message).to include "Test must contain some date"
|
|
134
|
+
}
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it 'raises error if nil date' do
|
|
138
|
+
tests.first["given"]["date"] = nil
|
|
139
|
+
expect { subject.call(tests) }.to raise_error(Definitions::Errors::InvalidTest) { |e|
|
|
140
|
+
expect(e.message).to include "Test must contain valid date"
|
|
141
|
+
}
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it 'raises error if invalid date' do
|
|
145
|
+
tests.first["given"]["date"] = "blah"
|
|
146
|
+
expect { subject.call(tests) }.to raise_error(Definitions::Errors::InvalidTest) { |e|
|
|
147
|
+
expect(e.message).to include "Test must contain valid date"
|
|
148
|
+
}
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
context 'expect' do
|
|
153
|
+
it 'raises error if expect key is not present' do
|
|
154
|
+
tests.first.delete("expect")
|
|
155
|
+
expect { subject.call(tests) }.to raise_error(Definitions::Errors::InvalidTest) { |e|
|
|
156
|
+
expect(e.message).to include "Test must contain expect key"
|
|
157
|
+
}
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it 'raises error if holiday flag value not valid' do
|
|
161
|
+
tests.first["expect"]["holiday"] = "blah"
|
|
162
|
+
expect { subject.call(tests) }.to raise_error(Definitions::Errors::InvalidTest) { |e|
|
|
163
|
+
expect(e.message).to include"Test contains invalid holiday value (must be true/false)"
|
|
164
|
+
}
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|