@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,62 @@
1
+ import { beforeEach, describe, expect, it } from 'vitest';
2
+ import { SearchDependencies } from '../utils/SearchDependencies.util.mjs';
3
+ import { SearchVolumeDisciplinesRule } from '@/scholarships/rules/SearchVolumeDisciplinesRule';
4
+ import { FilterKey } from '@studyportals/search-filters/server-side';
5
+ describe('Rule:SearchVolumeAreas', () => {
6
+ describe('forSearch', () => {
7
+ let searchDependenciesHelper;
8
+ let rule;
9
+ beforeEach(() => {
10
+ searchDependenciesHelper = new SearchDependencies();
11
+ rule = new SearchVolumeDisciplinesRule();
12
+ });
13
+ it('Returns true if discipline has search volume', async () => {
14
+ const disciplineId = '54'; // Agriculture & Forestry
15
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DISCIPLINES, [disciplineId]]]));
16
+ const result = await rule.forSearch(searchDependenciesHelper.dependencies);
17
+ expect(result).toBe(true);
18
+ });
19
+ it('Returns false if discipline does not have search volume', async () => {
20
+ const disciplineId = '243'; // Master in Management
21
+ searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DISCIPLINES, [disciplineId]]]));
22
+ const result = await rule.forSearch(searchDependenciesHelper.dependencies);
23
+ expect(result).toBe(false);
24
+ });
25
+ });
26
+ describe('forSitemapGenerator', () => {
27
+ let rule;
28
+ beforeEach(() => {
29
+ rule = new SearchVolumeDisciplinesRule();
30
+ });
31
+ it('Returns true if discipline has search volume', async () => {
32
+ const disciplineId = '54'; // Agriculture & Forestry
33
+ const result = await rule.forSitemapGenerator(new Map([[FilterKey.DISCIPLINES, [disciplineId]]]));
34
+ expect(result).toBe(true);
35
+ });
36
+ it('Returns false if discipline does not have search volume', async () => {
37
+ const disciplineId = '243'; // Master in Management
38
+ const result = await rule.forSitemapGenerator(new Map([[FilterKey.DISCIPLINES, [disciplineId]]]));
39
+ expect(result).toBe(false);
40
+ });
41
+ it('Returns false if multiple disciplines are selected', async () => {
42
+ const firstCountryId = '30'; // UK
43
+ const secondCountryId = '82'; // USA
44
+ const result = await rule.forSitemapGenerator(new Map([[FilterKey.DISCIPLINES, [firstCountryId, secondCountryId]]]));
45
+ expect(result).toBe(false);
46
+ });
47
+ });
48
+ describe('forDocumentation', () => {
49
+ let rule;
50
+ beforeEach(() => {
51
+ rule = new SearchVolumeDisciplinesRule();
52
+ });
53
+ it('Returns description', () => {
54
+ const result = rule.getName();
55
+ expect(typeof result).toBe('string');
56
+ });
57
+ it('Returns name', () => {
58
+ const result = rule.getDescription();
59
+ expect(typeof result).toBe('string');
60
+ });
61
+ });
62
+ });
@@ -0,0 +1,16 @@
1
+ import { FilterKeyValuesMap } from '@/common/FilterKeyValuesMap';
2
+ import { ISearchApplicationState } from '@/common/ISearchApplicationState';
3
+ import { ISearchDependencies } from '@/common/ISearchDependencies';
4
+ import { DependencyTypes } from '@/enums/DependencyTypes';
5
+ import { ISeoFilterState, ISeoInfoBase } from 'scholarships-seo';
6
+ export declare class SearchDependencies {
7
+ dependencies: ISearchDependencies;
8
+ constructor();
9
+ get seoInfoBase(): ISeoInfoBase;
10
+ get filterState(): ISeoFilterState;
11
+ get applicationState(): ISearchApplicationState;
12
+ get dependencyType(): DependencyTypes;
13
+ setPageNumber(pageNumber: number): void;
14
+ setNumberOfResults(count: number): void;
15
+ setFilterKeyValues(filterKeyValues: FilterKeyValuesMap): void;
16
+ }
@@ -0,0 +1,70 @@
1
+ import { DependencyTypes } from '@/enums/DependencyTypes';
2
+ import { vi } from 'vitest';
3
+ export class SearchDependencies {
4
+ dependencies;
5
+ constructor() {
6
+ const seoInfoBase = {
7
+ singleSelectionFor: vi.fn(),
8
+ selectionOnlyFor: vi.fn(),
9
+ getFilterOptionValueBy: vi.fn(),
10
+ getSelectionTypeCount: vi.fn()
11
+ };
12
+ const filterState = {};
13
+ const applicationState = {
14
+ getPageNumber: vi.fn().mockReturnValue(1),
15
+ getNumberOfResults: vi.fn().mockReturnValue(0)
16
+ };
17
+ const dependencyType = DependencyTypes.SEARCH;
18
+ this.dependencies = {
19
+ seoInfoBase,
20
+ filterState,
21
+ applicationState,
22
+ dependencyType
23
+ };
24
+ }
25
+ get seoInfoBase() {
26
+ return this.dependencies.seoInfoBase;
27
+ }
28
+ get filterState() {
29
+ return this.dependencies.filterState;
30
+ }
31
+ get applicationState() {
32
+ return this.dependencies.applicationState;
33
+ }
34
+ get dependencyType() {
35
+ return this.dependencies.dependencyType;
36
+ }
37
+ setPageNumber(pageNumber) {
38
+ this.dependencies.applicationState.getPageNumber.mockImplementation(() => {
39
+ return pageNumber;
40
+ });
41
+ }
42
+ setNumberOfResults(count) {
43
+ this.dependencies.applicationState.getNumberOfResults.mockImplementation(() => {
44
+ return count;
45
+ });
46
+ }
47
+ setFilterKeyValues(filterKeyValues) {
48
+ const filterKeys = Array.from(filterKeyValues.keys());
49
+ this.dependencies.seoInfoBase.singleSelectionFor.mockImplementation((key) => {
50
+ if (filterKeys.includes(key)) {
51
+ return filterKeyValues.get(key).length === 1;
52
+ }
53
+ return false;
54
+ });
55
+ this.dependencies.seoInfoBase.selectionOnlyFor.mockImplementation((keys) => {
56
+ if (keys.every((key) => filterKeys.includes(key)) && filterKeys.every((filterKey) => keys.includes(filterKey)))
57
+ return true;
58
+ return false;
59
+ });
60
+ this.dependencies.seoInfoBase.getFilterOptionValueBy.mockImplementation((key) => {
61
+ const values = filterKeyValues.get(key);
62
+ if (!values || values.length === 0)
63
+ return null;
64
+ return values[0];
65
+ });
66
+ this.dependencies.seoInfoBase.getSelectionTypeCount.mockImplementation(() => {
67
+ return filterKeys.length;
68
+ });
69
+ }
70
+ }
@@ -0,0 +1,11 @@
1
+ import { IScholarshipSitemapDependencies } from '@/scholarships/types/IScholarshipSitemapDependencies';
2
+ import { DependencyTypes } from '@/enums/DependencyTypes';
3
+ import { IOrganisation, IOrganisationsClient, ISearchApiClient } from 'sitemap-generator-seo';
4
+ export declare class SitemapDependencies {
5
+ readonly dependencies: IScholarshipSitemapDependencies;
6
+ constructor();
7
+ get searchApiClient(): ISearchApiClient;
8
+ get organisationsClient(): IOrganisationsClient;
9
+ get dependencyType(): DependencyTypes;
10
+ setOrganisations(organisations: IOrganisation[]): void;
11
+ }
@@ -0,0 +1,33 @@
1
+ import { DependencyTypes } from '@/enums/DependencyTypes';
2
+ import { vi } from 'vitest';
3
+ export class SitemapDependencies {
4
+ dependencies;
5
+ constructor() {
6
+ const searchApiClient = {
7
+ getOrganisationIds: vi.fn(),
8
+ getCount: vi.fn()
9
+ };
10
+ const organisationsClient = {
11
+ getOrganisations: vi.fn()
12
+ };
13
+ const dependencyType = DependencyTypes.SITEMAP_GENERATOR;
14
+ this.dependencies = {
15
+ searchApiClient,
16
+ organisationsClient,
17
+ dependencyType
18
+ };
19
+ }
20
+ get searchApiClient() {
21
+ return this.dependencies.searchApiClient;
22
+ }
23
+ get organisationsClient() {
24
+ return this.dependencies.organisationsClient;
25
+ }
26
+ get dependencyType() {
27
+ return this.dependencies.dependencyType;
28
+ }
29
+ setOrganisations(organisations) {
30
+ this.dependencies.searchApiClient.getOrganisationIds.mockResolvedValue(organisations.map((org) => org.id));
31
+ this.dependencies.organisationsClient.getOrganisations.mockResolvedValue(organisations);
32
+ }
33
+ }
@@ -0,0 +1,82 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { BaseSitemapUrlGeneratorManager } from '@/sitemap-generator/BaseSitemapUrlGeneratorManager';
3
+ import { FilterCombinations } from '@/enums/FilterCombinations';
4
+ import { FilterKey } from '@studyportals/search-filters/server-side';
5
+ // Create a concrete implementation of the abstract class for testing
6
+ class TestSitemapUrlGeneratorManager extends BaseSitemapUrlGeneratorManager {
7
+ policies;
8
+ presenters = new Map();
9
+ constructor(policies = []) {
10
+ super();
11
+ this.policies = policies;
12
+ }
13
+ }
14
+ describe('BaseSitemapUrlGeneratorManager', () => {
15
+ let mockPolicy1;
16
+ let mockPolicy2;
17
+ let manager;
18
+ beforeEach(() => {
19
+ // Create mock policies
20
+ mockPolicy1 = {
21
+ filterCombination: FilterCombinations.UNFILTERED,
22
+ generateSitemapUrls: vi.fn().mockResolvedValue(['url1', 'url2']),
23
+ getAllRules: vi.fn().mockReturnValue([])
24
+ };
25
+ mockPolicy2 = {
26
+ filterCombination: FilterCombinations.COUNTRY,
27
+ generateSitemapUrls: vi.fn().mockResolvedValue(['url3', 'url4', 'url5']),
28
+ getAllRules: vi.fn().mockReturnValue([])
29
+ };
30
+ // Create manager with mock policies
31
+ manager = new TestSitemapUrlGeneratorManager([mockPolicy1, mockPolicy2]);
32
+ });
33
+ it('Should generate URLs for all policies', async () => {
34
+ const urlMap = await manager.generateUrls();
35
+ // Should call generateSitemapUrls on each policy
36
+ expect(mockPolicy1.generateSitemapUrls).toHaveBeenCalledTimes(1);
37
+ expect(mockPolicy2.generateSitemapUrls).toHaveBeenCalledTimes(1);
38
+ // Should return a map with the correct URLs for each policy
39
+ expect(urlMap.size).toBe(2);
40
+ expect(urlMap.get(FilterCombinations.UNFILTERED)).toEqual(['url1', 'url2']);
41
+ expect(urlMap.get(FilterCombinations.COUNTRY)).toEqual(['url3', 'url4', 'url5']);
42
+ });
43
+ it('Should return empty results if no policies are defined', async () => {
44
+ const emptyManager = new TestSitemapUrlGeneratorManager([]);
45
+ const urlMap = await emptyManager.generateUrls();
46
+ expect(urlMap.size).toBe(0);
47
+ });
48
+ it('Should get filter key value counts', () => {
49
+ const counts = manager.getFilterKeyValueCounts();
50
+ // Initially should be empty as setFilterKeyValueCounts hasn't been called
51
+ expect(counts.size).toBe(0);
52
+ });
53
+ it('Should set filter key value counts from presenters', () => {
54
+ // Create mock presenters
55
+ const mockPresenter1 = {
56
+ filterKey: FilterKey.COUNTRY,
57
+ getFragments: vi.fn().mockReturnValue([
58
+ { id: '1', path: 'path1' },
59
+ { id: '2', path: 'path2' }
60
+ ])
61
+ };
62
+ const mockPresenter2 = {
63
+ filterKey: FilterKey.DISCIPLINES,
64
+ getFragments: vi.fn().mockReturnValue([{ id: '3', path: 'path3' }])
65
+ };
66
+ // Add presenters to the manager
67
+ manager.presenters.set(FilterKey.COUNTRY, mockPresenter1);
68
+ manager.presenters.set(FilterKey.DISCIPLINES, mockPresenter2);
69
+ // Call the protected method via casting
70
+ manager.setFilterKeyValueCounts();
71
+ // Check that counts were set correctly
72
+ const counts = manager.getFilterKeyValueCounts();
73
+ expect(counts.size).toBe(2);
74
+ expect(counts.get(FilterKey.COUNTRY)).toBe(2);
75
+ expect(counts.get(FilterKey.DISCIPLINES)).toBe(1);
76
+ });
77
+ it('Should return the policies', () => {
78
+ const policies = manager.getPolicies();
79
+ expect(policies).toBe(manager.policies);
80
+ expect(policies).toEqual([mockPolicy1, mockPolicy2]);
81
+ });
82
+ });
@@ -0,0 +1,85 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { OrganisationsSitemapUrlGeneratorManager } from '@/sitemap-generator/OrganisationsSitemapUrlGeneratorManager';
3
+ import { PortalType } from '@studyportals/domain-client';
4
+ import { FilterKey } from '@studyportals/search-filters/server-side';
5
+ describe('OrganisationsSitemapUrlGeneratorManager', () => {
6
+ let searchApiClient;
7
+ let organisationsClient;
8
+ let rankingApiClient;
9
+ let manager;
10
+ beforeEach(() => {
11
+ // Create mock dependencies
12
+ searchApiClient = {
13
+ getOrganisationIds: vi.fn(),
14
+ getCount: vi.fn()
15
+ };
16
+ organisationsClient = {
17
+ getOrganisations: vi.fn()
18
+ };
19
+ rankingApiClient = {
20
+ getRankedOrganisationCount: vi.fn()
21
+ };
22
+ // Create the manager
23
+ manager = new OrganisationsSitemapUrlGeneratorManager(PortalType.MASTER, searchApiClient, organisationsClient, rankingApiClient);
24
+ });
25
+ it('Should initialize with all policies', () => {
26
+ // The manager should have initialized with all the policy classes
27
+ expect(manager.policies.length).toBeGreaterThan(0);
28
+ // Check a few specific policy types to ensure they're included
29
+ const policyClassNames = manager.policies.map((p) => p.constructor.name);
30
+ // Core policies that should be included
31
+ expect(policyClassNames).toContain('Area');
32
+ expect(policyClassNames).toContain('Attendance');
33
+ expect(policyClassNames).toContain('Country');
34
+ expect(policyClassNames).toContain('Unfiltered');
35
+ // Some ranked policies
36
+ expect(policyClassNames).toContain('RankedCountry');
37
+ expect(policyClassNames).toContain('RankedDiscipline');
38
+ expect(policyClassNames).toContain('RankedUnfiltered');
39
+ });
40
+ it('Should initialize with all presenters', () => {
41
+ // The manager should have all required presenters
42
+ expect(manager.presenters.size).toBeGreaterThan(0);
43
+ // Check that all expected filter keys have presenters
44
+ const expectedFilterKeys = [FilterKey.AREA, FilterKey.DELIVERY_METHOD, FilterKey.CONTINENT, FilterKey.COUNTRY, FilterKey.DISCIPLINES];
45
+ expectedFilterKeys.forEach((filterKey) => {
46
+ expect(manager.presenters.has(filterKey)).toBe(true);
47
+ expect(manager.presenters.get(filterKey)).toBeDefined();
48
+ });
49
+ });
50
+ it('Should use singleton presenters', () => {
51
+ // Get some presenters from the manager
52
+ const areaPresenter = manager.presenters.get(FilterKey.AREA);
53
+ const countryPresenter = manager.presenters.get(FilterKey.COUNTRY);
54
+ // Create a new manager
55
+ const newManager = new OrganisationsSitemapUrlGeneratorManager(PortalType.PHD, searchApiClient, organisationsClient, rankingApiClient);
56
+ // The presenters should be the same instances (singletons)
57
+ expect(newManager.presenters.get(FilterKey.AREA)).toBe(areaPresenter);
58
+ expect(newManager.presenters.get(FilterKey.COUNTRY)).toBe(countryPresenter);
59
+ });
60
+ it('Should set filter key value counts during initialization', () => {
61
+ // The manager should have filter key value counts set
62
+ const counts = manager.getFilterKeyValueCounts();
63
+ // There should be counts for all presenter filter keys
64
+ expect(counts.size).toBeGreaterThan(0);
65
+ expect(counts.size).toBe(manager.presenters.size);
66
+ // All counts should be numbers greater than or equal to 0
67
+ Array.from(counts.values()).forEach((count) => {
68
+ expect(typeof count).toBe('number');
69
+ expect(count).toBeGreaterThanOrEqual(0);
70
+ });
71
+ });
72
+ it('Should pass the correct portal type to policies', () => {
73
+ // The portal type should be passed to all policies
74
+ expect(manager.portalType).toBe(PortalType.MASTER);
75
+ // Change portal type and check that it's reflected
76
+ const phdManager = new OrganisationsSitemapUrlGeneratorManager(PortalType.PHD, searchApiClient, organisationsClient, rankingApiClient);
77
+ expect(phdManager.portalType).toBe(PortalType.PHD);
78
+ });
79
+ it('Should inherit from BaseSitemapUrlGeneratorManager', () => {
80
+ // Verify it extends the base class by checking for inherited methods
81
+ expect(manager.generateUrls).toBeDefined();
82
+ expect(manager.getFilterKeyValueCounts).toBeDefined();
83
+ expect(manager.getPolicies).toBeDefined();
84
+ });
85
+ });
@@ -0,0 +1,77 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { ProgrammesSitemapUrlGeneratorManager } from '@/sitemap-generator/ProgrammesSitemapUrlGeneratorManager';
3
+ import { PortalType } from '@studyportals/domain-client';
4
+ import { FilterKey } from '@studyportals/search-filters/server-side';
5
+ describe('ProgrammesSitemapUrlGeneratorManager', () => {
6
+ let searchApiClient;
7
+ let manager;
8
+ beforeEach(() => {
9
+ // Create mock dependencies
10
+ searchApiClient = {
11
+ getOrganisationIds: vi.fn(),
12
+ getCount: vi.fn()
13
+ };
14
+ // Create the manager
15
+ manager = new ProgrammesSitemapUrlGeneratorManager(PortalType.MASTER, searchApiClient);
16
+ });
17
+ // it('Should initialize with all policies', () => {
18
+ // // The manager should have initialized with all the policy classes
19
+ // expect(manager.policies.length).toBeGreaterThan(0);
20
+ // // Check a few specific policy types to ensure they're included
21
+ // const policyClassNames = manager.policies.map((p) => p.constructor.name);
22
+ // // Core policies that should be included
23
+ // expect(policyClassNames).toContain('Area');
24
+ // expect(policyClassNames).toContain('Attendance');
25
+ // expect(policyClassNames).toContain('Country');
26
+ // expect(policyClassNames).toContain('Discipline');
27
+ // expect(policyClassNames).toContain('Unfiltered');
28
+ // // Some combined policies
29
+ // expect(policyClassNames).toContain('CountryAttendance');
30
+ // expect(policyClassNames).toContain('DisciplineCountry');
31
+ // });
32
+ it('Should initialize with all presenters', () => {
33
+ // The manager should have all required presenters
34
+ expect(manager.presenters.size).toBeGreaterThan(0);
35
+ // Check that all expected filter keys have presenters
36
+ const expectedFilterKeys = [
37
+ FilterKey.AREA,
38
+ FilterKey.DELIVERY_METHOD,
39
+ FilterKey.DEGREE_TYPE,
40
+ FilterKey.CONTINENT,
41
+ FilterKey.TUITION_FEE,
42
+ FilterKey.COUNTRY,
43
+ FilterKey.DISCIPLINES,
44
+ FilterKey.SPECIAL_PROGRAMMES,
45
+ FilterKey.DURATION,
46
+ FilterKey.EDUCATIONAL_FORM,
47
+ FilterKey.ATTENDANCE
48
+ ];
49
+ expectedFilterKeys.forEach((filterKey) => {
50
+ expect(manager.presenters.has(filterKey)).toBe(true);
51
+ expect(manager.presenters.get(filterKey)).toBeDefined();
52
+ });
53
+ });
54
+ it('Should use singleton presenters', () => {
55
+ // Get some presenters from the manager
56
+ const areaPresenter = manager.presenters.get(FilterKey.AREA);
57
+ const countryPresenter = manager.presenters.get(FilterKey.COUNTRY);
58
+ // Create a new manager
59
+ const newManager = new ProgrammesSitemapUrlGeneratorManager(PortalType.PHD, searchApiClient);
60
+ // The presenters should be the same instances (singletons)
61
+ expect(newManager.presenters.get(FilterKey.AREA)).toBe(areaPresenter);
62
+ expect(newManager.presenters.get(FilterKey.COUNTRY)).toBe(countryPresenter);
63
+ });
64
+ it('Should pass the correct portal type to policies', () => {
65
+ // The portal type should be passed to all policies
66
+ expect(manager.portalType).toBe(PortalType.MASTER);
67
+ // Change portal type and check that it's reflected
68
+ const phdManager = new ProgrammesSitemapUrlGeneratorManager(PortalType.PHD, searchApiClient);
69
+ expect(phdManager.portalType).toBe(PortalType.PHD);
70
+ });
71
+ it('Should inherit from BaseSitemapUrlGeneratorManager', () => {
72
+ // Verify it extends the base class by checking for inherited methods
73
+ expect(manager.generateUrls).toBeDefined();
74
+ expect(manager.getFilterKeyValueCounts).toBeDefined();
75
+ expect(manager.getPolicies).toBeDefined();
76
+ });
77
+ });
@@ -0,0 +1,60 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { ScholarshipsSitemapUrlGeneratorManager } from '@/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager';
3
+ describe('ScholarshipsSitemapUrlGeneratorManager', () => {
4
+ let searchApiClient;
5
+ let organisationsClient;
6
+ let manager;
7
+ beforeEach(() => {
8
+ // Create mock dependencies
9
+ searchApiClient = {
10
+ getOrganisationIds: vi.fn(),
11
+ getCount: vi.fn()
12
+ };
13
+ organisationsClient = {
14
+ getOrganisations: vi.fn()
15
+ };
16
+ // Create the manager
17
+ manager = new ScholarshipsSitemapUrlGeneratorManager(searchApiClient, organisationsClient);
18
+ });
19
+ it('Should initialize with all policies', () => {
20
+ // The manager should have initialized with all the policy classes
21
+ expect(manager.policies.length).toBeGreaterThan(0);
22
+ // Check a few specific policy types to ensure they're included
23
+ const policyClassNames = manager.policies.map((p) => p.constructor.name);
24
+ // Core policies that should be included
25
+ expect(policyClassNames).toContain('Area');
26
+ expect(policyClassNames).toContain('Country');
27
+ expect(policyClassNames).toContain('Discipline');
28
+ expect(policyClassNames).toContain('Unfiltered');
29
+ // Some combined policies
30
+ expect(policyClassNames).toContain('DisciplineCountry');
31
+ expect(policyClassNames).toContain('UniversityCountry');
32
+ });
33
+ it('Should have empty presenters map', () => {
34
+ // The ScholarshipsSitemapUrlGeneratorManager doesn't initialize any presenters
35
+ expect(manager.presenters.size).toBe(0);
36
+ });
37
+ it('Should inherit from BaseSitemapUrlGeneratorManager', () => {
38
+ // Verify it extends the base class by checking for inherited methods
39
+ expect(manager.generateUrls).toBeDefined();
40
+ expect(manager.getFilterKeyValueCounts).toBeDefined();
41
+ expect(manager.getPolicies).toBeDefined();
42
+ });
43
+ it('Should pass dependencies to policies', async () => {
44
+ // Mock the generateSitemapUrls method of the first policy
45
+ const firstPolicy = manager.policies[0];
46
+ const originalGenerateSitemapUrls = firstPolicy.generateSitemapUrls;
47
+ firstPolicy.generateSitemapUrls = vi.fn().mockResolvedValue(['test-url']);
48
+ // Generate URLs
49
+ const urlMap = await manager.generateUrls();
50
+ // The policy's generateSitemapUrls should be called
51
+ expect(firstPolicy.generateSitemapUrls).toHaveBeenCalledTimes(1);
52
+ // Restore the original method
53
+ firstPolicy.generateSitemapUrls = originalGenerateSitemapUrls;
54
+ });
55
+ it('Should not call setFilterKeyValueCounts since presenters are empty', () => {
56
+ // The filter key value counts should be empty
57
+ const counts = manager.getFilterKeyValueCounts();
58
+ expect(counts.size).toBe(0);
59
+ });
60
+ });