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.
Files changed (382) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ruby.yml +25 -0
  3. data/CHANGELOG.md +446 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE +21 -0
  7. data/Makefile +45 -0
  8. data/README.md +337 -0
  9. data/Rakefile +109 -0
  10. data/bin/console +7 -0
  11. data/bin/setup +6 -0
  12. data/definitions/.github/workflows/ruby.yml +25 -0
  13. data/definitions/.gitignore +5 -0
  14. data/definitions/CHANGELOG.md +352 -0
  15. data/definitions/Gemfile +6 -0
  16. data/definitions/LICENSE +21 -0
  17. data/definitions/METHODS.yml +26 -0
  18. data/definitions/Makefile +9 -0
  19. data/definitions/README.md +22 -0
  20. data/definitions/ar.yaml +268 -0
  21. data/definitions/at.yaml +116 -0
  22. data/definitions/au.yaml +907 -0
  23. data/definitions/be_fr.yaml +153 -0
  24. data/definitions/be_nl.yaml +153 -0
  25. data/definitions/bg.yaml +186 -0
  26. data/definitions/br.yaml +178 -0
  27. data/definitions/ca.yaml +969 -0
  28. data/definitions/ch.yaml +277 -0
  29. data/definitions/cl.yaml +294 -0
  30. data/definitions/co.yaml +437 -0
  31. data/definitions/cr.yaml +100 -0
  32. data/definitions/cz.yaml +137 -0
  33. data/definitions/de.yaml +401 -0
  34. data/definitions/dk.yaml +220 -0
  35. data/definitions/doc/CONTRIBUTING.md +44 -0
  36. data/definitions/doc/MAINTAINERS.md +39 -0
  37. data/definitions/doc/SYNTAX.md +435 -0
  38. data/definitions/doc/architecture/README.md +15 -0
  39. data/definitions/doc/architecture/adr-001.md +86 -0
  40. data/definitions/doc/architecture/adr-002.md +64 -0
  41. data/definitions/ecbtarget.yaml +74 -0
  42. data/definitions/ee.yaml +123 -0
  43. data/definitions/es.yaml +495 -0
  44. data/definitions/federalreserve.yaml +389 -0
  45. data/definitions/federalreservebanks.yaml +821 -0
  46. data/definitions/fedex.yaml +102 -0
  47. data/definitions/fi.yaml +234 -0
  48. data/definitions/fr.yaml +157 -0
  49. data/definitions/gb.yaml +565 -0
  50. data/definitions/ge.yaml +158 -0
  51. data/definitions/gr.yaml +158 -0
  52. data/definitions/hk.yaml +287 -0
  53. data/definitions/hr.yaml +171 -0
  54. data/definitions/hu.yaml +156 -0
  55. data/definitions/ie.yaml +172 -0
  56. data/definitions/index.yaml +80 -0
  57. data/definitions/is.yaml +247 -0
  58. data/definitions/it.yaml +246 -0
  59. data/definitions/jp.yaml +761 -0
  60. data/definitions/ke.yaml +107 -0
  61. data/definitions/kr.yaml +166 -0
  62. data/definitions/kz.yaml +128 -0
  63. data/definitions/li.yaml +154 -0
  64. data/definitions/lib/validation/custom_method_validator.rb +38 -0
  65. data/definitions/lib/validation/definition_validator.rb +35 -0
  66. data/definitions/lib/validation/error.rb +11 -0
  67. data/definitions/lib/validation/month_validator.rb +58 -0
  68. data/definitions/lib/validation/run.rb +66 -0
  69. data/definitions/lib/validation/test_validator.rb +83 -0
  70. data/definitions/lt.yaml +198 -0
  71. data/definitions/lu.yaml +123 -0
  72. data/definitions/lv.yaml +229 -0
  73. data/definitions/ma.yaml +96 -0
  74. data/definitions/mt_en.yaml +131 -0
  75. data/definitions/mt_mt.yaml +131 -0
  76. data/definitions/mx.yaml +160 -0
  77. data/definitions/my.yaml +79 -0
  78. data/definitions/nerc.yaml +94 -0
  79. data/definitions/ng.yaml +97 -0
  80. data/definitions/nl.yaml +127 -0
  81. data/definitions/no.yaml +169 -0
  82. data/definitions/northamericainformal.yaml +105 -0
  83. data/definitions/nyse.yaml +137 -0
  84. data/definitions/nz.yaml +346 -0
  85. data/definitions/pe.yaml +208 -0
  86. data/definitions/ph.yaml +130 -0
  87. data/definitions/pl.yaml +796 -0
  88. data/definitions/pt.yaml +187 -0
  89. data/definitions/ro.yaml +240 -0
  90. data/definitions/rs_cyrl.yaml +129 -0
  91. data/definitions/rs_la.yaml +129 -0
  92. data/definitions/ru.yaml +108 -0
  93. data/definitions/se.yaml +238 -0
  94. data/definitions/sg.yaml +89 -0
  95. data/definitions/si.yaml +162 -0
  96. data/definitions/sk.yaml +154 -0
  97. data/definitions/spec/coverage_report.rb +7 -0
  98. data/definitions/spec/data/invalid/months/malformed/bad.yaml +15 -0
  99. data/definitions/spec/data/invalid/months/missing/no_months.yaml +9 -0
  100. data/definitions/spec/data/valid/simple.yaml +15 -0
  101. data/definitions/spec/spec_helper.rb +7 -0
  102. data/definitions/spec/validation/custom_method_validator_spec.rb +60 -0
  103. data/definitions/spec/validation/definition_validator_spec.rb +43 -0
  104. data/definitions/spec/validation/month_validator_spec.rb +175 -0
  105. data/definitions/spec/validation/test_validator_spec.rb +169 -0
  106. data/definitions/th.yaml +111 -0
  107. data/definitions/tn.yaml +83 -0
  108. data/definitions/tr.yaml +174 -0
  109. data/definitions/ua.yaml +161 -0
  110. data/definitions/unitednations.yaml +189 -0
  111. data/definitions/ups.yaml +102 -0
  112. data/definitions/us.yaml +965 -0
  113. data/definitions/ve.yaml +118 -0
  114. data/definitions/vi.yaml +54 -0
  115. data/definitions/za.yaml +139 -0
  116. data/doc/CONTRIBUTING.md +72 -0
  117. data/doc/MAINTAINERS.md +81 -0
  118. data/doc/REFERENCES +19 -0
  119. data/lib/generated_definitions/MANIFEST +83 -0
  120. data/lib/generated_definitions/REGIONS.rb +6 -0
  121. data/lib/generated_definitions/ar.rb +60 -0
  122. data/lib/generated_definitions/at.rb +37 -0
  123. data/lib/generated_definitions/au.rb +177 -0
  124. data/lib/generated_definitions/be.rb +42 -0
  125. data/lib/generated_definitions/be_fr.rb +36 -0
  126. data/lib/generated_definitions/be_nl.rb +36 -0
  127. data/lib/generated_definitions/bg.rb +53 -0
  128. data/lib/generated_definitions/br.rb +37 -0
  129. data/lib/generated_definitions/ca.rb +88 -0
  130. data/lib/generated_definitions/ch.rb +95 -0
  131. data/lib/generated_definitions/cl.rb +71 -0
  132. data/lib/generated_definitions/co.rb +121 -0
  133. data/lib/generated_definitions/cr.rb +35 -0
  134. data/lib/generated_definitions/cz.rb +37 -0
  135. data/lib/generated_definitions/de.rb +65 -0
  136. data/lib/generated_definitions/dk.rb +48 -0
  137. data/lib/generated_definitions/ecbtarget.rb +30 -0
  138. data/lib/generated_definitions/ee.rb +36 -0
  139. data/lib/generated_definitions/el.rb +38 -0
  140. data/lib/generated_definitions/es.rb +56 -0
  141. data/lib/generated_definitions/europe.rb +638 -0
  142. data/lib/generated_definitions/federalreserve.rb +35 -0
  143. data/lib/generated_definitions/federalreservebanks.rb +35 -0
  144. data/lib/generated_definitions/fedex.rb +36 -0
  145. data/lib/generated_definitions/fi.rb +61 -0
  146. data/lib/generated_definitions/fr.rb +39 -0
  147. data/lib/generated_definitions/gb.rb +51 -0
  148. data/lib/generated_definitions/ge.rb +41 -0
  149. data/lib/generated_definitions/gr.rb +38 -0
  150. data/lib/generated_definitions/hk.rb +106 -0
  151. data/lib/generated_definitions/hr.rb +40 -0
  152. data/lib/generated_definitions/hu.rb +35 -0
  153. data/lib/generated_definitions/ie.rb +33 -0
  154. data/lib/generated_definitions/is.rb +60 -0
  155. data/lib/generated_definitions/it.rb +45 -0
  156. data/lib/generated_definitions/jp.rb +166 -0
  157. data/lib/generated_definitions/ke.rb +34 -0
  158. data/lib/generated_definitions/kr.rb +40 -0
  159. data/lib/generated_definitions/kz.rb +38 -0
  160. data/lib/generated_definitions/li.rb +44 -0
  161. data/lib/generated_definitions/lt.rb +38 -0
  162. data/lib/generated_definitions/lu.rb +35 -0
  163. data/lib/generated_definitions/lv.rb +56 -0
  164. data/lib/generated_definitions/ma.rb +33 -0
  165. data/lib/generated_definitions/mt_en.rb +38 -0
  166. data/lib/generated_definitions/mt_mt.rb +38 -0
  167. data/lib/generated_definitions/mx.rb +54 -0
  168. data/lib/generated_definitions/my.rb +30 -0
  169. data/lib/generated_definitions/nerc.rb +30 -0
  170. data/lib/generated_definitions/ng.rb +33 -0
  171. data/lib/generated_definitions/nl.rb +37 -0
  172. data/lib/generated_definitions/no.rb +40 -0
  173. data/lib/generated_definitions/northamerica.rb +229 -0
  174. data/lib/generated_definitions/nyse.rb +34 -0
  175. data/lib/generated_definitions/nz.rb +105 -0
  176. data/lib/generated_definitions/pe.rb +43 -0
  177. data/lib/generated_definitions/ph.rb +50 -0
  178. data/lib/generated_definitions/pl.rb +73 -0
  179. data/lib/generated_definitions/pt.rb +40 -0
  180. data/lib/generated_definitions/ro.rb +39 -0
  181. data/lib/generated_definitions/rs_cyrl.rb +39 -0
  182. data/lib/generated_definitions/rs_la.rb +39 -0
  183. data/lib/generated_definitions/ru.rb +37 -0
  184. data/lib/generated_definitions/scandinavia.rb +166 -0
  185. data/lib/generated_definitions/se.rb +53 -0
  186. data/lib/generated_definitions/sg.rb +31 -0
  187. data/lib/generated_definitions/si.rb +39 -0
  188. data/lib/generated_definitions/sk.rb +39 -0
  189. data/lib/generated_definitions/southamerica.rb +248 -0
  190. data/lib/generated_definitions/th.rb +36 -0
  191. data/lib/generated_definitions/tn.rb +32 -0
  192. data/lib/generated_definitions/tr.rb +64 -0
  193. data/lib/generated_definitions/ua.rb +37 -0
  194. data/lib/generated_definitions/unitednations.rb +81 -0
  195. data/lib/generated_definitions/ups.rb +36 -0
  196. data/lib/generated_definitions/us.rb +153 -0
  197. data/lib/generated_definitions/ve.rb +36 -0
  198. data/lib/generated_definitions/vi.rb +29 -0
  199. data/lib/generated_definitions/za.rb +36 -0
  200. data/lib/holidays/core_extensions/date.rb +57 -0
  201. data/lib/holidays/core_extensions/time.rb +23 -0
  202. data/lib/holidays/date_calculator/day_of_month.rb +68 -0
  203. data/lib/holidays/date_calculator/easter.rb +91 -0
  204. data/lib/holidays/date_calculator/lunar_date.rb +371 -0
  205. data/lib/holidays/date_calculator/weekend_modifier.rb +80 -0
  206. data/lib/holidays/definition/context/function_processor.rb +91 -0
  207. data/lib/holidays/definition/context/generator.rb +209 -0
  208. data/lib/holidays/definition/context/load.rb +29 -0
  209. data/lib/holidays/definition/context/merger.rb +22 -0
  210. data/lib/holidays/definition/decorator/custom_method_proc.rb +28 -0
  211. data/lib/holidays/definition/decorator/custom_method_source.rb +30 -0
  212. data/lib/holidays/definition/decorator/test.rb +37 -0
  213. data/lib/holidays/definition/entity/custom_method.rb +11 -0
  214. data/lib/holidays/definition/entity/test.rb +11 -0
  215. data/lib/holidays/definition/generator/module.rb +54 -0
  216. data/lib/holidays/definition/generator/regions.rb +55 -0
  217. data/lib/holidays/definition/generator/test.rb +51 -0
  218. data/lib/holidays/definition/parser/custom_method.rb +67 -0
  219. data/lib/holidays/definition/parser/test.rb +86 -0
  220. data/lib/holidays/definition/repository/cache.rb +47 -0
  221. data/lib/holidays/definition/repository/custom_methods.rb +27 -0
  222. data/lib/holidays/definition/repository/holidays_by_month.rb +57 -0
  223. data/lib/holidays/definition/repository/proc_result_cache.rb +51 -0
  224. data/lib/holidays/definition/repository/regions.rb +46 -0
  225. data/lib/holidays/definition/validator/custom_method.rb +31 -0
  226. data/lib/holidays/definition/validator/region.rb +36 -0
  227. data/lib/holidays/definition/validator/test.rb +71 -0
  228. data/lib/holidays/errors.rb +11 -0
  229. data/lib/holidays/factory/date_calculator.rb +42 -0
  230. data/lib/holidays/factory/definition.rb +143 -0
  231. data/lib/holidays/factory/finder.rb +70 -0
  232. data/lib/holidays/finder/context/between.rb +45 -0
  233. data/lib/holidays/finder/context/dates_driver_builder.rb +64 -0
  234. data/lib/holidays/finder/context/next_holiday.rb +57 -0
  235. data/lib/holidays/finder/context/parse_options.rb +104 -0
  236. data/lib/holidays/finder/context/search.rb +111 -0
  237. data/lib/holidays/finder/context/year_holiday.rb +57 -0
  238. data/lib/holidays/finder/rules/in_region.rb +31 -0
  239. data/lib/holidays/finder/rules/year_range.rb +58 -0
  240. data/lib/holidays/load_all_definitions.rb +56 -0
  241. data/lib/holidays/version.rb +3 -0
  242. data/lib/holidays.rb +130 -0
  243. data/lib/revised_holidays.rb +1 -0
  244. data/revised_holidays.gemspec +31 -0
  245. data/test/coverage_report.rb +26 -0
  246. data/test/data/test_custom_govt_holiday_defs.yaml +5 -0
  247. data/test/data/test_custom_informal_holidays_defs.yaml +11 -0
  248. data/test/data/test_custom_year_range_holiday_defs.yaml +31 -0
  249. data/test/data/test_invalid_region.rb +15 -0
  250. data/test/data/test_multiple_custom_holiday_defs.yaml +12 -0
  251. data/test/data/test_multiple_regions_with_conflicts_region_1.yaml +38 -0
  252. data/test/data/test_multiple_regions_with_conflicts_region_2.yaml +38 -0
  253. data/test/data/test_region.rb +15 -0
  254. data/test/data/test_single_custom_holiday_defs.yaml +12 -0
  255. data/test/data/test_single_custom_holiday_with_custom_procs.yaml +28 -0
  256. data/test/defs/test_defs_ar.rb +69 -0
  257. data/test/defs/test_defs_at.rb +31 -0
  258. data/test/defs/test_defs_au.rb +233 -0
  259. data/test/defs/test_defs_be_fr.rb +45 -0
  260. data/test/defs/test_defs_be_nl.rb +45 -0
  261. data/test/defs/test_defs_bg.rb +41 -0
  262. data/test/defs/test_defs_br.rb +49 -0
  263. data/test/defs/test_defs_ca.rb +289 -0
  264. data/test/defs/test_defs_ch.rb +51 -0
  265. data/test/defs/test_defs_cl.rb +69 -0
  266. data/test/defs/test_defs_co.rb +113 -0
  267. data/test/defs/test_defs_cr.rb +29 -0
  268. data/test/defs/test_defs_cz.rb +37 -0
  269. data/test/defs/test_defs_de.rb +89 -0
  270. data/test/defs/test_defs_dk.rb +47 -0
  271. data/test/defs/test_defs_ecbtarget.rb +27 -0
  272. data/test/defs/test_defs_ee.rb +41 -0
  273. data/test/defs/test_defs_es.rb +137 -0
  274. data/test/defs/test_defs_europe.rb +1522 -0
  275. data/test/defs/test_defs_fed_ex.rb +24 -0
  276. data/test/defs/test_defs_federalreserve.rb +119 -0
  277. data/test/defs/test_defs_federalreservebanks.rb +251 -0
  278. data/test/defs/test_defs_fedex.rb +31 -0
  279. data/test/defs/test_defs_fi.rb +59 -0
  280. data/test/defs/test_defs_fr.rb +43 -0
  281. data/test/defs/test_defs_gb.rb +159 -0
  282. data/test/defs/test_defs_ge.rb +53 -0
  283. data/test/defs/test_defs_gr.rb +41 -0
  284. data/test/defs/test_defs_hk.rb +59 -0
  285. data/test/defs/test_defs_hr.rb +45 -0
  286. data/test/defs/test_defs_hu.rb +47 -0
  287. data/test/defs/test_defs_ie.rb +53 -0
  288. data/test/defs/test_defs_is.rb +51 -0
  289. data/test/defs/test_defs_it.rb +55 -0
  290. data/test/defs/test_defs_jp.rb +159 -0
  291. data/test/defs/test_defs_ke.rb +31 -0
  292. data/test/defs/test_defs_kr.rb +37 -0
  293. data/test/defs/test_defs_kz.rb +39 -0
  294. data/test/defs/test_defs_li.rb +35 -0
  295. data/test/defs/test_defs_lt.rb +65 -0
  296. data/test/defs/test_defs_lu.rb +35 -0
  297. data/test/defs/test_defs_lv.rb +98 -0
  298. data/test/defs/test_defs_ma.rb +29 -0
  299. data/test/defs/test_defs_mt_en.rb +41 -0
  300. data/test/defs/test_defs_mt_mt.rb +41 -0
  301. data/test/defs/test_defs_mx.rb +49 -0
  302. data/test/defs/test_defs_my.rb +23 -0
  303. data/test/defs/test_defs_nerc.rb +29 -0
  304. data/test/defs/test_defs_ng.rb +29 -0
  305. data/test/defs/test_defs_nl.rb +33 -0
  306. data/test/defs/test_defs_no.rb +43 -0
  307. data/test/defs/test_defs_northamerica.rb +667 -0
  308. data/test/defs/test_defs_nyse.rb +46 -0
  309. data/test/defs/test_defs_nz.rb +67 -0
  310. data/test/defs/test_defs_pe.rb +47 -0
  311. data/test/defs/test_defs_ph.rb +29 -0
  312. data/test/defs/test_defs_pl.rb +229 -0
  313. data/test/defs/test_defs_pt.rb +47 -0
  314. data/test/defs/test_defs_ro.rb +65 -0
  315. data/test/defs/test_defs_rs_cyrl.rb +46 -0
  316. data/test/defs/test_defs_rs_la.rb +46 -0
  317. data/test/defs/test_defs_ru.rb +34 -0
  318. data/test/defs/test_defs_scandinavia.rb +215 -0
  319. data/test/defs/test_defs_se.rb +59 -0
  320. data/test/defs/test_defs_sg.rb +25 -0
  321. data/test/defs/test_defs_si.rb +105 -0
  322. data/test/defs/test_defs_sk.rb +41 -0
  323. data/test/defs/test_defs_southamerica.rb +327 -0
  324. data/test/defs/test_defs_th.rb +33 -0
  325. data/test/defs/test_defs_tn.rb +27 -0
  326. data/test/defs/test_defs_tr.rb +60 -0
  327. data/test/defs/test_defs_ua.rb +41 -0
  328. data/test/defs/test_defs_unitednations.rb +11 -0
  329. data/test/defs/test_defs_ups.rb +31 -0
  330. data/test/defs/test_defs_us.rb +387 -0
  331. data/test/defs/test_defs_ve.rb +35 -0
  332. data/test/defs/test_defs_vi.rb +22 -0
  333. data/test/defs/test_defs_za.rb +35 -0
  334. data/test/holidays/core_extensions/test_date.rb +122 -0
  335. data/test/holidays/core_extensions/test_date_time.rb +60 -0
  336. data/test/holidays/date_calculator/test_day_of_month.rb +27 -0
  337. data/test/holidays/date_calculator/test_easter_gregorian.rb +30 -0
  338. data/test/holidays/date_calculator/test_easter_julian.rb +36 -0
  339. data/test/holidays/date_calculator/test_lunar_date.rb +89 -0
  340. data/test/holidays/date_calculator/test_weekend_modifier.rb +54 -0
  341. data/test/holidays/definition/context/test_function_processor.rb +199 -0
  342. data/test/holidays/definition/context/test_generator.rb +226 -0
  343. data/test/holidays/definition/context/test_load.rb +37 -0
  344. data/test/holidays/definition/context/test_merger.rb +25 -0
  345. data/test/holidays/definition/decorator/test_custom_method_proc.rb +113 -0
  346. data/test/holidays/definition/decorator/test_custom_method_source.rb +96 -0
  347. data/test/holidays/definition/decorator/test_test.rb +123 -0
  348. data/test/holidays/definition/generator/test_module.rb +268 -0
  349. data/test/holidays/definition/generator/test_regions.rb +97 -0
  350. data/test/holidays/definition/generator/test_test.rb +113 -0
  351. data/test/holidays/definition/parser/test_custom_method.rb +79 -0
  352. data/test/holidays/definition/parser/test_test.rb +142 -0
  353. data/test/holidays/definition/repository/test_cache.rb +123 -0
  354. data/test/holidays/definition/repository/test_custom_methods.rb +43 -0
  355. data/test/holidays/definition/repository/test_holidays_by_month.rb +275 -0
  356. data/test/holidays/definition/repository/test_proc_result_cache.rb +91 -0
  357. data/test/holidays/definition/repository/test_regions.rb +104 -0
  358. data/test/holidays/definition/validator/test_custom_method.rb +94 -0
  359. data/test/holidays/definition/validator/test_region.rb +54 -0
  360. data/test/holidays/definition/validator/test_test.rb +60 -0
  361. data/test/holidays/finder/context/test_between.rb +172 -0
  362. data/test/holidays/finder/context/test_dates_driver_builder.rb +91 -0
  363. data/test/holidays/finder/context/test_next_holiday.rb +156 -0
  364. data/test/holidays/finder/context/test_parse_options.rb +141 -0
  365. data/test/holidays/finder/context/test_search.rb +232 -0
  366. data/test/holidays/finder/context/test_year_holiday.rb +202 -0
  367. data/test/holidays/finder/rules/test_in_region.rb +42 -0
  368. data/test/holidays/finder/rules/test_year_range.rb +166 -0
  369. data/test/integration/README.md +9 -0
  370. data/test/integration/test_all_regions.rb +49 -0
  371. data/test/integration/test_any_holidays_during_work_week.rb +90 -0
  372. data/test/integration/test_available_regions.rb +23 -0
  373. data/test/integration/test_custom_holidays.rb +41 -0
  374. data/test/integration/test_custom_informal_holidays.rb +15 -0
  375. data/test/integration/test_custom_year_range_holidays.rb +35 -0
  376. data/test/integration/test_holidays.rb +243 -0
  377. data/test/integration/test_holidays_between.rb +87 -0
  378. data/test/integration/test_multiple_regions.rb +71 -0
  379. data/test/integration/test_multiple_regions_with_conflict.rb +29 -0
  380. data/test/integration/test_nonstandard_regions.rb +25 -0
  381. data/test/test_helper.rb +37 -0
  382. metadata +649 -0
