@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,293 @@
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 { SitemapDependencies } from '../utils/SitemapDependencies.util.mjs';
5
+ import { TuitionFeeContinent } from '@/programmes/policies/TuitionFeeContinent';
6
+ import { PortalType } from '@studyportals/domain-client';
7
+ import { ContinentPresenter } from '@/presenters/ContinentPresenter';
8
+ import { TuitionFeePresenter } from '@/presenters/TuitionFeePresenter';
9
+ // Mock the ContinentPresenter
10
+ vi.mock('@/presenters/ContinentPresenter', () => {
11
+ return {
12
+ ContinentPresenter: {
13
+ getInstance: vi.fn().mockReturnValue({
14
+ getFragments: vi.fn().mockReturnValue([
15
+ { id: '1', path: 'europe' },
16
+ { id: '9', path: 'asia' },
17
+ { id: '2', path: 'north-america' },
18
+ { id: '6', path: 'south-america' },
19
+ { id: '4', path: 'africa' }
20
+ ])
21
+ })
22
+ }
23
+ };
24
+ });
25
+ // Mock the TuitionFeePresenter
26
+ vi.mock('@/presenters/TuitionFeePresenter', () => {
27
+ return {
28
+ TuitionFeePresenter: {
29
+ getInstance: vi.fn().mockReturnValue({
30
+ getFragments: vi.fn().mockReturnValue([
31
+ { id: '[0,2500]', path: 'affordable' },
32
+ { id: '[2501,5000]', path: 'moderate' },
33
+ { id: '[5001,10000]', path: 'expensive' }
34
+ ])
35
+ })
36
+ }
37
+ };
38
+ });
39
+ describe('Policy:TuitionFeeContinent', () => {
40
+ describe('shouldIndex', () => {
41
+ let searchDependenciesHelper;
42
+ let tuitionFeeContinentPolicy;
43
+ beforeEach(() => {
44
+ searchDependenciesHelper = new SearchDependencies();
45
+ tuitionFeeContinentPolicy = new TuitionFeeContinent(searchDependenciesHelper.dependencies);
46
+ searchDependenciesHelper.setResultsCount(10);
47
+ searchDependenciesHelper.setPageNumber(1);
48
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
49
+ });
50
+ it('Should return true when all conditions are met', async () => {
51
+ const continentId = '1'; // Europe
52
+ const tuitionFee = '[0,2500]'; // Affordable
53
+ searchDependenciesHelper.setFilterKeyValues(new Map([
54
+ [FilterKey.CONTINENT, [continentId]],
55
+ [FilterKey.TUITION_FEE, [tuitionFee]]
56
+ ]));
57
+ const result = await tuitionFeeContinentPolicy.shouldIndex();
58
+ expect(result).toBe(true);
59
+ });
60
+ it('Should return false when multiple continents are selected', async () => {
61
+ const firstContinentId = '1'; // Europe
62
+ const secondContinentId = '10'; // Africa
63
+ const tuitionFee = '[0,2500]'; // Affordable
64
+ searchDependenciesHelper.setFilterKeyValues(new Map([
65
+ [FilterKey.CONTINENT, [firstContinentId, secondContinentId]],
66
+ [FilterKey.TUITION_FEE, [tuitionFee]]
67
+ ]));
68
+ const result = await tuitionFeeContinentPolicy.shouldIndex();
69
+ expect(result).toBe(false);
70
+ });
71
+ it('Should return false when multiple tuition fee values are selected', async () => {
72
+ const continentId = '1'; // Europe
73
+ const firstTuitionFee = '[0,2500]'; // Affordable
74
+ const secondTuitionFee = '[2501,5000]';
75
+ searchDependenciesHelper.setFilterKeyValues(new Map([
76
+ [FilterKey.CONTINENT, [continentId]],
77
+ [FilterKey.TUITION_FEE, [firstTuitionFee, secondTuitionFee]]
78
+ ]));
79
+ const result = await tuitionFeeContinentPolicy.shouldIndex();
80
+ expect(result).toBe(false);
81
+ });
82
+ it('Should return false when no continents are selected', async () => {
83
+ const tuitionFee = '[0,2500]'; // Affordable
84
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.TUITION_FEE, [tuitionFee]]]));
85
+ const result = await tuitionFeeContinentPolicy.shouldIndex();
86
+ expect(result).toBe(false);
87
+ });
88
+ it('Should return false when no tuition fee values are selected', async () => {
89
+ const continentId = '1'; // Europe
90
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.CONTINENT, [continentId]]]));
91
+ const result = await tuitionFeeContinentPolicy.shouldIndex();
92
+ expect(result).toBe(false);
93
+ });
94
+ it('Should return false when other filters are selected', async () => {
95
+ const continentId = '1'; // Europe
96
+ const tuitionFee = '[0,2500]'; // Affordable
97
+ const attendance = 'online';
98
+ searchDependenciesHelper.setFilterKeyValues(new Map([
99
+ [FilterKey.CONTINENT, [continentId]],
100
+ [FilterKey.TUITION_FEE, [tuitionFee]],
101
+ [FilterKey.DELIVERY_METHOD, [attendance]]
102
+ ]));
103
+ const result = await tuitionFeeContinentPolicy.shouldIndex();
104
+ expect(result).toBe(false);
105
+ });
106
+ it('Should return false when number of results is less than 7', async () => {
107
+ const continentId = '1'; // Europe
108
+ const tuitionFee = '[0,2500]'; // Affordable
109
+ const attendance = 'online';
110
+ searchDependenciesHelper.setResultsCount(6);
111
+ searchDependenciesHelper.setFilterKeyValues(new Map([
112
+ [FilterKey.CONTINENT, [continentId]],
113
+ [FilterKey.TUITION_FEE, [tuitionFee]],
114
+ [FilterKey.DELIVERY_METHOD, [attendance]]
115
+ ]));
116
+ const result = await tuitionFeeContinentPolicy.shouldIndex();
117
+ expect(result).toBe(false);
118
+ });
119
+ it('Should return false when page number is higher than 2', async () => {
120
+ const continentId = '1'; // Europe
121
+ const tuitionFee = '[0,2500]'; // Affordable
122
+ searchDependenciesHelper.setPageNumber(5);
123
+ searchDependenciesHelper.setFilterKeyValues(new Map([
124
+ [FilterKey.CONTINENT, [continentId]],
125
+ [FilterKey.TUITION_FEE, [tuitionFee]]
126
+ ]));
127
+ const result = await tuitionFeeContinentPolicy.shouldIndex();
128
+ expect(result).toBe(false);
129
+ });
130
+ it('Should return false when portal type is distance learning', async () => {
131
+ const continentId = '1'; // Europe
132
+ const tuitionFee = '[0,2500]'; // Affordable
133
+ searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
134
+ searchDependenciesHelper.setFilterKeyValues(new Map([
135
+ [FilterKey.CONTINENT, [continentId]],
136
+ [FilterKey.TUITION_FEE, [tuitionFee]]
137
+ ]));
138
+ const result = await tuitionFeeContinentPolicy.shouldIndex();
139
+ expect(result).toBe(false);
140
+ });
141
+ });
142
+ describe('generateUrls', () => {
143
+ let sitemapDependenciesHelper;
144
+ let tuitionFeeContinentPolicy;
145
+ beforeEach(() => {
146
+ sitemapDependenciesHelper = new SitemapDependencies();
147
+ sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
148
+ tuitionFeeContinentPolicy = new TuitionFeeContinent(sitemapDependenciesHelper.dependencies);
149
+ ContinentPresenter.getInstance = vi.fn().mockReturnValue({
150
+ getFragments: vi.fn().mockReturnValue([
151
+ { id: '1', path: 'europe' },
152
+ { id: '9', path: 'asia' },
153
+ { id: '2', path: 'north-america' },
154
+ { id: '6', path: 'south-america' },
155
+ { id: '4', path: 'africa' }
156
+ ])
157
+ });
158
+ TuitionFeePresenter.getInstance = vi.fn().mockReturnValue({
159
+ getFragments: vi.fn().mockReturnValue([
160
+ { id: '[0,2500]', path: 'affordable' },
161
+ { id: '[2501,5000]', path: 'moderate' },
162
+ { id: '[5001,10000]', path: 'expensive' }
163
+ ])
164
+ });
165
+ });
166
+ afterEach(() => {
167
+ sitemapDependenciesHelper.resetMocks();
168
+ });
169
+ it('Should generate URLs for valid continent-tuition fee combinations with affordable tuition fees', async () => {
170
+ // Mock the checkRulesForSitemap to only allow affordable tuition fee options
171
+ // due to AffordableTuitionFeeRule
172
+ const resultMap = new Map();
173
+ // Set up all possible combinations but only allow affordable ones
174
+ for (const continent of ['1', '9', '2', '6', '4']) {
175
+ for (const tuitionFee of ['[0,2500]', '[2501,5000]', '[5001,10000]']) {
176
+ const key = `${FilterKey.TUITION_FEE}:${tuitionFee}|${FilterKey.CONTINENT}:${continent}`;
177
+ // Only affordable tuition fee should pass
178
+ resultMap.set(key, tuitionFee === '[0,2500]');
179
+ }
180
+ }
181
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
182
+ // Call the method via reflection since it's protected
183
+ const urls = await tuitionFeeContinentPolicy.generateUrls();
184
+ // Calculate expected URLs: 5 continents * 1 tuition fee option (affordable) and page-2 variations = 10 URLs
185
+ expect(urls).toHaveLength(5);
186
+ // Verify affordable tuition fee combinations
187
+ expect(urls).toContain('affordable/europe');
188
+ expect(urls).toContain('affordable/asia');
189
+ expect(urls).toContain('affordable/north-america');
190
+ expect(urls).toContain('affordable/south-america');
191
+ expect(urls).toContain('affordable/africa');
192
+ // Verify expensive tuition fees are excluded
193
+ expect(urls).not.toContain('moderate/europe');
194
+ expect(urls).not.toContain('expensive/europe');
195
+ });
196
+ it('Should exclude specific continent-tuition fee combinations based on rules', async () => {
197
+ // Create a map that returns false for specific combinations
198
+ const resultMap = new Map();
199
+ // Only allow affordable tuition fee, but exclude Europe and Asia
200
+ for (const continent of ['1', '9', '2', '6', '4']) {
201
+ for (const tuitionFee of ['[0,2500]', '[2501,5000]', '[5001,10000]']) {
202
+ const key = `${FilterKey.TUITION_FEE}:${tuitionFee}|${FilterKey.CONTINENT}:${continent}`;
203
+ // Only affordable tuition fee should pass and exclude Europe (1) and Asia (9)
204
+ resultMap.set(key, tuitionFee === '[0,2500]' && continent !== '1' && continent !== '9');
205
+ }
206
+ }
207
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
208
+ const urls = await tuitionFeeContinentPolicy.generateUrls();
209
+ // Calculate expected URLs: 3 continents (excluding Europe and Asia) * 1 tuition fee option (affordable) and page-2 variations = 6 URLs
210
+ expect(urls).toHaveLength(3);
211
+ // Verify excluded combinations
212
+ expect(urls).not.toContain('affordable/europe');
213
+ expect(urls).not.toContain('affordable/asia');
214
+ expect(urls).not.toContain('moderate/europe');
215
+ // Verify included combinations
216
+ expect(urls).toContain('affordable/north-america');
217
+ expect(urls).toContain('affordable/south-america');
218
+ expect(urls).toContain('affordable/africa');
219
+ });
220
+ it('Should exclude all URLs when all rule checks fail', async () => {
221
+ // Create a map that returns false for all combinations
222
+ const resultMap = new Map();
223
+ for (const continent of ['1', '9', '2', '6', '4']) {
224
+ for (const tuitionFee of ['[0,2500]', '[2501,5000]', '[5001,10000]']) {
225
+ const key = `${FilterKey.TUITION_FEE}:${tuitionFee}|${FilterKey.CONTINENT}:${continent}`;
226
+ resultMap.set(key, false);
227
+ }
228
+ }
229
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
230
+ const urls = await tuitionFeeContinentPolicy.generateUrls();
231
+ // Should include no URLs
232
+ expect(urls).toHaveLength(0);
233
+ });
234
+ it('Should handle empty continent fragments', async () => {
235
+ // Mock the ContinentPresenter to return empty fragments
236
+ ContinentPresenter.getInstance.mockReturnValueOnce({
237
+ getFragments: vi.fn().mockReturnValue([])
238
+ });
239
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
240
+ const urls = await tuitionFeeContinentPolicy.generateUrls();
241
+ // Should return empty array
242
+ expect(urls).toHaveLength(0);
243
+ });
244
+ it('Should handle empty tuition fee fragments', async () => {
245
+ // Mock the TuitionFeePresenter to return empty fragments
246
+ TuitionFeePresenter.getInstance.mockReturnValueOnce({
247
+ getFragments: vi.fn().mockReturnValue([])
248
+ });
249
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
250
+ const urls = await tuitionFeeContinentPolicy.generateUrls();
251
+ // Should return empty array
252
+ expect(urls).toHaveLength(0);
253
+ });
254
+ it('Should handle performance with large number of combinations', async () => {
255
+ // Generate larger datasets for testing
256
+ const largeContinentSet = Array.from({ length: 15 }, (_, index) => ({
257
+ id: `continent-${index}`,
258
+ path: `continent-path-${index}`
259
+ }));
260
+ const largeTuitionFeeSet = Array.from({ length: 8 }, (_, index) => ({
261
+ id: `tuition-${index}`,
262
+ path: `tuition-path-${index}`
263
+ }));
264
+ // Override mocks with large datasets
265
+ ContinentPresenter.getInstance.mockReturnValueOnce({
266
+ getFragments: vi.fn().mockReturnValue(largeContinentSet)
267
+ });
268
+ TuitionFeePresenter.getInstance.mockReturnValueOnce({
269
+ getFragments: vi.fn().mockReturnValue(largeTuitionFeeSet)
270
+ });
271
+ // Mock to only allow combinations where continent index is even and tuition fee index is 0
272
+ // This simulates the AffordableTuitionFeeRule that only allows affordable (lowest) tuition fees
273
+ const resultMap = new Map();
274
+ for (let c = 0; c < largeContinentSet.length; c++) {
275
+ for (let t = 0; t < largeTuitionFeeSet.length; t++) {
276
+ const continentId = largeContinentSet[c].id;
277
+ const tuitionFeeId = largeTuitionFeeSet[t].id;
278
+ const key = `${FilterKey.TUITION_FEE}:${tuitionFeeId}|${FilterKey.CONTINENT}:${continentId}`;
279
+ resultMap.set(key, c % 2 === 0 && t === 0); // Only even continents and affordable (index 0) tuition
280
+ }
281
+ }
282
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
283
+ const urls = await tuitionFeeContinentPolicy.generateUrls();
284
+ // Calculate expected count: 8 continents (even indices) * 1 tuition fee (index 0) * page-2 variations = 16 URLs
285
+ expect(urls).toHaveLength(8);
286
+ // Test specific items
287
+ expect(urls).toContain('tuition-path-0/continent-path-0'); // Even continent, affordable tuition
288
+ expect(urls).toContain('tuition-path-0/continent-path-2'); // Even continent, affordable tuition
289
+ expect(urls).not.toContain('tuition-path-0/continent-path-1'); // Odd continent
290
+ expect(urls).not.toContain('tuition-path-1/continent-path-0'); // Non-affordable tuition
291
+ });
292
+ });
293
+ });
@@ -0,0 +1,266 @@
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 { SitemapDependencies } from '../utils/SitemapDependencies.util.mjs';
5
+ import { TuitionFeeCountry } from '@/programmes/policies/TuitionFeeCountry';
6
+ import { PortalType } from '@studyportals/domain-client';
7
+ import { CountryPresenter } from '@/presenters/CountryPresenter';
8
+ import { TuitionFeePresenter } from '@/presenters/TuitionFeePresenter';
9
+ describe('Policy:TuitionFeeCountry', () => {
10
+ describe('shouldIndex', () => {
11
+ let searchDependenciesHelper;
12
+ let tuitionFeeCountryPolicy;
13
+ beforeEach(() => {
14
+ searchDependenciesHelper = new SearchDependencies();
15
+ tuitionFeeCountryPolicy = new TuitionFeeCountry(searchDependenciesHelper.dependencies);
16
+ searchDependenciesHelper.setResultsCount(10);
17
+ searchDependenciesHelper.setPageNumber(1);
18
+ searchDependenciesHelper.setPortalType(PortalType.BACHELOR);
19
+ });
20
+ it('Should return true when all conditions are met', async () => {
21
+ const countryId = '82'; // US
22
+ const tuitionFee = '[0,2500]'; // Affordable
23
+ searchDependenciesHelper.setFilterKeyValues(new Map([
24
+ [FilterKey.COUNTRY, [countryId]],
25
+ [FilterKey.TUITION_FEE, [tuitionFee]]
26
+ ]));
27
+ const result = await tuitionFeeCountryPolicy.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 tuitionFee = '[0,2500]'; // Affordable
34
+ searchDependenciesHelper.setFilterKeyValues(new Map([
35
+ [FilterKey.COUNTRY, [firstCountryId, secondCountryId]],
36
+ [FilterKey.TUITION_FEE, [tuitionFee]]
37
+ ]));
38
+ const result = await tuitionFeeCountryPolicy.shouldIndex();
39
+ expect(result).toBe(false);
40
+ });
41
+ it('Should return false when multiple tuition fee values are selected', async () => {
42
+ const countryId = '30'; // UK
43
+ const firstTuitionFee = '[0,2500]'; // Affordable
44
+ const secondTuitionFee = '[0,3000]';
45
+ searchDependenciesHelper.setFilterKeyValues(new Map([
46
+ [FilterKey.COUNTRY, [countryId]],
47
+ [FilterKey.TUITION_FEE, [firstTuitionFee, secondTuitionFee]]
48
+ ]));
49
+ const result = await tuitionFeeCountryPolicy.shouldIndex();
50
+ expect(result).toBe(false);
51
+ });
52
+ it('Should return false when no tuition fee values are selected', async () => {
53
+ const countryId = '30'; // UK
54
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.COUNTRY, [countryId]]]));
55
+ const result = await tuitionFeeCountryPolicy.shouldIndex();
56
+ expect(result).toBe(false);
57
+ });
58
+ it('Should return false when no countries are selected', async () => {
59
+ const tuitionFee = '[0,2500]'; // Affordable
60
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.TUITION_FEE, [tuitionFee]]]));
61
+ const result = await tuitionFeeCountryPolicy.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 tuitionFee = '[0,2500]'; // Affordable
67
+ const disciplineId = '54'; // Agriculture & Forestry
68
+ searchDependenciesHelper.setFilterKeyValues(new Map([
69
+ [FilterKey.COUNTRY, [countryId]],
70
+ [FilterKey.TUITION_FEE, [tuitionFee]],
71
+ [FilterKey.DISCIPLINES, [disciplineId]]
72
+ ]));
73
+ const result = await tuitionFeeCountryPolicy.shouldIndex();
74
+ expect(result).toBe(false);
75
+ });
76
+ it('Should return false when tuition fee is not [0,2500] (affordable)', async () => {
77
+ const countryId = '30'; // UK
78
+ const tuitionFee = '[0,3000]';
79
+ searchDependenciesHelper.setFilterKeyValues(new Map([
80
+ [FilterKey.COUNTRY, [countryId]],
81
+ [FilterKey.TUITION_FEE, [tuitionFee]]
82
+ ]));
83
+ const result = await tuitionFeeCountryPolicy.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 tuitionFee = '[0,2500]'; // Affordable
89
+ searchDependenciesHelper.setResultsCount(6);
90
+ searchDependenciesHelper.setFilterKeyValues(new Map([
91
+ [FilterKey.COUNTRY, [countryId]],
92
+ [FilterKey.TUITION_FEE, [tuitionFee]]
93
+ ]));
94
+ const result = await tuitionFeeCountryPolicy.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 tuitionFee = '[0,2500]'; // Affordable
100
+ searchDependenciesHelper.setPageNumber(5);
101
+ searchDependenciesHelper.setFilterKeyValues(new Map([
102
+ [FilterKey.COUNTRY, [countryId]],
103
+ [FilterKey.TUITION_FEE, [tuitionFee]]
104
+ ]));
105
+ const result = await tuitionFeeCountryPolicy.shouldIndex();
106
+ expect(result).toBe(false);
107
+ });
108
+ it('Should return false when portal type is distance learning', async () => {
109
+ const countryId = '82'; // US
110
+ const tuitionFee = '[0,2500]'; // Affordable
111
+ searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
112
+ searchDependenciesHelper.setFilterKeyValues(new Map([
113
+ [FilterKey.COUNTRY, [countryId]],
114
+ [FilterKey.TUITION_FEE, [tuitionFee]]
115
+ ]));
116
+ const result = await tuitionFeeCountryPolicy.shouldIndex();
117
+ expect(result).toBe(false);
118
+ });
119
+ });
120
+ describe('generateUrls', () => {
121
+ let sitemapDependenciesHelper;
122
+ let tuitionFeeCountryPolicy;
123
+ beforeEach(() => {
124
+ sitemapDependenciesHelper = new SitemapDependencies();
125
+ sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
126
+ tuitionFeeCountryPolicy = new TuitionFeeCountry(sitemapDependenciesHelper.dependencies);
127
+ CountryPresenter.getInstance = vi.fn().mockReturnValue({
128
+ getFragments: vi.fn().mockReturnValue([
129
+ { id: '30', path: 'uk' },
130
+ { id: '202', path: 'australia' },
131
+ { id: '56', path: 'usa' }
132
+ ])
133
+ });
134
+ TuitionFeePresenter.getInstance = vi.fn().mockReturnValue({
135
+ getFragments: vi.fn().mockReturnValue([
136
+ { id: '[0,2500]', path: 'affordable' },
137
+ { id: '[2501,5000]', path: 'moderate' },
138
+ { id: '[5001,10000]', path: 'expensive' }
139
+ ])
140
+ });
141
+ });
142
+ afterEach(() => {
143
+ sitemapDependenciesHelper.resetMocks();
144
+ });
145
+ it('Should generate URLs for valid country-tuition fee combinations with affordable tuition fees', async () => {
146
+ // Mock the checkRulesForSitemap to only allow affordable tuition fee options
147
+ // due to AffordableTuitionFeeRule
148
+ const resultMap = new Map();
149
+ // Set up all possible combinations but only allow affordable ones
150
+ for (const country of ['30', '202', '56']) {
151
+ for (const tuitionFee of ['[0,2500]', '[2501,5000]', '[5001,10000]']) {
152
+ const key = `${FilterKey.TUITION_FEE}:${tuitionFee}|${FilterKey.COUNTRY}:${country}`;
153
+ // Only affordable tuition fee should pass
154
+ resultMap.set(key, tuitionFee === '[0,2500]');
155
+ }
156
+ }
157
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
158
+ // Call the method via reflection since it's protected
159
+ const urls = await tuitionFeeCountryPolicy.generateUrls();
160
+ // Calculate expected URLs: 3 countries * 1 tuition fee option (affordable) * 1 page = 3 URLs
161
+ expect(urls).toHaveLength(3);
162
+ // Verify affordable tuition fee combinations
163
+ expect(urls).toContain('affordable/uk');
164
+ expect(urls).toContain('affordable/usa');
165
+ expect(urls).toContain('affordable/australia');
166
+ // Verify expensive tuition fees are excluded
167
+ expect(urls).not.toContain('moderate/uk');
168
+ expect(urls).not.toContain('expensive/uk');
169
+ });
170
+ it('Should exclude specific country-tuition fee combinations based on rules', async () => {
171
+ // Create a map that returns false for specific combinations
172
+ const resultMap = new Map();
173
+ // Only allow affordable tuition fee, but exclude UK
174
+ for (const country of ['30', '56', '202']) {
175
+ for (const tuitionFee of ['[0,2500]', '[2501,5000]', '[5001,10000]']) {
176
+ const key = `${FilterKey.TUITION_FEE}:${tuitionFee}|${FilterKey.COUNTRY}:${country}`;
177
+ // Only affordable tuition fee should pass and exclude UK (30)
178
+ resultMap.set(key, tuitionFee === '[0,2500]' && country !== '30');
179
+ }
180
+ }
181
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap, false);
182
+ const urls = await tuitionFeeCountryPolicy.generateUrls();
183
+ // Calculate expected URLs: 2 countries (excluding UK) * 1 tuition fee option * 1 page = 2 URLs
184
+ expect(urls).toHaveLength(2);
185
+ // Verify excluded combinations
186
+ expect(urls).not.toContain('affordable/uk');
187
+ expect(urls).not.toContain('moderate/uk');
188
+ // Verify included combinations
189
+ expect(urls).toContain('affordable/usa');
190
+ expect(urls).toContain('affordable/australia');
191
+ });
192
+ it('Should exclude all URLs when all rule checks fail', async () => {
193
+ // Create a map that returns false for all combinations
194
+ const resultMap = new Map();
195
+ for (const country of ['30', '82', '202']) {
196
+ for (const tuitionFee of ['[0,2500]', '[2501,5000]', '[5001,10000]']) {
197
+ const key = `${FilterKey.TUITION_FEE}:${tuitionFee}|${FilterKey.COUNTRY}:${country}`;
198
+ resultMap.set(key, false);
199
+ }
200
+ }
201
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap, false);
202
+ const urls = await tuitionFeeCountryPolicy.generateUrls();
203
+ // Should include no URLs
204
+ expect(urls).toHaveLength(0);
205
+ });
206
+ it('Should handle empty country fragments', async () => {
207
+ // Mock the CountryPresenter to return empty fragments
208
+ CountryPresenter.getInstance.mockReturnValueOnce({
209
+ getFragments: vi.fn().mockReturnValue([])
210
+ });
211
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
212
+ const urls = await tuitionFeeCountryPolicy.generateUrls();
213
+ // Should return empty array
214
+ expect(urls).toHaveLength(0);
215
+ });
216
+ it('Should handle empty tuition fee fragments', async () => {
217
+ // Mock the TuitionFeePresenter to return empty fragments
218
+ TuitionFeePresenter.getInstance.mockReturnValueOnce({
219
+ getFragments: vi.fn().mockReturnValue([])
220
+ });
221
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
222
+ const urls = await tuitionFeeCountryPolicy.generateUrls();
223
+ // Should return empty array
224
+ expect(urls).toHaveLength(0);
225
+ });
226
+ it('Should handle performance with large number of combinations', async () => {
227
+ // Generate larger datasets for testing
228
+ const largeCountrySet = Array.from({ length: 30 }, (_, index) => ({
229
+ id: `country-${index}`,
230
+ path: `country-path-${index}`
231
+ }));
232
+ const largeTuitionFeeSet = Array.from({ length: 5 }, (_, index) => ({
233
+ id: `tuition-${index}`,
234
+ path: `tuition-path-${index}`
235
+ }));
236
+ // Override mocks with large datasets
237
+ CountryPresenter.getInstance.mockReturnValueOnce({
238
+ getFragments: vi.fn().mockReturnValue(largeCountrySet)
239
+ });
240
+ TuitionFeePresenter.getInstance.mockReturnValueOnce({
241
+ getFragments: vi.fn().mockReturnValue(largeTuitionFeeSet)
242
+ });
243
+ // Mock to only allow combinations where country index is even and tuition fee index is 0
244
+ // This simulates the AffordableTuitionFeeRule that only allows affordable (lowest) tuition fees
245
+ const resultMap = new Map();
246
+ for (let c = 0; c < largeCountrySet.length; c++) {
247
+ for (let t = 0; t < largeTuitionFeeSet.length; t++) {
248
+ const countryId = largeCountrySet[c].id;
249
+ const tuitionFeeId = largeTuitionFeeSet[t].id;
250
+ const key = `${FilterKey.TUITION_FEE}:${tuitionFeeId}|${FilterKey.COUNTRY}:${countryId}`;
251
+ resultMap.set(key, c % 2 === 0 && t === 0); // Only even countries and affordable (index 0) tuition
252
+ }
253
+ }
254
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap, false);
255
+ const urls = await tuitionFeeCountryPolicy.generateUrls();
256
+ // Calculate expected count: 15 countries (even indices) * 1 tuition fee (index 0) * 1 page
257
+ // 15 * 1 * 1 = 15 URLs
258
+ expect(urls).toHaveLength(15);
259
+ // Test specific items
260
+ expect(urls).toContain('tuition-path-0/country-path-0'); // Even country, affordable tuition
261
+ expect(urls).toContain('tuition-path-0/country-path-2'); // Even country, affordable tuition
262
+ expect(urls).not.toContain('tuition-path-0/country-path-1'); // Odd country
263
+ expect(urls).not.toContain('tuition-path-1/country-path-0'); // Non-affordable tuition
264
+ });
265
+ });
266
+ });