@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,217 @@
1
+ import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';
2
+ import { DegreeTypeFilterOptionValue, FilterKey, TuitionFeeFilterOptionValue } from '@studyportals/search-filters/server-side';
3
+ import { PortalType } from '@studyportals/domain-client';
4
+ import { SearchDependencies } from '../utils/SearchDependencies.util.mjs';
5
+ import { SitemapDependencies } from '../utils/SitemapDependencies.util.mjs';
6
+ import { DegreeCountryTuitionFee } from '@/programmes/policies/DegreeCountryTuitionFee';
7
+ import { DegreePresenter } from '@/presenters/DegreePresenter';
8
+ import { CountryPresenter } from '@/presenters/CountryPresenter';
9
+ import { TuitionFeePresenter } from '@/presenters/TuitionFeePresenter';
10
+ describe('Policy:DegreeCountryTuitionFee', () => {
11
+ describe('shouldIndex', () => {
12
+ let searchDependenciesHelper;
13
+ let degreeCountryTuitionFeePolicy;
14
+ beforeEach(() => {
15
+ searchDependenciesHelper = new SearchDependencies();
16
+ degreeCountryTuitionFeePolicy = new DegreeCountryTuitionFee(searchDependenciesHelper.dependencies);
17
+ searchDependenciesHelper.setResultsCount(7);
18
+ searchDependenciesHelper.setPageNumber(1);
19
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
20
+ });
21
+ describe('MBA with affordable tuition', () => {
22
+ it('Should return true for MBA with any country and affordable tuition', async () => {
23
+ searchDependenciesHelper.setFilterKeyValues(new Map([
24
+ [FilterKey.DEGREE_TYPE, ['mba']],
25
+ [FilterKey.COUNTRY, ['999']], // Any country
26
+ [FilterKey.TUITION_FEE, [TuitionFeeFilterOptionValue.ZERO_TO_TWO_THOUSAND_FIVE_HUNDRED]]
27
+ ]));
28
+ const result = await degreeCountryTuitionFeePolicy.shouldIndex();
29
+ expect(result).toBe(true);
30
+ });
31
+ it('Should return false for MBA with expensive tuition', async () => {
32
+ searchDependenciesHelper.setFilterKeyValues(new Map([
33
+ [FilterKey.DEGREE_TYPE, ['mba']],
34
+ [FilterKey.COUNTRY, ['82']], // USA
35
+ [FilterKey.TUITION_FEE, ['10000-15000']] // Expensive tuition
36
+ ]));
37
+ const result = await degreeCountryTuitionFeePolicy.shouldIndex();
38
+ expect(result).toBe(false);
39
+ });
40
+ });
41
+ describe('Master of Laws with affordable tuition', () => {
42
+ it.each([
43
+ '82', // USA
44
+ '30', // UK
45
+ '56', // Canada
46
+ '108' // India
47
+ ])('Should return true for LLM with country %s and affordable tuition', async (countryId) => {
48
+ searchDependenciesHelper.setFilterKeyValues(new Map([
49
+ [FilterKey.DEGREE_TYPE, [DegreeTypeFilterOptionValue.LLM]],
50
+ [FilterKey.COUNTRY, [countryId]],
51
+ [FilterKey.TUITION_FEE, [TuitionFeeFilterOptionValue.ZERO_TO_TWO_THOUSAND_FIVE_HUNDRED]]
52
+ ]));
53
+ const result = await degreeCountryTuitionFeePolicy.shouldIndex();
54
+ expect(result).toBe(true);
55
+ });
56
+ it.each([
57
+ '11', // Germany (not allowed for LLM)
58
+ '202', // Australia (not allowed for LLM)
59
+ '999' // Invalid country
60
+ ])('Should return false for LLM with invalid country %s', async (countryId) => {
61
+ searchDependenciesHelper.setFilterKeyValues(new Map([
62
+ [FilterKey.DEGREE_TYPE, ['llm']],
63
+ [FilterKey.COUNTRY, [countryId]],
64
+ [FilterKey.TUITION_FEE, [TuitionFeeFilterOptionValue.ZERO_TO_TWO_THOUSAND_FIVE_HUNDRED]]
65
+ ]));
66
+ const result = await degreeCountryTuitionFeePolicy.shouldIndex();
67
+ expect(result).toBe(false);
68
+ });
69
+ });
70
+ describe('unsupported degrees', () => {
71
+ it('Should return false for unsupported degree types', async () => {
72
+ searchDependenciesHelper.setFilterKeyValues(new Map([
73
+ [FilterKey.DEGREE_TYPE, ['msc']], // Not supported by this policy
74
+ [FilterKey.COUNTRY, ['82']],
75
+ [FilterKey.TUITION_FEE, [TuitionFeeFilterOptionValue.ZERO_TO_TWO_THOUSAND_FIVE_HUNDRED]]
76
+ ]));
77
+ const result = await degreeCountryTuitionFeePolicy.shouldIndex();
78
+ expect(result).toBe(false);
79
+ });
80
+ });
81
+ describe('filter validation', () => {
82
+ it('Should return false when multiple degrees are selected', async () => {
83
+ searchDependenciesHelper.setFilterKeyValues(new Map([
84
+ [FilterKey.DEGREE_TYPE, ['mba', 'llm']],
85
+ [FilterKey.COUNTRY, ['82']],
86
+ [FilterKey.TUITION_FEE, [TuitionFeeFilterOptionValue.ZERO_TO_TWO_THOUSAND_FIVE_HUNDRED]]
87
+ ]));
88
+ const result = await degreeCountryTuitionFeePolicy.shouldIndex();
89
+ expect(result).toBe(false);
90
+ });
91
+ it('Should return false when multiple countries are selected', async () => {
92
+ searchDependenciesHelper.setFilterKeyValues(new Map([
93
+ [FilterKey.DEGREE_TYPE, ['mba']],
94
+ [FilterKey.COUNTRY, ['82', '30']],
95
+ [FilterKey.TUITION_FEE, [TuitionFeeFilterOptionValue.ZERO_TO_TWO_THOUSAND_FIVE_HUNDRED]]
96
+ ]));
97
+ const result = await degreeCountryTuitionFeePolicy.shouldIndex();
98
+ expect(result).toBe(false);
99
+ });
100
+ it('Should return false when other filters are selected', async () => {
101
+ searchDependenciesHelper.setFilterKeyValues(new Map([
102
+ [FilterKey.DEGREE_TYPE, ['mba']],
103
+ [FilterKey.COUNTRY, ['82']],
104
+ [FilterKey.TUITION_FEE, [TuitionFeeFilterOptionValue.ZERO_TO_TWO_THOUSAND_FIVE_HUNDRED]],
105
+ [FilterKey.DISCIPLINES, ['54']] // Extra filter
106
+ ]));
107
+ const result = await degreeCountryTuitionFeePolicy.shouldIndex();
108
+ expect(result).toBe(false);
109
+ });
110
+ });
111
+ });
112
+ describe('generateUrls', () => {
113
+ let sitemapDependenciesHelper;
114
+ let degreeCountryTuitionFeePolicy;
115
+ beforeEach(() => {
116
+ sitemapDependenciesHelper = new SitemapDependencies();
117
+ sitemapDependenciesHelper.setProgrammeCount(10);
118
+ degreeCountryTuitionFeePolicy = new DegreeCountryTuitionFee(sitemapDependenciesHelper.dependencies);
119
+ DegreePresenter.getInstance = vi.fn().mockReturnValue({
120
+ getFragments: vi.fn().mockReturnValue([
121
+ { id: 'mba', path: 'mba' },
122
+ { id: 'llm', path: 'llm' },
123
+ { id: 'msc', path: 'masters' } // Not supported
124
+ ])
125
+ });
126
+ CountryPresenter.getInstance = vi.fn().mockReturnValue({
127
+ getFragments: vi.fn().mockReturnValue([
128
+ { id: '82', path: 'usa' },
129
+ { id: '30', path: 'uk' },
130
+ { id: '56', path: 'canada' },
131
+ { id: '108', path: 'india' },
132
+ { id: '11', path: 'germany' },
133
+ { id: '202', path: 'australia' }
134
+ ])
135
+ });
136
+ TuitionFeePresenter.getInstance = vi.fn().mockReturnValue({
137
+ getFragments: vi.fn().mockReturnValue([
138
+ { id: TuitionFeeFilterOptionValue.ZERO_TO_TWO_THOUSAND_FIVE_HUNDRED, path: 'affordable' },
139
+ { id: '10000-15000', path: 'expensive' }
140
+ ])
141
+ });
142
+ });
143
+ afterEach(() => {
144
+ sitemapDependenciesHelper.resetMocks();
145
+ });
146
+ it('Should generate URLs for MBA with all countries and affordable tuition', async () => {
147
+ const resultMap = new Map();
148
+ // MBA accepts all countries
149
+ const allCountries = ['82', '30', '32', '108', '11', '202'];
150
+ for (const country of allCountries) {
151
+ const key = `${FilterKey.DEGREE_TYPE}:mba|${FilterKey.COUNTRY}:${country}|${FilterKey.TUITION_FEE}:${TuitionFeeFilterOptionValue.ZERO_TO_TWO_THOUSAND_FIVE_HUNDRED}`;
152
+ resultMap.set(key, true);
153
+ }
154
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
155
+ const urls = await degreeCountryTuitionFeePolicy.generateUrls();
156
+ // MBA: 6 countries * 2 pages = 12 URLs
157
+ expect(urls.length).toBeGreaterThan(0);
158
+ expect(urls).toContain('mba/affordable/usa');
159
+ expect(urls).toContain('mba/affordable/uk');
160
+ expect(urls).toContain('mba/affordable/canada');
161
+ expect(urls).toContain('mba/affordable/india');
162
+ expect(urls).toContain('mba/affordable/germany');
163
+ expect(urls).toContain('mba/affordable/australia');
164
+ });
165
+ it('Should generate URLs for LLM with specific countries and affordable tuition', async () => {
166
+ const resultMap = new Map();
167
+ // LLM accepts only specific countries: USA, UK, Canada, India
168
+ const llmCountries = ['82', '30', '56', '108'];
169
+ for (const country of llmCountries) {
170
+ const key = `${FilterKey.DEGREE_TYPE}:llm|${FilterKey.COUNTRY}:${country}|${FilterKey.TUITION_FEE}:${TuitionFeeFilterOptionValue.ZERO_TO_TWO_THOUSAND_FIVE_HUNDRED}`;
171
+ resultMap.set(key, true);
172
+ }
173
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
174
+ const urls = await degreeCountryTuitionFeePolicy.generateUrls();
175
+ // LLM: 4 allowed countries * 2 pages = 8 URLs
176
+ expect(urls).toContain('llm/affordable/usa');
177
+ expect(urls).toContain('llm/affordable/uk');
178
+ expect(urls).toContain('llm/affordable/canada');
179
+ expect(urls).toContain('llm/affordable/india');
180
+ // Should not include invalid countries for LLM
181
+ expect(urls).not.toContain('llm/affordable/germany');
182
+ expect(urls).not.toContain('llm/affordable/australia');
183
+ });
184
+ it('Should handle missing affordable tuition gracefully', async () => {
185
+ // Mock TuitionFeePresenter to not return affordable tuition
186
+ TuitionFeePresenter.getInstance.mockReturnValueOnce({
187
+ getFragments: vi.fn().mockReturnValue([
188
+ { id: '10000-15000', path: 'expensive' }
189
+ ])
190
+ });
191
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
192
+ const urls = await degreeCountryTuitionFeePolicy.generateUrls();
193
+ // Should return empty array when no affordable tuition is available
194
+ expect(urls).toHaveLength(0);
195
+ });
196
+ it('Should exclude unsupported degrees', async () => {
197
+ const resultMap = new Map();
198
+ // Only MBA and LLM should be supported
199
+ const allDegrees = ['mba', 'llm', 'msc'];
200
+ const supportedDegrees = ['mba', 'llm'];
201
+ const countries = ['82', '30'];
202
+ for (const degree of allDegrees) {
203
+ for (const country of countries) {
204
+ const key = `${FilterKey.DEGREE_TYPE}:${degree}|${FilterKey.COUNTRY}:${country}|${FilterKey.TUITION_FEE}:${TuitionFeeFilterOptionValue.ZERO_TO_TWO_THOUSAND_FIVE_HUNDRED}`;
205
+ resultMap.set(key, supportedDegrees.includes(degree));
206
+ }
207
+ }
208
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
209
+ const urls = await degreeCountryTuitionFeePolicy.generateUrls();
210
+ // Should include supported degrees
211
+ expect(urls).toContain('mba/affordable/usa');
212
+ expect(urls).toContain('llm/affordable/uk');
213
+ // Should not include unsupported degrees
214
+ expect(urls).not.toContain('masters/affordable/usa');
215
+ });
216
+ });
217
+ });
@@ -0,0 +1,221 @@
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 { DegreeFormat } from '@/programmes/policies/DegreeFormat';
5
+ import { PortalType } from '@studyportals/domain-client';
6
+ import { SitemapDependencies } from '../utils/SitemapDependencies.util.mjs';
7
+ import { DegreePresenter } from '@/presenters/DegreePresenter';
8
+ import { FormatPresenter } from '@/presenters/FormatPresenter';
9
+ describe('Policy:DegreeFormat', () => {
10
+ describe('shouldIndex', () => {
11
+ let searchDependenciesHelper;
12
+ let degreeFormatPolicy;
13
+ beforeEach(() => {
14
+ searchDependenciesHelper = new SearchDependencies();
15
+ degreeFormatPolicy = new DegreeFormat(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 (fulltime + degree)', async () => {
21
+ const format = 'fulltime';
22
+ const degree = 'mba';
23
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
24
+ searchDependenciesHelper.setFilterKeyValues(new Map([
25
+ [FilterKey.ATTENDANCE, [format]],
26
+ [FilterKey.DEGREE_TYPE, [degree]]
27
+ ]));
28
+ const result = await degreeFormatPolicy.shouldIndex();
29
+ expect(result).toBe(true);
30
+ });
31
+ it('Should return true when all conditions are met (parttime + degree)', async () => {
32
+ const format = 'parttime';
33
+ const degree = 'msc';
34
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
35
+ searchDependenciesHelper.setFilterKeyValues(new Map([
36
+ [FilterKey.ATTENDANCE, [format]],
37
+ [FilterKey.DEGREE_TYPE, [degree]]
38
+ ]));
39
+ const result = await degreeFormatPolicy.shouldIndex();
40
+ expect(result).toBe(true);
41
+ });
42
+ it('Should return false when multiple formats are selected', async () => {
43
+ const firstFormat = 'fulltime';
44
+ const secondFormat = 'parttime';
45
+ const degree = 'mba';
46
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
47
+ searchDependenciesHelper.setFilterKeyValues(new Map([
48
+ [FilterKey.ATTENDANCE, [firstFormat, secondFormat]],
49
+ [FilterKey.DEGREE_TYPE, [degree]]
50
+ ]));
51
+ const result = await degreeFormatPolicy.shouldIndex();
52
+ expect(result).toBe(false);
53
+ });
54
+ it('Should return false when multiple degrees are selected', async () => {
55
+ const format = 'fulltime';
56
+ const firstDegree = 'mba';
57
+ const secondDegree = 'msc';
58
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
59
+ searchDependenciesHelper.setFilterKeyValues(new Map([
60
+ [FilterKey.ATTENDANCE, [format]],
61
+ [FilterKey.DEGREE_TYPE, [firstDegree, secondDegree]]
62
+ ]));
63
+ const result = await degreeFormatPolicy.shouldIndex();
64
+ expect(result).toBe(false);
65
+ });
66
+ it('Should return false when no format is selected', async () => {
67
+ const degree = 'mba';
68
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
69
+ searchDependenciesHelper.setFilterKeyValues(new Map([
70
+ [FilterKey.DEGREE_TYPE, [degree]]
71
+ ]));
72
+ const result = await degreeFormatPolicy.shouldIndex();
73
+ expect(result).toBe(false);
74
+ });
75
+ it('Should return false when no degree is selected', async () => {
76
+ const format = 'parttime';
77
+ searchDependenciesHelper.setFilterKeyValues(new Map([
78
+ [FilterKey.ATTENDANCE, [format]]
79
+ ]));
80
+ const result = await degreeFormatPolicy.shouldIndex();
81
+ expect(result).toBe(false);
82
+ });
83
+ it('Should return false when other filters are selected', async () => {
84
+ const format = 'fulltime';
85
+ const degree = 'mba';
86
+ const countryId = '30'; // UK
87
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
88
+ searchDependenciesHelper.setFilterKeyValues(new Map([
89
+ [FilterKey.ATTENDANCE, [format]],
90
+ [FilterKey.DEGREE_TYPE, [degree]],
91
+ [FilterKey.COUNTRY, [countryId]]
92
+ ]));
93
+ const result = await degreeFormatPolicy.shouldIndex();
94
+ expect(result).toBe(false);
95
+ });
96
+ it('Should return false when degree is not indexable', async () => {
97
+ const format = 'parttime';
98
+ const degree = 'ap'; // Academy Profession - not indexable
99
+ searchDependenciesHelper.setFilterKeyValues(new Map([
100
+ [FilterKey.ATTENDANCE, [format]],
101
+ [FilterKey.DEGREE_TYPE, [degree]]
102
+ ]));
103
+ const result = await degreeFormatPolicy.shouldIndex();
104
+ expect(result).toBe(false);
105
+ });
106
+ it('Should return false when number of results is less than 7', async () => {
107
+ const format = 'fulltime';
108
+ const degree = 'mba';
109
+ searchDependenciesHelper.setResultsCount(6);
110
+ searchDependenciesHelper.setFilterKeyValues(new Map([
111
+ [FilterKey.ATTENDANCE, [format]],
112
+ [FilterKey.DEGREE_TYPE, [degree]]
113
+ ]));
114
+ const result = await degreeFormatPolicy.shouldIndex();
115
+ expect(result).toBe(false);
116
+ });
117
+ });
118
+ describe('generateUrls', () => {
119
+ let sitemapDependenciesHelper;
120
+ let degreeFormatPolicy;
121
+ beforeEach(() => {
122
+ sitemapDependenciesHelper = new SitemapDependencies();
123
+ sitemapDependenciesHelper.setProgrammeCount(10);
124
+ degreeFormatPolicy = new DegreeFormat(sitemapDependenciesHelper.dependencies);
125
+ // Mock FormatPresenter - only fulltime and parttime should be used
126
+ FormatPresenter.getInstance = vi.fn().mockReturnValue({
127
+ getFragments: vi.fn().mockReturnValue([
128
+ { id: 'fulltime', path: 'full-time' },
129
+ { id: 'parttime', path: 'part-time' },
130
+ { id: 'online', path: 'online' }, // Should be filtered out
131
+ { id: 'blended', path: 'blended' } // Should be filtered out
132
+ ])
133
+ });
134
+ DegreePresenter.getInstance = vi.fn().mockReturnValue({
135
+ getFragments: vi.fn().mockReturnValue([
136
+ { id: 'mba', path: 'master-of-business-administration' },
137
+ { id: 'msc', path: 'master-of-science' },
138
+ { id: 'phd', path: 'doctor-of-philosophy' }
139
+ ])
140
+ });
141
+ });
142
+ afterEach(() => {
143
+ sitemapDependenciesHelper.resetMocks();
144
+ });
145
+ it('Should generate URLs only for fulltime/parttime formats with degrees', async () => {
146
+ // Mock rules to return true for indexable combinations
147
+ const resultMap = new Map([
148
+ // Fulltime combinations
149
+ [`${FilterKey.ATTENDANCE}:fulltime|${FilterKey.DEGREE_TYPE}:mba`, true],
150
+ [`${FilterKey.ATTENDANCE}:fulltime|${FilterKey.DEGREE_TYPE}:msc`, true],
151
+ [`${FilterKey.ATTENDANCE}:fulltime|${FilterKey.DEGREE_TYPE}:phd`, true],
152
+ // Parttime combinations
153
+ [`${FilterKey.ATTENDANCE}:parttime|${FilterKey.DEGREE_TYPE}:mba`, true],
154
+ [`${FilterKey.ATTENDANCE}:parttime|${FilterKey.DEGREE_TYPE}:msc`, true],
155
+ [`${FilterKey.ATTENDANCE}:parttime|${FilterKey.DEGREE_TYPE}:phd`, true]
156
+ ]);
157
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
158
+ const urls = await degreeFormatPolicy.generateUrls();
159
+ // Should include 2 formats * 3 degrees = 6 URLs
160
+ expect(urls).toHaveLength(6);
161
+ // Verify specific combinations
162
+ expect(urls).toContain('master-of-business-administration/full-time');
163
+ expect(urls).toContain('master-of-business-administration/part-time');
164
+ expect(urls).toContain('master-of-science/full-time');
165
+ expect(urls).toContain('master-of-science/part-time');
166
+ expect(urls).toContain('doctor-of-philosophy/full-time');
167
+ expect(urls).toContain('doctor-of-philosophy/part-time');
168
+ // Should not contain online or blended formats
169
+ expect(urls).not.toContain('master-of-business-administration/online');
170
+ expect(urls).not.toContain('master-of-business-administration/blended');
171
+ });
172
+ it('Should exclude non-indexable degrees', async () => {
173
+ // Add non-indexable degree to mock
174
+ DegreePresenter.getInstance.mockReturnValueOnce({
175
+ getFragments: vi.fn().mockReturnValue([
176
+ { id: 'mba', path: 'master-of-business-administration' },
177
+ { id: 'ap', path: 'academy-profession' } // Non-indexable
178
+ ])
179
+ });
180
+ const resultMap = new Map([
181
+ [`${FilterKey.ATTENDANCE}:fulltime|${FilterKey.DEGREE_TYPE}:mba`, true],
182
+ [`${FilterKey.ATTENDANCE}:parttime|${FilterKey.DEGREE_TYPE}:mba`, true],
183
+ [`${FilterKey.ATTENDANCE}:fulltime|${FilterKey.DEGREE_TYPE}:ap`, false], // Non-indexable
184
+ [`${FilterKey.ATTENDANCE}:parttime|${FilterKey.DEGREE_TYPE}:ap`, false] // Non-indexable
185
+ ]);
186
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
187
+ const urls = await degreeFormatPolicy.generateUrls();
188
+ expect(urls).toHaveLength(2); // Only MBA combinations
189
+ expect(urls).toContain('master-of-business-administration/full-time');
190
+ expect(urls).toContain('master-of-business-administration/part-time');
191
+ expect(urls).not.toContain('academy-profession/full-time');
192
+ expect(urls).not.toContain('academy-profession/part-time');
193
+ });
194
+ it('Should handle rule failures', async () => {
195
+ const resultMap = new Map([
196
+ [`${FilterKey.ATTENDANCE}:fulltime|${FilterKey.DEGREE_TYPE}:mba`, true],
197
+ [`${FilterKey.ATTENDANCE}:parttime|${FilterKey.DEGREE_TYPE}:mba`, false], // Fails
198
+ [`${FilterKey.ATTENDANCE}:fulltime|${FilterKey.DEGREE_TYPE}:msc`, false], // Fails
199
+ [`${FilterKey.ATTENDANCE}:parttime|${FilterKey.DEGREE_TYPE}:msc`, true],
200
+ [`${FilterKey.ATTENDANCE}:fulltime|${FilterKey.DEGREE_TYPE}:phd`, true],
201
+ [`${FilterKey.ATTENDANCE}:parttime|${FilterKey.DEGREE_TYPE}:phd`, true]
202
+ ]);
203
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
204
+ const urls = await degreeFormatPolicy.generateUrls();
205
+ expect(urls).toHaveLength(4); // mba/fulltime, msc/parttime, phd/fulltime, phd/parttime
206
+ expect(urls).toContain('master-of-business-administration/full-time');
207
+ expect(urls).toContain('master-of-science/part-time');
208
+ expect(urls).toContain('doctor-of-philosophy/full-time');
209
+ expect(urls).toContain('doctor-of-philosophy/part-time');
210
+ expect(urls).not.toContain('master-of-business-administration/part-time');
211
+ expect(urls).not.toContain('master-of-science/full-time');
212
+ });
213
+ it('Should handle empty fragments', async () => {
214
+ FormatPresenter.getInstance.mockReturnValueOnce({
215
+ getFragments: vi.fn().mockReturnValue([])
216
+ });
217
+ const urls = await degreeFormatPolicy.generateUrls();
218
+ expect(urls).toHaveLength(0);
219
+ });
220
+ });
221
+ });
@@ -0,0 +1,159 @@
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 { Discipline } from '@/programmes/policies/Discipline';
6
+ import { PortalType } from '@studyportals/domain-client';
7
+ import { DisciplinePresenter } from '@/presenters/DisciplinePresenter';
8
+ describe('Policy:Discipline', () => {
9
+ describe('shouldIndex', () => {
10
+ let searchDependenciesHelper;
11
+ let disciplinePolicy;
12
+ beforeEach(() => {
13
+ searchDependenciesHelper = new SearchDependencies();
14
+ disciplinePolicy = new Discipline(searchDependenciesHelper.dependencies);
15
+ searchDependenciesHelper.setResultsCount(10);
16
+ searchDependenciesHelper.setPageNumber(1);
17
+ searchDependenciesHelper.setPortalType(PortalType.PHD);
18
+ });
19
+ it('Should return true when all conditions are met', async () => {
20
+ const disciplineId = '54'; // Agriculture & Forestry
21
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DISCIPLINES, [disciplineId]]]));
22
+ const result = await disciplinePolicy.shouldIndex();
23
+ expect(result).toBe(true);
24
+ });
25
+ it('Should return false when multiple disciplines are selected', async () => {
26
+ const firstDisciplineId = '54'; // Agriculture & Forestry
27
+ const secondDisciplineId = '12'; // Applied Sciences & Professions
28
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DISCIPLINES, [firstDisciplineId, secondDisciplineId]]]));
29
+ const result = await disciplinePolicy.shouldIndex();
30
+ expect(result).toBe(false);
31
+ });
32
+ it('Should return false when no disciplines are selected', async () => {
33
+ const countryId = '30'; // UK
34
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.COUNTRY, [countryId]]]));
35
+ const result = await disciplinePolicy.shouldIndex();
36
+ expect(result).toBe(false);
37
+ });
38
+ it('Should return false when other filters are selected', async () => {
39
+ const disciplineId = '54'; // Agriculture & Forestry
40
+ const countryId = '30'; // UK
41
+ searchDependenciesHelper.setFilterKeyValues(new Map([
42
+ [FilterKey.COUNTRY, [countryId]],
43
+ [FilterKey.DISCIPLINES, [disciplineId]]
44
+ ]));
45
+ const result = await disciplinePolicy.shouldIndex();
46
+ expect(result).toBe(false);
47
+ });
48
+ it('Should return false when number of results is less than 7', async () => {
49
+ const disciplineId = '54'; // Agriculture & Forestry
50
+ searchDependenciesHelper.setResultsCount(6);
51
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DISCIPLINES, [disciplineId]]]));
52
+ const result = await disciplinePolicy.shouldIndex();
53
+ expect(result).toBe(false);
54
+ });
55
+ it('Should return false when page number is higher than 2', async () => {
56
+ const disciplineId = '54'; // Agriculture & Forestry
57
+ searchDependenciesHelper.setPageNumber(3);
58
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DISCIPLINES, [disciplineId]]]));
59
+ const result = await disciplinePolicy.shouldIndex();
60
+ expect(result).toBe(false);
61
+ });
62
+ it('Should return false when portal type is distance learning', async () => {
63
+ const disciplineId = '54'; // Agriculture & Forestry
64
+ searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
65
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DISCIPLINES, [disciplineId]]]));
66
+ const result = await disciplinePolicy.shouldIndex();
67
+ expect(result).toBe(false);
68
+ });
69
+ });
70
+ describe('generateUrls', () => {
71
+ let sitemapDependenciesHelper;
72
+ let disciplinePolicy;
73
+ beforeEach(() => {
74
+ sitemapDependenciesHelper = new SitemapDependencies();
75
+ sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
76
+ disciplinePolicy = new Discipline(sitemapDependenciesHelper.dependencies);
77
+ DisciplinePresenter.getInstance = vi.fn().mockReturnValue({
78
+ getFragments: vi.fn().mockReturnValue([
79
+ { id: '54', path: 'agriculture-forestry' },
80
+ { id: '12', path: 'applied-sciences' },
81
+ { id: '152', path: 'computer-science-it' }
82
+ ])
83
+ });
84
+ });
85
+ afterEach(() => {
86
+ sitemapDependenciesHelper.resetMocks();
87
+ });
88
+ it('Should generate URLs for all valid disciplines', async () => {
89
+ // Mock the checkRulesForSitemap to return true for all filter combinations
90
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
91
+ // Call the method via reflection since it's protected
92
+ const urls = await disciplinePolicy.generateUrls();
93
+ // Verify all discipline fragments were included
94
+ expect(urls).toHaveLength(3);
95
+ expect(urls).toContain('agriculture-forestry');
96
+ expect(urls).toContain('applied-sciences');
97
+ expect(urls).toContain('computer-science-it');
98
+ });
99
+ it('Should exclude URLs that fail rule checks', async () => {
100
+ // Create a map that returns false for Computer Science
101
+ const resultMap = new Map([[`${FilterKey.DISCIPLINES}:152`, false]]);
102
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
103
+ const urls = await disciplinePolicy.generateUrls();
104
+ // Should only include Agriculture and Applied Sciences, not Computer Science
105
+ expect(urls).toHaveLength(2);
106
+ expect(urls).toContain('agriculture-forestry');
107
+ expect(urls).toContain('applied-sciences');
108
+ expect(urls).not.toContain('computer-science-it');
109
+ });
110
+ it('Should exclude all URLs when all checks fail', async () => {
111
+ // Create a map that returns false for all disciplines
112
+ const resultMap = new Map([
113
+ [`${FilterKey.DISCIPLINES}:54`, false],
114
+ [`${FilterKey.DISCIPLINES}:12`, false],
115
+ [`${FilterKey.DISCIPLINES}:152`, false]
116
+ ]);
117
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
118
+ const urls = await disciplinePolicy.generateUrls();
119
+ // Should include no URLs
120
+ expect(urls).toHaveLength(0);
121
+ });
122
+ it('Should handle empty fragments array', async () => {
123
+ // Mock the DisciplinePresenter to return empty fragments
124
+ DisciplinePresenter.getInstance.mockReturnValueOnce({
125
+ getFragments: vi.fn().mockReturnValue([])
126
+ });
127
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
128
+ const urls = await disciplinePolicy.generateUrls();
129
+ // Should return empty array
130
+ expect(urls).toHaveLength(0);
131
+ });
132
+ it('Should test the performance with a large number of fragments', async () => {
133
+ // Generate a large number of discipline fragments
134
+ const largeFragmentSet = Array.from({ length: 100 }, (_, index) => ({
135
+ id: `${1000 + index}`,
136
+ path: `discipline-${1000 + index}`
137
+ }));
138
+ // Mock the DisciplinePresenter to return large fragment set
139
+ DisciplinePresenter.getInstance.mockReturnValueOnce({
140
+ getFragments: vi.fn().mockReturnValue(largeFragmentSet)
141
+ });
142
+ // Make half of them fail the rule check
143
+ const resultMap = new Map();
144
+ for (let i = 0; i < largeFragmentSet.length; i++) {
145
+ if (i % 2 === 0) {
146
+ resultMap.set(`${FilterKey.DISCIPLINES}:${largeFragmentSet[i].id}`, false);
147
+ }
148
+ }
149
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
150
+ const urls = await disciplinePolicy.generateUrls();
151
+ // Should include half of the disciplines
152
+ expect(urls).toHaveLength(50);
153
+ // Check a few specific items
154
+ expect(urls).not.toContain('discipline-1004'); // Should be filtered out (index 0)
155
+ expect(urls).toContain('discipline-1003'); // Should be included (index 1)
156
+ expect(urls).not.toContain('discipline-1002'); // Should be filtered out (index 2)
157
+ });
158
+ });
159
+ });