@@ -0,0 +1,226 @@
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
+ @custom_method_parser = mock()
8
+ @custom_method_source_decorator = mock()
9
+ @custom_methods_repository = mock()
10
+
11
+ @parsed_custom_method = Holidays::Definition::Entity::CustomMethod.new(
12
+ name: 'custom_method',
13
+ arguments: [:year, :month],
14
+ source: "some source",
15
+ )
16
+
17
+ @test_parser = mock()
18
+ @test_source_generator = mock()
19
+
20
+ @module_source_generator = mock()
21
+
22
+ @generator = Holidays::Definition::Context::Generator.new(
23
+ @custom_method_parser,
24
+ @custom_method_source_decorator,
25
+ @custom_methods_repository,
26
+ @test_parser,
27
+ @test_source_generator,
28
+ @module_source_generator,
29
+ )
30
+ end
31
+
32
+ def test_parse_definition_files_raises_error_if_argument_is_nil
33
+ assert_raises ArgumentError do
34
+ @generator.parse_definition_files(nil)
35
+ end
36
+ end
37
+
38
+ def test_parse_definition_files_raises_error_if_files_are_empty
39
+ assert_raises ArgumentError do
40
+ @generator.parse_definition_files([])
41
+ end
42
+ end
43
+
44
+ def test_parse_definition_files_correctly_parse_regions
45
+ files = ['test/data/test_single_custom_holiday_defs.yaml']
46
+ @custom_method_parser.expects(:call).with(nil).returns({})
47
+
48
+ @test_parser.expects(:call).with([{'given' => {'date' => '2013-06-20', 'regions' => ['custom_single_file']}, 'expect' => {'name' => 'Company Founding'}}]).returns(['parsed tests'])
49
+
50
+ regions = @generator.parse_definition_files(files)[0]
51
+
52
+ assert_equal [:custom_single_file], regions
53
+ end
54
+
55
+ def test_parse_definitions_files_correctly_parse_rules_by_month
56
+ files = ['test/data/test_single_custom_holiday_defs.yaml']
57
+ @custom_method_parser.expects(:call).with(nil).returns({})
58
+
59
+ @test_parser.expects(:call).with([{'given' => {'date' => '2013-06-20', 'regions' => ['custom_single_file']}, 'expect' => {'name' => 'Company Founding'}}]).returns(['parsed tests'])
60
+
61
+ rules_by_month = @generator.parse_definition_files(files)[1]
62
+
63
+ expected_rules_by_month = {
64
+ 6 => [
65
+ {
66
+ :mday => 20,
67
+ :name => "Company Founding",
68
+ :regions => [:custom_single_file]
69
+ }
70
+ ]
71
+ }
72
+
73
+ assert_equal expected_rules_by_month, rules_by_month
74
+ end
75
+
76
+ def test_parse_definition_files_correctly_parse_custom_methods
77
+ files = ['test/data/test_single_custom_holiday_defs.yaml']
78
+ @custom_method_parser.expects(:call).with(nil).returns({})
79
+
80
+ @test_parser.expects(:call).with([{'given' => {'date' => '2013-06-20', 'regions' => ['custom_single_file']}, 'expect' => {'name' => 'Company Founding'}}]).returns(['parsed tests'])
81
+
82
+ custom_methods = @generator.parse_definition_files(files)[2]
83
+
84
+ expected_custom_methods = {}
85
+ assert_equal expected_custom_methods, custom_methods
86
+ end
87
+
88
+ def test_parse_definition_files_correctly_parse_tests
89
+ files = ['test/data/test_single_custom_holiday_defs.yaml']
90
+ @custom_method_parser.expects(:call).with(nil).returns({})
91
+
92
+ @test_parser.expects(:call).with([{'given' => {'date' => '2013-06-20', 'regions' => ['custom_single_file']}, 'expect' => {'name' => 'Company Founding'}}]).returns(['parsed tests'])
93
+
94
+ parsed_tests = @generator.parse_definition_files(files)[3]
95
+
96
+ assert_equal ["parsed tests"], parsed_tests
97
+ end
98
+
99
+ def test_generate_definition_source_correctly_generate_module_src
100
+ files = ['test/data/test_single_custom_holiday_defs.yaml']
101
+ @custom_method_parser.expects(:call).with(nil).returns({})
102
+
103
+ @test_parser.expects(:call).with([{'given' => {'date' => '2013-06-20', 'regions' => ['custom_single_file']}, 'expect' => {'name' => 'Company Founding'}}]).returns(['parsed tests'])
104
+
105
+ @module_source_generator.expects(:call).with("test", ["test/data/test_single_custom_holiday_defs.yaml"], [:custom_single_file], [" 6 => [{:mday => 20, :name => \"Company Founding\", :regions => [:custom_single_file]}]"], "").returns("module source")
106
+ @test_source_generator.expects(:call).with('test', ['test/data/test_single_custom_holiday_defs.yaml'], ['parsed tests']).returns("test source")
107
+
108
+ regions, rules_by_month, custom_methods, tests = @generator.parse_definition_files(files)
109
+ module_src = @generator.generate_definition_source("test", files, regions, rules_by_month, custom_methods, tests)[0]
110
+
111
+ expected_module_src = "module source"
112
+
113
+ assert_equal expected_module_src, module_src
114
+ end
115
+
116
+ def test_generate_definition_source_correctly_generate_test_src
117
+ files = ['test/data/test_single_custom_holiday_defs.yaml']
118
+ @custom_method_parser.expects(:call).with(nil).returns({})
119
+
120
+ @test_parser.expects(:call).with([{'given' => {'date' => '2013-06-20', 'regions' => ['custom_single_file']}, 'expect' => {'name' => 'Company Founding'}}]).returns(['parsed tests'])
121
+
122
+ @module_source_generator.expects(:call).returns("module_source")
123
+
124
+ @test_source_generator.expects(:call).with('test', ['test/data/test_single_custom_holiday_defs.yaml'], ['parsed tests']).returns("test source")
125
+
126
+ regions, rules_by_month, custom_methods, tests = @generator.parse_definition_files(files)
127
+ test_src = @generator.generate_definition_source("test", files, regions, rules_by_month, custom_methods, tests)[1]
128
+
129
+ assert_equal 'test source', test_src
130
+ end
131
+
132
+ def test_parse_definitions_files_correctly_parse_year_range_by_month
133
+ files = ['test/data/test_custom_year_range_holiday_defs.yaml']
134
+ @custom_method_parser.expects(:call).with(nil).returns({})
135
+
136
+ @test_parser.expects(:call).with([{'given' => {'date' => '2017-01-01', 'regions' => ['custom_year_range_file']}, 'expect' => {'name' => 'after_year'}}]).returns(['parsed tests'])
137
+
138
+ rules_by_month = @generator.parse_definition_files(files)[1]
139
+
140
+ expected_rules_by_month = {
141
+ 6 => [
142
+ {
143
+ :name => "after_year",
144
+ :regions => [:custom_year_range_file],
145
+ :mday => 1,
146
+ :year_ranges => {:from => 2016}
147
+ },
148
+ {
149
+ :name => "before_year",
150
+ :regions => [:custom_year_range_file],
151
+ :mday => 2,
152
+ :year_ranges => {:until => 2017}
153
+ },
154
+ {
155
+ :name => "between_year",
156
+ :regions => [:custom_year_range_file],
157
+ :mday => 3,
158
+ :year_ranges => {:between => 2016..2018 }
159
+ },
160
+ {
161
+ :name => "limited_year",
162
+ :regions => [:custom_year_range_file],
163
+ :mday => 4,
164
+ :year_ranges => {:limited => [2016,2018,2019]}
165
+ }
166
+ ]
167
+ }
168
+
169
+ assert_equal expected_rules_by_month, rules_by_month
170
+ end
171
+
172
+ def test_generate_definition_source_correctly_generate_yearrange_test_src
173
+ files = ['test/data/test_custom_year_range_holiday_defs.yaml']
174
+ @custom_method_parser.expects(:call).with(nil).returns({})
175
+
176
+ @test_parser.expects(:call).with([{'given' => {'date' => '2017-01-01', 'regions' => ['custom_year_range_file']}, 'expect' => {'name' => 'after_year'}}]).returns(['parsed tests'])
177
+
178
+ @test_source_generator.expects(:call).with('test', ['test/data/test_custom_year_range_holiday_defs.yaml'], ['parsed tests']).returns('test source')
179
+
180
+ @module_source_generator.expects(:call).with("test", ["test/data/test_custom_year_range_holiday_defs.yaml"], [:custom_year_range_file], [" 6 => [{:mday => 1, :year_ranges => { :from => 2016 },:name => \"after_year\", :regions => [:custom_year_range_file]},\n {:mday => 2, :year_ranges => { :until => 2017 },:name => \"before_year\", :regions => [:custom_year_range_file]},\n {:mday => 3, :year_ranges => { :between => 2016..2018 },:name => \"between_year\", :regions => [:custom_year_range_file]},\n {:mday => 4, :year_ranges => { :limited => [2016, 2018, 2019] },:name => \"limited_year\", :regions => [:custom_year_range_file]}]"], "").returns('module_source')
181
+
182
+ regions, rules_by_month, custom_methods, tests = @generator.parse_definition_files(files)
183
+ module_src = @generator.generate_definition_source("test", files, regions, rules_by_month, custom_methods, tests)[0]
184
+ expected_module_src = "module_source"
185
+
186
+ assert_equal expected_module_src, module_src
187
+ end
188
+
189
+ def test_generate_definition_source_correctly_generate_module_src_with_custom_methods
190
+ files = ['test/data/test_single_custom_holiday_with_custom_procs.yaml']
191
+
192
+ @custom_method_parser.expects(:call).with('custom_method' => {'arguments' => 'year, month', 'source' => "d = Date.civil(year, month, 1)\nd + 2\n"}).returns({"custom_method(year, month)" => @parsed_custom_method})
193
+ @custom_methods_repository.expects(:find).twice.with('custom_method(year, month)').returns(nil)
194
+ @custom_method_source_decorator.expects(:call).once.with(@parsed_custom_method).returns("\"custom_method(year, month)\" => Proc.new { |year, month|\nsource_stuff\n}")
195
+
196
+ @test_parser.expects(:call).with([{'given' => {'date' => '2013-06-20', 'regions' => ['custom_single_file']}, 'expect' => {'name' => 'Company Founding'}}, {'given' => {'date' => '2015-01-01', 'regions' => ['custom_single_file']}, 'expect' => {'name' => 'Custom Holiday'}}]).returns(['parsed tests'])
197
+
198
+ @module_source_generator.expects(:call).with("test", ["test/data/test_single_custom_holiday_with_custom_procs.yaml"], [:custom_single_file], [" 0 => [{:function => \"custom_method(year, month)\", :function_arguments => [:year, :month], :function_modifier => 5, :name => \"Custom Holiday\", :regions => [:custom_single_file]}]", " 6 => [{:mday => 20, :name => \"Company Founding\", :regions => [:custom_single_file]}]"], "\"custom_method(year, month)\" => Proc.new { |year, month|\nsource_stuff\n},\n\n").returns("module source")
199
+ @test_source_generator.expects(:call).with('test', ['test/data/test_single_custom_holiday_with_custom_procs.yaml'], ['parsed tests']).returns('test source')
200
+
201
+ regions, rules_by_month, custom_methods, tests = @generator.parse_definition_files(files)
202
+ module_src = @generator.generate_definition_source("test", files, regions, rules_by_month, custom_methods, tests)[0]
203
+
204
+ expected_module_src = "module source"
205
+
206
+ assert_equal expected_module_src, module_src
207
+ end
208
+
209
+ def test_generate_definition_source_correctly_generate_test_src_with_custom_methods
210
+ files = ['test/data/test_single_custom_holiday_with_custom_procs.yaml']
211
+
212
+ @custom_method_parser.expects(:call).with('custom_method' => {'arguments' => 'year, month', 'source' => "d = Date.civil(year, month, 1)\nd + 2\n"}).returns({"custom_method(year, month)" => @parsed_custom_method})
213
+ @custom_methods_repository.expects(:find).twice.with('custom_method(year, month)').returns(nil)
214
+ @custom_method_source_decorator.expects(:call).once.with(@parsed_custom_method).returns("\"custom_method(year, month)\" => Proc.new { |year, month|\nsource_stuff\n}")
215
+
216
+ @test_parser.expects(:call).with([{'given' => {'date' => '2013-06-20', 'regions' => ['custom_single_file']}, 'expect' => {'name' => 'Company Founding'}}, {'given' => {'date' => '2015-01-01', 'regions' => ['custom_single_file']}, 'expect' => {'name' => 'Custom Holiday'}}]).returns(['parsed tests'])
217
+
218
+ @module_source_generator.expects(:call).returns("module_source")
219
+ @test_source_generator.expects(:call).with('test', ['test/data/test_single_custom_holiday_with_custom_procs.yaml'], ['parsed tests']).returns('test source')
220
+
221
+ regions, rules_by_month, custom_methods, tests = @generator.parse_definition_files(files)
222
+ test_src = @generator.generate_definition_source("test", files, regions, rules_by_month, custom_methods, tests)[1]
223
+
224
+ assert_equal 'test source', test_src
225
+ end
226
+ end
@@ -0,0 +1,37 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/../../../test_helper'
2
+
3
+ require 'holidays/definition/context/load'
4
+
5
+ class LoadTests < Test::Unit::TestCase
6
+ def setup
7
+ @definition_merger = mock()
8
+ full_definitions_path = File.expand_path(File.dirname(__FILE__)) + '/../../../data'
9
+
10
+ @subject = Holidays::Definition::Context::Load.new(
11
+ @definition_merger,
12
+ full_definitions_path,
13
+ )
14
+ end
15
+
16
+ def test_region_is_found_and_loaded_and_merged
17
+ @definition_merger.expects(:call).with(:test_region, {}, {})
18
+ @subject.call(:test_region)
19
+ end
20
+
21
+ def test_region_file_not_found
22
+ assert_raises Holidays::UnknownRegionError do
23
+ @subject.call(:unknown)
24
+ end
25
+ end
26
+
27
+ def test_region_can_be_loaded_but_file_is_invalid
28
+ assert_raises Holidays::UnknownRegionError do
29
+ @subject.call(:test_invalid_region)
30
+ end
31
+ end
32
+
33
+ def test_returns_list_of_loaded_regions
34
+ @definition_merger.expects(:call).with(:test_region, {}, {})
35
+ assert_equal([:test_region, :test_region2], @subject.call(:test_region), "Should cache subregions under the parent region's name")
36
+ end
37
+ end
@@ -0,0 +1,25 @@
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
+ @target_custom_methods = {"test_method" => Proc.new { |year| Date.civil(year, 1, 1) } }
10
+
11
+ @holidays_repo = mock()
12
+ @regions_repo = mock()
13
+ @custom_methods_repo = mock()
14
+
15
+ @subject = Holidays::Definition::Context::Merger.new(@holidays_repo, @regions_repo, @custom_methods_repo)
16
+ end
17
+
18
+ def test_repos_are_called_to_add_regions_and_holidays
19
+ @holidays_repo.expects(:add).with(@target_holidays)
20
+ @regions_repo.expects(:add).with(@target_regions)
21
+ @custom_methods_repo.expects(:add).with(@target_custom_methods)
22
+
23
+ @subject.call(@target_regions, @target_holidays, @target_custom_methods)
24
+ end
25
+ end
@@ -0,0 +1,113 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/../../../test_helper'
2
+
3
+ require 'holidays/definition/decorator/custom_method_proc'
4
+ require 'holidays/definition/entity/custom_method'
5
+
6
+ class DecoratorCustomMethodProcTests < Test::Unit::TestCase
7
+ def setup
8
+ @decorator = Holidays::Definition::Decorator::CustomMethodProc.new
9
+ end
10
+
11
+ def test_generates_lambda_from_entity
12
+ entity = Holidays::Definition::Entity::CustomMethod.new(
13
+ name: "test",
14
+ arguments: ["year"],
15
+ source: "Date.civil(year, 1, 1)"
16
+ )
17
+
18
+ proc = @decorator.call(entity)
19
+ expected_proc = Proc.new { |year| eval("Date.civil(year, 1, 1)") }
20
+
21
+ assert_equal expected_proc.call(2015), proc.call(2015)
22
+ end
23
+
24
+ def test_generates_lamba_from_entity_with_multiple_lines
25
+ entity = Holidays::Definition::Entity::CustomMethod.new(
26
+ name: "test",
27
+ arguments: ["year"],
28
+ source: "d = Date.civil(year, 1, 1)\nd + 2"
29
+ )
30
+
31
+ proc = @decorator.call(entity)
32
+ expected_proc = Proc.new { |year| eval("d = Date.civil(year, 1, 1)\nd + 2") }
33
+
34
+ assert_equal expected_proc.call(2015), proc.call(2015)
35
+ end
36
+
37
+ def test_generates_lamba_from_entity_with_multiple_arguments
38
+ entity = Holidays::Definition::Entity::CustomMethod.new(
39
+ name: "test",
40
+ arguments: ["year", "month"],
41
+ source: "Date.civil(year, month, 1)"
42
+ )
43
+
44
+ proc = @decorator.call(entity)
45
+ expected_proc = Proc.new { |year, month| eval("Date.civil(year, month, 1)") }
46
+
47
+ assert_equal expected_proc.call(2015, 6), proc.call(2015, 6)
48
+ end
49
+
50
+ def test_generate_returns_error_if_missing_name
51
+ entity = Holidays::Definition::Entity::CustomMethod.new(
52
+ arguments: ["year", "month"],
53
+ source: "Date.civil(year, month, 1)"
54
+ )
55
+
56
+ assert_raises ArgumentError do
57
+ @decorator.call(entity)
58
+ end
59
+
60
+ entity = Holidays::Definition::Entity::CustomMethod.new(
61
+ name: "",
62
+ arguments: ["year", "month"],
63
+ source: "Date.civil(year, month, 1)"
64
+ )
65
+
66
+ assert_raises ArgumentError do
67
+ @decorator.call(entity)
68
+ end
69
+ end
70
+
71
+ def test_generate_returns_error_if_arguments_is_missing
72
+ entity = Holidays::Definition::Entity::CustomMethod.new(
73
+ name: "test",
74
+ source: "Date.civil(year, month, 1)"
75
+ )
76
+
77
+ assert_raises ArgumentError do
78
+ @decorator.call(entity)
79
+ end
80
+
81
+ entity = Holidays::Definition::Entity::CustomMethod.new(
82
+ name: "test",
83
+ arguments: [],
84
+ source: "Date.civil(year, month, 1)"
85
+ )
86
+
87
+ assert_raises ArgumentError do
88
+ @decorator.call(entity)
89
+ end
90
+ end
91
+
92
+
93
+ def test_generate_returns_error_if_source_is_missing
94
+ entity = Holidays::Definition::Entity::CustomMethod.new(
95
+ name: "test",
96
+ arguments: ["year"],
97
+ )
98
+
99
+ assert_raises ArgumentError do
100
+ @decorator.call(entity)
101
+ end
102
+
103
+ entity = Holidays::Definition::Entity::CustomMethod.new(
104
+ name: "test",
105
+ arguments: ["year"],
106
+ source: "",
107
+ )
108
+
109
+ assert_raises ArgumentError do
110
+ @decorator.call(entity)
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,96 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/../../../test_helper'
2
+
3
+ require 'holidays/definition/decorator/custom_method_source'
4
+ require 'holidays/definition/entity/custom_method'
5
+
6
+ class DecoratorCustomMethodSourceTests < Test::Unit::TestCase
7
+ def setup
8
+ @decorator = Holidays::Definition::Decorator::CustomMethodSource.new
9
+ end
10
+
11
+ def test_call_generates_source_from_entity
12
+ entity = Holidays::Definition::Entity::CustomMethod.new(
13
+ name: "test",
14
+ arguments: ["year"],
15
+ source: "Date.civil(year, 1, 1)"
16
+ )
17
+
18
+ source = @decorator.call(entity)
19
+ expected_source = "\"#{entity.name}(#{entity.arguments[0]})\" => Proc.new { |year|\n#{entity.source}}"
20
+
21
+ assert_equal expected_source, source
22
+ end
23
+
24
+ def test_call_generates_source_from_entity_with_multiple_arguments
25
+ entity = Holidays::Definition::Entity::CustomMethod.new(
26
+ name: "test",
27
+ arguments: ["year", "month"],
28
+ source: "Date.civil(year, month, 1)"
29
+ )
30
+
31
+ source = @decorator.call(entity)
32
+ expected_args = "#{entity.arguments[0]}, #{entity.arguments[1]}"
33
+
34
+ expected_source = "\"#{entity.name}(#{expected_args})\" => Proc.new { |#{expected_args}|\n#{entity.source}}"
35
+
36
+ assert_equal expected_source, source
37
+ end
38
+
39
+ def test_call_generates_source_from_entity_when_source_is_multiple_lines
40
+ entity = Holidays::Definition::Entity::CustomMethod.new(
41
+ name: "test",
42
+ arguments: ["year"],
43
+ source: "d = Date.civil(year, 1, 1)\nd + 2"
44
+ )
45
+
46
+ source = @decorator.call(entity)
47
+ expected_source = "\"#{entity.name}(#{entity.arguments[0]})\" => Proc.new { |year|\n#{entity.source}}"
48
+
49
+ assert_equal expected_source, source
50
+ end
51
+
52
+ def test_call_raises_error_if_missing_name
53
+ entity = Holidays::Definition::Entity::CustomMethod.new(
54
+ arguments: ["year", "month"],
55
+ source: "Date.civil(year, month, 1)"
56
+ )
57
+
58
+ assert_raises ArgumentError do
59
+ @decorator.call(entity)
60
+ end
61
+ end
62
+
63
+ def test_call_raises_error_if_missing_arguments
64
+ entity = Holidays::Definition::Entity::CustomMethod.new(
65
+ name: "test",
66
+ source: "Date.civil(year, month, 1)"
67
+ )
68
+
69
+ assert_raises ArgumentError do
70
+ @decorator.call(entity)
71
+ end
72
+ end
73
+
74
+ def test_call_raises_error_if_arguments_is_not_an_array
75
+ entity = Holidays::Definition::Entity::CustomMethod.new(
76
+ name: "test",
77
+ arguments: "test",
78
+ source: "Date.civil(year, month, 1)"
79
+ )
80
+
81
+ assert_raises ArgumentError do
82
+ @decorator.call(entity)
83
+ end
84
+ end
85
+
86
+ def test_call_raises_error_if_missing_source
87
+ entity = Holidays::Definition::Entity::CustomMethod.new(
88
+ name: "test",
89
+ arguments: ["year", "month"],
90
+ )
91
+
92
+ assert_raises ArgumentError do
93
+ @decorator.call(entity)
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,123 @@
1
+ # Heh at this file name
2
+ require File.expand_path(File.dirname(__FILE__)) + '/../../../test_helper'
3
+
4
+ require 'holidays/definition/decorator/test'
5
+ require 'holidays/definition/entity/test'
6
+
7
+ class DecoratorTestTests < Test::Unit::TestCase
8
+ def setup
9
+ @decorator = Holidays::Definition::Decorator::Test.new
10
+ end
11
+
12
+ def test_call_generates_source_from_entity_single_date
13
+ entity = Holidays::Definition::Entity::Test.new(
14
+ :dates => [DateTime.parse('2016-01-01')],
15
+ :regions => [:us],
16
+ :name => 'Test Holiday',
17
+ :holiday? => true,
18
+ )
19
+
20
+ source = @decorator.call(entity)
21
+ expected_source = "assert_equal \"Test Holiday\", (Holidays.on(Date.civil(2016, 1, 1), [:us])[0] || {})[:name]\n"
22
+
23
+ assert_equal expected_source, source
24
+ end
25
+
26
+ def test_call_generates_source_from_entity_multiple_dates
27
+ entity = Holidays::Definition::Entity::Test.new(
28
+ :dates => [DateTime.parse('2016-01-01'), DateTime.parse('2017-01-01')],
29
+ :regions => [:us],
30
+ :name => 'Test Holiday',
31
+ :holiday? => true
32
+ )
33
+
34
+ source = @decorator.call(entity)
35
+ expected_source = "assert_equal \"Test Holiday\", (Holidays.on(Date.civil(2016, 1, 1), [:us])[0] || {})[:name]\nassert_equal \"Test Holiday\", (Holidays.on(Date.civil(2017, 1, 1), [:us])[0] || {})[:name]\n"
36
+
37
+ assert_equal expected_source, source
38
+ end
39
+
40
+ def test_call_generates_source_from_entity_single_date_with_options
41
+ entity = Holidays::Definition::Entity::Test.new(
42
+ :dates => [DateTime.parse('2016-01-01')],
43
+ :regions => [:us],
44
+ :options => ['option1'],
45
+ :name => 'Test Holiday',
46
+ :holiday? => true,
47
+ )
48
+
49
+ source = @decorator.call(entity)
50
+ expected_source = "assert_equal \"Test Holiday\", (Holidays.on(Date.civil(2016, 1, 1), [:us], [:option1])[0] || {})[:name]\n"
51
+
52
+ assert_equal expected_source, source
53
+ end
54
+
55
+ def test_call_generates_source_from_entity_single_date_with_holiday_flag
56
+ entity = Holidays::Definition::Entity::Test.new(
57
+ :dates => [DateTime.parse('2016-01-01')],
58
+ :regions => [:us],
59
+ :holiday? => false,
60
+ )
61
+
62
+ source = @decorator.call(entity)
63
+ expected_source = "assert_nil (Holidays.on(Date.civil(2016, 1, 1), [:us])[0] || {})[:name]\n"
64
+
65
+ assert_equal expected_source, source
66
+ end
67
+
68
+ def test_call_generates_source_from_entity_single_date_multiple_regions
69
+ entity = Holidays::Definition::Entity::Test.new(
70
+ :dates => [DateTime.parse('2016-01-01')],
71
+ :regions => [:us, :us_ca, :ca],
72
+ :name => 'Test Holiday',
73
+ :holiday? => true,
74
+ )
75
+
76
+ source = @decorator.call(entity)
77
+ expected_source = "assert_equal \"Test Holiday\", (Holidays.on(Date.civil(2016, 1, 1), [:us, :us_ca, :ca])[0] || {})[:name]\n"
78
+
79
+ assert_equal expected_source, source
80
+ end
81
+
82
+ def test_call_generates_source_from_entity_multiple_dates_multiple_regions
83
+ entity = Holidays::Definition::Entity::Test.new(
84
+ :dates => [DateTime.parse('2016-01-01'), DateTime.parse('2017-01-01')],
85
+ :regions => [:us, :us_ca, :ca],
86
+ :name => 'Test Holiday',
87
+ :holiday? => true,
88
+ )
89
+
90
+ source = @decorator.call(entity)
91
+ expected_source = "assert_equal \"Test Holiday\", (Holidays.on(Date.civil(2016, 1, 1), [:us, :us_ca, :ca])[0] || {})[:name]\nassert_equal \"Test Holiday\", (Holidays.on(Date.civil(2017, 1, 1), [:us, :us_ca, :ca])[0] || {})[:name]\n"
92
+
93
+ assert_equal expected_source, source
94
+ end
95
+
96
+ def test_call_generates_source_from_entity_multiple_dates_multiple_regions_holiday_flag_false
97
+ entity = Holidays::Definition::Entity::Test.new(
98
+ :dates => [DateTime.parse('2016-01-01'), DateTime.parse('2017-01-01')],
99
+ :regions => [:us, :us_ca, :ca],
100
+ :name => 'Test Holiday',
101
+ :holiday? => false,
102
+ )
103
+
104
+ source = @decorator.call(entity)
105
+ expected_source = "assert_nil (Holidays.on(Date.civil(2016, 1, 1), [:us, :us_ca, :ca])[0] || {})[:name]\nassert_nil (Holidays.on(Date.civil(2017, 1, 1), [:us, :us_ca, :ca])[0] || {})[:name]\n"
106
+
107
+ assert_equal expected_source, source
108
+ end
109
+
110
+ def test_call_generates_source_from_entity_single_date_multiple_regions_holiday_flag_false
111
+ entity = Holidays::Definition::Entity::Test.new(
112
+ :dates => [DateTime.parse('2016-01-01')],
113
+ :regions => [:us, :us_ca, :ca],
114
+ :name => 'Test Holiday',
115
+ :holiday? => false,
116
+ )
117
+
118
+ source = @decorator.call(entity)
119
+ expected_source = "assert_nil (Holidays.on(Date.civil(2016, 1, 1), [:us, :us_ca, :ca])[0] || {})[:name]\n"
120
+
121
+ assert_equal expected_source, source
122
+ end
123
+ end