@studyportals/fawkes 8.7.0 → 8.7.1-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 (520) hide show
  1. package/dist/organisations-seo/index.d.ts +3 -3
  2. package/dist/organisations-seo/index.js +1 -1
  3. package/dist/programmes-seo/index.d.ts +5 -5
  4. package/dist/programmes-seo/index.js +1 -1
  5. package/dist/scholarships-seo/index.d.ts +4 -4
  6. package/dist/scholarships-seo/index.js +2 -2
  7. package/dist/sitemap-generator-seo/index.d.ts +14 -14
  8. package/dist/sitemap-generator-seo/index.js +5 -5
  9. package/dist/src/common/IDependencies.d.ts +1 -1
  10. package/dist/src/common/IPresenter.d.ts +1 -1
  11. package/dist/src/common/ISearchDependencies.d.ts +1 -1
  12. package/dist/src/common/ISeoDependencies.d.ts +2 -2
  13. package/dist/src/common/ISitemapDependencies.d.ts +2 -2
  14. package/dist/src/common/ISitemapUrlGenerator.d.ts +1 -1
  15. package/dist/src/common/policies/BaseSeoIndexabilityPolicy.d.ts +1 -1
  16. package/dist/src/common/policies/BaseSeoIndexabilityPolicy.js +2 -2
  17. package/dist/src/common/rules/NoFiltersSelectedRule.d.ts +2 -2
  18. package/dist/src/common/rules/OnlineAttendanceRule.d.ts +1 -1
  19. package/dist/src/common/rules/OnlineAttendanceRule.js +1 -1
  20. package/dist/src/common/rules/OnlyFiltersSelectedRule.d.ts +2 -2
  21. package/dist/src/common/rules/SingleValueSelectedForFilterRule.d.ts +2 -2
  22. package/dist/src/organisations/IOrganisationSearchApplicationState.d.ts +1 -1
  23. package/dist/src/organisations/ISeoSortingState.d.ts +1 -1
  24. package/dist/src/organisations/SearchIndexabilityManager.d.ts +4 -4
  25. package/dist/src/organisations/SearchIndexabilityManager.js +2 -2
  26. package/dist/src/organisations/policies/OrganisationsSeoIndexabilityPolicy.d.ts +3 -3
  27. package/dist/src/organisations/policies/OrganisationsSeoIndexabilityPolicy.js +3 -3
  28. package/dist/src/organisations/policies/RankedOrganisationsSeoIndexabilityPolicy.d.ts +1 -1
  29. package/dist/src/organisations/policies/RankedOrganisationsSeoIndexabilityPolicy.js +1 -1
  30. package/dist/src/organisations/policies/our-picks/Area.d.ts +5 -5
  31. package/dist/src/organisations/policies/our-picks/Area.js +6 -6
  32. package/dist/src/organisations/policies/our-picks/AreaAttendance.d.ts +7 -7
  33. package/dist/src/organisations/policies/our-picks/AreaAttendance.js +9 -9
  34. package/dist/src/organisations/policies/our-picks/Attendance.d.ts +6 -6
  35. package/dist/src/organisations/policies/our-picks/Attendance.js +7 -7
  36. package/dist/src/organisations/policies/our-picks/Continent.d.ts +5 -5
  37. package/dist/src/organisations/policies/our-picks/Continent.js +6 -6
  38. package/dist/src/organisations/policies/our-picks/Country.d.ts +5 -5
  39. package/dist/src/organisations/policies/our-picks/Country.js +6 -6
  40. package/dist/src/organisations/policies/our-picks/CountryAreaCity.d.ts +6 -6
  41. package/dist/src/organisations/policies/our-picks/CountryAreaCity.js +7 -7
  42. package/dist/src/organisations/policies/our-picks/CountryAttendance.d.ts +7 -7
  43. package/dist/src/organisations/policies/our-picks/CountryAttendance.js +9 -9
  44. package/dist/src/organisations/policies/our-picks/CountryCity.d.ts +6 -6
  45. package/dist/src/organisations/policies/our-picks/CountryCity.js +7 -7
  46. package/dist/src/organisations/policies/our-picks/Unfiltered.d.ts +4 -4
  47. package/dist/src/organisations/policies/our-picks/Unfiltered.js +4 -4
  48. package/dist/src/organisations/policies/ranked/RankedArea.d.ts +4 -4
  49. package/dist/src/organisations/policies/ranked/RankedArea.js +4 -4
  50. package/dist/src/organisations/policies/ranked/RankedAreaDiscipline.d.ts +5 -5
  51. package/dist/src/organisations/policies/ranked/RankedAreaDiscipline.js +6 -6
  52. package/dist/src/organisations/policies/ranked/RankedAttendance.d.ts +5 -5
  53. package/dist/src/organisations/policies/ranked/RankedAttendance.js +5 -5
  54. package/dist/src/organisations/policies/ranked/RankedAttendanceDiscipline.d.ts +5 -5
  55. package/dist/src/organisations/policies/ranked/RankedAttendanceDiscipline.js +6 -6
  56. package/dist/src/organisations/policies/ranked/RankedContinent.d.ts +4 -4
  57. package/dist/src/organisations/policies/ranked/RankedContinent.js +4 -4
  58. package/dist/src/organisations/policies/ranked/RankedContinentAttendance.d.ts +6 -6
  59. package/dist/src/organisations/policies/ranked/RankedContinentAttendance.js +7 -7
  60. package/dist/src/organisations/policies/ranked/RankedCountry.d.ts +4 -4
  61. package/dist/src/organisations/policies/ranked/RankedCountry.js +4 -4
  62. package/dist/src/organisations/policies/ranked/RankedCountryAttendance.d.ts +5 -5
  63. package/dist/src/organisations/policies/ranked/RankedCountryAttendance.js +6 -6
  64. package/dist/src/organisations/policies/ranked/RankedCountryDiscipline.d.ts +4 -4
  65. package/dist/src/organisations/policies/ranked/RankedCountryDiscipline.js +5 -5
  66. package/dist/src/organisations/policies/ranked/RankedDiscipline.d.ts +4 -4
  67. package/dist/src/organisations/policies/ranked/RankedDiscipline.js +4 -4
  68. package/dist/src/organisations/policies/ranked/RankedUnfiltered.d.ts +3 -3
  69. package/dist/src/organisations/policies/ranked/RankedUnfiltered.js +2 -2
  70. package/dist/src/organisations/rules/BaseSearchVolumeOrganisationsRule.d.ts +3 -3
  71. package/dist/src/organisations/rules/ContinentIsEuropeRule.d.ts +1 -1
  72. package/dist/src/organisations/rules/ContinentIsEuropeRule.js +1 -1
  73. package/dist/src/organisations/rules/ExcludeByIdForCitiesRule.d.ts +3 -3
  74. package/dist/src/organisations/rules/MinimumAmountOfRankedResultsRule.d.ts +3 -3
  75. package/dist/src/organisations/rules/MinimumAmountOfRankedResultsRule.js +1 -1
  76. package/dist/src/organisations/rules/MinimumAmountOfResultsRule.d.ts +4 -4
  77. package/dist/src/organisations/rules/MinimumAmountOfResultsRule.js +1 -1
  78. package/dist/src/organisations/rules/NoFiltersSelectedRule.d.ts +2 -2
  79. package/dist/src/organisations/types/IOrganisationSearchDependencies.d.ts +2 -2
  80. package/dist/src/organisations/types/IOrganisationsSitemapDependencies.d.ts +3 -3
  81. package/dist/src/presenters/AreaPresenter.d.ts +1 -1
  82. package/dist/src/presenters/AttendancePresenter.d.ts +1 -1
  83. package/dist/src/presenters/CityPresenter.d.ts +1 -1
  84. package/dist/src/presenters/ContinentPresenter.d.ts +1 -1
  85. package/dist/src/presenters/CountryPresenter.d.ts +1 -1
  86. package/dist/src/presenters/DegreePresenter.d.ts +1 -1
  87. package/dist/src/presenters/DisciplinePresenter.d.ts +1 -1
  88. package/dist/src/presenters/DurationPresenter.d.ts +1 -1
  89. package/dist/src/presenters/EducationalFormPresenter.d.ts +1 -1
  90. package/dist/src/presenters/FormatPresenter.d.ts +1 -1
  91. package/dist/src/presenters/SpecialProgrammesPresenter.d.ts +1 -1
  92. package/dist/src/presenters/TuitionFeePresenter.d.ts +1 -1
  93. package/dist/src/programmes/BaseProgrammeFilterKeyValueRule.d.ts +2 -2
  94. package/dist/src/programmes/BaseProgrammeFilterKeyValueRule.js +1 -1
  95. package/dist/src/programmes/BaseProgrammeRule.d.ts +2 -2
  96. package/dist/src/programmes/IProgrammeRule.d.ts +2 -2
  97. package/dist/src/programmes/ProgrammesBaseIndexabilityPolicy.d.ts +3 -3
  98. package/dist/src/programmes/ProgrammesBaseIndexabilityPolicy.js +1 -1
  99. package/dist/src/programmes/SearchIndexabilityManager.d.ts +4 -4
  100. package/dist/src/programmes/SearchIndexabilityManager.js +8 -4
  101. package/dist/src/programmes/policies/Area.d.ts +3 -3
  102. package/dist/src/programmes/policies/Area.js +4 -4
  103. package/dist/src/programmes/policies/Attendance.d.ts +4 -4
  104. package/dist/src/programmes/policies/Attendance.js +5 -5
  105. package/dist/src/programmes/policies/AttendanceArea.d.ts +4 -4
  106. package/dist/src/programmes/policies/AttendanceArea.js +6 -6
  107. package/dist/src/programmes/policies/AttendanceContinent.d.ts +4 -4
  108. package/dist/src/programmes/policies/AttendanceContinent.js +6 -6
  109. package/dist/src/programmes/policies/AttendanceDegree.d.ts +2 -2
  110. package/dist/src/programmes/policies/AttendanceDegree.js +5 -5
  111. package/dist/src/programmes/policies/AttendanceDuration.d.ts +5 -5
  112. package/dist/src/programmes/policies/AttendanceDuration.js +7 -7
  113. package/dist/src/programmes/policies/AttendanceFormat.d.ts +4 -4
  114. package/dist/src/programmes/policies/AttendanceFormat.js +6 -6
  115. package/dist/src/programmes/policies/Continent.d.ts +3 -3
  116. package/dist/src/programmes/policies/Continent.js +4 -4
  117. package/dist/src/programmes/policies/ContinentDuration.d.ts +3 -3
  118. package/dist/src/programmes/policies/ContinentDuration.js +5 -5
  119. package/dist/src/programmes/policies/ContinentFormat.d.ts +3 -3
  120. package/dist/src/programmes/policies/ContinentFormat.js +5 -5
  121. package/dist/src/programmes/policies/ContinentSpecialProgrammes.d.ts +4 -4
  122. package/dist/src/programmes/policies/ContinentSpecialProgrammes.js +6 -6
  123. package/dist/src/programmes/policies/Country.d.ts +3 -3
  124. package/dist/src/programmes/policies/Country.js +4 -4
  125. package/dist/src/programmes/policies/CountryAttendance.d.ts +4 -4
  126. package/dist/src/programmes/policies/CountryAttendance.js +6 -6
  127. package/dist/src/programmes/policies/CountryAttendanceDegree.d.ts +4 -4
  128. package/dist/src/programmes/policies/CountryAttendanceDegree.js +7 -7
  129. package/dist/src/programmes/policies/CountryDegree.d.ts +2 -2
  130. package/dist/src/programmes/policies/CountryDegree.js +5 -5
  131. package/dist/src/programmes/policies/CountryDuration.d.ts +3 -3
  132. package/dist/src/programmes/policies/CountryDuration.js +5 -5
  133. package/dist/src/programmes/policies/CountryDurationDegree.d.ts +3 -3
  134. package/dist/src/programmes/policies/CountryDurationDegree.js +6 -6
  135. package/dist/src/programmes/policies/CountryEducationalForm.d.ts +2 -2
  136. package/dist/src/programmes/policies/CountryEducationalForm.js +5 -5
  137. package/dist/src/programmes/policies/CountryFormat.d.ts +3 -3
  138. package/dist/src/programmes/policies/CountryFormat.js +5 -5
  139. package/dist/src/programmes/policies/CountrySpecialProgrammes.d.ts +4 -4
  140. package/dist/src/programmes/policies/CountrySpecialProgrammes.js +6 -6
  141. package/dist/src/programmes/policies/Degree.d.ts +3 -3
  142. package/dist/src/programmes/policies/Degree.js +4 -4
  143. package/dist/src/programmes/policies/DegreeArea.d.ts +3 -3
  144. package/dist/src/programmes/policies/DegreeArea.js +5 -5
  145. package/dist/src/programmes/policies/DegreeAttendanceDiscipline.d.ts +4 -4
  146. package/dist/src/programmes/policies/DegreeAttendanceDiscipline.js +7 -7
  147. package/dist/src/programmes/policies/DegreeAttendanceFormat.d.ts +4 -4
  148. package/dist/src/programmes/policies/DegreeAttendanceFormat.js +7 -7
  149. package/dist/src/programmes/policies/DegreeAttendanceSpecialProgrammes.d.ts +4 -4
  150. package/dist/src/programmes/policies/DegreeAttendanceSpecialProgrammes.js +7 -7
  151. package/dist/src/programmes/policies/DegreeContinent.d.ts +2 -2
  152. package/dist/src/programmes/policies/DegreeContinent.js +5 -5
  153. package/dist/src/programmes/policies/DegreeCountryAttendance.d.ts +3 -3
  154. package/dist/src/programmes/policies/DegreeCountryAttendance.js +6 -6
  155. package/dist/src/programmes/policies/DegreeCountryDiscipline.d.ts +3 -3
  156. package/dist/src/programmes/policies/DegreeCountryDiscipline.js +6 -6
  157. package/dist/src/programmes/policies/DegreeCountryTuitionFee.d.ts +3 -3
  158. package/dist/src/programmes/policies/DegreeCountryTuitionFee.js +6 -6
  159. package/dist/src/programmes/policies/DegreeDuration.d.ts +2 -2
  160. package/dist/src/programmes/policies/DegreeDuration.js +5 -5
  161. package/dist/src/programmes/policies/DegreeFormat.d.ts +2 -2
  162. package/dist/src/programmes/policies/DegreeFormat.js +5 -5
  163. package/dist/src/programmes/policies/DegreeSpecialProgrammes.d.ts +3 -3
  164. package/dist/src/programmes/policies/DegreeSpecialProgrammes.js +5 -5
  165. package/dist/src/programmes/policies/DegreeTuitionFee.d.ts +3 -3
  166. package/dist/src/programmes/policies/DegreeTuitionFee.js +5 -5
  167. package/dist/src/programmes/policies/{DisciplineTuitionFee.d.ts → DegreeTuitionFeeArea.d.ts} +5 -5
  168. package/dist/src/programmes/policies/{DegreeAreaTuitionFee.js → DegreeTuitionFeeArea.js} +7 -7
  169. package/dist/src/programmes/policies/{DegreeAttendanceTuitionFee.d.ts → DegreeTuitionFeeAttendance.d.ts} +2 -2
  170. package/dist/src/programmes/policies/{DegreeAttendanceTuitionFee.js → DegreeTuitionFeeAttendance.js} +7 -7
  171. package/dist/src/programmes/policies/{DegreeContinentTuitionFee.d.ts → DegreeTuitionFeeContinent.d.ts} +2 -2
  172. package/dist/src/programmes/policies/{DegreeContinentTuitionFee.js → DegreeTuitionFeeContinent.js} +6 -6
  173. package/dist/src/programmes/policies/{DegreeFormatTuitionFee.d.ts → DegreeTuitionFeeFormat.d.ts} +3 -3
  174. package/dist/src/programmes/policies/{DegreeFormatTuitionFee.js → DegreeTuitionFeeFormat.js} +9 -9
  175. package/dist/src/programmes/policies/Discipline.d.ts +3 -3
  176. package/dist/src/programmes/policies/Discipline.js +4 -4
  177. package/dist/src/programmes/policies/DisciplineAttendance.d.ts +4 -4
  178. package/dist/src/programmes/policies/DisciplineAttendance.js +6 -6
  179. package/dist/src/programmes/policies/DisciplineContinent.d.ts +3 -3
  180. package/dist/src/programmes/policies/DisciplineContinent.js +5 -5
  181. package/dist/src/programmes/policies/DisciplineContinentAttendance.d.ts +4 -4
  182. package/dist/src/programmes/policies/DisciplineContinentAttendance.js +7 -7
  183. package/dist/src/programmes/policies/DisciplineCountry.d.ts +3 -3
  184. package/dist/src/programmes/policies/DisciplineCountry.js +5 -5
  185. package/dist/src/programmes/policies/DisciplineCountryAttendance.d.ts +4 -4
  186. package/dist/src/programmes/policies/DisciplineCountryAttendance.js +7 -7
  187. package/dist/src/programmes/policies/DisciplineCountryEducationalForm.d.ts +2 -2
  188. package/dist/src/programmes/policies/DisciplineCountryEducationalForm.js +6 -6
  189. package/dist/src/programmes/policies/DisciplineCountryFormat.d.ts +3 -3
  190. package/dist/src/programmes/policies/DisciplineCountryFormat.js +6 -6
  191. package/dist/src/programmes/policies/DisciplineDegree.d.ts +3 -3
  192. package/dist/src/programmes/policies/DisciplineDegree.js +5 -5
  193. package/dist/src/programmes/policies/DisciplineDuration.d.ts +3 -3
  194. package/dist/src/programmes/policies/DisciplineDuration.js +5 -5
  195. package/dist/src/programmes/policies/DisciplineEducationalForm.d.ts +2 -2
  196. package/dist/src/programmes/policies/DisciplineEducationalForm.js +5 -5
  197. package/dist/src/programmes/policies/DisciplineFormat.d.ts +3 -3
  198. package/dist/src/programmes/policies/DisciplineFormat.js +5 -5
  199. package/dist/src/programmes/policies/DisciplineSpecialProgrammes.d.ts +3 -3
  200. package/dist/src/programmes/policies/DisciplineSpecialProgrammes.js +5 -5
  201. package/dist/src/programmes/policies/Duration.d.ts +3 -3
  202. package/dist/src/programmes/policies/Duration.js +4 -4
  203. package/dist/src/programmes/policies/Format.d.ts +3 -3
  204. package/dist/src/programmes/policies/Format.js +4 -4
  205. package/dist/src/programmes/policies/SpecialProgrammes.d.ts +3 -3
  206. package/dist/src/programmes/policies/SpecialProgrammes.js +4 -4
  207. package/dist/src/programmes/policies/TuitionFee.d.ts +3 -3
  208. package/dist/src/programmes/policies/TuitionFee.js +4 -4
  209. package/dist/src/programmes/policies/TuitionFeeAttendance.d.ts +4 -4
  210. package/dist/src/programmes/policies/TuitionFeeAttendance.js +6 -6
  211. package/dist/src/programmes/policies/TuitionFeeAttendanceDiscipline.d.ts +4 -4
  212. package/dist/src/programmes/policies/TuitionFeeAttendanceDiscipline.js +7 -7
  213. package/dist/src/programmes/policies/TuitionFeeContinent.d.ts +3 -3
  214. package/dist/src/programmes/policies/TuitionFeeContinent.js +5 -5
  215. package/dist/src/programmes/policies/TuitionFeeCountry.d.ts +3 -3
  216. package/dist/src/programmes/policies/TuitionFeeCountry.js +5 -5
  217. package/dist/src/programmes/policies/TuitionFeeDiscipline.d.ts +3 -3
  218. package/dist/src/programmes/policies/TuitionFeeDiscipline.js +5 -5
  219. package/dist/src/programmes/policies/Unfiltered.d.ts +2 -2
  220. package/dist/src/programmes/policies/Unfiltered.js +2 -2
  221. package/dist/src/programmes/policies/index.d.ts +4 -5
  222. package/dist/src/programmes/policies/index.js +4 -5
  223. package/dist/src/programmes/rules/DegreeAttendanceDisciplineRule.d.ts +2 -2
  224. package/dist/src/programmes/rules/DegreeAttendanceDisciplineSpecificRule.d.ts +2 -2
  225. package/dist/src/programmes/rules/DegreeCountryAttendanceSpecificRule.d.ts +2 -2
  226. package/dist/src/programmes/rules/DegreeCountryDisciplineSpecificRule.d.ts +2 -2
  227. package/dist/src/programmes/rules/DegreeCountryTuitionFeeSpecificRule.d.ts +2 -2
  228. package/dist/src/programmes/rules/DegreeDisciplineRule.d.ts +2 -2
  229. package/dist/src/programmes/rules/IndexableDegreeRule.d.ts +2 -2
  230. package/dist/src/programmes/rules/IndexableDegreeRule.js +1 -1
  231. package/dist/src/programmes/rules/IndexableDurationRule.d.ts +2 -2
  232. package/dist/src/programmes/rules/IndexableDurationRule.js +1 -1
  233. package/dist/src/programmes/rules/IndexableEducationalFormRule.d.ts +2 -2
  234. package/dist/src/programmes/rules/IndexableEducationalFormRule.js +1 -1
  235. package/dist/src/programmes/rules/IndexablePageNumberRule.js +1 -1
  236. package/dist/src/programmes/rules/MbaOrMscDegreeRule.d.ts +2 -2
  237. package/dist/src/programmes/rules/MinimumAmountOfResultsRule.d.ts +3 -3
  238. package/dist/src/programmes/rules/MinimumAmountOfResultsRule.js +1 -1
  239. package/dist/src/programmes/rules/NotDistanceLearningPortalRule.js +1 -1
  240. package/dist/src/programmes/rules/OneYearOnlyRule.d.ts +2 -2
  241. package/dist/src/programmes/types/IProgrammeSearchApplicationState.d.ts +1 -1
  242. package/dist/src/programmes/types/IProgrammeSearchDependencies.d.ts +1 -1
  243. package/dist/src/programmes/types/IProgrammeSearchSitemapDependencies.d.ts +1 -1
  244. package/dist/src/programmes/types/IProgrammeSitemapDependencies.d.ts +2 -2
  245. package/dist/src/programmes/types/IProgrammeSitemapUrlGenerator.d.ts +1 -1
  246. package/dist/src/scholarships/SearchIndexabilityManager.d.ts +5 -5
  247. package/dist/src/scholarships/SearchIndexabilityManager.js +1 -1
  248. package/dist/src/scholarships/policies/Area.d.ts +3 -3
  249. package/dist/src/scholarships/policies/Area.js +4 -4
  250. package/dist/src/scholarships/policies/Country.d.ts +3 -3
  251. package/dist/src/scholarships/policies/Country.js +4 -4
  252. package/dist/src/scholarships/policies/Discipline.d.ts +4 -4
  253. package/dist/src/scholarships/policies/Discipline.js +5 -5
  254. package/dist/src/scholarships/policies/DisciplineCountry.d.ts +3 -3
  255. package/dist/src/scholarships/policies/DisciplineCountry.js +5 -5
  256. package/dist/src/scholarships/policies/ScholarshipSeoIndexabilityPolicy.d.ts +2 -2
  257. package/dist/src/scholarships/policies/ScholarshipSeoIndexabilityPolicy.js +2 -2
  258. package/dist/src/scholarships/policies/Unfiltered.d.ts +2 -2
  259. package/dist/src/scholarships/policies/Unfiltered.js +2 -2
  260. package/dist/src/scholarships/policies/UniversityCountry.d.ts +3 -3
  261. package/dist/src/scholarships/policies/UniversityCountry.js +4 -4
  262. package/dist/src/scholarships/rules/ExceptAustaliaAreasRule.d.ts +3 -3
  263. package/dist/src/scholarships/rules/ExceptAustaliaAreasRule.js +1 -1
  264. package/dist/src/scholarships/rules/SearchVolumeAreasRule.d.ts +3 -3
  265. package/dist/src/scholarships/rules/SearchVolumeCountriesDisciplinesRule.d.ts +3 -3
  266. package/dist/src/scholarships/rules/SearchVolumeCountriesRule.d.ts +3 -3
  267. package/dist/src/scholarships/rules/SearchVolumeDisciplinesRule.d.ts +3 -3
  268. package/dist/src/scholarships/types/IScholarshipSeoDependencies.d.ts +1 -1
  269. package/dist/src/scholarships/types/IScholarshipSitemapDependencies.d.ts +2 -2
  270. package/dist/src/sitemap-generator/BaseSitemapUrlGeneratorManager.d.ts +3 -3
  271. package/dist/src/sitemap-generator/IRankingApiClient.d.ts +1 -1
  272. package/dist/src/sitemap-generator/ISearchApiClient.d.ts +1 -1
  273. package/dist/src/sitemap-generator/ISitemapUrlGeneratorManager.d.ts +3 -3
  274. package/dist/src/sitemap-generator/OrganisationsSitemapUrlGeneratorManager.d.ts +4 -4
  275. package/dist/src/sitemap-generator/OrganisationsSitemapUrlGeneratorManager.js +8 -8
  276. package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.d.ts +3 -3
  277. package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.js +15 -15
  278. package/dist/src/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager.d.ts +3 -3
  279. package/dist/src/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager.js +7 -7
  280. package/dist/src/structured-data/OrganisationStructuredDataFactory.d.ts +1 -1
  281. package/dist/src/structured-data/ProgrammeStructuredDataFactory.d.ts +1 -1
  282. package/dist/tests/common/rules/NoFiltersSelectedRule.test.d.mts +1 -0
  283. package/dist/tests/common/rules/NoFiltersSelectedRule.test.mjs +40 -0
  284. package/dist/tests/common/rules/OnlyFiltersSelectedRule.test.d.mts +1 -0
  285. package/dist/tests/common/rules/OnlyFiltersSelectedRule.test.mjs +70 -0
  286. package/dist/tests/common/rules/SingleValueSelectedForFilterRule.test.d.mts +1 -0
  287. package/dist/tests/common/rules/SingleValueSelectedForFilterRule.test.mjs +54 -0
  288. package/dist/tests/organisations/policies/our-picks/Area.test.d.mts +1 -0
  289. package/dist/tests/organisations/policies/our-picks/Area.test.mjs +125 -0
  290. package/dist/tests/organisations/policies/our-picks/AreaAttendance.test.d.mts +1 -0
  291. package/dist/tests/organisations/policies/our-picks/AreaAttendance.test.mjs +238 -0
  292. package/dist/tests/organisations/policies/our-picks/Attendance.test.d.mts +1 -0
  293. package/dist/tests/organisations/policies/our-picks/Attendance.test.mjs +119 -0
  294. package/dist/tests/organisations/policies/our-picks/Continent.test.d.mts +1 -0
  295. package/dist/tests/organisations/policies/our-picks/Continent.test.mjs +105 -0
  296. package/dist/tests/organisations/policies/our-picks/Country.test.d.mts +1 -0
  297. package/dist/tests/organisations/policies/our-picks/Country.test.mjs +109 -0
  298. package/dist/tests/organisations/policies/our-picks/CountryAreaCity.test.d.mts +1 -0
  299. package/dist/tests/organisations/policies/our-picks/CountryAreaCity.test.mjs +152 -0
  300. package/dist/tests/organisations/policies/our-picks/CountryAttendance.test.d.mts +1 -0
  301. package/dist/tests/organisations/policies/our-picks/CountryAttendance.test.mjs +223 -0
  302. package/dist/tests/organisations/policies/our-picks/CountryCity.test.d.mts +1 -0
  303. package/dist/tests/organisations/policies/our-picks/CountryCity.test.mjs +109 -0
  304. package/dist/tests/organisations/policies/our-picks/Unfiltered.test.d.mts +1 -0
  305. package/dist/tests/organisations/policies/our-picks/Unfiltered.test.mjs +60 -0
  306. package/dist/tests/organisations/policies/ranked/RankedArea.test.d.mts +1 -0
  307. package/dist/tests/organisations/policies/ranked/RankedArea.test.mjs +149 -0
  308. package/dist/tests/organisations/policies/ranked/RankedAreaDiscipline.test.d.mts +1 -0
  309. package/dist/tests/organisations/policies/ranked/RankedAreaDiscipline.test.mjs +237 -0
  310. package/dist/tests/organisations/policies/ranked/RankedAttendance.test.d.mts +1 -0
  311. package/dist/tests/organisations/policies/ranked/RankedAttendance.test.mjs +139 -0
  312. package/dist/tests/organisations/policies/ranked/RankedAttendanceDiscipline.test.d.mts +1 -0
  313. package/dist/tests/organisations/policies/ranked/RankedAttendanceDiscipline.test.mjs +224 -0
  314. package/dist/tests/organisations/policies/ranked/RankedContinent.test.d.mts +1 -0
  315. package/dist/tests/organisations/policies/ranked/RankedContinent.test.mjs +125 -0
  316. package/dist/tests/organisations/policies/ranked/RankedContinentAttendance.test.d.mts +1 -0
  317. package/dist/tests/organisations/policies/ranked/RankedContinentAttendance.test.mjs +253 -0
  318. package/dist/tests/organisations/policies/ranked/RankedCountry.test.d.mts +1 -0
  319. package/dist/tests/organisations/policies/ranked/RankedCountry.test.mjs +131 -0
  320. package/dist/tests/organisations/policies/ranked/RankedCountryAttendance.test.d.mts +1 -0
  321. package/dist/tests/organisations/policies/ranked/RankedCountryAttendance.test.mjs +230 -0
  322. package/dist/tests/organisations/policies/ranked/RankedCountryDiscipline.test.d.mts +1 -0
  323. package/dist/tests/organisations/policies/ranked/RankedCountryDiscipline.test.mjs +197 -0
  324. package/dist/tests/organisations/policies/ranked/RankedDiscipline.test.d.mts +1 -0
  325. package/dist/tests/organisations/policies/ranked/RankedDiscipline.test.mjs +124 -0
  326. package/dist/tests/organisations/policies/ranked/RankedUnfiltered.test.d.mts +1 -0
  327. package/dist/tests/organisations/policies/ranked/RankedUnfiltered.test.mjs +75 -0
  328. package/dist/tests/organisations/rules/ContinentIsEuropeRule.test.d.mts +1 -0
  329. package/dist/tests/organisations/rules/ContinentIsEuropeRule.test.mjs +59 -0
  330. package/dist/tests/organisations/rules/MinimumAmountOfRankedResultsRule.test.d.mts +1 -0
  331. package/dist/tests/organisations/rules/MinimumAmountOfRankedResultsRule.test.mjs +77 -0
  332. package/dist/tests/organisations/rules/MinimumAmountOfResultsRule.test.d.mts +1 -0
  333. package/dist/tests/organisations/rules/MinimumAmountOfResultsRule.test.mjs +77 -0
  334. package/dist/tests/organisations/rules/OnlineAttendanceRule.test.d.mts +1 -0
  335. package/dist/tests/organisations/rules/OnlineAttendanceRule.test.mjs +59 -0
  336. package/dist/tests/organisations/rules/SearchVolumeAreasAttendanceRule.test.d.mts +1 -0
  337. package/dist/tests/organisations/rules/SearchVolumeAreasAttendanceRule.test.mjs +59 -0
  338. package/dist/tests/organisations/rules/SearchVolumeAreasDisciplineRule.test.d.mts +1 -0
  339. package/dist/tests/organisations/rules/SearchVolumeAreasDisciplineRule.test.mjs +59 -0
  340. package/dist/tests/organisations/rules/SearchVolumeCountriesAttendanceRule.test.d.mts +1 -0
  341. package/dist/tests/organisations/rules/SearchVolumeCountriesAttendanceRule.test.mjs +59 -0
  342. package/dist/tests/organisations/utils/SearchDependencies.util.d.mts +20 -0
  343. package/dist/tests/organisations/utils/SearchDependencies.util.mjs +88 -0
  344. package/dist/tests/organisations/utils/SitemapDependencies.util.d.mts +18 -0
  345. package/dist/tests/organisations/utils/SitemapDependencies.util.mjs +54 -0
  346. package/dist/tests/presenters/AreaPresenter.test.d.mts +1 -0
  347. package/dist/tests/presenters/AreaPresenter.test.mjs +46 -0
  348. package/dist/tests/presenters/AttendancePresenter.test.d.mts +1 -0
  349. package/dist/tests/presenters/AttendancePresenter.test.mjs +41 -0
  350. package/dist/tests/presenters/ContinentPresenter.test.d.mts +1 -0
  351. package/dist/tests/presenters/ContinentPresenter.test.mjs +44 -0
  352. package/dist/tests/presenters/CountryPresenter.test.d.mts +1 -0
  353. package/dist/tests/presenters/CountryPresenter.test.mjs +50 -0
  354. package/dist/tests/presenters/DegreePresenter.test.d.mts +1 -0
  355. package/dist/tests/presenters/DegreePresenter.test.mjs +51 -0
  356. package/dist/tests/presenters/DisciplinePresenter.test.d.mts +1 -0
  357. package/dist/tests/presenters/DisciplinePresenter.test.mjs +40 -0
  358. package/dist/tests/presenters/DurationPresenter.test.d.mts +1 -0
  359. package/dist/tests/presenters/DurationPresenter.test.mjs +64 -0
  360. package/dist/tests/presenters/EducationalFormPresenter.test.d.mts +1 -0
  361. package/dist/tests/presenters/EducationalFormPresenter.test.mjs +60 -0
  362. package/dist/tests/presenters/FormatPresenter.test.d.mts +1 -0
  363. package/dist/tests/presenters/FormatPresenter.test.mjs +43 -0
  364. package/dist/tests/presenters/SpecialProgrammesPresenter.test.d.mts +1 -0
  365. package/dist/tests/presenters/SpecialProgrammesPresenter.test.mjs +66 -0
  366. package/dist/tests/presenters/TuitionFeePresenter.test.d.mts +1 -0
  367. package/dist/tests/presenters/TuitionFeePresenter.test.mjs +52 -0
  368. package/dist/tests/programmes/policies/Area.test.d.mts +1 -0
  369. package/dist/tests/programmes/policies/Area.test.mjs +153 -0
  370. package/dist/tests/programmes/policies/Attendance.test.d.mts +1 -0
  371. package/dist/tests/programmes/policies/Attendance.test.mjs +173 -0
  372. package/dist/tests/programmes/policies/AttendanceDegree.test.d.mts +1 -0
  373. package/dist/tests/programmes/policies/AttendanceDegree.test.mjs +291 -0
  374. package/dist/tests/programmes/policies/Continent.test.d.mts +1 -0
  375. package/dist/tests/programmes/policies/Continent.test.mjs +169 -0
  376. package/dist/tests/programmes/policies/Country.test.d.mts +1 -0
  377. package/dist/tests/programmes/policies/Country.test.mjs +164 -0
  378. package/dist/tests/programmes/policies/CountryAttendance.test.d.mts +1 -0
  379. package/dist/tests/programmes/policies/CountryAttendance.test.mjs +251 -0
  380. package/dist/tests/programmes/policies/CountryAttendanceDegree.test.d.mts +1 -0
  381. package/dist/tests/programmes/policies/CountryAttendanceDegree.test.mjs +337 -0
  382. package/dist/tests/programmes/policies/CountryDegree.test.d.mts +1 -0
  383. package/dist/tests/programmes/policies/CountryDegree.test.mjs +262 -0
  384. package/dist/tests/programmes/policies/CountryDuration.test.d.mts +1 -0
  385. package/dist/tests/programmes/policies/CountryDuration.test.mjs +234 -0
  386. package/dist/tests/programmes/policies/CountryDurationDegree.test.d.mts +1 -0
  387. package/dist/tests/programmes/policies/CountryDurationDegree.test.mjs +304 -0
  388. package/dist/tests/programmes/policies/CountryEducationalForm.test.d.mts +1 -0
  389. package/dist/tests/programmes/policies/CountryEducationalForm.test.mjs +260 -0
  390. package/dist/tests/programmes/policies/CountryFormat.test.d.mts +1 -0
  391. package/dist/tests/programmes/policies/CountryFormat.test.mjs +253 -0
  392. package/dist/tests/programmes/policies/DegreeAttendanceDiscipline.test.d.mts +1 -0
  393. package/dist/tests/programmes/policies/DegreeAttendanceDiscipline.test.mjs +179 -0
  394. package/dist/tests/programmes/policies/DegreeCountryAttendance.test.d.mts +1 -0
  395. package/dist/tests/programmes/policies/DegreeCountryAttendance.test.mjs +267 -0
  396. package/dist/tests/programmes/policies/DegreeCountryTuitionFee.test.d.mts +1 -0
  397. package/dist/tests/programmes/policies/DegreeCountryTuitionFee.test.mjs +217 -0
  398. package/dist/tests/programmes/policies/DegreeFormat.test.d.mts +1 -0
  399. package/dist/tests/programmes/policies/DegreeFormat.test.mjs +221 -0
  400. package/dist/tests/programmes/policies/Discipline.test.d.mts +1 -0
  401. package/dist/tests/programmes/policies/Discipline.test.mjs +159 -0
  402. package/dist/tests/programmes/policies/DisciplineAttendance.test.d.mts +1 -0
  403. package/dist/tests/programmes/policies/DisciplineAttendance.test.mjs +292 -0
  404. package/dist/tests/programmes/policies/DisciplineContinent.test.d.mts +1 -0
  405. package/dist/tests/programmes/policies/DisciplineContinent.test.mjs +253 -0
  406. package/dist/tests/programmes/policies/DisciplineCountry.test.d.mts +1 -0
  407. package/dist/tests/programmes/policies/DisciplineCountry.test.mjs +244 -0
  408. package/dist/tests/programmes/policies/DisciplineCountryEducationalForm.test.d.mts +1 -0
  409. package/dist/tests/programmes/policies/DisciplineCountryEducationalForm.test.mjs +345 -0
  410. package/dist/tests/programmes/policies/DisciplineDegree.test.d.mts +1 -0
  411. package/dist/tests/programmes/policies/DisciplineDegree.test.mjs +273 -0
  412. package/dist/tests/programmes/policies/DisciplineDuration.test.d.mts +1 -0
  413. package/dist/tests/programmes/policies/DisciplineDuration.test.mjs +278 -0
  414. package/dist/tests/programmes/policies/DisciplineEducationalForm.test.d.mts +1 -0
  415. package/dist/tests/programmes/policies/DisciplineEducationalForm.test.mjs +302 -0
  416. package/dist/tests/programmes/policies/DisciplineFormat.test.d.mts +1 -0
  417. package/dist/tests/programmes/policies/DisciplineFormat.test.mjs +266 -0
  418. package/dist/tests/programmes/policies/Duration.test.d.mts +1 -0
  419. package/dist/tests/programmes/policies/Duration.test.mjs +179 -0
  420. package/dist/tests/programmes/policies/Format.test.d.mts +1 -0
  421. package/dist/tests/programmes/policies/Format.test.mjs +117 -0
  422. package/dist/tests/programmes/policies/NewRulesValidation.test.d.mts +1 -0
  423. package/dist/tests/programmes/policies/NewRulesValidation.test.mjs +320 -0
  424. package/dist/tests/programmes/policies/SpecialProgrammes.test.d.mts +1 -0
  425. package/dist/tests/programmes/policies/SpecialProgrammes.test.mjs +171 -0
  426. package/dist/tests/programmes/policies/TuitionFeeAttendanceDiscipline.test.d.mts +1 -0
  427. package/dist/tests/programmes/policies/TuitionFeeAttendanceDiscipline.test.mjs +360 -0
  428. package/dist/tests/programmes/policies/TuitionFeeContinent.test.d.mts +1 -0
  429. package/dist/tests/programmes/policies/TuitionFeeContinent.test.mjs +293 -0
  430. package/dist/tests/programmes/policies/TuitionFeeCountry.test.d.mts +1 -0
  431. package/dist/tests/programmes/policies/TuitionFeeCountry.test.mjs +266 -0
  432. package/dist/tests/programmes/policies/TuitionFeeDiscipline.test.d.mts +1 -0
  433. package/dist/tests/programmes/policies/TuitionFeeDiscipline.test.mjs +267 -0
  434. package/dist/tests/programmes/policies/Unfiltered.test.d.mts +1 -0
  435. package/dist/tests/programmes/policies/Unfiltered.test.mjs +90 -0
  436. package/dist/tests/programmes/rules/AffordableTuitionFeeRule.test.d.mts +1 -0
  437. package/dist/tests/programmes/rules/AffordableTuitionFeeRule.test.mjs +27 -0
  438. package/dist/tests/programmes/rules/DegreeCountrySpecificRule.test.d.mts +1 -0
  439. package/dist/tests/programmes/rules/DegreeCountrySpecificRule.test.mjs +121 -0
  440. package/dist/tests/programmes/rules/DegreeDisciplineRule.test.d.mts +1 -0
  441. package/dist/tests/programmes/rules/DegreeDisciplineRule.test.mjs +169 -0
  442. package/dist/tests/programmes/rules/IndexableDegreeRule.test.d.mts +1 -0
  443. package/dist/tests/programmes/rules/IndexableDegreeRule.test.mjs +101 -0
  444. package/dist/tests/programmes/rules/IndexableDurationRule.test..d.mts +1 -0
  445. package/dist/tests/programmes/rules/IndexableDurationRule.test..mjs +25 -0
  446. package/dist/tests/programmes/rules/IndexableEducationalFormRule.test.d.mts +1 -0
  447. package/dist/tests/programmes/rules/IndexableEducationalFormRule.test.mjs +27 -0
  448. package/dist/tests/programmes/rules/IndexablePageNumberRule.test.d.mts +1 -0
  449. package/dist/tests/programmes/rules/IndexablePageNumberRule.test.mjs +51 -0
  450. package/dist/tests/programmes/rules/MbaDegreeRule.test.d.mts +1 -0
  451. package/dist/tests/programmes/rules/MbaDegreeRule.test.mjs +55 -0
  452. package/dist/tests/programmes/rules/MbaOrMscDegreeRule.test.d.mts +1 -0
  453. package/dist/tests/programmes/rules/MbaOrMscDegreeRule.test.mjs +53 -0
  454. package/dist/tests/programmes/rules/MinimumAmountOfResultsRule.test.d.mts +1 -0
  455. package/dist/tests/programmes/rules/MinimumAmountOfResultsRule.test.mjs +79 -0
  456. package/dist/tests/programmes/rules/NotDistanceLearningPortalRule.test.d.mts +1 -0
  457. package/dist/tests/programmes/rules/NotDistanceLearningPortalRule.test.mjs +57 -0
  458. package/dist/tests/programmes/rules/OneYearDurationRule.test..d.mts +1 -0
  459. package/dist/tests/programmes/rules/OneYearDurationRule.test..mjs +40 -0
  460. package/dist/tests/programmes/rules/OnlineAttendanceRule.test.d.mts +1 -0
  461. package/dist/tests/programmes/rules/OnlineAttendanceRule.test.mjs +69 -0
  462. package/dist/tests/programmes/rules/PartTimeFormatRule.test.d.mts +1 -0
  463. package/dist/tests/programmes/rules/PartTimeFormatRule.test.mjs +27 -0
  464. package/dist/tests/programmes/utils/SearchDependencies.util.d.mts +16 -0
  465. package/dist/tests/programmes/utils/SearchDependencies.util.mjs +73 -0
  466. package/dist/tests/programmes/utils/SitemapDependencies.util.d.mts +15 -0
  467. package/dist/tests/programmes/utils/SitemapDependencies.util.mjs +49 -0
  468. package/dist/tests/scholarships/policies/Area.test.d.mts +1 -0
  469. package/dist/tests/scholarships/policies/Area.test.mjs +121 -0
  470. package/dist/tests/scholarships/policies/Country.test.d.mts +1 -0
  471. package/dist/tests/scholarships/policies/Country.test.mjs +97 -0
  472. package/dist/tests/scholarships/policies/Discipline.test.d.mts +1 -0
  473. package/dist/tests/scholarships/policies/Discipline.test.mjs +93 -0
  474. package/dist/tests/scholarships/policies/DisciplineCountry.test.d.mts +1 -0
  475. package/dist/tests/scholarships/policies/DisciplineCountry.test.mjs +151 -0
  476. package/dist/tests/scholarships/policies/Unfiltered.test.d.mts +1 -0
  477. package/dist/tests/scholarships/policies/Unfiltered.test.mjs +44 -0
  478. package/dist/tests/scholarships/policies/UniversityCountry.test.d.mts +1 -0
  479. package/dist/tests/scholarships/policies/UniversityCountry.test.mjs +115 -0
  480. package/dist/tests/scholarships/rules/ExceptAustaliaAreasRule.test.d.mts +1 -0
  481. package/dist/tests/scholarships/rules/ExceptAustaliaAreasRule.test.mjs +64 -0
  482. package/dist/tests/scholarships/rules/SearchVolumeAreasRule.test.d.mts +1 -0
  483. package/dist/tests/scholarships/rules/SearchVolumeAreasRule.test.mjs +62 -0
  484. package/dist/tests/scholarships/rules/SearchVolumeCountriesDisciplinesRule.test.d.mts +1 -0
  485. package/dist/tests/scholarships/rules/SearchVolumeCountriesDisciplinesRule.test.mjs +114 -0
  486. package/dist/tests/scholarships/rules/SearchVolumeCountriesRule.test.d.mts +1 -0
  487. package/dist/tests/scholarships/rules/SearchVolumeCountriesRule.test.mjs +62 -0
  488. package/dist/tests/scholarships/rules/SearchVolumeDisciplinesRule.test.d.mts +1 -0
  489. package/dist/tests/scholarships/rules/SearchVolumeDisciplinesRule.test.mjs +62 -0
  490. package/dist/tests/scholarships/utils/SearchDependencies.util.d.mts +16 -0
  491. package/dist/tests/scholarships/utils/SearchDependencies.util.mjs +70 -0
  492. package/dist/tests/scholarships/utils/SitemapDependencies.util.d.mts +11 -0
  493. package/dist/tests/scholarships/utils/SitemapDependencies.util.mjs +33 -0
  494. package/dist/tests/sitemap-generator/BaseSitemapUrlGeneratorManager.test.d.mts +1 -0
  495. package/dist/tests/sitemap-generator/BaseSitemapUrlGeneratorManager.test.mjs +82 -0
  496. package/dist/tests/sitemap-generator/OrganisationsSitemapUrlGeneratorManager.test.d.mts +1 -0
  497. package/dist/tests/sitemap-generator/OrganisationsSitemapUrlGeneratorManager.test.mjs +85 -0
  498. package/dist/tests/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.test.d.mts +1 -0
  499. package/dist/tests/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.test.mjs +77 -0
  500. package/dist/tests/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager.test.d.mts +1 -0
  501. package/dist/tests/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager.test.mjs +60 -0
  502. package/dist/tests/structured-data/OrganisationStructuredDataFactory.test.d.mts +1 -0
  503. package/dist/tests/structured-data/OrganisationStructuredDataFactory.test.mjs +334 -0
  504. package/dist/tests/structured-data/ProgrammeStructuredDataFactory.test.d.mts +1 -0
  505. package/dist/tests/structured-data/ProgrammeStructuredDataFactory.test.mjs +562 -0
  506. package/dist/tests/structured-data/ScholarshipStructuredDataFactory.test.d.mts +1 -0
  507. package/dist/tests/structured-data/ScholarshipStructuredDataFactory.test.mjs +292 -0
  508. package/dist/tests/structured-data/SearchStructuredDataFactory.paywall.test.d.mts +1 -0
  509. package/dist/tests/structured-data/SearchStructuredDataFactory.paywall.test.mjs +258 -0
  510. package/package.json +1 -1
  511. package/dist/src/programmes/policies/AttendanceTuitionFee.d.ts +0 -17
  512. package/dist/src/programmes/policies/AttendanceTuitionFee.js +0 -51
  513. package/dist/src/programmes/policies/ContinentTuitionFee.d.ts +0 -16
  514. package/dist/src/programmes/policies/ContinentTuitionFee.js +0 -46
  515. package/dist/src/programmes/policies/CountryTuitionFee.d.ts +0 -16
  516. package/dist/src/programmes/policies/CountryTuitionFee.js +0 -46
  517. package/dist/src/programmes/policies/DegreeAreaTuitionFee.d.ts +0 -16
  518. package/dist/src/programmes/policies/DisciplineTuitionFee.js +0 -46
  519. package/dist/src/programmes/policies/DisciplineTuitionFeeAttendance.d.ts +0 -17
  520. package/dist/src/programmes/policies/DisciplineTuitionFeeAttendance.js +0 -54
