@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,302 @@
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 { DisciplineEducationalForm } from '@/programmes/policies/DisciplineEducationalForm';
6
+ import { PortalType } from '@studyportals/domain-client';
7
+ import { DisciplinePresenter } from '@/presenters/DisciplinePresenter';
8
+ import { EducationalFormPresenter } from '@/presenters/EducationalFormPresenter';
9
+ describe('Policy:DisciplineEducationalForm', () => {
10
+ describe('shouldIndex', () => {
11
+ let searchDependenciesHelper;
12
+ let disciplineEducationalFormPolicy;
13
+ beforeEach(() => {
14
+ searchDependenciesHelper = new SearchDependencies();
15
+ disciplineEducationalFormPolicy = new DisciplineEducationalForm(searchDependenciesHelper.dependencies);
16
+ searchDependenciesHelper.setResultsCount(7);
17
+ searchDependenciesHelper.setPageNumber(1);
18
+ searchDependenciesHelper.setPortalType(PortalType.SHORT);
19
+ });
20
+ it('Should return true when all conditions are met (academic)', async () => {
21
+ const disciplineId = '54'; // Agriculture & Forestry
22
+ const educationalForm = 'academic';
23
+ searchDependenciesHelper.setFilterKeyValues(new Map([
24
+ [FilterKey.DISCIPLINES, [disciplineId]],
25
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]]
26
+ ]));
27
+ const result = await disciplineEducationalFormPolicy.shouldIndex();
28
+ expect(result).toBe(true);
29
+ });
30
+ it('Should return true when all conditions are met (Summer School)', async () => {
31
+ const disciplineId = '54'; // Agriculture & Forestry
32
+ const educationalForm = 'summer_school';
33
+ searchDependenciesHelper.setFilterKeyValues(new Map([
34
+ [FilterKey.DISCIPLINES, [disciplineId]],
35
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]]
36
+ ]));
37
+ const result = await disciplineEducationalFormPolicy.shouldIndex();
38
+ expect(result).toBe(true);
39
+ });
40
+ it('Should return true when all conditions are met (Semester)', async () => {
41
+ const disciplineId = '54'; // Agriculture & Forestry
42
+ const educationalForm = 'semester';
43
+ searchDependenciesHelper.setFilterKeyValues(new Map([
44
+ [FilterKey.DISCIPLINES, [disciplineId]],
45
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]]
46
+ ]));
47
+ const result = await disciplineEducationalFormPolicy.shouldIndex();
48
+ expect(result).toBe(true);
49
+ });
50
+ it('Should return true when all conditions are met (Skill)', async () => {
51
+ const disciplineId = '54'; // Agriculture & Forestry
52
+ const educationalForm = 'skill';
53
+ searchDependenciesHelper.setFilterKeyValues(new Map([
54
+ [FilterKey.DISCIPLINES, [disciplineId]],
55
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]]
56
+ ]));
57
+ const result = await disciplineEducationalFormPolicy.shouldIndex();
58
+ expect(result).toBe(true);
59
+ });
60
+ it('Should return false when multiple disciplines are selected', async () => {
61
+ const firstDisciplineId = '54'; // Agriculture & Forestry
62
+ const secondDisciplineId = '12'; // Applied Sciences & Professions
63
+ const educationalForm = 'academic';
64
+ searchDependenciesHelper.setFilterKeyValues(new Map([
65
+ [FilterKey.DISCIPLINES, [firstDisciplineId, secondDisciplineId]],
66
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]]
67
+ ]));
68
+ const result = await disciplineEducationalFormPolicy.shouldIndex();
69
+ expect(result).toBe(false);
70
+ });
71
+ it('Should return false when multiple educational form values are selected', async () => {
72
+ const disciplineId = '54'; // Agriculture & Forestry
73
+ const firstEducationalForm = 'academic';
74
+ const secondEducationaForm = 'skill';
75
+ searchDependenciesHelper.setFilterKeyValues(new Map([
76
+ [FilterKey.DISCIPLINES, [disciplineId]],
77
+ [FilterKey.EDUCATIONAL_FORM, [firstEducationalForm, secondEducationaForm]]
78
+ ]));
79
+ const result = await disciplineEducationalFormPolicy.shouldIndex();
80
+ expect(result).toBe(false);
81
+ });
82
+ it('Should return false when no disciplines are selected', async () => {
83
+ const educationalForm = 'academic';
84
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.EDUCATIONAL_FORM, [educationalForm]]]));
85
+ const result = await disciplineEducationalFormPolicy.shouldIndex();
86
+ expect(result).toBe(false);
87
+ });
88
+ it('Should return false when no educational form value is selected', async () => {
89
+ const disciplineId = '54'; // Agriculture & Forestry
90
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DISCIPLINES, [disciplineId]]]));
91
+ const result = await disciplineEducationalFormPolicy.shouldIndex();
92
+ expect(result).toBe(false);
93
+ });
94
+ it('Should return false when other filters are selected', async () => {
95
+ const disciplineId = '54'; // Agriculture & Forestry
96
+ const educationalForm = 'academic';
97
+ const countryId = '30'; // UK
98
+ searchDependenciesHelper.setFilterKeyValues(new Map([
99
+ [FilterKey.DISCIPLINES, [disciplineId]],
100
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]],
101
+ [FilterKey.COUNTRY, [countryId]]
102
+ ]));
103
+ const result = await disciplineEducationalFormPolicy.shouldIndex();
104
+ expect(result).toBe(false);
105
+ });
106
+ it('Should return false when educational form is not indexable (i.e. Winter School)', async () => {
107
+ const disciplineId = '54'; // Agriculture & Forestry
108
+ const educationalForm = 'winter_school';
109
+ searchDependenciesHelper.setFilterKeyValues(new Map([
110
+ [FilterKey.DISCIPLINES, [disciplineId]],
111
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]]
112
+ ]));
113
+ const result = await disciplineEducationalFormPolicy.shouldIndex();
114
+ expect(result).toBe(false);
115
+ });
116
+ it('Should return false when number of results is less than 7', async () => {
117
+ const disciplineId = '54'; // Agriculture & Forestry
118
+ const educationalForm = 'academic';
119
+ searchDependenciesHelper.setResultsCount(5);
120
+ searchDependenciesHelper.setFilterKeyValues(new Map([
121
+ [FilterKey.DISCIPLINES, [disciplineId]],
122
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]]
123
+ ]));
124
+ const result = await disciplineEducationalFormPolicy.shouldIndex();
125
+ expect(result).toBe(false);
126
+ });
127
+ it('Should return false when page number is higher than 2', async () => {
128
+ const disciplineId = '54'; // Agriculture & Forestry
129
+ const educationalForm = 'academic';
130
+ searchDependenciesHelper.setPageNumber(13);
131
+ searchDependenciesHelper.setFilterKeyValues(new Map([
132
+ [FilterKey.DISCIPLINES, [disciplineId]],
133
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]]
134
+ ]));
135
+ const result = await disciplineEducationalFormPolicy.shouldIndex();
136
+ expect(result).toBe(false);
137
+ });
138
+ it('Should return false portal type is distance learning', async () => {
139
+ const disciplineId = '54'; // Agriculture & Forestry
140
+ const educationalForm = 'academic';
141
+ searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
142
+ searchDependenciesHelper.setFilterKeyValues(new Map([
143
+ [FilterKey.DISCIPLINES, [disciplineId]],
144
+ [FilterKey.EDUCATIONAL_FORM, [educationalForm]]
145
+ ]));
146
+ const result = await disciplineEducationalFormPolicy.shouldIndex();
147
+ expect(result).toBe(false);
148
+ });
149
+ });
150
+ describe('generateUrls', () => {
151
+ let sitemapDependenciesHelper;
152
+ let disciplineEducationalFormPolicy;
153
+ beforeEach(() => {
154
+ sitemapDependenciesHelper = new SitemapDependencies();
155
+ sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
156
+ disciplineEducationalFormPolicy = new DisciplineEducationalForm(sitemapDependenciesHelper.dependencies);
157
+ DisciplinePresenter.getInstance = vi.fn().mockReturnValue({
158
+ getFragments: vi.fn().mockReturnValue([
159
+ { id: '54', path: 'agriculture-forestry' },
160
+ { id: '12', path: 'applied-sciences' },
161
+ { id: '356', path: 'computer-science' }
162
+ ])
163
+ });
164
+ EducationalFormPresenter.getInstance = vi.fn().mockReturnValue({
165
+ getFragments: vi.fn().mockReturnValue([
166
+ { id: 'academic', path: 'academic' },
167
+ { id: 'summer_school', path: 'summer-courses' },
168
+ { id: 'semester', path: 'semester' },
169
+ { id: 'skill', path: 'professional-courses' },
170
+ { id: 'winter_school', path: 'winter-courses' }
171
+ ])
172
+ });
173
+ });
174
+ afterEach(() => {
175
+ sitemapDependenciesHelper.resetMocks();
176
+ });
177
+ it('Should generate URLs for valid discipline-educational form combinations with indexable educational forms', async () => {
178
+ // Mock the checkRulesForSitemap to only allow indexable educational forms
179
+ // due to IndexableEducationalFormRule
180
+ const resultMap = new Map();
181
+ // Set up all possible combinations but only allow indexable educational forms
182
+ for (const discipline of ['54', '12', '356']) {
183
+ for (const form of ['academic', 'summer_school', 'semester', 'skill', 'winter_school']) {
184
+ const key = `${FilterKey.DISCIPLINES}:${discipline}|${FilterKey.EDUCATIONAL_FORM}:${form}`;
185
+ // Only these educational forms should pass (exclude winter_school)
186
+ resultMap.set(key, ['academic', 'summer_school', 'semester', 'skill'].includes(form));
187
+ }
188
+ }
189
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
190
+ // Call the method via reflection since it's protected
191
+ const urls = await disciplineEducationalFormPolicy.generateUrls();
192
+ // Calculate expected URLs: 3 disciplines * 4 indexable educational forms * 2 pages = 24 URLs
193
+ expect(urls).toHaveLength(12);
194
+ // Verify indexable educational form combinations
195
+ expect(urls).toContain('agriculture-forestry/academic');
196
+ expect(urls).toContain('agriculture-forestry/summer-courses');
197
+ expect(urls).toContain('agriculture-forestry/semester');
198
+ expect(urls).toContain('agriculture-forestry/professional-courses');
199
+ expect(urls).toContain('applied-sciences/academic');
200
+ expect(urls).toContain('computer-science/academic');
201
+ // Verify non-indexable educational forms are excluded
202
+ expect(urls).not.toContain('agriculture-forestry/winter-courses');
203
+ expect(urls).not.toContain('applied-sciences/winter-courses');
204
+ expect(urls).not.toContain('computer-science/winter-courses');
205
+ });
206
+ it('Should exclude specific discipline-educational form combinations based on rules', async () => {
207
+ // Create a map that returns false for specific combinations
208
+ const resultMap = new Map();
209
+ // Only allow indexable forms, but exclude computer science
210
+ for (const discipline of ['54', '12', '356']) {
211
+ for (const form of ['academic', 'summer_school', 'semester', 'skill', 'winter_school']) {
212
+ const key = `${FilterKey.DISCIPLINES}:${discipline}|${FilterKey.EDUCATIONAL_FORM}:${form}`;
213
+ // Only indexable forms should pass and exclude computer science
214
+ resultMap.set(key, ['academic', 'summer_school', 'semester', 'skill'].includes(form) && discipline !== '356');
215
+ }
216
+ }
217
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
218
+ const urls = await disciplineEducationalFormPolicy.generateUrls();
219
+ // Calculate expected URLs: 2 disciplines (excluding computer science) * 4 indexable forms * 2 pages = 16 URLs
220
+ expect(urls).toHaveLength(8);
221
+ // Verify excluded combinations
222
+ expect(urls).not.toContain('computer-science/academic');
223
+ expect(urls).not.toContain('computer-science/summer-courses');
224
+ // Verify included combinations
225
+ expect(urls).toContain('agriculture-forestry/academic');
226
+ expect(urls).toContain('applied-sciences/academic');
227
+ });
228
+ it('Should exclude all URLs when all rule checks fail', async () => {
229
+ // Create a map that returns false for all combinations
230
+ const resultMap = new Map();
231
+ for (const discipline of ['54', '12', '356']) {
232
+ for (const form of ['academic', 'summer_school', 'semester', 'skill', 'winter_school']) {
233
+ const key = `${FilterKey.DISCIPLINES}:${discipline}|${FilterKey.EDUCATIONAL_FORM}:${form}`;
234
+ resultMap.set(key, false);
235
+ }
236
+ }
237
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
238
+ const urls = await disciplineEducationalFormPolicy.generateUrls();
239
+ // Should include no URLs
240
+ expect(urls).toHaveLength(0);
241
+ });
242
+ it('Should handle empty discipline fragments', async () => {
243
+ // Mock the DisciplinePresenter to return empty fragments
244
+ DisciplinePresenter.getInstance.mockReturnValueOnce({
245
+ getFragments: vi.fn().mockReturnValue([])
246
+ });
247
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
248
+ const urls = await disciplineEducationalFormPolicy.generateUrls();
249
+ // Should return empty array
250
+ expect(urls).toHaveLength(0);
251
+ });
252
+ it('Should handle empty educational form fragments', async () => {
253
+ // Mock the EducationalFormPresenter to return empty fragments
254
+ EducationalFormPresenter.getInstance.mockReturnValueOnce({
255
+ getFragments: vi.fn().mockReturnValue([])
256
+ });
257
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
258
+ const urls = await disciplineEducationalFormPolicy.generateUrls();
259
+ // Should return empty array
260
+ expect(urls).toHaveLength(0);
261
+ });
262
+ it('Should handle performance with large number of combinations', async () => {
263
+ // Generate larger datasets for testing
264
+ const largeDisciplineSet = Array.from({ length: 20 }, (_, index) => ({
265
+ id: `discipline-${index}`,
266
+ path: `discipline-path-${index}`
267
+ }));
268
+ const largeEducationalFormSet = Array.from({ length: 6 }, (_, index) => ({
269
+ id: `form-${index}`,
270
+ path: `form-path-${index}`
271
+ }));
272
+ // Override mocks with large datasets
273
+ DisciplinePresenter.getInstance.mockReturnValueOnce({
274
+ getFragments: vi.fn().mockReturnValue(largeDisciplineSet)
275
+ });
276
+ EducationalFormPresenter.getInstance.mockReturnValueOnce({
277
+ getFragments: vi.fn().mockReturnValue(largeEducationalFormSet)
278
+ });
279
+ // Mock to only allow combinations where discipline index is even and educational form index is 0-3
280
+ // This simulates the IndexableEducationalFormRule that only allows certain educational forms
281
+ const resultMap = new Map();
282
+ for (let d = 0; d < largeDisciplineSet.length; d++) {
283
+ for (let f = 0; f < largeEducationalFormSet.length; f++) {
284
+ const disciplineId = largeDisciplineSet[d].id;
285
+ const formId = largeEducationalFormSet[f].id;
286
+ const key = `${FilterKey.DISCIPLINES}:${disciplineId}|${FilterKey.EDUCATIONAL_FORM}:${formId}`;
287
+ resultMap.set(key, d % 2 === 0 && f <= 3); // Only even disciplines and indexable forms (0-3)
288
+ }
289
+ }
290
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
291
+ const urls = await disciplineEducationalFormPolicy.generateUrls();
292
+ // Calculate expected count: 10 disciplines (even indices) * 4 educational forms (indices 0-3) * 2 pages
293
+ // = 10 * 4 * 2 = 80 URLs
294
+ expect(urls).toHaveLength(40);
295
+ // Test specific items
296
+ expect(urls).toContain('discipline-path-0/form-path-0'); // Even discipline, indexable form
297
+ expect(urls).toContain('discipline-path-2/form-path-3'); // Even discipline, indexable form
298
+ expect(urls).not.toContain('discipline-path-1/form-path-0'); // Odd discipline
299
+ expect(urls).not.toContain('discipline-path-0/form-path-4'); // Non-indexable form
300
+ });
301
+ });
302
+ });
@@ -0,0 +1,266 @@
1
+ import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';
2
+ import { FilterKey } from '@studyportals/search-filters/server-side';
3
+ import { SearchDependencies } from '../utils/SearchDependencies.util.mjs';
4
+ import { SitemapDependencies } from '../utils/SitemapDependencies.util.mjs';
5
+ import { DisciplineFormat } from '@/programmes/policies/DisciplineFormat';
6
+ import { PortalType } from '@studyportals/domain-client';
7
+ import { DisciplinePresenter } from '@/presenters/DisciplinePresenter';
8
+ import { FormatPresenter } from '@/presenters/FormatPresenter';
9
+ describe('Policy:DisciplineFormat', () => {
10
+ describe('shouldIndex', () => {
11
+ let searchDependenciesHelper;
12
+ let disciplineFormatPolicy;
13
+ beforeEach(() => {
14
+ searchDependenciesHelper = new SearchDependencies();
15
+ disciplineFormatPolicy = new DisciplineFormat(searchDependenciesHelper.dependencies);
16
+ searchDependenciesHelper.setResultsCount(7);
17
+ searchDependenciesHelper.setPageNumber(1);
18
+ searchDependenciesHelper.setPortalType(PortalType.MASTER);
19
+ });
20
+ it('Should return true when all conditions are met', async () => {
21
+ const disciplineId = '54'; // Agriculture & Forestry
22
+ const format = 'parttime';
23
+ searchDependenciesHelper.setFilterKeyValues(new Map([
24
+ [FilterKey.DISCIPLINES, [disciplineId]],
25
+ [FilterKey.ATTENDANCE, [format]]
26
+ ]));
27
+ const result = await disciplineFormatPolicy.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 format = 'parttime';
34
+ searchDependenciesHelper.setFilterKeyValues(new Map([
35
+ [FilterKey.DISCIPLINES, [firstDisciplineId, secondDisciplineId]],
36
+ [FilterKey.ATTENDANCE, [format]]
37
+ ]));
38
+ const result = await disciplineFormatPolicy.shouldIndex();
39
+ expect(result).toBe(false);
40
+ });
41
+ it('Should return false when multiple format values are selected', async () => {
42
+ const disciplineId = '54'; // Agriculture & Forestry
43
+ const firstFormat = 'parttime';
44
+ const secondFormat = 'fulltime';
45
+ searchDependenciesHelper.setFilterKeyValues(new Map([
46
+ [FilterKey.DISCIPLINES, [disciplineId]],
47
+ [FilterKey.ATTENDANCE, [firstFormat, secondFormat]]
48
+ ]));
49
+ const result = await disciplineFormatPolicy.shouldIndex();
50
+ expect(result).toBe(false);
51
+ });
52
+ it('Should return false when no disciplines are selected', async () => {
53
+ const format = 'parttime';
54
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.ATTENDANCE, [format]]]));
55
+ const result = await disciplineFormatPolicy.shouldIndex();
56
+ expect(result).toBe(false);
57
+ });
58
+ it('Should return false when no format value is selected', async () => {
59
+ const disciplineId = '54'; // Agriculture & Forestry
60
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DISCIPLINES, [disciplineId]]]));
61
+ const result = await disciplineFormatPolicy.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 format = 'parttime';
67
+ const countryId = '30'; // UK
68
+ searchDependenciesHelper.setFilterKeyValues(new Map([
69
+ [FilterKey.DISCIPLINES, [disciplineId]],
70
+ [FilterKey.ATTENDANCE, [format]],
71
+ [FilterKey.COUNTRY, [countryId]]
72
+ ]));
73
+ const result = await disciplineFormatPolicy.shouldIndex();
74
+ expect(result).toBe(false);
75
+ });
76
+ it('Should return false when format is not part-time', async () => {
77
+ const disciplineId = '54'; // Agriculture & Forestry
78
+ const format = 'fulltime';
79
+ searchDependenciesHelper.setFilterKeyValues(new Map([
80
+ [FilterKey.DISCIPLINES, [disciplineId]],
81
+ [FilterKey.ATTENDANCE, [format]]
82
+ ]));
83
+ const result = await disciplineFormatPolicy.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 format = 'parttime';
89
+ searchDependenciesHelper.setResultsCount(5);
90
+ searchDependenciesHelper.setFilterKeyValues(new Map([
91
+ [FilterKey.DISCIPLINES, [disciplineId]],
92
+ [FilterKey.ATTENDANCE, [format]]
93
+ ]));
94
+ const result = await disciplineFormatPolicy.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 format = 'parttime';
100
+ searchDependenciesHelper.setPageNumber(16);
101
+ searchDependenciesHelper.setFilterKeyValues(new Map([
102
+ [FilterKey.DISCIPLINES, [disciplineId]],
103
+ [FilterKey.ATTENDANCE, [format]]
104
+ ]));
105
+ const result = await disciplineFormatPolicy.shouldIndex();
106
+ expect(result).toBe(false);
107
+ });
108
+ it('Should return false when portal is distance learning', async () => {
109
+ const disciplineId = '54'; // Agriculture & Forestry
110
+ const format = 'parttime';
111
+ searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
112
+ searchDependenciesHelper.setFilterKeyValues(new Map([
113
+ [FilterKey.DISCIPLINES, [disciplineId]],
114
+ [FilterKey.ATTENDANCE, [format]]
115
+ ]));
116
+ const result = await disciplineFormatPolicy.shouldIndex();
117
+ expect(result).toBe(false);
118
+ });
119
+ });
120
+ describe('generateUrls', () => {
121
+ let sitemapDependenciesHelper;
122
+ let disciplineFormatPolicy;
123
+ beforeEach(() => {
124
+ sitemapDependenciesHelper = new SitemapDependencies();
125
+ sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
126
+ disciplineFormatPolicy = new DisciplineFormat(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
+ FormatPresenter.getInstance = vi.fn().mockReturnValue({
135
+ getFragments: vi.fn().mockReturnValue([
136
+ { id: 'parttime', path: 'part-time' },
137
+ { id: 'fulltime', path: 'full-time' }
138
+ ])
139
+ });
140
+ });
141
+ afterEach(() => {
142
+ sitemapDependenciesHelper.resetMocks();
143
+ });
144
+ it('Should generate URLs for valid discipline-format combinations with part-time format', async () => {
145
+ // Mock the checkRulesForSitemap to only allow part-time format options
146
+ // due to PartTimeFormatRule
147
+ const resultMap = new Map();
148
+ // Set up all possible combinations but only allow part-time format
149
+ for (const discipline of ['54', '12', '356']) {
150
+ for (const format of ['parttime', 'fulltime']) {
151
+ const key = `${FilterKey.DISCIPLINES}:${discipline}|${FilterKey.ATTENDANCE}:${format}`;
152
+ // Only part-time format should pass
153
+ resultMap.set(key, format === 'parttime');
154
+ }
155
+ }
156
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
157
+ // Call the method via reflection since it's protected
158
+ const urls = await disciplineFormatPolicy.generateUrls();
159
+ // Calculate expected URLs: 3 disciplines * 1 format option (part-time) * 2 page size = 6 URLs
160
+ expect(urls).toHaveLength(3);
161
+ // Verify part-time format combinations
162
+ expect(urls).toContain('part-time/agriculture-forestry');
163
+ expect(urls).toContain('part-time/applied-sciences');
164
+ expect(urls).toContain('part-time/computer-science');
165
+ // Verify full-time format is excluded
166
+ expect(urls).not.toContain('full-time/agriculture-forestry');
167
+ expect(urls).not.toContain('full-time/applied-sciences');
168
+ expect(urls).not.toContain('full-time/computer-science');
169
+ });
170
+ it('Should exclude specific discipline-format combinations based on rules', async () => {
171
+ // Create a map that returns false for specific combinations
172
+ const resultMap = new Map();
173
+ // Only allow part-time format, but exclude computer science
174
+ for (const discipline of ['54', '12', '356']) {
175
+ for (const format of ['parttime', 'fulltime']) {
176
+ const key = `${FilterKey.DISCIPLINES}:${discipline}|${FilterKey.ATTENDANCE}:${format}`;
177
+ // Only part-time format should pass and exclude computer science
178
+ resultMap.set(key, format === 'parttime' && discipline !== '356');
179
+ }
180
+ }
181
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
182
+ const urls = await disciplineFormatPolicy.generateUrls();
183
+ // Calculate expected URLs: 2 disciplines (excluding computer science) * 1 format option * 2 page number = 4 URLs
184
+ expect(urls).toHaveLength(2);
185
+ // Verify excluded combinations
186
+ expect(urls).not.toContain('part-time/computer-science');
187
+ expect(urls).not.toContain('full-time/computer-science');
188
+ // Verify included combinations
189
+ expect(urls).toContain('part-time/agriculture-forestry');
190
+ expect(urls).toContain('part-time/applied-sciences');
191
+ });
192
+ it('Should exclude all URLs when all rule checks fail', async () => {
193
+ // Create a map that returns false for all combinations
194
+ const resultMap = new Map();
195
+ for (const discipline of ['54', '12', '356']) {
196
+ for (const format of ['parttime', 'fulltime']) {
197
+ const key = `${FilterKey.DISCIPLINES}:${discipline}|${FilterKey.ATTENDANCE}:${format}`;
198
+ resultMap.set(key, false);
199
+ }
200
+ }
201
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
202
+ const urls = await disciplineFormatPolicy.generateUrls();
203
+ // Should include no URLs
204
+ expect(urls).toHaveLength(0);
205
+ });
206
+ it('Should handle empty discipline fragments', async () => {
207
+ // Mock the DisciplinePresenter to return empty fragments
208
+ DisciplinePresenter.getInstance.mockReturnValueOnce({
209
+ getFragments: vi.fn().mockReturnValue([])
210
+ });
211
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
212
+ const urls = await disciplineFormatPolicy.generateUrls();
213
+ // Should return empty array
214
+ expect(urls).toHaveLength(0);
215
+ });
216
+ it('Should handle empty format fragments', async () => {
217
+ // Mock the FormatPresenter to return empty fragments
218
+ FormatPresenter.getInstance.mockReturnValueOnce({
219
+ getFragments: vi.fn().mockReturnValue([])
220
+ });
221
+ sitemapDependenciesHelper.mockCheckRulesForSitemap();
222
+ const urls = await disciplineFormatPolicy.generateUrls();
223
+ // Should return empty array
224
+ expect(urls).toHaveLength(0);
225
+ });
226
+ it('Should handle performance with large number of combinations', async () => {
227
+ // Generate larger datasets for testing
228
+ const largeDisciplineSet = Array.from({ length: 30 }, (_, index) => ({
229
+ id: `discipline-${index}`,
230
+ path: `discipline-path-${index}`
231
+ }));
232
+ const largeFormatSet = Array.from({ length: 3 }, (_, index) => ({
233
+ id: `format-${index}`,
234
+ path: `format-path-${index}`
235
+ }));
236
+ // Override mocks with large datasets
237
+ DisciplinePresenter.getInstance.mockReturnValueOnce({
238
+ getFragments: vi.fn().mockReturnValue(largeDisciplineSet)
239
+ });
240
+ FormatPresenter.getInstance.mockReturnValueOnce({
241
+ getFragments: vi.fn().mockReturnValue(largeFormatSet)
242
+ });
243
+ // Mock to only allow combinations where discipline index is even and format index is 0
244
+ // This simulates the PartTimeFormatRule that only allows part-time (first) format
245
+ const resultMap = new Map();
246
+ for (let d = 0; d < largeDisciplineSet.length; d++) {
247
+ for (let f = 0; f < largeFormatSet.length; f++) {
248
+ const disciplineId = largeDisciplineSet[d].id;
249
+ const formatId = largeFormatSet[f].id;
250
+ const key = `${FilterKey.DISCIPLINES}:${disciplineId}|${FilterKey.ATTENDANCE}:${formatId}`;
251
+ resultMap.set(key, d % 2 === 0 && f === 0); // Only even disciplines and part-time (index 0) format
252
+ }
253
+ }
254
+ sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
255
+ const urls = await disciplineFormatPolicy.generateUrls();
256
+ // Calculate expected count: 15 disciplines (even indices) * 1 format (index 0) * 2 page size
257
+ // = 15 * 1 * 2 = 30 URLs
258
+ expect(urls).toHaveLength(15);
259
+ // Test specific items
260
+ expect(urls).toContain('format-path-0/discipline-path-0'); // Even discipline, part-time format
261
+ expect(urls).toContain('format-path-0/discipline-path-2'); // Even discipline, part-time format
262
+ expect(urls).not.toContain('format-path-0/discipline-path-1'); // Odd discipline
263
+ expect(urls).not.toContain('format-path-1/discipline-path-0'); // Non-part-time format
264
+ });
265
+ });
266
+ });
@@ -0,0 +1 @@
1
+ export {};