@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,179 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { FilterKey } from '@studyportals/search-filters/server-side';
3
+ import { SearchDependencies } from '../utils/SearchDependencies.util.mjs';
4
+ import { Duration } from '@/programmes/policies/Duration';
5
+ import { PortalType } from '@studyportals/domain-client';
6
+ import { SitemapDependencies } from '../utils/SitemapDependencies.util.mjs';
7
+ import { DurationPresenter } from '@/presenters/DurationPresenter';
8
+ describe('Policy:Duration', () => {
9
+ describe('shouldIndex', () => {
10
+ let searchDependenciesHelper;
11
+ let durationPolicy;
12
+ beforeEach(() => {
13
+ searchDependenciesHelper = new SearchDependencies();
14
+ durationPolicy = new Duration(searchDependenciesHelper.dependencies);
15
+ searchDependenciesHelper.setResultsCount(10);
16
+ searchDependenciesHelper.setPageNumber(1);
17
+ searchDependenciesHelper.setPortalType(PortalType.BACHELOR);
18
+ });
19
+ it('Should return true when 1 year duration is selected', async () => {
20
+ const duration = '[360,360]'; // 1 year
21
+ searchDependenciesHelper.setFilterKeyValues(new Map([
22
+ [FilterKey.DURATION, [duration]]
23
+ ]));
24
+ const result = await durationPolicy.shouldIndex();
25
+ expect(result).toBe(true);
26
+ });
27
+ it('Should return true when 2 years duration is selected', async () => {
28
+ const duration = '[720,720]'; // 2 years
29
+ searchDependenciesHelper.setFilterKeyValues(new Map([
30
+ [FilterKey.DURATION, [duration]]
31
+ ]));
32
+ const result = await durationPolicy.shouldIndex();
33
+ expect(result).toBe(true);
34
+ });
35
+ it('Should return false when multiple durations are selected', async () => {
36
+ const firstDuration = '[360,360]'; // 1 year
37
+ const secondDuration = '[720,720]'; // 2 years
38
+ searchDependenciesHelper.setFilterKeyValues(new Map([
39
+ [FilterKey.DURATION, [firstDuration, secondDuration]]
40
+ ]));
41
+ const result = await durationPolicy.shouldIndex();
42
+ expect(result).toBe(false);
43
+ });
44
+ it('Should return false when no duration is selected', async () => {
45
+ searchDependenciesHelper.setFilterKeyValues(new Map());
46
+ const result = await durationPolicy.shouldIndex();
47
+ expect(result).toBe(false);
48
+ });
49
+ it('Should return false when other filters are selected', async () => {
50
+ const duration = '[360,360]'; // 1 year
51
+ const countryId = '30'; // UK
52
+ searchDependenciesHelper.setFilterKeyValues(new Map([
53
+ [FilterKey.DURATION, [duration]],
54
+ [FilterKey.COUNTRY, [countryId]]
55
+ ]));
56
+ const result = await durationPolicy.shouldIndex();
57
+ expect(result).toBe(false);
58
+ });
59
+ it('Should return false when duration filter is not 1 year or 2 years', async () => {
60
+ const duration = '[-1,359]'; // This will be filtered out in generateUrls, but shouldIndex only checks basic rules
61
+ searchDependenciesHelper.setFilterKeyValues(new Map([
62
+ [FilterKey.DURATION, [duration]]
63
+ ]));
64
+ const result = await durationPolicy.shouldIndex();
65
+ expect(result).toBe(false);
66
+ });
67
+ it('Should return false when number of results is less than 7', async () => {
68
+ const duration = '[720,720]'; // 2 years
69
+ searchDependenciesHelper.setResultsCount(6);
70
+ searchDependenciesHelper.setFilterKeyValues(new Map([
71
+ [FilterKey.DURATION, [duration]]
72
+ ]));
73
+ const result = await durationPolicy.shouldIndex();
74
+ expect(result).toBe(false);
75
+ });
76
+ it('Should return false when page number is higher than 2', async () => {
77
+ const duration = '[360,360]'; // 1 year
78
+ searchDependenciesHelper.setPageNumber(4);
79
+ searchDependenciesHelper.setFilterKeyValues(new Map([
80
+ [FilterKey.DURATION, [duration]]
81
+ ]));
82
+ const result = await durationPolicy.shouldIndex();
83
+ expect(result).toBe(false);
84
+ });
85
+ it('Should return false when portal is distance learning', async () => {
86
+ const duration = '[720,720]'; // 2 years
87
+ searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
88
+ searchDependenciesHelper.setFilterKeyValues(new Map([
89
+ [FilterKey.DURATION, [duration]]
90
+ ]));
91
+ const result = await durationPolicy.shouldIndex();
92
+ expect(result).toBe(false);
93
+ });
94
+ });
95
+ describe('generateUrls', () => {
96
+ let sitemapDependenciesHelper;
97
+ let durationPolicy;
98
+ beforeEach(() => {
99
+ sitemapDependenciesHelper = new SitemapDependencies();
100
+ sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
101
+ durationPolicy = new Duration(sitemapDependenciesHelper.dependencies);
102
+ // Mock DurationPresenter with all durations including ones that should be filtered out
103
+ DurationPresenter.getInstance = vi.fn().mockReturnValue({
104
+ getFragments: vi.fn().mockReturnValue([
105
+ { id: '[360,360]', path: '1-year' }, // Should be included
106
+ { id: '[720,720]', path: '2-years' }, // Should be included
107
+ { id: '[1080,1080]', path: '3-years' }, // Should be filtered out
108
+ { id: '[1440,1440]', path: '4-years' }, // Should be filtered out
109
+ { id: '[-1,359]', path: 'less-than-1-year' } // Should be filtered out
110
+ ])
111
+ });
112
+ });
113
+ afterEach(() => {
114
+ sitemapDependenciesHelper.resetMocks();
115
+ });
116
+ it('Should generate URLs only for 1 year and 2 years durations', async () => {
117
+ // Mock the checkRulesForSitemap to return true for allowed durations
118
+ const resultMap = new Map([
119
+ [`${FilterKey.DURATION}:[360,360]`, true], // 1 year
120
+ [`${FilterKey.DURATION}:[720,720]`, true], // 2 years
121
+ [`${FilterKey.DURATION}:[1080,1080]`, true], // Won't be used due to filtering
122
+ [`${FilterKey.DURATION}:[1440,1440]`, true], // Won't be used due to filtering
123
+ [`${FilterKey.DURATION}:[-1,359]`, true] // Won't be used due to filtering
124
+ ]);
125
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
126
+ const urls = await durationPolicy.generateUrls();
127
+ // Should only include 1 year and 2 years
128
+ expect(urls).toHaveLength(2);
129
+ expect(urls).toContain('1-year');
130
+ expect(urls).toContain('2-years');
131
+ // Should exclude other durations
132
+ expect(urls).not.toContain('3-years');
133
+ expect(urls).not.toContain('4-years');
134
+ expect(urls).not.toContain('less-than-1-year');
135
+ });
136
+ it('Should exclude URLs when rule checks fail', async () => {
137
+ const resultMap = new Map([
138
+ [`${FilterKey.DURATION}:[360,360]`, false], // 1 year fails
139
+ [`${FilterKey.DURATION}:[720,720]`, true] // 2 years passes
140
+ ]);
141
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
142
+ const urls = await durationPolicy.generateUrls();
143
+ // Should only include 2 years
144
+ expect(urls).toHaveLength(1);
145
+ expect(urls).toContain('2-years');
146
+ expect(urls).not.toContain('1-year');
147
+ });
148
+ it('Should handle empty duration fragments', async () => {
149
+ DurationPresenter.getInstance.mockReturnValueOnce({
150
+ getFragments: vi.fn().mockReturnValue([])
151
+ });
152
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
153
+ const urls = await durationPolicy.generateUrls();
154
+ expect(urls).toHaveLength(0);
155
+ });
156
+ it('Should verify filtering logic with exact duration IDs', async () => {
157
+ // Test that only specific duration IDs are allowed
158
+ const mockFragments = [
159
+ { id: '[360,360]', path: '1-year' },
160
+ { id: '[720,720]', path: '2-years' },
161
+ { id: '[900,900]', path: 'other-duration' } // Should be filtered out
162
+ ];
163
+ DurationPresenter.getInstance.mockReturnValueOnce({
164
+ getFragments: vi.fn().mockReturnValue(mockFragments)
165
+ });
166
+ const resultMap = new Map([
167
+ [`${FilterKey.DURATION}:[360,360]`, true],
168
+ [`${FilterKey.DURATION}:[720,720]`, true],
169
+ [`${FilterKey.DURATION}:[900,900]`, true] // Won't be used
170
+ ]);
171
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
172
+ const urls = await durationPolicy.generateUrls();
173
+ expect(urls).toHaveLength(2);
174
+ expect(urls).toContain('1-year');
175
+ expect(urls).toContain('2-years');
176
+ expect(urls).not.toContain('other-duration');
177
+ });
178
+ });
179
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,117 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { FilterKey } from '@studyportals/search-filters/server-side';
3
+ import { SearchDependencies } from '../utils/SearchDependencies.util.mjs';
4
+ import { Format } from '@/programmes/policies/Format';
5
+ import { PortalType } from '@studyportals/domain-client';
6
+ import { SitemapDependencies } from '../utils/SitemapDependencies.util.mjs';
7
+ import { FormatPresenter } from '@/presenters/FormatPresenter';
8
+ describe('Policy:Format', () => {
9
+ describe('shouldIndex', () => {
10
+ let searchDependenciesHelper;
11
+ let formatPolicy;
12
+ beforeEach(() => {
13
+ searchDependenciesHelper = new SearchDependencies();
14
+ formatPolicy = new Format(searchDependenciesHelper.dependencies);
15
+ searchDependenciesHelper.setResultsCount(10);
16
+ searchDependenciesHelper.setPageNumber(1);
17
+ searchDependenciesHelper.setPortalType(PortalType.BACHELOR);
18
+ });
19
+ it('Should return true when fulltime format is selected', async () => {
20
+ const format = 'fulltime';
21
+ searchDependenciesHelper.setFilterKeyValues(new Map([
22
+ [FilterKey.ATTENDANCE, [format]]
23
+ ]));
24
+ const result = await formatPolicy.shouldIndex();
25
+ expect(result).toBe(true);
26
+ });
27
+ it('Should return true when parttime format is selected', async () => {
28
+ const format = 'parttime';
29
+ searchDependenciesHelper.setFilterKeyValues(new Map([
30
+ [FilterKey.ATTENDANCE, [format]]
31
+ ]));
32
+ const result = await formatPolicy.shouldIndex();
33
+ expect(result).toBe(true);
34
+ });
35
+ it('Should return false when multiple formats are selected', async () => {
36
+ const firstFormat = 'fulltime';
37
+ const secondFormat = 'parttime';
38
+ searchDependenciesHelper.setFilterKeyValues(new Map([
39
+ [FilterKey.ATTENDANCE, [firstFormat, secondFormat]]
40
+ ]));
41
+ const result = await formatPolicy.shouldIndex();
42
+ expect(result).toBe(false);
43
+ });
44
+ it('Should return false when no format is selected', async () => {
45
+ searchDependenciesHelper.setFilterKeyValues(new Map());
46
+ const result = await formatPolicy.shouldIndex();
47
+ expect(result).toBe(false);
48
+ });
49
+ it('Should return false when other filters are selected', async () => {
50
+ const format = 'fulltime';
51
+ const countryId = '30'; // UK
52
+ searchDependenciesHelper.setFilterKeyValues(new Map([
53
+ [FilterKey.ATTENDANCE, [format]],
54
+ [FilterKey.COUNTRY, [countryId]]
55
+ ]));
56
+ const result = await formatPolicy.shouldIndex();
57
+ expect(result).toBe(false);
58
+ });
59
+ it('Should return false when number of results is less than 7', async () => {
60
+ const format = 'parttime';
61
+ searchDependenciesHelper.setResultsCount(6);
62
+ searchDependenciesHelper.setFilterKeyValues(new Map([
63
+ [FilterKey.ATTENDANCE, [format]]
64
+ ]));
65
+ const result = await formatPolicy.shouldIndex();
66
+ expect(result).toBe(false);
67
+ });
68
+ it('Should return false when page number is higher than 2', async () => {
69
+ const format = 'fulltime';
70
+ searchDependenciesHelper.setPageNumber(4);
71
+ searchDependenciesHelper.setFilterKeyValues(new Map([
72
+ [FilterKey.ATTENDANCE, [format]]
73
+ ]));
74
+ const result = await formatPolicy.shouldIndex();
75
+ expect(result).toBe(false);
76
+ });
77
+ it('Should return false when portal is distance learning', async () => {
78
+ const format = 'parttime';
79
+ searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
80
+ searchDependenciesHelper.setFilterKeyValues(new Map([
81
+ [FilterKey.ATTENDANCE, [format]]
82
+ ]));
83
+ const result = await formatPolicy.shouldIndex();
84
+ expect(result).toBe(false);
85
+ });
86
+ });
87
+ describe('generateUrls', () => {
88
+ let sitemapDependenciesHelper;
89
+ let formatPolicy;
90
+ beforeEach(() => {
91
+ sitemapDependenciesHelper = new SitemapDependencies();
92
+ sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
93
+ formatPolicy = new Format(sitemapDependenciesHelper.dependencies);
94
+ // Mock FormatPresenter with all formats including ones that should be filtered out
95
+ FormatPresenter.getInstance = vi.fn().mockReturnValue({
96
+ getFragments: vi.fn().mockReturnValue([
97
+ { id: 'fulltime', path: 'full-time' },
98
+ { id: 'parttime', path: 'part-time' },
99
+ { id: 'online', path: 'online' }, // Should be filtered out
100
+ { id: 'blended', path: 'blended' }, // Should be filtered out
101
+ { id: 'face2face', path: 'on-campus' } // Should be filtered out
102
+ ])
103
+ });
104
+ });
105
+ afterEach(() => {
106
+ sitemapDependenciesHelper.resetMocks();
107
+ });
108
+ it('Should handle empty format fragments', async () => {
109
+ FormatPresenter.getInstance.mockReturnValueOnce({
110
+ getFragments: vi.fn().mockReturnValue([])
111
+ });
112
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
113
+ const urls = await formatPolicy.generateUrls();
114
+ expect(urls).toHaveLength(0);
115
+ });
116
+ });
117
+ });
@@ -0,0 +1,320 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { FilterKey } from '@studyportals/search-filters/server-side';
3
+ import { SearchDependencies } from '../utils/SearchDependencies.util.mjs';
4
+ import { PortalType } from '@studyportals/domain-client';
5
+ // Import all policies to validate new rules
6
+ import { Format } from '@/programmes/policies/Format';
7
+ import { Degree } from '@/programmes/policies/Degree';
8
+ import { DegreeFormat } from '@/programmes/policies/DegreeFormat';
9
+ import { AttendanceDegree } from '@/programmes/policies/AttendanceDegree';
10
+ import { Duration } from '@/programmes/policies/Duration';
11
+ import { DegreeDuration } from '@/programmes/policies/DegreeDuration';
12
+ import { AttendanceDuration } from '@/programmes/policies/AttendanceDuration';
13
+ import { AttendanceFormat } from '@/programmes/policies/AttendanceFormat';
14
+ import { AttendanceContinent } from '@/programmes/policies/AttendanceContinent';
15
+ import { ContinentFormat } from '@/programmes/policies/ContinentFormat';
16
+ import { DegreeTuitionFee } from '@/programmes/policies/DegreeTuitionFee';
17
+ import { DegreeContinent } from '@/programmes/policies/DegreeContinent';
18
+ import { TuitionFeeAttendance } from '@/programmes/policies/TuitionFeeAttendance';
19
+ import { DegreeTuitionFeeArea } from '@/programmes/policies/DegreeTuitionFeeArea';
20
+ import { DegreeTuitionFeeContinent } from '@/programmes/policies/DegreeTuitionFeeContinent';
21
+ import { SpecialProgrammes } from '@/programmes/policies/SpecialProgrammes';
22
+ import { DisciplineContinentAttendance } from '@/programmes/policies/DisciplineContinentAttendance';
23
+ import { DisciplineCountryAttendance } from '@/programmes/policies/DisciplineCountryAttendance';
24
+ import { DisciplineCountryFormat } from '@/programmes/policies/DisciplineCountryFormat';
25
+ import { DegreeSpecialProgrammes } from '@/programmes/policies/DegreeSpecialProgrammes';
26
+ import { DegreeAttendanceSpecialProgrammes } from '@/programmes/policies/DegreeAttendanceSpecialProgrammes';
27
+ import { ContinentSpecialProgrammes } from '@/programmes/policies';
28
+ /**
29
+ * Test suite to validate that all new indexing rules from new-rules.md are properly implemented
30
+ * This ensures we match the requirements exactly as specified
31
+ */
32
+ describe('New Rules Validation (from new-rules.md)', () => {
33
+ let searchDependenciesHelper;
34
+ beforeEach(() => {
35
+ searchDependenciesHelper = new SearchDependencies();
36
+ searchDependenciesHelper.setResultsCount(10);
37
+ searchDependenciesHelper.setPageNumber(1);
38
+ searchDependenciesHelper.setPortalType(PortalType.BACHELOR);
39
+ });
40
+ describe('Format Rules (Rules 1-2)', () => {
41
+ it('Rule 1: Full-time (Format) should be indexable', async () => {
42
+ const formatPolicy = new Format(searchDependenciesHelper.dependencies);
43
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.ATTENDANCE, ['fulltime']]]));
44
+ const result = await formatPolicy.shouldIndex();
45
+ expect(result).toBe(true);
46
+ });
47
+ it('Rule 2: Part-time (Format) should be indexable', async () => {
48
+ const formatPolicy = new Format(searchDependenciesHelper.dependencies);
49
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.ATTENDANCE, ['parttime']]]));
50
+ const result = await formatPolicy.shouldIndex();
51
+ expect(result).toBe(true);
52
+ });
53
+ });
54
+ describe('Degree Rules (Rules 3-9)', () => {
55
+ it('Rule 3: Degree should be indexable', async () => {
56
+ const degreePolicy = new Degree(searchDependenciesHelper.dependencies);
57
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DEGREE_TYPE, ['mba']]]));
58
+ const result = await degreePolicy.shouldIndex();
59
+ expect(result).toBe(true);
60
+ });
61
+ it('Rule 4: Part-time + Degree should be indexable', async () => {
62
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
63
+ const degreeFormatPolicy = new DegreeFormat(searchDependenciesHelper.dependencies);
64
+ searchDependenciesHelper.setFilterKeyValues(new Map([
65
+ [FilterKey.ATTENDANCE, ['parttime']],
66
+ [FilterKey.DEGREE_TYPE, ['mba']]
67
+ ]));
68
+ const result = await degreeFormatPolicy.shouldIndex();
69
+ expect(result).toBe(true);
70
+ });
71
+ it('Rule 7: Full-time + Degree should be indexable', async () => {
72
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
73
+ const degreeFormatPolicy = new DegreeFormat(searchDependenciesHelper.dependencies);
74
+ searchDependenciesHelper.setFilterKeyValues(new Map([
75
+ [FilterKey.ATTENDANCE, ['fulltime']],
76
+ [FilterKey.DEGREE_TYPE, ['msc']]
77
+ ]));
78
+ const result = await degreeFormatPolicy.shouldIndex();
79
+ expect(result).toBe(true);
80
+ });
81
+ it('Rule 8: Tuition Fee + Degree should be indexable', async () => {
82
+ const degreeTuitionFeePolicy = new DegreeTuitionFee(searchDependenciesHelper.dependencies);
83
+ searchDependenciesHelper.setFilterKeyValues(new Map([
84
+ [FilterKey.TUITION_FEE, ['[0,2500]']],
85
+ [FilterKey.DEGREE_TYPE, ['phd']]
86
+ ]));
87
+ const result = await degreeTuitionFeePolicy.shouldIndex();
88
+ expect(result).toBe(true);
89
+ });
90
+ it('Rule 9: Continent + Degree should be indexable', async () => {
91
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
92
+ const degreeContinentPolicy = new DegreeContinent(searchDependenciesHelper.dependencies);
93
+ searchDependenciesHelper.setFilterKeyValues(new Map([
94
+ [FilterKey.CONTINENT, ['europe']],
95
+ [FilterKey.DEGREE_TYPE, ['mba']]
96
+ ]));
97
+ const result = await degreeContinentPolicy.shouldIndex();
98
+ expect(result).toBe(true);
99
+ });
100
+ });
101
+ describe('Duration Rules (Rules 11-12, 17-22, 28-30)', () => {
102
+ it('Rule 11: 1 year (Duration) should be indexable', async () => {
103
+ const durationPolicy = new Duration(searchDependenciesHelper.dependencies);
104
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DURATION, ['[360,360]']]]));
105
+ const result = await durationPolicy.shouldIndex();
106
+ expect(result).toBe(true);
107
+ });
108
+ it('Rule 17: 2 years (Duration) should be indexable', async () => {
109
+ const durationPolicy = new Duration(searchDependenciesHelper.dependencies);
110
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DURATION, ['[720,720]']]]));
111
+ const result = await durationPolicy.shouldIndex();
112
+ expect(result).toBe(true);
113
+ });
114
+ it('Rule 12: Online Learning + 1 year should be indexable', async () => {
115
+ const attendanceDurationPolicy = new AttendanceDuration(searchDependenciesHelper.dependencies);
116
+ searchDependenciesHelper.setFilterKeyValues(new Map([
117
+ [FilterKey.DELIVERY_METHOD, ['online']],
118
+ [FilterKey.DURATION, ['[360,360]']]
119
+ ]));
120
+ const result = await attendanceDurationPolicy.shouldIndex();
121
+ expect(result).toBe(true);
122
+ });
123
+ it('Rule 21: Degree + 2 years should be indexable', async () => {
124
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
125
+ const degreeDurationPolicy = new DegreeDuration(searchDependenciesHelper.dependencies);
126
+ searchDependenciesHelper.setFilterKeyValues(new Map([
127
+ [FilterKey.DEGREE_TYPE, ['msc']],
128
+ [FilterKey.DURATION, ['[720,720]']]
129
+ ]));
130
+ const result = await degreeDurationPolicy.shouldIndex();
131
+ expect(result).toBe(true);
132
+ });
133
+ it('Rule 29: Degree + 1 year should be indexable', async () => {
134
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
135
+ const degreeDurationPolicy = new DegreeDuration(searchDependenciesHelper.dependencies);
136
+ searchDependenciesHelper.setFilterKeyValues(new Map([
137
+ [FilterKey.DEGREE_TYPE, ['mba']],
138
+ [FilterKey.DURATION, ['[360,360]']]
139
+ ]));
140
+ const result = await degreeDurationPolicy.shouldIndex();
141
+ expect(result).toBe(true);
142
+ });
143
+ });
144
+ describe('Attendance Combination Rules (Rules 10, 16, 18-20, 25-27)', () => {
145
+ it('Rule 10: Tuition Fee + Online Learning should be indexable', async () => {
146
+ const attendanceTuitionFeePolicy = new TuitionFeeAttendance(searchDependenciesHelper.dependencies);
147
+ searchDependenciesHelper.setFilterKeyValues(new Map([
148
+ [FilterKey.TUITION_FEE, ['[0,2500]']],
149
+ [FilterKey.DELIVERY_METHOD, ['online']]
150
+ ]));
151
+ const result = await attendanceTuitionFeePolicy.shouldIndex();
152
+ expect(result).toBe(true);
153
+ });
154
+ it('Rule 16: Part-time + Online Learning should be indexable', async () => {
155
+ const attendanceFormatPolicy = new AttendanceFormat(searchDependenciesHelper.dependencies);
156
+ searchDependenciesHelper.setFilterKeyValues(new Map([
157
+ [FilterKey.ATTENDANCE, ['parttime']],
158
+ [FilterKey.DELIVERY_METHOD, ['online']]
159
+ ]));
160
+ const result = await attendanceFormatPolicy.shouldIndex();
161
+ expect(result).toBe(true);
162
+ });
163
+ it('Rule 18: Blended Learning + Degree should be indexable', async () => {
164
+ searchDependenciesHelper.setPortalType(PortalType.PHD);
165
+ const attendanceDegreePolicy = new AttendanceDegree(searchDependenciesHelper.dependencies);
166
+ searchDependenciesHelper.setFilterKeyValues(new Map([
167
+ [FilterKey.DELIVERY_METHOD, ['blended']],
168
+ [FilterKey.DEGREE_TYPE, ['phd']]
169
+ ]));
170
+ const result = await attendanceDegreePolicy.shouldIndex();
171
+ expect(result).toBe(true);
172
+ });
173
+ it('Rule 19: Continent + Online Learning should be indexable', async () => {
174
+ const attendanceContinentPolicy = new AttendanceContinent(searchDependenciesHelper.dependencies);
175
+ searchDependenciesHelper.setFilterKeyValues(new Map([
176
+ [FilterKey.CONTINENT, ['europe']],
177
+ [FilterKey.DELIVERY_METHOD, ['online']]
178
+ ]));
179
+ const result = await attendanceContinentPolicy.shouldIndex();
180
+ expect(result).toBe(true);
181
+ });
182
+ it('Rule 20: Continent + Part-time should be indexable', async () => {
183
+ const continentFormatPolicy = new ContinentFormat(searchDependenciesHelper.dependencies);
184
+ searchDependenciesHelper.setFilterKeyValues(new Map([
185
+ [FilterKey.CONTINENT, ['europe']],
186
+ [FilterKey.ATTENDANCE, ['parttime']]
187
+ ]));
188
+ const result = await continentFormatPolicy.shouldIndex();
189
+ expect(result).toBe(true);
190
+ });
191
+ it('Rule 25: Full-time + Online Learning should be indexable', async () => {
192
+ const attendanceFormatPolicy = new AttendanceFormat(searchDependenciesHelper.dependencies);
193
+ searchDependenciesHelper.setFilterKeyValues(new Map([
194
+ [FilterKey.ATTENDANCE, ['fulltime']],
195
+ [FilterKey.DELIVERY_METHOD, ['online']]
196
+ ]));
197
+ const result = await attendanceFormatPolicy.shouldIndex();
198
+ expect(result).toBe(true);
199
+ });
200
+ });
201
+ describe('Complex Combination Rules (Rules 13-15, 27-28)', () => {
202
+ it('Rule 13: Region + Tuition Fee + Degree - Policy exists (DegreeTuitionFeeArea)', async () => {
203
+ // This test verifies the policy exists and can be instantiated
204
+ // The actual rule validation may require additional filters based on implementation
205
+ const degreeTuitionFeeAreaPolicy = new DegreeTuitionFeeArea(searchDependenciesHelper.dependencies);
206
+ expect(degreeTuitionFeeAreaPolicy).toBeDefined();
207
+ expect(degreeTuitionFeeAreaPolicy.name).toBe('Degree Area Tuition fee Policy');
208
+ });
209
+ it('Rule 15: Continent + Tuition Fee + Degree should be indexable', async () => {
210
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
211
+ const degreeContinentTuitionFeePolicy = new DegreeTuitionFeeContinent(searchDependenciesHelper.dependencies);
212
+ searchDependenciesHelper.setFilterKeyValues(new Map([
213
+ [FilterKey.CONTINENT, ['europe']],
214
+ [FilterKey.TUITION_FEE, ['[0,2500]']],
215
+ [FilterKey.DEGREE_TYPE, ['msc']]
216
+ ]));
217
+ const result = await degreeContinentTuitionFeePolicy.shouldIndex();
218
+ expect(result).toBe(true);
219
+ });
220
+ });
221
+ describe('Special Programmes Rules (Rules 22-24, 30, 34-35)', () => {
222
+ it('Rule 24: Executive Programmes (Special) should be indexable', async () => {
223
+ const specialProgrammesPolicy = new SpecialProgrammes(searchDependenciesHelper.dependencies);
224
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.SPECIAL_PROGRAMMES, ['executive']]]));
225
+ const result = await specialProgrammesPolicy.shouldIndex();
226
+ expect(result).toBe(true);
227
+ });
228
+ it('Rule 34: MBA + Executive Programmes should be indexable', async () => {
229
+ const degreeSpecialProgrammesPolicy = new DegreeSpecialProgrammes(searchDependenciesHelper.dependencies);
230
+ searchDependenciesHelper.setFilterKeyValues(new Map([
231
+ [FilterKey.DEGREE_TYPE, ['mba']],
232
+ [FilterKey.SPECIAL_PROGRAMMES, ['executive']]
233
+ ]));
234
+ const result = await degreeSpecialProgrammesPolicy.shouldIndex();
235
+ expect(result).toBe(true);
236
+ });
237
+ it('Rule 35: MBA + Executive Programmes + online - Policy exists (DegreeAttendanceSpecialProgrammes)', async () => {
238
+ // This test verifies the policy exists and implements the required functionality
239
+ // The policy filters for MBA + Executive programs and uses OnlineAttendanceRule
240
+ const degreeAttendanceSpecialProgrammesPolicy = new DegreeAttendanceSpecialProgrammes(searchDependenciesHelper.dependencies);
241
+ expect(degreeAttendanceSpecialProgrammesPolicy).toBeDefined();
242
+ expect(degreeAttendanceSpecialProgrammesPolicy.name).toBe('Degree Attendance Special Programmes Policy');
243
+ expect(degreeAttendanceSpecialProgrammesPolicy.description).toContain('online');
244
+ });
245
+ });
246
+ describe('Discipline Combination Rules (Rules 14, 32-33)', () => {
247
+ it('Rule 14: Continent + Discipline + Online should be indexable', async () => {
248
+ const disciplineContinentAttendancePolicy = new DisciplineContinentAttendance(searchDependenciesHelper.dependencies);
249
+ searchDependenciesHelper.setFilterKeyValues(new Map([
250
+ [FilterKey.CONTINENT, ['europe']],
251
+ [FilterKey.DISCIPLINES, ['business']],
252
+ [FilterKey.DELIVERY_METHOD, ['online']]
253
+ ]));
254
+ const result = await disciplineContinentAttendancePolicy.shouldIndex();
255
+ expect(result).toBe(true);
256
+ });
257
+ it('Rule 32: Discipline + Country + Online learning should be indexable', async () => {
258
+ const disciplineCountryAttendancePolicy = new DisciplineCountryAttendance(searchDependenciesHelper.dependencies);
259
+ searchDependenciesHelper.setFilterKeyValues(new Map([
260
+ [FilterKey.DISCIPLINES, ['engineering']],
261
+ [FilterKey.COUNTRY, ['30']], // UK
262
+ [FilterKey.DELIVERY_METHOD, ['online']]
263
+ ]));
264
+ const result = await disciplineCountryAttendancePolicy.shouldIndex();
265
+ expect(result).toBe(true);
266
+ });
267
+ it('Rule 33: Discipline + Country + Part-time should be indexable', async () => {
268
+ const disciplineCountryFormatPolicy = new DisciplineCountryFormat(searchDependenciesHelper.dependencies);
269
+ searchDependenciesHelper.setFilterKeyValues(new Map([
270
+ [FilterKey.DISCIPLINES, ['medicine']],
271
+ [FilterKey.COUNTRY, ['56']], // USA
272
+ [FilterKey.ATTENDANCE, ['parttime']]
273
+ ]));
274
+ const result = await disciplineCountryFormatPolicy.shouldIndex();
275
+ expect(result).toBe(true);
276
+ });
277
+ });
278
+ describe('Verify Policy Behavior', () => {
279
+ it('Format policy allows any attendance type in shouldIndex (filtering in generateUrls)', async () => {
280
+ const formatPolicy = new Format(searchDependenciesHelper.dependencies);
281
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.ATTENDANCE, ['online']]]) // This passes shouldIndex but gets filtered in generateUrls
282
+ );
283
+ const result = await formatPolicy.shouldIndex();
284
+ expect(result).toBe(true); // Basic validation passes
285
+ });
286
+ it('Duration policy allows 1 year duration in shouldIndex (filtering in generateUrls)', async () => {
287
+ const durationPolicy = new Duration(searchDependenciesHelper.dependencies);
288
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DURATION, ['[360,360]']]]) // 1 year - allowed in shouldIndex, filtered in generateUrls
289
+ );
290
+ const result = await durationPolicy.shouldIndex();
291
+ expect(result).toBe(true); // Basic validation passes
292
+ });
293
+ it('Duration policy allows 2 years duration in shouldIndex (filtering in generateUrls)', async () => {
294
+ const durationPolicy = new Duration(searchDependenciesHelper.dependencies);
295
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DURATION, ['[720,720]']]]) // 2 years - allowed in shouldIndex, filtered in generateUrls
296
+ );
297
+ const result = await durationPolicy.shouldIndex();
298
+ expect(result).toBe(true); // Basic validation passes
299
+ });
300
+ it('AttendanceDegree allows blended in shouldIndex (filtering in generateUrls)', async () => {
301
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
302
+ const attendanceDegreePolicy = new AttendanceDegree(searchDependenciesHelper.dependencies);
303
+ searchDependenciesHelper.setFilterKeyValues(new Map([
304
+ [FilterKey.DELIVERY_METHOD, ['blended']], // Allowed in shouldIndex, filtered in generateUrls
305
+ [FilterKey.DEGREE_TYPE, ['mba']]
306
+ ]));
307
+ const result = await attendanceDegreePolicy.shouldIndex();
308
+ expect(result).toBe(true); // Basic validation passes
309
+ });
310
+ it('AttendanceDegree allows blended in shouldIndex (filtering in generateUrls)', async () => {
311
+ const continentSpecialProgrammesPolicy = new ContinentSpecialProgrammes(searchDependenciesHelper.dependencies);
312
+ searchDependenciesHelper.setFilterKeyValues(new Map([
313
+ [FilterKey.SPECIAL_PROGRAMMES, ['erasmus']], // Allowed in shouldIndex, filtered in generateUrls
314
+ [FilterKey.CONTINENT, ['1']]
315
+ ]));
316
+ const result = await continentSpecialProgrammesPolicy.shouldIndex();
317
+ expect(result).toBe(true); // Basic validation passes
318
+ });
319
+ });
320
+ });