@@ -0,0 +1,260 @@
1
+ import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';
2
+ import { FilterKey } from '@studyportals/search-filters/server-side';
3
+ import { SearchDependencies } from '../utils/SearchDependencies.util.mjs';
4
+ import { CountryEducationalForm } from '@/programmes/policies/CountryEducationalForm';
5
+ import { PortalType } from '@studyportals/domain-client';
6
+ import { SitemapDependencies } from '../utils/SitemapDependencies.util.mjs';
7
+ import { CountryPresenter } from '@/presenters/CountryPresenter';
8
+ import { EducationalFormPresenter } from '@/presenters/EducationalFormPresenter';
9
+ describe('Policy:CountryEducationalForm', () => {
10
+ describe('shouldIndex', () => {
11
+ let searchDependenciesHelper;
12
+ let countryEducationalFormPolicy;
13
+ beforeEach(() => {
14
+ searchDependenciesHelper = new SearchDependencies();
15
+ countryEducationalFormPolicy = new CountryEducationalForm(searchDependenciesHelper.dependencies);
16
+ searchDependenciesHelper.setResultsCount(10);
17
+ searchDependenciesHelper.setPageNumber(1);
18
+ searchDependenciesHelper.setPortalType(PortalType.SHORT);
19
+ });
20
+ it('Should return true when all conditions are met', async () => {
21
+ const countryId = '30'; // UK
22
+ const educationalForm = 'academic';
23
+ searchDependenciesHelper.setFilterKeyValues(new Map([
24
+ [FilterKey.COUNTRY, [countryId]],
25
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]]
26
+ ]));
27
+ const result = await countryEducationalFormPolicy.shouldIndex();
28
+ expect(result).toBe(true);
29
+ });
30
+ it('Should return false when multiple countries are selected', async () => {
31
+ const firstCountryId = '30'; // UK
32
+ const secondCountryId = '21'; // Portugal
33
+ const educationalForm = 'academic';
34
+ searchDependenciesHelper.setFilterKeyValues(new Map([
35
+ [FilterKey.COUNTRY, [firstCountryId, secondCountryId]],
36
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]]
37
+ ]));
38
+ const result = await countryEducationalFormPolicy.shouldIndex();
39
+ expect(result).toBe(false);
40
+ });
41
+ it('Should return false when multiple educational form values are selected', async () => {
42
+ const countryId = '30'; // UK
43
+ const firstEducationalForm = 'academic';
44
+ const secondEducationalForm = 'semester';
45
+ searchDependenciesHelper.setFilterKeyValues(new Map([
46
+ [FilterKey.COUNTRY, [countryId]],
47
+ [FilterKey.DURATION, [firstEducationalForm, secondEducationalForm]]
48
+ ]));
49
+ const result = await countryEducationalFormPolicy.shouldIndex();
50
+ expect(result).toBe(false);
51
+ });
52
+ it('Should return false when no educational form values are selected', async () => {
53
+ const countryId = '30'; // UK
54
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.COUNTRY, [countryId]]]));
55
+ const result = await countryEducationalFormPolicy.shouldIndex();
56
+ expect(result).toBe(false);
57
+ });
58
+ it('Should return false when no countries are selected', async () => {
59
+ const educationalForm = 'academic';
60
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.EDUCATIONAL_FORM, [educationalForm]]]));
61
+ const result = await countryEducationalFormPolicy.shouldIndex();
62
+ expect(result).toBe(false);
63
+ });
64
+ it('Should return false when other filters are selected', async () => {
65
+ const countryId = '30'; // UK
66
+ const educationalForm = 'academic';
67
+ const disciplineId = '54'; // Agriculture & Forestry
68
+ searchDependenciesHelper.setFilterKeyValues(new Map([
69
+ [FilterKey.COUNTRY, [countryId]],
70
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]],
71
+ [FilterKey.DISCIPLINES, [disciplineId]]
72
+ ]));
73
+ const result = await countryEducationalFormPolicy.shouldIndex();
74
+ expect(result).toBe(false);
75
+ });
76
+ it('Should return false when educational form is not indexable (i.e. Winter School)', async () => {
77
+ const countryId = '30'; // UK
78
+ const educationalForm = 'winter_school';
79
+ searchDependenciesHelper.setFilterKeyValues(new Map([
80
+ [FilterKey.COUNTRY, [countryId]],
81
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]]
82
+ ]));
83
+ const result = await countryEducationalFormPolicy.shouldIndex();
84
+ expect(result).toBe(false);
85
+ });
86
+ it('Should return false when number of results is less than 7', async () => {
87
+ const countryId = '30'; // UK
88
+ const educationalForm = 'academic';
89
+ searchDependenciesHelper.setResultsCount(6);
90
+ searchDependenciesHelper.setFilterKeyValues(new Map([
91
+ [FilterKey.COUNTRY, [countryId]],
92
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]]
93
+ ]));
94
+ const result = await countryEducationalFormPolicy.shouldIndex();
95
+ expect(result).toBe(false);
96
+ });
97
+ it('Should return false when page number is higher than 2', async () => {
98
+ const countryId = '30'; // UK
99
+ const educationalForm = 'academic';
100
+ searchDependenciesHelper.setPageNumber(3);
101
+ searchDependenciesHelper.setFilterKeyValues(new Map([
102
+ [FilterKey.COUNTRY, [countryId]],
103
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]]
104
+ ]));
105
+ const result = await countryEducationalFormPolicy.shouldIndex();
106
+ expect(result).toBe(false);
107
+ });
108
+ it('Should return false when portal is distance learning', async () => {
109
+ const countryId = '30'; // UK
110
+ const educationalForm = 'academic';
111
+ searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
112
+ searchDependenciesHelper.setFilterKeyValues(new Map([
113
+ [FilterKey.COUNTRY, [countryId]],
114
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]]
115
+ ]));
116
+ const result = await countryEducationalFormPolicy.shouldIndex();
117
+ expect(result).toBe(false);
118
+ });
119
+ });
120
+ describe('generateUrls', () => {
121
+ let sitemapDependenciesHelper;
122
+ let countryEducationalFormPolicy;
123
+ beforeEach(() => {
124
+ sitemapDependenciesHelper = new SitemapDependencies();
125
+ sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
126
+ countryEducationalFormPolicy = new CountryEducationalForm(sitemapDependenciesHelper.dependencies);
127
+ CountryPresenter.getInstance = vi.fn().mockReturnValue({
128
+ getFragments: vi.fn().mockReturnValue([
129
+ { id: '30', path: 'uk' },
130
+ { id: '21', path: 'portugal' },
131
+ { id: '56', path: 'usa' },
132
+ { id: '82', path: 'netherlands' }
133
+ ])
134
+ });
135
+ EducationalFormPresenter.getInstance = vi.fn().mockReturnValue({
136
+ getFragments: vi.fn().mockReturnValue([
137
+ { id: 'academic', path: 'academic-programmes' },
138
+ { id: 'semester', path: 'semester-programmes' },
139
+ { id: 'winter_school', path: 'winter-school-programmes' },
140
+ { id: 'summer_school', path: 'summer-school-programmes' }
141
+ ])
142
+ });
143
+ });
144
+ afterEach(() => {
145
+ sitemapDependenciesHelper.resetMocks();
146
+ });
147
+ it('Should generate URLs for all valid country-form combinations', async () => {
148
+ // Mock the checkRulesForSitemap to exclude winter_school
149
+ const resultMap = new Map();
150
+ // Set rules to exclude winter_school (as per shouldIndex test)
151
+ for (const countryId of ['30', '21', '56', '82']) {
152
+ for (const formId of ['academic', 'semester', 'winter_school', 'summer_school']) {
153
+ const key = `${FilterKey.COUNTRY}:${countryId}|${FilterKey.EDUCATIONAL_FORM}:${formId}`;
154
+ resultMap.set(key, formId !== 'winter_school');
155
+ }
156
+ }
157
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
158
+ // Call the method via reflection since it's protected
159
+ const urls = await countryEducationalFormPolicy.generateUrls();
160
+ // Verify winter_school is excluded (3 forms * 4 countries * 2 pages = 24 URLs)
161
+ expect(urls).toHaveLength(12);
162
+ expect(urls).toContain('uk/academic-programmes');
163
+ expect(urls).toContain('uk/semester-programmes');
164
+ expect(urls).toContain('uk/summer-school-programmes');
165
+ expect(urls).toContain('portugal/academic-programmes');
166
+ expect(urls).toContain('usa/academic-programmes');
167
+ expect(urls).toContain('netherlands/academic-programmes');
168
+ expect(urls).not.toContain('uk/winter-school-programmes');
169
+ expect(urls).not.toContain('portugal/winter-school-programmes');
170
+ });
171
+ it('Should exclude certain country-form combinations', async () => {
172
+ // Mock to exclude UK combinations
173
+ const resultMap = new Map();
174
+ // Set up rules to exclude UK for all forms
175
+ for (const countryId of ['30', '21', '56', '82']) {
176
+ for (const formId of ['academic', 'semester', 'winter_school', 'summer_school']) {
177
+ const key = `${FilterKey.COUNTRY}:${countryId}|${FilterKey.EDUCATIONAL_FORM}:${formId}`;
178
+ // Exclude UK (30) and winter_school
179
+ resultMap.set(key, countryId !== '30' && formId !== 'winter_school');
180
+ }
181
+ }
182
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
183
+ const urls = await countryEducationalFormPolicy.generateUrls();
184
+ // Should include others but not UK (3 forms * 3 countries * 2 pages = 18 URLs)
185
+ expect(urls).toHaveLength(9);
186
+ expect(urls).toContain('portugal/academic-programmes');
187
+ expect(urls).toContain('usa/academic-programmes');
188
+ expect(urls).toContain('netherlands/academic-programmes');
189
+ expect(urls).not.toContain('uk/academic-programmes');
190
+ expect(urls).not.toContain('uk/semester-programmes');
191
+ expect(urls).not.toContain('portugal/winter-school-programmes');
192
+ });
193
+ it('Should exclude all URLs when all checks fail', async () => {
194
+ // Create a map that returns false for all combinations
195
+ const resultMap = new Map();
196
+ // Set all combinations to fail
197
+ for (const countryId of ['30', '21', '56', '82']) {
198
+ for (const formId of ['academic', 'semester', 'winter_school', 'summer_school']) {
199
+ const key = `${FilterKey.COUNTRY}:${countryId}|${FilterKey.EDUCATIONAL_FORM}:${formId}`;
200
+ resultMap.set(key, false);
201
+ }
202
+ }
203
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap, false);
204
+ const urls = await countryEducationalFormPolicy.generateUrls();
205
+ // Should include no URLs
206
+ expect(urls).toHaveLength(0);
207
+ });
208
+ it('Should handle empty fragments arrays', async () => {
209
+ // Mock the CountryPresenter to return empty fragments
210
+ CountryPresenter.getInstance.mockReturnValueOnce({
211
+ getFragments: vi.fn().mockReturnValue([])
212
+ });
213
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
214
+ const urls = await countryEducationalFormPolicy.generateUrls();
215
+ // Should return empty array
216
+ expect(urls).toHaveLength(0);
217
+ });
218
+ it('Should handle large number of combinations efficiently', async () => {
219
+ // Generate a larger set of countries (10) and educational forms (5)
220
+ const largeCountrySet = Array.from({ length: 10 }, (_, index) => ({
221
+ id: `${1000 + index}`,
222
+ path: `country-${1000 + index}`
223
+ }));
224
+ const largeFormSet = Array.from({ length: 5 }, (_, index) => ({
225
+ id: `form-${index}`,
226
+ path: `educational-form-${index}`
227
+ }));
228
+ // Mock the presenters to return large sets
229
+ CountryPresenter.getInstance.mockReturnValueOnce({
230
+ getFragments: vi.fn().mockReturnValue(largeCountrySet)
231
+ });
232
+ EducationalFormPresenter.getInstance.mockReturnValueOnce({
233
+ getFragments: vi.fn().mockReturnValue(largeFormSet)
234
+ });
235
+ // Mock to allow only specific combinations
236
+ // Only allow countries divisible by 2, and forms with odd indices
237
+ const resultMap = new Map();
238
+ for (let c = 0; c < largeCountrySet.length; c++) {
239
+ for (let f = 0; f < largeFormSet.length; f++) {
240
+ const countryId = largeCountrySet[c].id;
241
+ const formId = largeFormSet[f].id;
242
+ const key = `${FilterKey.COUNTRY}:${countryId}|${FilterKey.EDUCATIONAL_FORM}:${formId}`;
243
+ // Only include countries where index is divisible by 2, and form indices that are odd
244
+ resultMap.set(key, c % 2 === 0 && f % 2 === 1);
245
+ }
246
+ }
247
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
248
+ const urls = await countryEducationalFormPolicy.generateUrls();
249
+ // Should generate 5 countries (10/2) * 2 forms (5/2 rounded down + ignore index 0) * 2 pages = 20 URLs
250
+ expect(urls).toHaveLength(10);
251
+ // Test some specific combinations
252
+ expect(urls).toContain('country-1000/educational-form-1'); // First valid country, first valid form
253
+ expect(urls).toContain('country-1000/educational-form-3'); // First valid country, second valid form
254
+ expect(urls).toContain('country-1002/educational-form-1'); // Another valid country, first valid form
255
+ expect(urls).not.toContain('country-1001/educational-form-1'); // Invalid country (not divisible by 2)
256
+ expect(urls).not.toContain('country-1000/educational-form-0'); // Invalid form (not odd index)
257
+ expect(urls).not.toContain('country-1000/educational-form-2'); // Invalid form (not odd index)
258
+ });
259
+ });
260
+ });
@@ -0,0 +1,253 @@
1
+ import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';
2
+ import { FilterKey } from '@studyportals/search-filters/server-side';
3
+ import { SearchDependencies } from '../utils/SearchDependencies.util.mjs';
4
+ import { CountryFormat } from '@/programmes/policies/CountryFormat';
5
+ import { PortalType } from '@studyportals/domain-client';
6
+ import { SitemapDependencies } from '../utils/SitemapDependencies.util.mjs';
7
+ import { CountryPresenter } from '@/presenters/CountryPresenter';
8
+ import { FormatPresenter } from '@/presenters/FormatPresenter';
9
+ describe('Policy:CountryFormat', () => {
10
+ describe('shouldIndex', () => {
11
+ let searchDependenciesHelper;
12
+ let countryFormatPolicy;
13
+ beforeEach(() => {
14
+ searchDependenciesHelper = new SearchDependencies();
15
+ countryFormatPolicy = new CountryFormat(searchDependenciesHelper.dependencies);
16
+ searchDependenciesHelper.setResultsCount(10);
17
+ searchDependenciesHelper.setPageNumber(1);
18
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
19
+ });
20
+ it('Should return true when all conditions are met', async () => {
21
+ const countryId = '82'; // US
22
+ const format = 'parttime';
23
+ searchDependenciesHelper.setFilterKeyValues(new Map([
24
+ [FilterKey.COUNTRY, [countryId]],
25
+ [FilterKey.ATTENDANCE, [format]]
26
+ ]));
27
+ const result = await countryFormatPolicy.shouldIndex();
28
+ expect(result).toBe(true);
29
+ });
30
+ it('Should return false when multiple countries are selected', async () => {
31
+ const firstCountryId = '30'; // UK
32
+ const secondCountryId = '21'; // Portugal
33
+ const format = 'parttime';
34
+ searchDependenciesHelper.setFilterKeyValues(new Map([
35
+ [FilterKey.COUNTRY, [firstCountryId, secondCountryId]],
36
+ [FilterKey.ATTENDANCE, [format]]
37
+ ]));
38
+ const result = await countryFormatPolicy.shouldIndex();
39
+ expect(result).toBe(false);
40
+ });
41
+ it('Should return false when multiple format values are selected', async () => {
42
+ const countryId = '30'; // UK
43
+ const firstFormat = 'parttime';
44
+ const secondFormat = 'fulltime';
45
+ searchDependenciesHelper.setFilterKeyValues(new Map([
46
+ [FilterKey.COUNTRY, [countryId]],
47
+ [FilterKey.ATTENDANCE, [firstFormat, secondFormat]]
48
+ ]));
49
+ const result = await countryFormatPolicy.shouldIndex();
50
+ expect(result).toBe(false);
51
+ });
52
+ it('Should return false when no format values are selected', async () => {
53
+ const countryId = '30'; // UK
54
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.COUNTRY, [countryId]]]));
55
+ const result = await countryFormatPolicy.shouldIndex();
56
+ expect(result).toBe(false);
57
+ });
58
+ it('Should return false when no countries are selected', async () => {
59
+ const format = 'parttime';
60
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.EDUCATIONAL_FORM, [format]]]));
61
+ const result = await countryFormatPolicy.shouldIndex();
62
+ expect(result).toBe(false);
63
+ });
64
+ it('Should return false when other filters are selected', async () => {
65
+ const countryId = '30'; // UK
66
+ const format = 'parttime';
67
+ const disciplineId = '54'; // Agriculture & Forestry
68
+ searchDependenciesHelper.setFilterKeyValues(new Map([
69
+ [FilterKey.COUNTRY, [countryId]],
70
+ [FilterKey.ATTENDANCE, [format]],
71
+ [FilterKey.DISCIPLINES, [disciplineId]]
72
+ ]));
73
+ const result = await countryFormatPolicy.shouldIndex();
74
+ expect(result).toBe(false);
75
+ });
76
+ it('Should return false when format is not part-time', async () => {
77
+ const countryId = '30'; // UK
78
+ const format = 'fulltime';
79
+ searchDependenciesHelper.setFilterKeyValues(new Map([
80
+ [FilterKey.COUNTRY, [countryId]],
81
+ [FilterKey.ATTENDANCE, [format]]
82
+ ]));
83
+ const result = await countryFormatPolicy.shouldIndex();
84
+ expect(result).toBe(false);
85
+ });
86
+ it('Should return false when number of results is less than 7', async () => {
87
+ const countryId = '30'; // UK
88
+ const format = 'parttime';
89
+ searchDependenciesHelper.setResultsCount(6);
90
+ searchDependenciesHelper.setFilterKeyValues(new Map([
91
+ [FilterKey.COUNTRY, [countryId]],
92
+ [FilterKey.ATTENDANCE, [format]]
93
+ ]));
94
+ const result = await countryFormatPolicy.shouldIndex();
95
+ expect(result).toBe(false);
96
+ });
97
+ it('Should return false when page number is higher than 2', async () => {
98
+ const countryId = '82'; // US
99
+ const format = 'parttime';
100
+ searchDependenciesHelper.setPageNumber(5);
101
+ searchDependenciesHelper.setFilterKeyValues(new Map([
102
+ [FilterKey.COUNTRY, [countryId]],
103
+ [FilterKey.ATTENDANCE, [format]]
104
+ ]));
105
+ const result = await countryFormatPolicy.shouldIndex();
106
+ expect(result).toBe(false);
107
+ });
108
+ it('Should return false when portal is distance learning', async () => {
109
+ const countryId = '82'; // US
110
+ const format = 'parttime';
111
+ searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
112
+ searchDependenciesHelper.setFilterKeyValues(new Map([
113
+ [FilterKey.COUNTRY, [countryId]],
114
+ [FilterKey.ATTENDANCE, [format]]
115
+ ]));
116
+ const result = await countryFormatPolicy.shouldIndex();
117
+ expect(result).toBe(false);
118
+ });
119
+ });
120
+ describe('generateUrls', () => {
121
+ let sitemapDependenciesHelper;
122
+ let countryFormatPolicy;
123
+ beforeEach(() => {
124
+ sitemapDependenciesHelper = new SitemapDependencies();
125
+ sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
126
+ countryFormatPolicy = new CountryFormat(sitemapDependenciesHelper.dependencies);
127
+ CountryPresenter.getInstance = vi.fn().mockReturnValue({
128
+ getFragments: vi.fn().mockReturnValue([
129
+ { id: '30', path: 'uk' },
130
+ { id: '21', path: 'portugal' },
131
+ { id: '56', path: 'usa' },
132
+ { id: '82', path: 'netherlands' }
133
+ ])
134
+ });
135
+ FormatPresenter.getInstance = vi.fn().mockReturnValue({
136
+ getFragments: vi.fn().mockReturnValue([
137
+ { id: 'parttime', path: 'part-time-programmes' },
138
+ { id: 'fulltime', path: 'full-time-programmes' }
139
+ ])
140
+ });
141
+ });
142
+ afterEach(() => {
143
+ sitemapDependenciesHelper.resetMocks();
144
+ });
145
+ it('Should generate URLs for all valid country-format combinations', async () => {
146
+ // Mock the checkRulesForSitemap to only allow part-time format
147
+ const resultMap = new Map();
148
+ // Set rules to only allow part-time format (as per shouldIndex test)
149
+ for (const countryId of ['30', '21', '56', '82']) {
150
+ for (const formatId of ['parttime', 'fulltime']) {
151
+ const key = `${FilterKey.ATTENDANCE}:${formatId}|${FilterKey.COUNTRY}:${countryId}`;
152
+ resultMap.set(key, formatId === 'parttime');
153
+ }
154
+ }
155
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
156
+ // Call the method via reflection since it's protected
157
+ const urls = await countryFormatPolicy.generateUrls();
158
+ // Verify only part-time and full-time format is included (2 format * 4 countries * 1 pages = 8 URLs)
159
+ expect(urls).toHaveLength(8);
160
+ expect(urls).toContain('part-time-programmes/uk');
161
+ expect(urls).toContain('part-time-programmes/portugal');
162
+ expect(urls).toContain('part-time-programmes/usa');
163
+ expect(urls).toContain('part-time-programmes/netherlands');
164
+ expect(urls).toContain('full-time-programmes/uk');
165
+ expect(urls).toContain('full-time-programmes/portugal');
166
+ });
167
+ it('Should exclude certain country-format combinations', async () => {
168
+ // Mock to exclude UK combinations
169
+ const resultMap = new Map();
170
+ // Set up rules to exclude UK for all formats
171
+ for (const countryId of ['30', '21', '56', '82']) {
172
+ for (const formatId of ['parttime', 'fulltime']) {
173
+ const key = `${FilterKey.COUNTRY}:${countryId}|${FilterKey.ATTENDANCE}:${formatId}`;
174
+ // Exclude UK (30) and only allow part-time for others
175
+ resultMap.set(key, countryId !== '30' && formatId === 'parttime');
176
+ }
177
+ }
178
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
179
+ const urls = await countryFormatPolicy.generateUrls();
180
+ // Should include others but not UK (1 format * 3 countries * 2 pages = 6 URLs)
181
+ expect(urls).toHaveLength(3);
182
+ expect(urls).toContain('part-time-programmes/portugal');
183
+ expect(urls).toContain('part-time-programmes/usa');
184
+ expect(urls).toContain('part-time-programmes/netherlands');
185
+ expect(urls).not.toContain('part-time-programmes/uk');
186
+ expect(urls).not.toContain('full-time-programmes/uk');
187
+ });
188
+ it('Should exclude all URLs when all checks fail', async () => {
189
+ // Create a map that returns false for all combinations
190
+ const resultMap = new Map();
191
+ // Set all combinations to fail
192
+ for (const countryId of ['30', '21', '56', '82']) {
193
+ for (const formatId of ['parttime', 'fulltime']) {
194
+ const key = `${FilterKey.ATTENDANCE}:${formatId}|${FilterKey.COUNTRY}:${countryId}`;
195
+ resultMap.set(key, false);
196
+ }
197
+ }
198
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap, false);
199
+ const urls = await countryFormatPolicy.generateUrls();
200
+ // Should include no URLs
201
+ expect(urls).toHaveLength(0);
202
+ });
203
+ it('Should handle empty fragments arrays', async () => {
204
+ // Mock the CountryPresenter to return empty fragments
205
+ CountryPresenter.getInstance.mockReturnValueOnce({
206
+ getFragments: vi.fn().mockReturnValue([])
207
+ });
208
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
209
+ const urls = await countryFormatPolicy.generateUrls();
210
+ // Should return empty array
211
+ expect(urls).toHaveLength(0);
212
+ });
213
+ it('Should handle large number of combinations efficiently', async () => {
214
+ // Generate a larger set of countries (20) and format types (3)
215
+ const largeCountrySet = Array.from({ length: 20 }, (_, index) => ({
216
+ id: `${1000 + index}`,
217
+ path: `country-${1000 + index}`
218
+ }));
219
+ const largeFormatSet = Array.from({ length: 3 }, (_, index) => ({
220
+ id: `format-${index}`,
221
+ path: `format-type-${index}`
222
+ }));
223
+ // Mock the presenters to return large sets
224
+ CountryPresenter.getInstance.mockReturnValueOnce({
225
+ getFragments: vi.fn().mockReturnValue(largeCountrySet)
226
+ });
227
+ FormatPresenter.getInstance.mockReturnValueOnce({
228
+ getFragments: vi.fn().mockReturnValue(largeFormatSet)
229
+ });
230
+ // Mock to allow only specific combinations
231
+ // Only allow countries divisible by 3, and format index 0 (part-time equivalent)
232
+ const resultMap = new Map();
233
+ for (let c = 0; c < largeCountrySet.length; c++) {
234
+ for (let f = 0; f < largeFormatSet.length; f++) {
235
+ const countryId = largeCountrySet[c].id;
236
+ const formatId = largeFormatSet[f].id;
237
+ const key = `${FilterKey.COUNTRY}:${countryId}|${FilterKey.ATTENDANCE}:${formatId}`;
238
+ // Only include countries where index is divisible by 3, and format index 0
239
+ resultMap.set(key, c % 3 === 0 && f === 0);
240
+ }
241
+ }
242
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
243
+ const urls = await countryFormatPolicy.generateUrls();
244
+ // Should generate 7 countries (20/3 rounded up) * 1 format type * 2 pages = 14 URLs
245
+ expect(urls).toHaveLength(7);
246
+ // Test some specific combinations
247
+ expect(urls).toContain('format-type-0/country-1000'); // First valid country, allowed format
248
+ expect(urls).toContain('format-type-0/country-1003'); // Another valid country, allowed format
249
+ expect(urls).not.toContain('format-type-0/country-1001'); // Invalid country (not divisible by 3)
250
+ expect(urls).not.toContain('format-type-1/country-1000'); // Valid country, but invalid format
251
+ });
252
+ });
253
+ });