@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,273 @@
1
+ import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';
2
+ import { FilterKey } 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 { DisciplineDegree } from '@/programmes/policies/DisciplineDegree';
7
+ import { DisciplinePresenter } from '@/presenters/DisciplinePresenter';
8
+ import { DegreePresenter } from '@/presenters/DegreePresenter';
9
+ describe('Policy:DisciplineDegree', () => {
10
+ describe('shouldIndex', () => {
11
+ let searchDependenciesHelper;
12
+ let disciplineDegreePolicy;
13
+ beforeEach(() => {
14
+ searchDependenciesHelper = new SearchDependencies();
15
+ disciplineDegreePolicy = new DisciplineDegree(searchDependenciesHelper.dependencies);
16
+ searchDependenciesHelper.setResultsCount(7);
17
+ searchDependenciesHelper.setPageNumber(1);
18
+ searchDependenciesHelper.setPortalType(PortalType.BACHELOR);
19
+ });
20
+ it('Should return true when all conditions are met', async () => {
21
+ const disciplineId = '54'; // Agriculture & Forestry
22
+ const degreeType = 'msc';
23
+ searchDependenciesHelper.setFilterKeyValues(new Map([
24
+ [FilterKey.DISCIPLINES, [disciplineId]],
25
+ [FilterKey.DEGREE_TYPE, [degreeType]]
26
+ ]));
27
+ const result = await disciplineDegreePolicy.shouldIndex();
28
+ expect(result).toBe(true);
29
+ });
30
+ it('Should return false when multiple disciplines are selected', async () => {
31
+ const firstDisciplineId = '54'; // Agriculture & Forestry
32
+ const secondDisciplineId = '12'; // Applied Sciences & Professions
33
+ const degreeType = 'mphil';
34
+ searchDependenciesHelper.setFilterKeyValues(new Map([
35
+ [FilterKey.DISCIPLINES, [firstDisciplineId, secondDisciplineId]],
36
+ [FilterKey.DEGREE_TYPE, [degreeType]]
37
+ ]));
38
+ const result = await disciplineDegreePolicy.shouldIndex();
39
+ expect(result).toBe(false);
40
+ });
41
+ it('Should return false when multiple degrees are selected', async () => {
42
+ const disciplineId = '54'; // Agriculture & Forestry
43
+ const firstDegreeType = 'ma';
44
+ const secondDegreeType = 'meng';
45
+ searchDependenciesHelper.setFilterKeyValues(new Map([
46
+ [FilterKey.DISCIPLINES, [disciplineId]],
47
+ [FilterKey.DEGREE_TYPE, [firstDegreeType, secondDegreeType]]
48
+ ]));
49
+ const result = await disciplineDegreePolicy.shouldIndex();
50
+ expect(result).toBe(false);
51
+ });
52
+ it('Should return false when no disciplines are selected', async () => {
53
+ const degreeType = 'msc';
54
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DEGREE_TYPE, [degreeType]]]));
55
+ const result = await disciplineDegreePolicy.shouldIndex();
56
+ expect(result).toBe(false);
57
+ });
58
+ it('Should return false when no degree is selected', async () => {
59
+ const disciplineId = '54'; // Agriculture & Forestry
60
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DISCIPLINES, [disciplineId]]]));
61
+ const result = await disciplineDegreePolicy.shouldIndex();
62
+ expect(result).toBe(false);
63
+ });
64
+ it('Should return false when other filters are selected', async () => {
65
+ const disciplineId = '54'; // Agriculture & Forestry
66
+ const countryId = '30'; // UK
67
+ const degreeType = 'ma';
68
+ searchDependenciesHelper.setFilterKeyValues(new Map([
69
+ [FilterKey.DISCIPLINES, [disciplineId]],
70
+ [FilterKey.DEGREE_TYPE, [degreeType]],
71
+ [FilterKey.COUNTRY, [countryId]]
72
+ ]));
73
+ const result = await disciplineDegreePolicy.shouldIndex();
74
+ expect(result).toBe(false);
75
+ });
76
+ it('Should return false when degree is not indexable', async () => {
77
+ const disciplineId = '54'; // Agriculture & Forestry
78
+ const degreeType = 'adiploma';
79
+ searchDependenciesHelper.setFilterKeyValues(new Map([
80
+ [FilterKey.DISCIPLINES, [disciplineId]],
81
+ [FilterKey.DEGREE_TYPE, [degreeType]]
82
+ ]));
83
+ const result = await disciplineDegreePolicy.shouldIndex();
84
+ expect(result).toBe(false);
85
+ });
86
+ it('Should return false when number of results is less than 7', async () => {
87
+ const disciplineId = '54'; // Agriculture & Forestry
88
+ const degreeType = 'msc';
89
+ searchDependenciesHelper.setResultsCount(6);
90
+ searchDependenciesHelper.setFilterKeyValues(new Map([
91
+ [FilterKey.DISCIPLINES, [disciplineId]],
92
+ [FilterKey.DEGREE_TYPE, [degreeType]]
93
+ ]));
94
+ const result = await disciplineDegreePolicy.shouldIndex();
95
+ expect(result).toBe(false);
96
+ });
97
+ it('Should return false when page number is higher than 2', async () => {
98
+ const disciplineId = '54'; // Agriculture & Forestry
99
+ const degreeType = 'msc';
100
+ searchDependenciesHelper.setPageNumber(8);
101
+ searchDependenciesHelper.setFilterKeyValues(new Map([
102
+ [FilterKey.DISCIPLINES, [disciplineId]],
103
+ [FilterKey.DEGREE_TYPE, [degreeType]]
104
+ ]));
105
+ const result = await disciplineDegreePolicy.shouldIndex();
106
+ expect(result).toBe(false);
107
+ });
108
+ it('Should return false when portal type is distance learning', async () => {
109
+ const disciplineId = '54'; // Agriculture & Forestry
110
+ const degreeType = 'msc';
111
+ searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
112
+ searchDependenciesHelper.setFilterKeyValues(new Map([
113
+ [FilterKey.DISCIPLINES, [disciplineId]],
114
+ [FilterKey.DEGREE_TYPE, [degreeType]]
115
+ ]));
116
+ const result = await disciplineDegreePolicy.shouldIndex();
117
+ expect(result).toBe(false);
118
+ });
119
+ });
120
+ describe('generateUrls', () => {
121
+ let sitemapDependenciesHelper;
122
+ let disciplineDegreePolicy;
123
+ beforeEach(() => {
124
+ sitemapDependenciesHelper = new SitemapDependencies();
125
+ sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
126
+ disciplineDegreePolicy = new DisciplineDegree(sitemapDependenciesHelper.dependencies);
127
+ DisciplinePresenter.getInstance = vi.fn().mockReturnValue({
128
+ getFragments: vi.fn().mockReturnValue([
129
+ { id: '54', path: 'agriculture-forestry' },
130
+ { id: '12', path: 'applied-sciences' },
131
+ { id: '356', path: 'computer-science' }
132
+ ])
133
+ });
134
+ DegreePresenter.getInstance = vi.fn().mockReturnValue({
135
+ getFragments: vi.fn().mockReturnValue([
136
+ { id: 'msc', path: 'msc' },
137
+ { id: 'mba', path: 'mba' },
138
+ { id: 'msc', path: 'masters' },
139
+ { id: 'bachelor', path: 'bachelors' },
140
+ { id: 'adiploma', path: 'associate-degree' }
141
+ ])
142
+ });
143
+ });
144
+ afterEach(() => {
145
+ sitemapDependenciesHelper.resetMocks();
146
+ });
147
+ it('Should generate URLs for valid discipline-degree combinations with indexable degrees', async () => {
148
+ // Mock the checkRulesForSitemap to only allow indexable degrees
149
+ // due to IndexableDegreeRule
150
+ const resultMap = new Map();
151
+ // Set up all possible combinations but only allow indexable degrees
152
+ for (const discipline of ['54', '12', '356']) {
153
+ for (const degree of ['msc', 'mba', 'msc', 'bachelor', 'adiploma']) {
154
+ const key = `${FilterKey.DISCIPLINES}:${discipline}|${FilterKey.DEGREE_TYPE}:${degree}`;
155
+ // Only these degrees should pass (exclude associate degree)
156
+ resultMap.set(key, ['msc', 'mba', 'msc', 'bachelor'].includes(degree));
157
+ }
158
+ }
159
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
160
+ // Call the method via reflection since it's protected
161
+ const urls = await disciplineDegreePolicy.generateUrls();
162
+ // Calculate expected URLs: 3 disciplines * 4 indexable degrees * 2 pages = 24 URLs
163
+ expect(urls).toHaveLength(12);
164
+ // Verify indexable degree combinations
165
+ expect(urls).toContain('msc/agriculture-forestry');
166
+ expect(urls).toContain('mba/agriculture-forestry');
167
+ expect(urls).toContain('masters/agriculture-forestry');
168
+ expect(urls).toContain('bachelors/agriculture-forestry');
169
+ expect(urls).toContain('msc/applied-sciences');
170
+ expect(urls).toContain('msc/computer-science');
171
+ // Verify non-indexable degrees are excluded
172
+ expect(urls).not.toContain('associate-degree/agriculture-forestry');
173
+ expect(urls).not.toContain('associate-degree/applied-sciences');
174
+ expect(urls).not.toContain('associate-degree/computer-science');
175
+ });
176
+ it('Should exclude specific discipline-degree combinations based on rules', async () => {
177
+ // Create a map that returns false for specific combinations
178
+ const resultMap = new Map();
179
+ // Only allow indexable degrees, but exclude computer science
180
+ for (const discipline of ['54', '12', '356']) {
181
+ for (const degree of ['msc', 'mba', 'msc', 'bachelor', 'adiploma']) {
182
+ const key = `${FilterKey.DISCIPLINES}:${discipline}|${FilterKey.DEGREE_TYPE}:${degree}`;
183
+ // Only indexable degrees should pass and exclude computer science
184
+ resultMap.set(key, ['msc', 'mba', 'msc', 'bachelor'].includes(degree) && discipline !== '356');
185
+ }
186
+ }
187
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
188
+ const urls = await disciplineDegreePolicy.generateUrls();
189
+ // Calculate expected URLs: 2 disciplines (excluding computer science) * 4 indexable degrees * 2 pages = 16 URLs
190
+ expect(urls).toHaveLength(8);
191
+ // Verify excluded combinations
192
+ expect(urls).not.toContain('msc/computer-science');
193
+ expect(urls).not.toContain('mba/computer-science');
194
+ expect(urls).not.toContain('bachelors/computer-science');
195
+ // Verify included combinations
196
+ expect(urls).toContain('msc/agriculture-forestry');
197
+ expect(urls).toContain('msc/applied-sciences');
198
+ });
199
+ it('Should exclude all URLs when all rule checks fail', async () => {
200
+ // Create a map that returns false for all combinations
201
+ const resultMap = new Map();
202
+ for (const discipline of ['54', '12', '356']) {
203
+ for (const degree of ['msc', 'mba', 'msc', 'bachelor', 'adiploma']) {
204
+ const key = `${FilterKey.DISCIPLINES}:${discipline}|${FilterKey.DEGREE_TYPE}:${degree}`;
205
+ resultMap.set(key, false);
206
+ }
207
+ }
208
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
209
+ const urls = await disciplineDegreePolicy.generateUrls();
210
+ // Should include no URLs
211
+ expect(urls).toHaveLength(0);
212
+ });
213
+ it('Should handle empty discipline fragments', async () => {
214
+ // Mock the DisciplinePresenter to return empty fragments
215
+ DisciplinePresenter.getInstance.mockReturnValueOnce({
216
+ getFragments: vi.fn().mockReturnValue([])
217
+ });
218
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
219
+ const urls = await disciplineDegreePolicy.generateUrls();
220
+ // Should return empty array
221
+ expect(urls).toHaveLength(0);
222
+ });
223
+ it('Should handle empty degree fragments', async () => {
224
+ // Mock the DegreePresenter to return empty fragments
225
+ DegreePresenter.getInstance.mockReturnValueOnce({
226
+ getFragments: vi.fn().mockReturnValue([])
227
+ });
228
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
229
+ const urls = await disciplineDegreePolicy.generateUrls();
230
+ // Should return empty array
231
+ expect(urls).toHaveLength(0);
232
+ });
233
+ it('Should handle performance with large number of combinations', async () => {
234
+ // Generate larger datasets for testing
235
+ const largeDisciplineSet = Array.from({ length: 20 }, (_, index) => ({
236
+ id: `discipline-${index}`,
237
+ path: `discipline-path-${index}`
238
+ }));
239
+ const largeDegreeSet = Array.from({ length: 8 }, (_, index) => ({
240
+ id: `degree-${index}`,
241
+ path: `degree-path-${index}`
242
+ }));
243
+ // Override mocks with large datasets
244
+ DisciplinePresenter.getInstance.mockReturnValueOnce({
245
+ getFragments: vi.fn().mockReturnValue(largeDisciplineSet)
246
+ });
247
+ DegreePresenter.getInstance.mockReturnValueOnce({
248
+ getFragments: vi.fn().mockReturnValue(largeDegreeSet)
249
+ });
250
+ // Mock to only allow combinations where discipline index is even and degree index is 0-4
251
+ // This simulates the IndexableDegreeRule that only allows certain degrees
252
+ const resultMap = new Map();
253
+ for (let d = 0; d < largeDisciplineSet.length; d++) {
254
+ for (let deg = 0; deg < largeDegreeSet.length; deg++) {
255
+ const disciplineId = largeDisciplineSet[d].id;
256
+ const degreeId = largeDegreeSet[deg].id;
257
+ const key = `${FilterKey.DISCIPLINES}:${disciplineId}|${FilterKey.DEGREE_TYPE}:${degreeId}`;
258
+ resultMap.set(key, d % 2 === 0 && deg <= 4); // Only even disciplines and indexable degrees (0-4)
259
+ }
260
+ }
261
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
262
+ const urls = await disciplineDegreePolicy.generateUrls();
263
+ // Calculate expected count: 10 disciplines (even indices) * 5 degrees (indices 0-4) * 2 pages
264
+ // = 10 * 5 * 2 = 100 URLs
265
+ expect(urls).toHaveLength(50);
266
+ // Test specific items
267
+ expect(urls).toContain('degree-path-0/discipline-path-0'); // Even discipline, indexable degree
268
+ expect(urls).toContain('degree-path-4/discipline-path-2'); // Even discipline, indexable degree
269
+ expect(urls).not.toContain('degree-path-0/discipline-path-1'); // Odd discipline
270
+ expect(urls).not.toContain('degree-path-5/discipline-path-0'); // Non-indexable degree
271
+ });
272
+ });
273
+ });
@@ -0,0 +1,278 @@
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 { DisciplineDuration } from '@/programmes/policies/DisciplineDuration';
6
+ import { PortalType } from '@studyportals/domain-client';
7
+ import { DisciplinePresenter } from '@/presenters/DisciplinePresenter';
8
+ import { DurationPresenter } from '@/presenters/DurationPresenter';
9
+ describe('Policy:DisciplineDuration', () => {
10
+ describe('shouldIndex', () => {
11
+ let searchDependenciesHelper;
12
+ let disciplineDurationPolicy;
13
+ beforeEach(() => {
14
+ searchDependenciesHelper = new SearchDependencies();
15
+ disciplineDurationPolicy = new DisciplineDuration(searchDependenciesHelper.dependencies);
16
+ searchDependenciesHelper.setResultsCount(7);
17
+ searchDependenciesHelper.setPageNumber(1);
18
+ searchDependenciesHelper.setPortalType(PortalType.PHD);
19
+ });
20
+ it('Should return true when all conditions are met (duration is one year)', async () => {
21
+ const disciplineId = '54'; // Agriculture & Forestry
22
+ const duration = '[360,360]'; // 1 year
23
+ searchDependenciesHelper.setFilterKeyValues(new Map([
24
+ [FilterKey.DISCIPLINES, [disciplineId]],
25
+ [FilterKey.DURATION, [duration]]
26
+ ]));
27
+ const result = await disciplineDurationPolicy.shouldIndex();
28
+ expect(result).toBe(true);
29
+ });
30
+ it('Should return true when all conditions are met (duration is two years)', async () => {
31
+ const disciplineId = '54'; // Agriculture & Forestry
32
+ const duration = '[720,720]'; // 2 years
33
+ searchDependenciesHelper.setFilterKeyValues(new Map([
34
+ [FilterKey.DISCIPLINES, [disciplineId]],
35
+ [FilterKey.DURATION, [duration]]
36
+ ]));
37
+ const result = await disciplineDurationPolicy.shouldIndex();
38
+ expect(result).toBe(true);
39
+ });
40
+ it('Should return false when multiple disciplines are selected', async () => {
41
+ const firstDisciplineId = '54'; // Agriculture & Forestry
42
+ const secondDisciplineId = '12'; // Applied Sciences & Professions
43
+ const duration = '[360,360]'; // 1 year
44
+ searchDependenciesHelper.setFilterKeyValues(new Map([
45
+ [FilterKey.DISCIPLINES, [firstDisciplineId, secondDisciplineId]],
46
+ [FilterKey.DURATION, [duration]]
47
+ ]));
48
+ const result = await disciplineDurationPolicy.shouldIndex();
49
+ expect(result).toBe(false);
50
+ });
51
+ it('Should return false when multiple duration values are selected', async () => {
52
+ const disciplineId = '54'; // Agriculture & Forestry
53
+ const firstDuration = '[360,360]'; // 1 year
54
+ const secondDuration = '[-1,719]'; // Less than 2 years
55
+ searchDependenciesHelper.setFilterKeyValues(new Map([
56
+ [FilterKey.DISCIPLINES, [disciplineId]],
57
+ [FilterKey.DURATION, [firstDuration, secondDuration]]
58
+ ]));
59
+ const result = await disciplineDurationPolicy.shouldIndex();
60
+ expect(result).toBe(false);
61
+ });
62
+ it('Should return false when no disciplines are selected', async () => {
63
+ const duration = '[360,360]'; // 1 year
64
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DURATION, [duration]]]));
65
+ const result = await disciplineDurationPolicy.shouldIndex();
66
+ expect(result).toBe(false);
67
+ });
68
+ it('Should return false when no duration value is selected', async () => {
69
+ const disciplineId = '54'; // Agriculture & Forestry
70
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DISCIPLINES, [disciplineId]]]));
71
+ const result = await disciplineDurationPolicy.shouldIndex();
72
+ expect(result).toBe(false);
73
+ });
74
+ it('Should return false when other filters are selected', async () => {
75
+ const disciplineId = '54'; // Agriculture & Forestry
76
+ const duration = '[360,360]'; // 1 year
77
+ const countryId = '30'; // UK
78
+ searchDependenciesHelper.setFilterKeyValues(new Map([
79
+ [FilterKey.DISCIPLINES, [disciplineId]],
80
+ [FilterKey.DURATION, [duration]],
81
+ [FilterKey.COUNTRY, [countryId]]
82
+ ]));
83
+ const result = await disciplineDurationPolicy.shouldIndex();
84
+ expect(result).toBe(false);
85
+ });
86
+ it('Should return false when duration is not indexable (i.e. less than 2 years)', async () => {
87
+ const disciplineId = '54'; // Agriculture & Forestry
88
+ const duration = '[-1,719]'; // Less than 2 years
89
+ searchDependenciesHelper.setFilterKeyValues(new Map([
90
+ [FilterKey.DISCIPLINES, [disciplineId]],
91
+ [FilterKey.DURATION, [duration]]
92
+ ]));
93
+ const result = await disciplineDurationPolicy.shouldIndex();
94
+ expect(result).toBe(false);
95
+ });
96
+ it('Should return false when number of results is less than 7', async () => {
97
+ const disciplineId = '54'; // Agriculture & Forestry
98
+ const duration = '[360,360]'; // 1 year
99
+ searchDependenciesHelper.setResultsCount(0);
100
+ searchDependenciesHelper.setFilterKeyValues(new Map([
101
+ [FilterKey.DISCIPLINES, [disciplineId]],
102
+ [FilterKey.DURATION, [duration]]
103
+ ]));
104
+ const result = await disciplineDurationPolicy.shouldIndex();
105
+ expect(result).toBe(false);
106
+ });
107
+ it('Should return false when page number is higher than 2', async () => {
108
+ const disciplineId = '54'; // Agriculture & Forestry
109
+ const duration = '[360,360]'; // 1 year
110
+ searchDependenciesHelper.setPageNumber(5);
111
+ searchDependenciesHelper.setFilterKeyValues(new Map([
112
+ [FilterKey.DISCIPLINES, [disciplineId]],
113
+ [FilterKey.DURATION, [duration]]
114
+ ]));
115
+ const result = await disciplineDurationPolicy.shouldIndex();
116
+ expect(result).toBe(false);
117
+ });
118
+ it('Should return false when portal is distance learning', async () => {
119
+ const disciplineId = '54'; // Agriculture & Forestry
120
+ const duration = '[360,360]'; // 1 year
121
+ searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
122
+ searchDependenciesHelper.setFilterKeyValues(new Map([
123
+ [FilterKey.DISCIPLINES, [disciplineId]],
124
+ [FilterKey.DURATION, [duration]]
125
+ ]));
126
+ const result = await disciplineDurationPolicy.shouldIndex();
127
+ expect(result).toBe(false);
128
+ });
129
+ });
130
+ describe('generateUrls', () => {
131
+ let sitemapDependenciesHelper;
132
+ let disciplineDurationPolicy;
133
+ beforeEach(() => {
134
+ sitemapDependenciesHelper = new SitemapDependencies();
135
+ sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
136
+ disciplineDurationPolicy = new DisciplineDuration(sitemapDependenciesHelper.dependencies);
137
+ DisciplinePresenter.getInstance = vi.fn().mockReturnValue({
138
+ getFragments: vi.fn().mockReturnValue([
139
+ { id: '54', path: 'agriculture-forestry' },
140
+ { id: '12', path: 'applied-sciences' },
141
+ { id: '356', path: 'computer-science' }
142
+ ])
143
+ });
144
+ DurationPresenter.getInstance = vi.fn().mockReturnValue({
145
+ getFragments: vi.fn().mockReturnValue([
146
+ { id: '[360,360]', path: '1-year' },
147
+ { id: '[720,720]', path: '2-years' },
148
+ { id: '[1080,1080]', path: '3-years' },
149
+ { id: '[1440,1440]', path: '4-years' },
150
+ { id: '[-1,719]', path: 'less-than-2-years' }
151
+ ])
152
+ });
153
+ });
154
+ afterEach(() => {
155
+ sitemapDependenciesHelper.resetMocks();
156
+ });
157
+ it('Should generate URLs for valid discipline-duration combinations with indexable durations', async () => {
158
+ // Mock the checkRulesForSitemap to only allow indexable durations
159
+ // due to IndexableDurationRule
160
+ const resultMap = new Map();
161
+ // Set up all possible combinations but only allow indexable durations
162
+ for (const discipline of ['54', '12', '356']) {
163
+ for (const duration of ['[360,360]', '[720,720]', '[1080,1080]', '[1440,1440]', '[-1,719]']) {
164
+ const key = `${FilterKey.DISCIPLINES}:${discipline}|${FilterKey.DURATION}:${duration}`;
165
+ // Only these durations should pass (exclude less than 2 years)
166
+ resultMap.set(key, ['[360,360]', '[720,720]', '[1080,1080]', '[1440,1440]'].includes(duration));
167
+ }
168
+ }
169
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
170
+ // Call the method via reflection since it's protected
171
+ const urls = await disciplineDurationPolicy.generateUrls();
172
+ // Calculate expected URLs: 3 disciplines * 4 indexable durations * 2 pages = 24 URLs
173
+ expect(urls).toHaveLength(12);
174
+ // Verify indexable duration combinations
175
+ expect(urls).toContain('1-year/applied-sciences');
176
+ expect(urls).toContain('1-year/computer-science');
177
+ // Verify non-indexable durations are excluded
178
+ expect(urls).not.toContain('less-than-2-years/agriculture-forestry');
179
+ expect(urls).not.toContain('less-than-2-years/applied-sciences');
180
+ expect(urls).not.toContain('less-than-2-years/computer-science');
181
+ });
182
+ it('Should exclude specific discipline-duration combinations based on rules', async () => {
183
+ // Create a map that returns false for specific combinations
184
+ const resultMap = new Map();
185
+ // Only allow indexable durations, but exclude computer science
186
+ for (const discipline of ['54', '12', '356']) {
187
+ for (const duration of ['[360,360]', '[720,720]', '[1080,1080]', '[1440,1440]', '[-1,719]']) {
188
+ const key = `${FilterKey.DISCIPLINES}:${discipline}|${FilterKey.DURATION}:${duration}`;
189
+ // Only indexable durations should pass and exclude computer science
190
+ resultMap.set(key, ['[360,360]', '[720,720]', '[1080,1080]', '[1440,1440]'].includes(duration) && discipline !== '356');
191
+ }
192
+ }
193
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
194
+ const urls = await disciplineDurationPolicy.generateUrls();
195
+ // Calculate expected URLs: 2 disciplines (excluding computer science) * 4 indexable durations * 2 pages = 16 URLs
196
+ expect(urls).toHaveLength(8);
197
+ // Verify excluded combinations
198
+ expect(urls).not.toContain('1-year/computer-science');
199
+ expect(urls).not.toContain('2-years/computer-science');
200
+ // Verify included combinations
201
+ expect(urls).toContain('1-year/agriculture-forestry');
202
+ expect(urls).toContain('1-year/applied-sciences');
203
+ });
204
+ it('Should exclude all URLs when all rule checks fail', async () => {
205
+ // Create a map that returns false for all combinations
206
+ const resultMap = new Map();
207
+ for (const discipline of ['54', '12', '356']) {
208
+ for (const duration of ['[360,360]', '[720,720]', '[1080,1080]', '[1440,1440]', '[-1,719]']) {
209
+ const key = `${FilterKey.DISCIPLINES}:${discipline}|${FilterKey.DURATION}:${duration}`;
210
+ resultMap.set(key, false);
211
+ }
212
+ }
213
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
214
+ const urls = await disciplineDurationPolicy.generateUrls();
215
+ // Should include no URLs
216
+ expect(urls).toHaveLength(0);
217
+ });
218
+ it('Should handle empty discipline fragments', async () => {
219
+ // Mock the DisciplinePresenter to return empty fragments
220
+ DisciplinePresenter.getInstance.mockReturnValueOnce({
221
+ getFragments: vi.fn().mockReturnValue([])
222
+ });
223
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
224
+ const urls = await disciplineDurationPolicy.generateUrls();
225
+ // Should return empty array
226
+ expect(urls).toHaveLength(0);
227
+ });
228
+ it('Should handle empty duration fragments', async () => {
229
+ // Mock the DurationPresenter to return empty fragments
230
+ DurationPresenter.getInstance.mockReturnValueOnce({
231
+ getFragments: vi.fn().mockReturnValue([])
232
+ });
233
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
234
+ const urls = await disciplineDurationPolicy.generateUrls();
235
+ // Should return empty array
236
+ expect(urls).toHaveLength(0);
237
+ });
238
+ it('Should handle performance with large number of combinations', async () => {
239
+ // Generate larger datasets for testing
240
+ const largeDisciplineSet = Array.from({ length: 20 }, (_, index) => ({
241
+ id: `discipline-${index}`,
242
+ path: `discipline-path-${index}`
243
+ }));
244
+ const largeDurationSet = Array.from({ length: 6 }, (_, index) => ({
245
+ id: `duration-${index}`,
246
+ path: `duration-path-${index}`
247
+ }));
248
+ // Override mocks with large datasets
249
+ DisciplinePresenter.getInstance.mockReturnValueOnce({
250
+ getFragments: vi.fn().mockReturnValue(largeDisciplineSet)
251
+ });
252
+ DurationPresenter.getInstance.mockReturnValueOnce({
253
+ getFragments: vi.fn().mockReturnValue(largeDurationSet)
254
+ });
255
+ // Mock to only allow combinations where discipline index is even and duration index is 0-3
256
+ // This simulates the IndexableDurationRule that only allows certain durations
257
+ const resultMap = new Map();
258
+ for (let d = 0; d < largeDisciplineSet.length; d++) {
259
+ for (let dur = 0; dur < largeDurationSet.length; dur++) {
260
+ const disciplineId = largeDisciplineSet[d].id;
261
+ const durationId = largeDurationSet[dur].id;
262
+ const key = `${FilterKey.DISCIPLINES}:${disciplineId}|${FilterKey.DURATION}:${durationId}`;
263
+ resultMap.set(key, d % 2 === 0 && dur <= 3); // Only even disciplines and indexable durations (0-3)
264
+ }
265
+ }
266
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
267
+ const urls = await disciplineDurationPolicy.generateUrls();
268
+ // Calculate expected count: 10 disciplines (even indices) * 4 durations (indices 0-3) * 2 pages
269
+ // = 10 * 4 * 2 = 80 URLs
270
+ expect(urls).toHaveLength(40);
271
+ // Test specific items
272
+ expect(urls).toContain('duration-path-0/discipline-path-0'); // Even discipline, indexable duration
273
+ expect(urls).toContain('duration-path-3/discipline-path-2'); // Even discipline, indexable duration
274
+ expect(urls).not.toContain('duration-path-0/discipline-path-1'); // Odd discipline
275
+ expect(urls).not.toContain('duration-path-4/discipline-path-0'); // Non-indexable duration
276
+ });
277
+ });
278
+ });