@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.
- package/dist/organisations-seo/index.d.ts +3 -3
- package/dist/organisations-seo/index.js +1 -1
- package/dist/programmes-seo/index.d.ts +5 -5
- package/dist/programmes-seo/index.js +1 -1
- package/dist/scholarships-seo/index.d.ts +4 -4
- package/dist/scholarships-seo/index.js +2 -2
- package/dist/sitemap-generator-seo/index.d.ts +14 -14
- package/dist/sitemap-generator-seo/index.js +5 -5
- package/dist/src/common/IDependencies.d.ts +1 -1
- package/dist/src/common/IPresenter.d.ts +1 -1
- package/dist/src/common/ISearchDependencies.d.ts +1 -1
- package/dist/src/common/ISeoDependencies.d.ts +2 -2
- package/dist/src/common/ISitemapDependencies.d.ts +2 -2
- package/dist/src/common/ISitemapUrlGenerator.d.ts +1 -1
- package/dist/src/common/policies/BaseSeoIndexabilityPolicy.d.ts +1 -1
- package/dist/src/common/policies/BaseSeoIndexabilityPolicy.js +2 -2
- package/dist/src/common/rules/NoFiltersSelectedRule.d.ts +2 -2
- package/dist/src/common/rules/OnlineAttendanceRule.d.ts +1 -1
- package/dist/src/common/rules/OnlineAttendanceRule.js +1 -1
- package/dist/src/common/rules/OnlyFiltersSelectedRule.d.ts +2 -2
- package/dist/src/common/rules/SingleValueSelectedForFilterRule.d.ts +2 -2
- package/dist/src/organisations/IOrganisationSearchApplicationState.d.ts +1 -1
- package/dist/src/organisations/ISeoSortingState.d.ts +1 -1
- package/dist/src/organisations/SearchIndexabilityManager.d.ts +4 -4
- package/dist/src/organisations/SearchIndexabilityManager.js +2 -2
- package/dist/src/organisations/policies/OrganisationsSeoIndexabilityPolicy.d.ts +3 -3
- package/dist/src/organisations/policies/OrganisationsSeoIndexabilityPolicy.js +3 -3
- package/dist/src/organisations/policies/RankedOrganisationsSeoIndexabilityPolicy.d.ts +1 -1
- package/dist/src/organisations/policies/RankedOrganisationsSeoIndexabilityPolicy.js +1 -1
- package/dist/src/organisations/policies/our-picks/Area.d.ts +5 -5
- package/dist/src/organisations/policies/our-picks/Area.js +6 -6
- package/dist/src/organisations/policies/our-picks/AreaAttendance.d.ts +7 -7
- package/dist/src/organisations/policies/our-picks/AreaAttendance.js +9 -9
- package/dist/src/organisations/policies/our-picks/Attendance.d.ts +6 -6
- package/dist/src/organisations/policies/our-picks/Attendance.js +7 -7
- package/dist/src/organisations/policies/our-picks/Continent.d.ts +5 -5
- package/dist/src/organisations/policies/our-picks/Continent.js +6 -6
- package/dist/src/organisations/policies/our-picks/Country.d.ts +5 -5
- package/dist/src/organisations/policies/our-picks/Country.js +6 -6
- package/dist/src/organisations/policies/our-picks/CountryAreaCity.d.ts +6 -6
- package/dist/src/organisations/policies/our-picks/CountryAreaCity.js +7 -7
- package/dist/src/organisations/policies/our-picks/CountryAttendance.d.ts +7 -7
- package/dist/src/organisations/policies/our-picks/CountryAttendance.js +9 -9
- package/dist/src/organisations/policies/our-picks/CountryCity.d.ts +6 -6
- package/dist/src/organisations/policies/our-picks/CountryCity.js +7 -7
- package/dist/src/organisations/policies/our-picks/Unfiltered.d.ts +4 -4
- package/dist/src/organisations/policies/our-picks/Unfiltered.js +4 -4
- package/dist/src/organisations/policies/ranked/RankedArea.d.ts +4 -4
- package/dist/src/organisations/policies/ranked/RankedArea.js +4 -4
- package/dist/src/organisations/policies/ranked/RankedAreaDiscipline.d.ts +5 -5
- package/dist/src/organisations/policies/ranked/RankedAreaDiscipline.js +6 -6
- package/dist/src/organisations/policies/ranked/RankedAttendance.d.ts +5 -5
- package/dist/src/organisations/policies/ranked/RankedAttendance.js +5 -5
- package/dist/src/organisations/policies/ranked/RankedAttendanceDiscipline.d.ts +5 -5
- package/dist/src/organisations/policies/ranked/RankedAttendanceDiscipline.js +6 -6
- package/dist/src/organisations/policies/ranked/RankedContinent.d.ts +4 -4
- package/dist/src/organisations/policies/ranked/RankedContinent.js +4 -4
- package/dist/src/organisations/policies/ranked/RankedContinentAttendance.d.ts +6 -6
- package/dist/src/organisations/policies/ranked/RankedContinentAttendance.js +7 -7
- package/dist/src/organisations/policies/ranked/RankedCountry.d.ts +4 -4
- package/dist/src/organisations/policies/ranked/RankedCountry.js +4 -4
- package/dist/src/organisations/policies/ranked/RankedCountryAttendance.d.ts +5 -5
- package/dist/src/organisations/policies/ranked/RankedCountryAttendance.js +6 -6
- package/dist/src/organisations/policies/ranked/RankedCountryDiscipline.d.ts +4 -4
- package/dist/src/organisations/policies/ranked/RankedCountryDiscipline.js +5 -5
- package/dist/src/organisations/policies/ranked/RankedDiscipline.d.ts +4 -4
- package/dist/src/organisations/policies/ranked/RankedDiscipline.js +4 -4
- package/dist/src/organisations/policies/ranked/RankedUnfiltered.d.ts +3 -3
- package/dist/src/organisations/policies/ranked/RankedUnfiltered.js +2 -2
- package/dist/src/organisations/rules/BaseSearchVolumeOrganisationsRule.d.ts +3 -3
- package/dist/src/organisations/rules/ContinentIsEuropeRule.d.ts +1 -1
- package/dist/src/organisations/rules/ContinentIsEuropeRule.js +1 -1
- package/dist/src/organisations/rules/ExcludeByIdForCitiesRule.d.ts +3 -3
- package/dist/src/organisations/rules/MinimumAmountOfRankedResultsRule.d.ts +3 -3
- package/dist/src/organisations/rules/MinimumAmountOfRankedResultsRule.js +1 -1
- package/dist/src/organisations/rules/MinimumAmountOfResultsRule.d.ts +4 -4
- package/dist/src/organisations/rules/MinimumAmountOfResultsRule.js +1 -1
- package/dist/src/organisations/rules/NoFiltersSelectedRule.d.ts +2 -2
- package/dist/src/organisations/types/IOrganisationSearchDependencies.d.ts +2 -2
- package/dist/src/organisations/types/IOrganisationsSitemapDependencies.d.ts +3 -3
- package/dist/src/presenters/AreaPresenter.d.ts +1 -1
- package/dist/src/presenters/AttendancePresenter.d.ts +1 -1
- package/dist/src/presenters/CityPresenter.d.ts +1 -1
- package/dist/src/presenters/ContinentPresenter.d.ts +1 -1
- package/dist/src/presenters/CountryPresenter.d.ts +1 -1
- package/dist/src/presenters/DegreePresenter.d.ts +1 -1
- package/dist/src/presenters/DisciplinePresenter.d.ts +1 -1
- package/dist/src/presenters/DurationPresenter.d.ts +1 -1
- package/dist/src/presenters/EducationalFormPresenter.d.ts +1 -1
- package/dist/src/presenters/FormatPresenter.d.ts +1 -1
- package/dist/src/presenters/SpecialProgrammesPresenter.d.ts +1 -1
- package/dist/src/presenters/TuitionFeePresenter.d.ts +1 -1
- package/dist/src/programmes/BaseProgrammeFilterKeyValueRule.d.ts +2 -2
- package/dist/src/programmes/BaseProgrammeFilterKeyValueRule.js +1 -1
- package/dist/src/programmes/BaseProgrammeRule.d.ts +2 -2
- package/dist/src/programmes/IProgrammeRule.d.ts +2 -2
- package/dist/src/programmes/ProgrammesBaseIndexabilityPolicy.d.ts +3 -3
- package/dist/src/programmes/ProgrammesBaseIndexabilityPolicy.js +1 -1
- package/dist/src/programmes/SearchIndexabilityManager.d.ts +4 -4
- package/dist/src/programmes/SearchIndexabilityManager.js +8 -4
- package/dist/src/programmes/policies/Area.d.ts +3 -3
- package/dist/src/programmes/policies/Area.js +4 -4
- package/dist/src/programmes/policies/Attendance.d.ts +4 -4
- package/dist/src/programmes/policies/Attendance.js +5 -5
- package/dist/src/programmes/policies/AttendanceArea.d.ts +4 -4
- package/dist/src/programmes/policies/AttendanceArea.js +6 -6
- package/dist/src/programmes/policies/AttendanceContinent.d.ts +4 -4
- package/dist/src/programmes/policies/AttendanceContinent.js +6 -6
- package/dist/src/programmes/policies/AttendanceDegree.d.ts +2 -2
- package/dist/src/programmes/policies/AttendanceDegree.js +5 -5
- package/dist/src/programmes/policies/AttendanceDuration.d.ts +5 -5
- package/dist/src/programmes/policies/AttendanceDuration.js +7 -7
- package/dist/src/programmes/policies/AttendanceFormat.d.ts +4 -4
- package/dist/src/programmes/policies/AttendanceFormat.js +6 -6
- package/dist/src/programmes/policies/Continent.d.ts +3 -3
- package/dist/src/programmes/policies/Continent.js +4 -4
- package/dist/src/programmes/policies/ContinentDuration.d.ts +3 -3
- package/dist/src/programmes/policies/ContinentDuration.js +5 -5
- package/dist/src/programmes/policies/ContinentFormat.d.ts +3 -3
- package/dist/src/programmes/policies/ContinentFormat.js +5 -5
- package/dist/src/programmes/policies/ContinentSpecialProgrammes.d.ts +4 -4
- package/dist/src/programmes/policies/ContinentSpecialProgrammes.js +6 -6
- package/dist/src/programmes/policies/Country.d.ts +3 -3
- package/dist/src/programmes/policies/Country.js +4 -4
- package/dist/src/programmes/policies/CountryAttendance.d.ts +4 -4
- package/dist/src/programmes/policies/CountryAttendance.js +6 -6
- package/dist/src/programmes/policies/CountryAttendanceDegree.d.ts +4 -4
- package/dist/src/programmes/policies/CountryAttendanceDegree.js +7 -7
- package/dist/src/programmes/policies/CountryDegree.d.ts +2 -2
- package/dist/src/programmes/policies/CountryDegree.js +5 -5
- package/dist/src/programmes/policies/CountryDuration.d.ts +3 -3
- package/dist/src/programmes/policies/CountryDuration.js +5 -5
- package/dist/src/programmes/policies/CountryDurationDegree.d.ts +3 -3
- package/dist/src/programmes/policies/CountryDurationDegree.js +6 -6
- package/dist/src/programmes/policies/CountryEducationalForm.d.ts +2 -2
- package/dist/src/programmes/policies/CountryEducationalForm.js +5 -5
- package/dist/src/programmes/policies/CountryFormat.d.ts +3 -3
- package/dist/src/programmes/policies/CountryFormat.js +5 -5
- package/dist/src/programmes/policies/CountrySpecialProgrammes.d.ts +4 -4
- package/dist/src/programmes/policies/CountrySpecialProgrammes.js +6 -6
- package/dist/src/programmes/policies/Degree.d.ts +3 -3
- package/dist/src/programmes/policies/Degree.js +4 -4
- package/dist/src/programmes/policies/DegreeArea.d.ts +3 -3
- package/dist/src/programmes/policies/DegreeArea.js +5 -5
- package/dist/src/programmes/policies/DegreeAttendanceDiscipline.d.ts +4 -4
- package/dist/src/programmes/policies/DegreeAttendanceDiscipline.js +7 -7
- package/dist/src/programmes/policies/DegreeAttendanceFormat.d.ts +4 -4
- package/dist/src/programmes/policies/DegreeAttendanceFormat.js +7 -7
- package/dist/src/programmes/policies/DegreeAttendanceSpecialProgrammes.d.ts +4 -4
- package/dist/src/programmes/policies/DegreeAttendanceSpecialProgrammes.js +7 -7
- package/dist/src/programmes/policies/DegreeContinent.d.ts +2 -2
- package/dist/src/programmes/policies/DegreeContinent.js +5 -5
- package/dist/src/programmes/policies/DegreeCountryAttendance.d.ts +3 -3
- package/dist/src/programmes/policies/DegreeCountryAttendance.js +6 -6
- package/dist/src/programmes/policies/DegreeCountryDiscipline.d.ts +3 -3
- package/dist/src/programmes/policies/DegreeCountryDiscipline.js +6 -6
- package/dist/src/programmes/policies/DegreeCountryTuitionFee.d.ts +3 -3
- package/dist/src/programmes/policies/DegreeCountryTuitionFee.js +6 -6
- package/dist/src/programmes/policies/DegreeDuration.d.ts +2 -2
- package/dist/src/programmes/policies/DegreeDuration.js +5 -5
- package/dist/src/programmes/policies/DegreeFormat.d.ts +2 -2
- package/dist/src/programmes/policies/DegreeFormat.js +5 -5
- package/dist/src/programmes/policies/DegreeSpecialProgrammes.d.ts +3 -3
- package/dist/src/programmes/policies/DegreeSpecialProgrammes.js +5 -5
- package/dist/src/programmes/policies/DegreeTuitionFee.d.ts +3 -3
- package/dist/src/programmes/policies/DegreeTuitionFee.js +5 -5
- package/dist/src/programmes/policies/{DisciplineTuitionFee.d.ts → DegreeTuitionFeeArea.d.ts} +5 -5
- package/dist/src/programmes/policies/{DegreeAreaTuitionFee.js → DegreeTuitionFeeArea.js} +7 -7
- package/dist/src/programmes/policies/{DegreeAttendanceTuitionFee.d.ts → DegreeTuitionFeeAttendance.d.ts} +2 -2
- package/dist/src/programmes/policies/{DegreeAttendanceTuitionFee.js → DegreeTuitionFeeAttendance.js} +7 -7
- package/dist/src/programmes/policies/{DegreeContinentTuitionFee.d.ts → DegreeTuitionFeeContinent.d.ts} +2 -2
- package/dist/src/programmes/policies/{DegreeContinentTuitionFee.js → DegreeTuitionFeeContinent.js} +6 -6
- package/dist/src/programmes/policies/{DegreeFormatTuitionFee.d.ts → DegreeTuitionFeeFormat.d.ts} +3 -3
- package/dist/src/programmes/policies/{DegreeFormatTuitionFee.js → DegreeTuitionFeeFormat.js} +9 -9
- package/dist/src/programmes/policies/Discipline.d.ts +3 -3
- package/dist/src/programmes/policies/Discipline.js +4 -4
- package/dist/src/programmes/policies/DisciplineAttendance.d.ts +4 -4
- package/dist/src/programmes/policies/DisciplineAttendance.js +6 -6
- package/dist/src/programmes/policies/DisciplineContinent.d.ts +3 -3
- package/dist/src/programmes/policies/DisciplineContinent.js +5 -5
- package/dist/src/programmes/policies/DisciplineContinentAttendance.d.ts +4 -4
- package/dist/src/programmes/policies/DisciplineContinentAttendance.js +7 -7
- package/dist/src/programmes/policies/DisciplineCountry.d.ts +3 -3
- package/dist/src/programmes/policies/DisciplineCountry.js +5 -5
- package/dist/src/programmes/policies/DisciplineCountryAttendance.d.ts +4 -4
- package/dist/src/programmes/policies/DisciplineCountryAttendance.js +7 -7
- package/dist/src/programmes/policies/DisciplineCountryEducationalForm.d.ts +2 -2
- package/dist/src/programmes/policies/DisciplineCountryEducationalForm.js +6 -6
- package/dist/src/programmes/policies/DisciplineCountryFormat.d.ts +3 -3
- package/dist/src/programmes/policies/DisciplineCountryFormat.js +6 -6
- package/dist/src/programmes/policies/DisciplineDegree.d.ts +3 -3
- package/dist/src/programmes/policies/DisciplineDegree.js +5 -5
- package/dist/src/programmes/policies/DisciplineDuration.d.ts +3 -3
- package/dist/src/programmes/policies/DisciplineDuration.js +5 -5
- package/dist/src/programmes/policies/DisciplineEducationalForm.d.ts +2 -2
- package/dist/src/programmes/policies/DisciplineEducationalForm.js +5 -5
- package/dist/src/programmes/policies/DisciplineFormat.d.ts +3 -3
- package/dist/src/programmes/policies/DisciplineFormat.js +5 -5
- package/dist/src/programmes/policies/DisciplineSpecialProgrammes.d.ts +3 -3
- package/dist/src/programmes/policies/DisciplineSpecialProgrammes.js +5 -5
- package/dist/src/programmes/policies/Duration.d.ts +3 -3
- package/dist/src/programmes/policies/Duration.js +4 -4
- package/dist/src/programmes/policies/Format.d.ts +3 -3
- package/dist/src/programmes/policies/Format.js +4 -4
- package/dist/src/programmes/policies/SpecialProgrammes.d.ts +3 -3
- package/dist/src/programmes/policies/SpecialProgrammes.js +4 -4
- package/dist/src/programmes/policies/TuitionFee.d.ts +3 -3
- package/dist/src/programmes/policies/TuitionFee.js +4 -4
- package/dist/src/programmes/policies/TuitionFeeAttendance.d.ts +4 -4
- package/dist/src/programmes/policies/TuitionFeeAttendance.js +6 -6
- package/dist/src/programmes/policies/TuitionFeeAttendanceDiscipline.d.ts +4 -4
- package/dist/src/programmes/policies/TuitionFeeAttendanceDiscipline.js +7 -7
- package/dist/src/programmes/policies/TuitionFeeContinent.d.ts +3 -3
- package/dist/src/programmes/policies/TuitionFeeContinent.js +5 -5
- package/dist/src/programmes/policies/TuitionFeeCountry.d.ts +3 -3
- package/dist/src/programmes/policies/TuitionFeeCountry.js +5 -5
- package/dist/src/programmes/policies/TuitionFeeDiscipline.d.ts +3 -3
- package/dist/src/programmes/policies/TuitionFeeDiscipline.js +5 -5
- package/dist/src/programmes/policies/Unfiltered.d.ts +2 -2
- package/dist/src/programmes/policies/Unfiltered.js +2 -2
- package/dist/src/programmes/policies/index.d.ts +4 -5
- package/dist/src/programmes/policies/index.js +4 -5
- package/dist/src/programmes/rules/DegreeAttendanceDisciplineRule.d.ts +2 -2
- package/dist/src/programmes/rules/DegreeAttendanceDisciplineSpecificRule.d.ts +2 -2
- package/dist/src/programmes/rules/DegreeCountryAttendanceSpecificRule.d.ts +2 -2
- package/dist/src/programmes/rules/DegreeCountryDisciplineSpecificRule.d.ts +2 -2
- package/dist/src/programmes/rules/DegreeCountryTuitionFeeSpecificRule.d.ts +2 -2
- package/dist/src/programmes/rules/DegreeDisciplineRule.d.ts +2 -2
- package/dist/src/programmes/rules/IndexableDegreeRule.d.ts +2 -2
- package/dist/src/programmes/rules/IndexableDegreeRule.js +1 -1
- package/dist/src/programmes/rules/IndexableDurationRule.d.ts +2 -2
- package/dist/src/programmes/rules/IndexableDurationRule.js +1 -1
- package/dist/src/programmes/rules/IndexableEducationalFormRule.d.ts +2 -2
- package/dist/src/programmes/rules/IndexableEducationalFormRule.js +1 -1
- package/dist/src/programmes/rules/IndexablePageNumberRule.js +1 -1
- package/dist/src/programmes/rules/MbaOrMscDegreeRule.d.ts +2 -2
- package/dist/src/programmes/rules/MinimumAmountOfResultsRule.d.ts +3 -3
- package/dist/src/programmes/rules/MinimumAmountOfResultsRule.js +1 -1
- package/dist/src/programmes/rules/NotDistanceLearningPortalRule.js +1 -1
- package/dist/src/programmes/rules/OneYearOnlyRule.d.ts +2 -2
- package/dist/src/programmes/types/IProgrammeSearchApplicationState.d.ts +1 -1
- package/dist/src/programmes/types/IProgrammeSearchDependencies.d.ts +1 -1
- package/dist/src/programmes/types/IProgrammeSearchSitemapDependencies.d.ts +1 -1
- package/dist/src/programmes/types/IProgrammeSitemapDependencies.d.ts +2 -2
- package/dist/src/programmes/types/IProgrammeSitemapUrlGenerator.d.ts +1 -1
- package/dist/src/scholarships/SearchIndexabilityManager.d.ts +5 -5
- package/dist/src/scholarships/SearchIndexabilityManager.js +1 -1
- package/dist/src/scholarships/policies/Area.d.ts +3 -3
- package/dist/src/scholarships/policies/Area.js +4 -4
- package/dist/src/scholarships/policies/Country.d.ts +3 -3
- package/dist/src/scholarships/policies/Country.js +4 -4
- package/dist/src/scholarships/policies/Discipline.d.ts +4 -4
- package/dist/src/scholarships/policies/Discipline.js +5 -5
- package/dist/src/scholarships/policies/DisciplineCountry.d.ts +3 -3
- package/dist/src/scholarships/policies/DisciplineCountry.js +5 -5
- package/dist/src/scholarships/policies/ScholarshipSeoIndexabilityPolicy.d.ts +2 -2
- package/dist/src/scholarships/policies/ScholarshipSeoIndexabilityPolicy.js +2 -2
- package/dist/src/scholarships/policies/Unfiltered.d.ts +2 -2
- package/dist/src/scholarships/policies/Unfiltered.js +2 -2
- package/dist/src/scholarships/policies/UniversityCountry.d.ts +3 -3
- package/dist/src/scholarships/policies/UniversityCountry.js +4 -4
- package/dist/src/scholarships/rules/ExceptAustaliaAreasRule.d.ts +3 -3
- package/dist/src/scholarships/rules/ExceptAustaliaAreasRule.js +1 -1
- package/dist/src/scholarships/rules/SearchVolumeAreasRule.d.ts +3 -3
- package/dist/src/scholarships/rules/SearchVolumeCountriesDisciplinesRule.d.ts +3 -3
- package/dist/src/scholarships/rules/SearchVolumeCountriesRule.d.ts +3 -3
- package/dist/src/scholarships/rules/SearchVolumeDisciplinesRule.d.ts +3 -3
- package/dist/src/scholarships/types/IScholarshipSeoDependencies.d.ts +1 -1
- package/dist/src/scholarships/types/IScholarshipSitemapDependencies.d.ts +2 -2
- package/dist/src/sitemap-generator/BaseSitemapUrlGeneratorManager.d.ts +3 -3
- package/dist/src/sitemap-generator/IRankingApiClient.d.ts +1 -1
- package/dist/src/sitemap-generator/ISearchApiClient.d.ts +1 -1
- package/dist/src/sitemap-generator/ISitemapUrlGeneratorManager.d.ts +3 -3
- package/dist/src/sitemap-generator/OrganisationsSitemapUrlGeneratorManager.d.ts +4 -4
- package/dist/src/sitemap-generator/OrganisationsSitemapUrlGeneratorManager.js +8 -8
- package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.d.ts +3 -3
- package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.js +15 -15
- package/dist/src/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager.d.ts +3 -3
- package/dist/src/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager.js +7 -7
- package/dist/src/structured-data/OrganisationStructuredDataFactory.d.ts +1 -1
- package/dist/src/structured-data/ProgrammeStructuredDataFactory.d.ts +1 -1
- package/dist/tests/common/rules/NoFiltersSelectedRule.test.d.mts +1 -0
- package/dist/tests/common/rules/NoFiltersSelectedRule.test.mjs +40 -0
- package/dist/tests/common/rules/OnlyFiltersSelectedRule.test.d.mts +1 -0
- package/dist/tests/common/rules/OnlyFiltersSelectedRule.test.mjs +70 -0
- package/dist/tests/common/rules/SingleValueSelectedForFilterRule.test.d.mts +1 -0
- package/dist/tests/common/rules/SingleValueSelectedForFilterRule.test.mjs +54 -0
- package/dist/tests/organisations/policies/our-picks/Area.test.d.mts +1 -0
- package/dist/tests/organisations/policies/our-picks/Area.test.mjs +125 -0
- package/dist/tests/organisations/policies/our-picks/AreaAttendance.test.d.mts +1 -0
- package/dist/tests/organisations/policies/our-picks/AreaAttendance.test.mjs +238 -0
- package/dist/tests/organisations/policies/our-picks/Attendance.test.d.mts +1 -0
- package/dist/tests/organisations/policies/our-picks/Attendance.test.mjs +119 -0
- package/dist/tests/organisations/policies/our-picks/Continent.test.d.mts +1 -0
- package/dist/tests/organisations/policies/our-picks/Continent.test.mjs +105 -0
- package/dist/tests/organisations/policies/our-picks/Country.test.d.mts +1 -0
- package/dist/tests/organisations/policies/our-picks/Country.test.mjs +109 -0
- package/dist/tests/organisations/policies/our-picks/CountryAreaCity.test.d.mts +1 -0
- package/dist/tests/organisations/policies/our-picks/CountryAreaCity.test.mjs +152 -0
- package/dist/tests/organisations/policies/our-picks/CountryAttendance.test.d.mts +1 -0
- package/dist/tests/organisations/policies/our-picks/CountryAttendance.test.mjs +223 -0
- package/dist/tests/organisations/policies/our-picks/CountryCity.test.d.mts +1 -0
- package/dist/tests/organisations/policies/our-picks/CountryCity.test.mjs +109 -0
- package/dist/tests/organisations/policies/our-picks/Unfiltered.test.d.mts +1 -0
- package/dist/tests/organisations/policies/our-picks/Unfiltered.test.mjs +60 -0
- package/dist/tests/organisations/policies/ranked/RankedArea.test.d.mts +1 -0
- package/dist/tests/organisations/policies/ranked/RankedArea.test.mjs +149 -0
- package/dist/tests/organisations/policies/ranked/RankedAreaDiscipline.test.d.mts +1 -0
- package/dist/tests/organisations/policies/ranked/RankedAreaDiscipline.test.mjs +237 -0
- package/dist/tests/organisations/policies/ranked/RankedAttendance.test.d.mts +1 -0
- package/dist/tests/organisations/policies/ranked/RankedAttendance.test.mjs +139 -0
- package/dist/tests/organisations/policies/ranked/RankedAttendanceDiscipline.test.d.mts +1 -0
- package/dist/tests/organisations/policies/ranked/RankedAttendanceDiscipline.test.mjs +224 -0
- package/dist/tests/organisations/policies/ranked/RankedContinent.test.d.mts +1 -0
- package/dist/tests/organisations/policies/ranked/RankedContinent.test.mjs +125 -0
- package/dist/tests/organisations/policies/ranked/RankedContinentAttendance.test.d.mts +1 -0
- package/dist/tests/organisations/policies/ranked/RankedContinentAttendance.test.mjs +253 -0
- package/dist/tests/organisations/policies/ranked/RankedCountry.test.d.mts +1 -0
- package/dist/tests/organisations/policies/ranked/RankedCountry.test.mjs +131 -0
- package/dist/tests/organisations/policies/ranked/RankedCountryAttendance.test.d.mts +1 -0
- package/dist/tests/organisations/policies/ranked/RankedCountryAttendance.test.mjs +230 -0
- package/dist/tests/organisations/policies/ranked/RankedCountryDiscipline.test.d.mts +1 -0
- package/dist/tests/organisations/policies/ranked/RankedCountryDiscipline.test.mjs +197 -0
- package/dist/tests/organisations/policies/ranked/RankedDiscipline.test.d.mts +1 -0
- package/dist/tests/organisations/policies/ranked/RankedDiscipline.test.mjs +124 -0
- package/dist/tests/organisations/policies/ranked/RankedUnfiltered.test.d.mts +1 -0
- package/dist/tests/organisations/policies/ranked/RankedUnfiltered.test.mjs +75 -0
- package/dist/tests/organisations/rules/ContinentIsEuropeRule.test.d.mts +1 -0
- package/dist/tests/organisations/rules/ContinentIsEuropeRule.test.mjs +59 -0
- package/dist/tests/organisations/rules/MinimumAmountOfRankedResultsRule.test.d.mts +1 -0
- package/dist/tests/organisations/rules/MinimumAmountOfRankedResultsRule.test.mjs +77 -0
- package/dist/tests/organisations/rules/MinimumAmountOfResultsRule.test.d.mts +1 -0
- package/dist/tests/organisations/rules/MinimumAmountOfResultsRule.test.mjs +77 -0
- package/dist/tests/organisations/rules/OnlineAttendanceRule.test.d.mts +1 -0
- package/dist/tests/organisations/rules/OnlineAttendanceRule.test.mjs +59 -0
- package/dist/tests/organisations/rules/SearchVolumeAreasAttendanceRule.test.d.mts +1 -0
- package/dist/tests/organisations/rules/SearchVolumeAreasAttendanceRule.test.mjs +59 -0
- package/dist/tests/organisations/rules/SearchVolumeAreasDisciplineRule.test.d.mts +1 -0
- package/dist/tests/organisations/rules/SearchVolumeAreasDisciplineRule.test.mjs +59 -0
- package/dist/tests/organisations/rules/SearchVolumeCountriesAttendanceRule.test.d.mts +1 -0
- package/dist/tests/organisations/rules/SearchVolumeCountriesAttendanceRule.test.mjs +59 -0
- package/dist/tests/organisations/utils/SearchDependencies.util.d.mts +20 -0
- package/dist/tests/organisations/utils/SearchDependencies.util.mjs +88 -0
- package/dist/tests/organisations/utils/SitemapDependencies.util.d.mts +18 -0
- package/dist/tests/organisations/utils/SitemapDependencies.util.mjs +54 -0
- package/dist/tests/presenters/AreaPresenter.test.d.mts +1 -0
- package/dist/tests/presenters/AreaPresenter.test.mjs +46 -0
- package/dist/tests/presenters/AttendancePresenter.test.d.mts +1 -0
- package/dist/tests/presenters/AttendancePresenter.test.mjs +41 -0
- package/dist/tests/presenters/ContinentPresenter.test.d.mts +1 -0
- package/dist/tests/presenters/ContinentPresenter.test.mjs +44 -0
- package/dist/tests/presenters/CountryPresenter.test.d.mts +1 -0
- package/dist/tests/presenters/CountryPresenter.test.mjs +50 -0
- package/dist/tests/presenters/DegreePresenter.test.d.mts +1 -0
- package/dist/tests/presenters/DegreePresenter.test.mjs +51 -0
- package/dist/tests/presenters/DisciplinePresenter.test.d.mts +1 -0
- package/dist/tests/presenters/DisciplinePresenter.test.mjs +40 -0
- package/dist/tests/presenters/DurationPresenter.test.d.mts +1 -0
- package/dist/tests/presenters/DurationPresenter.test.mjs +64 -0
- package/dist/tests/presenters/EducationalFormPresenter.test.d.mts +1 -0
- package/dist/tests/presenters/EducationalFormPresenter.test.mjs +60 -0
- package/dist/tests/presenters/FormatPresenter.test.d.mts +1 -0
- package/dist/tests/presenters/FormatPresenter.test.mjs +43 -0
- package/dist/tests/presenters/SpecialProgrammesPresenter.test.d.mts +1 -0
- package/dist/tests/presenters/SpecialProgrammesPresenter.test.mjs +66 -0
- package/dist/tests/presenters/TuitionFeePresenter.test.d.mts +1 -0
- package/dist/tests/presenters/TuitionFeePresenter.test.mjs +52 -0
- package/dist/tests/programmes/policies/Area.test.d.mts +1 -0
- package/dist/tests/programmes/policies/Area.test.mjs +153 -0
- package/dist/tests/programmes/policies/Attendance.test.d.mts +1 -0
- package/dist/tests/programmes/policies/Attendance.test.mjs +173 -0
- package/dist/tests/programmes/policies/AttendanceDegree.test.d.mts +1 -0
- package/dist/tests/programmes/policies/AttendanceDegree.test.mjs +291 -0
- package/dist/tests/programmes/policies/Continent.test.d.mts +1 -0
- package/dist/tests/programmes/policies/Continent.test.mjs +169 -0
- package/dist/tests/programmes/policies/Country.test.d.mts +1 -0
- package/dist/tests/programmes/policies/Country.test.mjs +164 -0
- package/dist/tests/programmes/policies/CountryAttendance.test.d.mts +1 -0
- package/dist/tests/programmes/policies/CountryAttendance.test.mjs +251 -0
- package/dist/tests/programmes/policies/CountryAttendanceDegree.test.d.mts +1 -0
- package/dist/tests/programmes/policies/CountryAttendanceDegree.test.mjs +337 -0
- package/dist/tests/programmes/policies/CountryDegree.test.d.mts +1 -0
- package/dist/tests/programmes/policies/CountryDegree.test.mjs +262 -0
- package/dist/tests/programmes/policies/CountryDuration.test.d.mts +1 -0
- package/dist/tests/programmes/policies/CountryDuration.test.mjs +234 -0
- package/dist/tests/programmes/policies/CountryDurationDegree.test.d.mts +1 -0
- package/dist/tests/programmes/policies/CountryDurationDegree.test.mjs +304 -0
- package/dist/tests/programmes/policies/CountryEducationalForm.test.d.mts +1 -0
- package/dist/tests/programmes/policies/CountryEducationalForm.test.mjs +260 -0
- package/dist/tests/programmes/policies/CountryFormat.test.d.mts +1 -0
- package/dist/tests/programmes/policies/CountryFormat.test.mjs +253 -0
- package/dist/tests/programmes/policies/DegreeAttendanceDiscipline.test.d.mts +1 -0
- package/dist/tests/programmes/policies/DegreeAttendanceDiscipline.test.mjs +179 -0
- package/dist/tests/programmes/policies/DegreeCountryAttendance.test.d.mts +1 -0
- package/dist/tests/programmes/policies/DegreeCountryAttendance.test.mjs +267 -0
- package/dist/tests/programmes/policies/DegreeCountryTuitionFee.test.d.mts +1 -0
- package/dist/tests/programmes/policies/DegreeCountryTuitionFee.test.mjs +217 -0
- package/dist/tests/programmes/policies/DegreeFormat.test.d.mts +1 -0
- package/dist/tests/programmes/policies/DegreeFormat.test.mjs +221 -0
- package/dist/tests/programmes/policies/Discipline.test.d.mts +1 -0
- package/dist/tests/programmes/policies/Discipline.test.mjs +159 -0
- package/dist/tests/programmes/policies/DisciplineAttendance.test.d.mts +1 -0
- package/dist/tests/programmes/policies/DisciplineAttendance.test.mjs +292 -0
- package/dist/tests/programmes/policies/DisciplineContinent.test.d.mts +1 -0
- package/dist/tests/programmes/policies/DisciplineContinent.test.mjs +253 -0
- package/dist/tests/programmes/policies/DisciplineCountry.test.d.mts +1 -0
- package/dist/tests/programmes/policies/DisciplineCountry.test.mjs +244 -0
- package/dist/tests/programmes/policies/DisciplineCountryEducationalForm.test.d.mts +1 -0
- package/dist/tests/programmes/policies/DisciplineCountryEducationalForm.test.mjs +345 -0
- package/dist/tests/programmes/policies/DisciplineDegree.test.d.mts +1 -0
- package/dist/tests/programmes/policies/DisciplineDegree.test.mjs +273 -0
- package/dist/tests/programmes/policies/DisciplineDuration.test.d.mts +1 -0
- package/dist/tests/programmes/policies/DisciplineDuration.test.mjs +278 -0
- package/dist/tests/programmes/policies/DisciplineEducationalForm.test.d.mts +1 -0
- package/dist/tests/programmes/policies/DisciplineEducationalForm.test.mjs +302 -0
- package/dist/tests/programmes/policies/DisciplineFormat.test.d.mts +1 -0
- package/dist/tests/programmes/policies/DisciplineFormat.test.mjs +266 -0
- package/dist/tests/programmes/policies/Duration.test.d.mts +1 -0
- package/dist/tests/programmes/policies/Duration.test.mjs +179 -0
- package/dist/tests/programmes/policies/Format.test.d.mts +1 -0
- package/dist/tests/programmes/policies/Format.test.mjs +117 -0
- package/dist/tests/programmes/policies/NewRulesValidation.test.d.mts +1 -0
- package/dist/tests/programmes/policies/NewRulesValidation.test.mjs +320 -0
- package/dist/tests/programmes/policies/SpecialProgrammes.test.d.mts +1 -0
- package/dist/tests/programmes/policies/SpecialProgrammes.test.mjs +171 -0
- package/dist/tests/programmes/policies/TuitionFeeAttendanceDiscipline.test.d.mts +1 -0
- package/dist/tests/programmes/policies/TuitionFeeAttendanceDiscipline.test.mjs +360 -0
- package/dist/tests/programmes/policies/TuitionFeeContinent.test.d.mts +1 -0
- package/dist/tests/programmes/policies/TuitionFeeContinent.test.mjs +293 -0
- package/dist/tests/programmes/policies/TuitionFeeCountry.test.d.mts +1 -0
- package/dist/tests/programmes/policies/TuitionFeeCountry.test.mjs +266 -0
- package/dist/tests/programmes/policies/TuitionFeeDiscipline.test.d.mts +1 -0
- package/dist/tests/programmes/policies/TuitionFeeDiscipline.test.mjs +267 -0
- package/dist/tests/programmes/policies/Unfiltered.test.d.mts +1 -0
- package/dist/tests/programmes/policies/Unfiltered.test.mjs +90 -0
- package/dist/tests/programmes/rules/AffordableTuitionFeeRule.test.d.mts +1 -0
- package/dist/tests/programmes/rules/AffordableTuitionFeeRule.test.mjs +27 -0
- package/dist/tests/programmes/rules/DegreeCountrySpecificRule.test.d.mts +1 -0
- package/dist/tests/programmes/rules/DegreeCountrySpecificRule.test.mjs +121 -0
- package/dist/tests/programmes/rules/DegreeDisciplineRule.test.d.mts +1 -0
- package/dist/tests/programmes/rules/DegreeDisciplineRule.test.mjs +169 -0
- package/dist/tests/programmes/rules/IndexableDegreeRule.test.d.mts +1 -0
- package/dist/tests/programmes/rules/IndexableDegreeRule.test.mjs +101 -0
- package/dist/tests/programmes/rules/IndexableDurationRule.test..d.mts +1 -0
- package/dist/tests/programmes/rules/IndexableDurationRule.test..mjs +25 -0
- package/dist/tests/programmes/rules/IndexableEducationalFormRule.test.d.mts +1 -0
- package/dist/tests/programmes/rules/IndexableEducationalFormRule.test.mjs +27 -0
- package/dist/tests/programmes/rules/IndexablePageNumberRule.test.d.mts +1 -0
- package/dist/tests/programmes/rules/IndexablePageNumberRule.test.mjs +51 -0
- package/dist/tests/programmes/rules/MbaDegreeRule.test.d.mts +1 -0
- package/dist/tests/programmes/rules/MbaDegreeRule.test.mjs +55 -0
- package/dist/tests/programmes/rules/MbaOrMscDegreeRule.test.d.mts +1 -0
- package/dist/tests/programmes/rules/MbaOrMscDegreeRule.test.mjs +53 -0
- package/dist/tests/programmes/rules/MinimumAmountOfResultsRule.test.d.mts +1 -0
- package/dist/tests/programmes/rules/MinimumAmountOfResultsRule.test.mjs +79 -0
- package/dist/tests/programmes/rules/NotDistanceLearningPortalRule.test.d.mts +1 -0
- package/dist/tests/programmes/rules/NotDistanceLearningPortalRule.test.mjs +57 -0
- package/dist/tests/programmes/rules/OneYearDurationRule.test..d.mts +1 -0
- package/dist/tests/programmes/rules/OneYearDurationRule.test..mjs +40 -0
- package/dist/tests/programmes/rules/OnlineAttendanceRule.test.d.mts +1 -0
- package/dist/tests/programmes/rules/OnlineAttendanceRule.test.mjs +69 -0
- package/dist/tests/programmes/rules/PartTimeFormatRule.test.d.mts +1 -0
- package/dist/tests/programmes/rules/PartTimeFormatRule.test.mjs +27 -0
- package/dist/tests/programmes/utils/SearchDependencies.util.d.mts +16 -0
- package/dist/tests/programmes/utils/SearchDependencies.util.mjs +73 -0
- package/dist/tests/programmes/utils/SitemapDependencies.util.d.mts +15 -0
- package/dist/tests/programmes/utils/SitemapDependencies.util.mjs +49 -0
- package/dist/tests/scholarships/policies/Area.test.d.mts +1 -0
- package/dist/tests/scholarships/policies/Area.test.mjs +121 -0
- package/dist/tests/scholarships/policies/Country.test.d.mts +1 -0
- package/dist/tests/scholarships/policies/Country.test.mjs +97 -0
- package/dist/tests/scholarships/policies/Discipline.test.d.mts +1 -0
- package/dist/tests/scholarships/policies/Discipline.test.mjs +93 -0
- package/dist/tests/scholarships/policies/DisciplineCountry.test.d.mts +1 -0
- package/dist/tests/scholarships/policies/DisciplineCountry.test.mjs +151 -0
- package/dist/tests/scholarships/policies/Unfiltered.test.d.mts +1 -0
- package/dist/tests/scholarships/policies/Unfiltered.test.mjs +44 -0
- package/dist/tests/scholarships/policies/UniversityCountry.test.d.mts +1 -0
- package/dist/tests/scholarships/policies/UniversityCountry.test.mjs +115 -0
- package/dist/tests/scholarships/rules/ExceptAustaliaAreasRule.test.d.mts +1 -0
- package/dist/tests/scholarships/rules/ExceptAustaliaAreasRule.test.mjs +64 -0
- package/dist/tests/scholarships/rules/SearchVolumeAreasRule.test.d.mts +1 -0
- package/dist/tests/scholarships/rules/SearchVolumeAreasRule.test.mjs +62 -0
- package/dist/tests/scholarships/rules/SearchVolumeCountriesDisciplinesRule.test.d.mts +1 -0
- package/dist/tests/scholarships/rules/SearchVolumeCountriesDisciplinesRule.test.mjs +114 -0
- package/dist/tests/scholarships/rules/SearchVolumeCountriesRule.test.d.mts +1 -0
- package/dist/tests/scholarships/rules/SearchVolumeCountriesRule.test.mjs +62 -0
- package/dist/tests/scholarships/rules/SearchVolumeDisciplinesRule.test.d.mts +1 -0
- package/dist/tests/scholarships/rules/SearchVolumeDisciplinesRule.test.mjs +62 -0
- package/dist/tests/scholarships/utils/SearchDependencies.util.d.mts +16 -0
- package/dist/tests/scholarships/utils/SearchDependencies.util.mjs +70 -0
- package/dist/tests/scholarships/utils/SitemapDependencies.util.d.mts +11 -0
- package/dist/tests/scholarships/utils/SitemapDependencies.util.mjs +33 -0
- package/dist/tests/sitemap-generator/BaseSitemapUrlGeneratorManager.test.d.mts +1 -0
- package/dist/tests/sitemap-generator/BaseSitemapUrlGeneratorManager.test.mjs +82 -0
- package/dist/tests/sitemap-generator/OrganisationsSitemapUrlGeneratorManager.test.d.mts +1 -0
- package/dist/tests/sitemap-generator/OrganisationsSitemapUrlGeneratorManager.test.mjs +85 -0
- package/dist/tests/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.test.d.mts +1 -0
- package/dist/tests/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.test.mjs +77 -0
- package/dist/tests/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager.test.d.mts +1 -0
- package/dist/tests/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager.test.mjs +60 -0
- package/dist/tests/structured-data/OrganisationStructuredDataFactory.test.d.mts +1 -0
- package/dist/tests/structured-data/OrganisationStructuredDataFactory.test.mjs +334 -0
- package/dist/tests/structured-data/ProgrammeStructuredDataFactory.test.d.mts +1 -0
- package/dist/tests/structured-data/ProgrammeStructuredDataFactory.test.mjs +562 -0
- package/dist/tests/structured-data/ScholarshipStructuredDataFactory.test.d.mts +1 -0
- package/dist/tests/structured-data/ScholarshipStructuredDataFactory.test.mjs +292 -0
- package/dist/tests/structured-data/SearchStructuredDataFactory.paywall.test.d.mts +1 -0
- package/dist/tests/structured-data/SearchStructuredDataFactory.paywall.test.mjs +258 -0
- package/package.json +1 -1
- package/dist/src/programmes/policies/AttendanceTuitionFee.d.ts +0 -17
- package/dist/src/programmes/policies/AttendanceTuitionFee.js +0 -51
- package/dist/src/programmes/policies/ContinentTuitionFee.d.ts +0 -16
- package/dist/src/programmes/policies/ContinentTuitionFee.js +0 -46
- package/dist/src/programmes/policies/CountryTuitionFee.d.ts +0 -16
- package/dist/src/programmes/policies/CountryTuitionFee.js +0 -46
- package/dist/src/programmes/policies/DegreeAreaTuitionFee.d.ts +0 -16
- package/dist/src/programmes/policies/DisciplineTuitionFee.js +0 -46
- package/dist/src/programmes/policies/DisciplineTuitionFeeAttendance.d.ts +0 -17
- package/dist/src/programmes/policies/DisciplineTuitionFeeAttendance.js +0 -54
|
@@ -0,0 +1,293 @@
|
|
|
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 { TuitionFeeContinent } from '@/programmes/policies/TuitionFeeContinent';
|
|
6
|
+
import { PortalType } from '@studyportals/domain-client';
|
|
7
|
+
import { ContinentPresenter } from '@/presenters/ContinentPresenter';
|
|
8
|
+
import { TuitionFeePresenter } from '@/presenters/TuitionFeePresenter';
|
|
9
|
+
// Mock the ContinentPresenter
|
|
10
|
+
vi.mock('@/presenters/ContinentPresenter', () => {
|
|
11
|
+
return {
|
|
12
|
+
ContinentPresenter: {
|
|
13
|
+
getInstance: vi.fn().mockReturnValue({
|
|
14
|
+
getFragments: vi.fn().mockReturnValue([
|
|
15
|
+
{ id: '1', path: 'europe' },
|
|
16
|
+
{ id: '9', path: 'asia' },
|
|
17
|
+
{ id: '2', path: 'north-america' },
|
|
18
|
+
{ id: '6', path: 'south-america' },
|
|
19
|
+
{ id: '4', path: 'africa' }
|
|
20
|
+
])
|
|
21
|
+
})
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
// Mock the TuitionFeePresenter
|
|
26
|
+
vi.mock('@/presenters/TuitionFeePresenter', () => {
|
|
27
|
+
return {
|
|
28
|
+
TuitionFeePresenter: {
|
|
29
|
+
getInstance: vi.fn().mockReturnValue({
|
|
30
|
+
getFragments: vi.fn().mockReturnValue([
|
|
31
|
+
{ id: '[0,2500]', path: 'affordable' },
|
|
32
|
+
{ id: '[2501,5000]', path: 'moderate' },
|
|
33
|
+
{ id: '[5001,10000]', path: 'expensive' }
|
|
34
|
+
])
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
describe('Policy:TuitionFeeContinent', () => {
|
|
40
|
+
describe('shouldIndex', () => {
|
|
41
|
+
let searchDependenciesHelper;
|
|
42
|
+
let tuitionFeeContinentPolicy;
|
|
43
|
+
beforeEach(() => {
|
|
44
|
+
searchDependenciesHelper = new SearchDependencies();
|
|
45
|
+
tuitionFeeContinentPolicy = new TuitionFeeContinent(searchDependenciesHelper.dependencies);
|
|
46
|
+
searchDependenciesHelper.setResultsCount(10);
|
|
47
|
+
searchDependenciesHelper.setPageNumber(1);
|
|
48
|
+
searchDependenciesHelper.setPortalType(PortalType.MASTER);
|
|
49
|
+
});
|
|
50
|
+
it('Should return true when all conditions are met', async () => {
|
|
51
|
+
const continentId = '1'; // Europe
|
|
52
|
+
const tuitionFee = '[0,2500]'; // Affordable
|
|
53
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
54
|
+
[FilterKey.CONTINENT, [continentId]],
|
|
55
|
+
[FilterKey.TUITION_FEE, [tuitionFee]]
|
|
56
|
+
]));
|
|
57
|
+
const result = await tuitionFeeContinentPolicy.shouldIndex();
|
|
58
|
+
expect(result).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
it('Should return false when multiple continents are selected', async () => {
|
|
61
|
+
const firstContinentId = '1'; // Europe
|
|
62
|
+
const secondContinentId = '10'; // Africa
|
|
63
|
+
const tuitionFee = '[0,2500]'; // Affordable
|
|
64
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
65
|
+
[FilterKey.CONTINENT, [firstContinentId, secondContinentId]],
|
|
66
|
+
[FilterKey.TUITION_FEE, [tuitionFee]]
|
|
67
|
+
]));
|
|
68
|
+
const result = await tuitionFeeContinentPolicy.shouldIndex();
|
|
69
|
+
expect(result).toBe(false);
|
|
70
|
+
});
|
|
71
|
+
it('Should return false when multiple tuition fee values are selected', async () => {
|
|
72
|
+
const continentId = '1'; // Europe
|
|
73
|
+
const firstTuitionFee = '[0,2500]'; // Affordable
|
|
74
|
+
const secondTuitionFee = '[2501,5000]';
|
|
75
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
76
|
+
[FilterKey.CONTINENT, [continentId]],
|
|
77
|
+
[FilterKey.TUITION_FEE, [firstTuitionFee, secondTuitionFee]]
|
|
78
|
+
]));
|
|
79
|
+
const result = await tuitionFeeContinentPolicy.shouldIndex();
|
|
80
|
+
expect(result).toBe(false);
|
|
81
|
+
});
|
|
82
|
+
it('Should return false when no continents are selected', async () => {
|
|
83
|
+
const tuitionFee = '[0,2500]'; // Affordable
|
|
84
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.TUITION_FEE, [tuitionFee]]]));
|
|
85
|
+
const result = await tuitionFeeContinentPolicy.shouldIndex();
|
|
86
|
+
expect(result).toBe(false);
|
|
87
|
+
});
|
|
88
|
+
it('Should return false when no tuition fee values are selected', async () => {
|
|
89
|
+
const continentId = '1'; // Europe
|
|
90
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.CONTINENT, [continentId]]]));
|
|
91
|
+
const result = await tuitionFeeContinentPolicy.shouldIndex();
|
|
92
|
+
expect(result).toBe(false);
|
|
93
|
+
});
|
|
94
|
+
it('Should return false when other filters are selected', async () => {
|
|
95
|
+
const continentId = '1'; // Europe
|
|
96
|
+
const tuitionFee = '[0,2500]'; // Affordable
|
|
97
|
+
const attendance = 'online';
|
|
98
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
99
|
+
[FilterKey.CONTINENT, [continentId]],
|
|
100
|
+
[FilterKey.TUITION_FEE, [tuitionFee]],
|
|
101
|
+
[FilterKey.DELIVERY_METHOD, [attendance]]
|
|
102
|
+
]));
|
|
103
|
+
const result = await tuitionFeeContinentPolicy.shouldIndex();
|
|
104
|
+
expect(result).toBe(false);
|
|
105
|
+
});
|
|
106
|
+
it('Should return false when number of results is less than 7', async () => {
|
|
107
|
+
const continentId = '1'; // Europe
|
|
108
|
+
const tuitionFee = '[0,2500]'; // Affordable
|
|
109
|
+
const attendance = 'online';
|
|
110
|
+
searchDependenciesHelper.setResultsCount(6);
|
|
111
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
112
|
+
[FilterKey.CONTINENT, [continentId]],
|
|
113
|
+
[FilterKey.TUITION_FEE, [tuitionFee]],
|
|
114
|
+
[FilterKey.DELIVERY_METHOD, [attendance]]
|
|
115
|
+
]));
|
|
116
|
+
const result = await tuitionFeeContinentPolicy.shouldIndex();
|
|
117
|
+
expect(result).toBe(false);
|
|
118
|
+
});
|
|
119
|
+
it('Should return false when page number is higher than 2', async () => {
|
|
120
|
+
const continentId = '1'; // Europe
|
|
121
|
+
const tuitionFee = '[0,2500]'; // Affordable
|
|
122
|
+
searchDependenciesHelper.setPageNumber(5);
|
|
123
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
124
|
+
[FilterKey.CONTINENT, [continentId]],
|
|
125
|
+
[FilterKey.TUITION_FEE, [tuitionFee]]
|
|
126
|
+
]));
|
|
127
|
+
const result = await tuitionFeeContinentPolicy.shouldIndex();
|
|
128
|
+
expect(result).toBe(false);
|
|
129
|
+
});
|
|
130
|
+
it('Should return false when portal type is distance learning', async () => {
|
|
131
|
+
const continentId = '1'; // Europe
|
|
132
|
+
const tuitionFee = '[0,2500]'; // Affordable
|
|
133
|
+
searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
|
|
134
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
135
|
+
[FilterKey.CONTINENT, [continentId]],
|
|
136
|
+
[FilterKey.TUITION_FEE, [tuitionFee]]
|
|
137
|
+
]));
|
|
138
|
+
const result = await tuitionFeeContinentPolicy.shouldIndex();
|
|
139
|
+
expect(result).toBe(false);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe('generateUrls', () => {
|
|
143
|
+
let sitemapDependenciesHelper;
|
|
144
|
+
let tuitionFeeContinentPolicy;
|
|
145
|
+
beforeEach(() => {
|
|
146
|
+
sitemapDependenciesHelper = new SitemapDependencies();
|
|
147
|
+
sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
|
|
148
|
+
tuitionFeeContinentPolicy = new TuitionFeeContinent(sitemapDependenciesHelper.dependencies);
|
|
149
|
+
ContinentPresenter.getInstance = vi.fn().mockReturnValue({
|
|
150
|
+
getFragments: vi.fn().mockReturnValue([
|
|
151
|
+
{ id: '1', path: 'europe' },
|
|
152
|
+
{ id: '9', path: 'asia' },
|
|
153
|
+
{ id: '2', path: 'north-america' },
|
|
154
|
+
{ id: '6', path: 'south-america' },
|
|
155
|
+
{ id: '4', path: 'africa' }
|
|
156
|
+
])
|
|
157
|
+
});
|
|
158
|
+
TuitionFeePresenter.getInstance = vi.fn().mockReturnValue({
|
|
159
|
+
getFragments: vi.fn().mockReturnValue([
|
|
160
|
+
{ id: '[0,2500]', path: 'affordable' },
|
|
161
|
+
{ id: '[2501,5000]', path: 'moderate' },
|
|
162
|
+
{ id: '[5001,10000]', path: 'expensive' }
|
|
163
|
+
])
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
afterEach(() => {
|
|
167
|
+
sitemapDependenciesHelper.resetMocks();
|
|
168
|
+
});
|
|
169
|
+
it('Should generate URLs for valid continent-tuition fee combinations with affordable tuition fees', async () => {
|
|
170
|
+
// Mock the checkRulesForSitemap to only allow affordable tuition fee options
|
|
171
|
+
// due to AffordableTuitionFeeRule
|
|
172
|
+
const resultMap = new Map();
|
|
173
|
+
// Set up all possible combinations but only allow affordable ones
|
|
174
|
+
for (const continent of ['1', '9', '2', '6', '4']) {
|
|
175
|
+
for (const tuitionFee of ['[0,2500]', '[2501,5000]', '[5001,10000]']) {
|
|
176
|
+
const key = `${FilterKey.TUITION_FEE}:${tuitionFee}|${FilterKey.CONTINENT}:${continent}`;
|
|
177
|
+
// Only affordable tuition fee should pass
|
|
178
|
+
resultMap.set(key, tuitionFee === '[0,2500]');
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
|
|
182
|
+
// Call the method via reflection since it's protected
|
|
183
|
+
const urls = await tuitionFeeContinentPolicy.generateUrls();
|
|
184
|
+
// Calculate expected URLs: 5 continents * 1 tuition fee option (affordable) and page-2 variations = 10 URLs
|
|
185
|
+
expect(urls).toHaveLength(5);
|
|
186
|
+
// Verify affordable tuition fee combinations
|
|
187
|
+
expect(urls).toContain('affordable/europe');
|
|
188
|
+
expect(urls).toContain('affordable/asia');
|
|
189
|
+
expect(urls).toContain('affordable/north-america');
|
|
190
|
+
expect(urls).toContain('affordable/south-america');
|
|
191
|
+
expect(urls).toContain('affordable/africa');
|
|
192
|
+
// Verify expensive tuition fees are excluded
|
|
193
|
+
expect(urls).not.toContain('moderate/europe');
|
|
194
|
+
expect(urls).not.toContain('expensive/europe');
|
|
195
|
+
});
|
|
196
|
+
it('Should exclude specific continent-tuition fee combinations based on rules', async () => {
|
|
197
|
+
// Create a map that returns false for specific combinations
|
|
198
|
+
const resultMap = new Map();
|
|
199
|
+
// Only allow affordable tuition fee, but exclude Europe and Asia
|
|
200
|
+
for (const continent of ['1', '9', '2', '6', '4']) {
|
|
201
|
+
for (const tuitionFee of ['[0,2500]', '[2501,5000]', '[5001,10000]']) {
|
|
202
|
+
const key = `${FilterKey.TUITION_FEE}:${tuitionFee}|${FilterKey.CONTINENT}:${continent}`;
|
|
203
|
+
// Only affordable tuition fee should pass and exclude Europe (1) and Asia (9)
|
|
204
|
+
resultMap.set(key, tuitionFee === '[0,2500]' && continent !== '1' && continent !== '9');
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
|
|
208
|
+
const urls = await tuitionFeeContinentPolicy.generateUrls();
|
|
209
|
+
// Calculate expected URLs: 3 continents (excluding Europe and Asia) * 1 tuition fee option (affordable) and page-2 variations = 6 URLs
|
|
210
|
+
expect(urls).toHaveLength(3);
|
|
211
|
+
// Verify excluded combinations
|
|
212
|
+
expect(urls).not.toContain('affordable/europe');
|
|
213
|
+
expect(urls).not.toContain('affordable/asia');
|
|
214
|
+
expect(urls).not.toContain('moderate/europe');
|
|
215
|
+
// Verify included combinations
|
|
216
|
+
expect(urls).toContain('affordable/north-america');
|
|
217
|
+
expect(urls).toContain('affordable/south-america');
|
|
218
|
+
expect(urls).toContain('affordable/africa');
|
|
219
|
+
});
|
|
220
|
+
it('Should exclude all URLs when all rule checks fail', async () => {
|
|
221
|
+
// Create a map that returns false for all combinations
|
|
222
|
+
const resultMap = new Map();
|
|
223
|
+
for (const continent of ['1', '9', '2', '6', '4']) {
|
|
224
|
+
for (const tuitionFee of ['[0,2500]', '[2501,5000]', '[5001,10000]']) {
|
|
225
|
+
const key = `${FilterKey.TUITION_FEE}:${tuitionFee}|${FilterKey.CONTINENT}:${continent}`;
|
|
226
|
+
resultMap.set(key, false);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
|
|
230
|
+
const urls = await tuitionFeeContinentPolicy.generateUrls();
|
|
231
|
+
// Should include no URLs
|
|
232
|
+
expect(urls).toHaveLength(0);
|
|
233
|
+
});
|
|
234
|
+
it('Should handle empty continent fragments', async () => {
|
|
235
|
+
// Mock the ContinentPresenter to return empty fragments
|
|
236
|
+
ContinentPresenter.getInstance.mockReturnValueOnce({
|
|
237
|
+
getFragments: vi.fn().mockReturnValue([])
|
|
238
|
+
});
|
|
239
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap();
|
|
240
|
+
const urls = await tuitionFeeContinentPolicy.generateUrls();
|
|
241
|
+
// Should return empty array
|
|
242
|
+
expect(urls).toHaveLength(0);
|
|
243
|
+
});
|
|
244
|
+
it('Should handle empty tuition fee fragments', async () => {
|
|
245
|
+
// Mock the TuitionFeePresenter to return empty fragments
|
|
246
|
+
TuitionFeePresenter.getInstance.mockReturnValueOnce({
|
|
247
|
+
getFragments: vi.fn().mockReturnValue([])
|
|
248
|
+
});
|
|
249
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap();
|
|
250
|
+
const urls = await tuitionFeeContinentPolicy.generateUrls();
|
|
251
|
+
// Should return empty array
|
|
252
|
+
expect(urls).toHaveLength(0);
|
|
253
|
+
});
|
|
254
|
+
it('Should handle performance with large number of combinations', async () => {
|
|
255
|
+
// Generate larger datasets for testing
|
|
256
|
+
const largeContinentSet = Array.from({ length: 15 }, (_, index) => ({
|
|
257
|
+
id: `continent-${index}`,
|
|
258
|
+
path: `continent-path-${index}`
|
|
259
|
+
}));
|
|
260
|
+
const largeTuitionFeeSet = Array.from({ length: 8 }, (_, index) => ({
|
|
261
|
+
id: `tuition-${index}`,
|
|
262
|
+
path: `tuition-path-${index}`
|
|
263
|
+
}));
|
|
264
|
+
// Override mocks with large datasets
|
|
265
|
+
ContinentPresenter.getInstance.mockReturnValueOnce({
|
|
266
|
+
getFragments: vi.fn().mockReturnValue(largeContinentSet)
|
|
267
|
+
});
|
|
268
|
+
TuitionFeePresenter.getInstance.mockReturnValueOnce({
|
|
269
|
+
getFragments: vi.fn().mockReturnValue(largeTuitionFeeSet)
|
|
270
|
+
});
|
|
271
|
+
// Mock to only allow combinations where continent index is even and tuition fee index is 0
|
|
272
|
+
// This simulates the AffordableTuitionFeeRule that only allows affordable (lowest) tuition fees
|
|
273
|
+
const resultMap = new Map();
|
|
274
|
+
for (let c = 0; c < largeContinentSet.length; c++) {
|
|
275
|
+
for (let t = 0; t < largeTuitionFeeSet.length; t++) {
|
|
276
|
+
const continentId = largeContinentSet[c].id;
|
|
277
|
+
const tuitionFeeId = largeTuitionFeeSet[t].id;
|
|
278
|
+
const key = `${FilterKey.TUITION_FEE}:${tuitionFeeId}|${FilterKey.CONTINENT}:${continentId}`;
|
|
279
|
+
resultMap.set(key, c % 2 === 0 && t === 0); // Only even continents and affordable (index 0) tuition
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
|
|
283
|
+
const urls = await tuitionFeeContinentPolicy.generateUrls();
|
|
284
|
+
// Calculate expected count: 8 continents (even indices) * 1 tuition fee (index 0) * page-2 variations = 16 URLs
|
|
285
|
+
expect(urls).toHaveLength(8);
|
|
286
|
+
// Test specific items
|
|
287
|
+
expect(urls).toContain('tuition-path-0/continent-path-0'); // Even continent, affordable tuition
|
|
288
|
+
expect(urls).toContain('tuition-path-0/continent-path-2'); // Even continent, affordable tuition
|
|
289
|
+
expect(urls).not.toContain('tuition-path-0/continent-path-1'); // Odd continent
|
|
290
|
+
expect(urls).not.toContain('tuition-path-1/continent-path-0'); // Non-affordable tuition
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -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 { TuitionFeeCountry } from '@/programmes/policies/TuitionFeeCountry';
|
|
6
|
+
import { PortalType } from '@studyportals/domain-client';
|
|
7
|
+
import { CountryPresenter } from '@/presenters/CountryPresenter';
|
|
8
|
+
import { TuitionFeePresenter } from '@/presenters/TuitionFeePresenter';
|
|
9
|
+
describe('Policy:TuitionFeeCountry', () => {
|
|
10
|
+
describe('shouldIndex', () => {
|
|
11
|
+
let searchDependenciesHelper;
|
|
12
|
+
let tuitionFeeCountryPolicy;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
searchDependenciesHelper = new SearchDependencies();
|
|
15
|
+
tuitionFeeCountryPolicy = new TuitionFeeCountry(searchDependenciesHelper.dependencies);
|
|
16
|
+
searchDependenciesHelper.setResultsCount(10);
|
|
17
|
+
searchDependenciesHelper.setPageNumber(1);
|
|
18
|
+
searchDependenciesHelper.setPortalType(PortalType.BACHELOR);
|
|
19
|
+
});
|
|
20
|
+
it('Should return true when all conditions are met', async () => {
|
|
21
|
+
const countryId = '82'; // US
|
|
22
|
+
const tuitionFee = '[0,2500]'; // Affordable
|
|
23
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
24
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
25
|
+
[FilterKey.TUITION_FEE, [tuitionFee]]
|
|
26
|
+
]));
|
|
27
|
+
const result = await tuitionFeeCountryPolicy.shouldIndex();
|
|
28
|
+
expect(result).toBe(true);
|
|
29
|
+
});
|
|
30
|
+
it('Should return false when multiple countries are selected', async () => {
|
|
31
|
+
const firstCountryId = '30'; // UK
|
|
32
|
+
const secondCountryId = '21'; // Portugal
|
|
33
|
+
const tuitionFee = '[0,2500]'; // Affordable
|
|
34
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
35
|
+
[FilterKey.COUNTRY, [firstCountryId, secondCountryId]],
|
|
36
|
+
[FilterKey.TUITION_FEE, [tuitionFee]]
|
|
37
|
+
]));
|
|
38
|
+
const result = await tuitionFeeCountryPolicy.shouldIndex();
|
|
39
|
+
expect(result).toBe(false);
|
|
40
|
+
});
|
|
41
|
+
it('Should return false when multiple tuition fee values are selected', async () => {
|
|
42
|
+
const countryId = '30'; // UK
|
|
43
|
+
const firstTuitionFee = '[0,2500]'; // Affordable
|
|
44
|
+
const secondTuitionFee = '[0,3000]';
|
|
45
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
46
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
47
|
+
[FilterKey.TUITION_FEE, [firstTuitionFee, secondTuitionFee]]
|
|
48
|
+
]));
|
|
49
|
+
const result = await tuitionFeeCountryPolicy.shouldIndex();
|
|
50
|
+
expect(result).toBe(false);
|
|
51
|
+
});
|
|
52
|
+
it('Should return false when no tuition fee values are selected', async () => {
|
|
53
|
+
const countryId = '30'; // UK
|
|
54
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.COUNTRY, [countryId]]]));
|
|
55
|
+
const result = await tuitionFeeCountryPolicy.shouldIndex();
|
|
56
|
+
expect(result).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
it('Should return false when no countries are selected', async () => {
|
|
59
|
+
const tuitionFee = '[0,2500]'; // Affordable
|
|
60
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.TUITION_FEE, [tuitionFee]]]));
|
|
61
|
+
const result = await tuitionFeeCountryPolicy.shouldIndex();
|
|
62
|
+
expect(result).toBe(false);
|
|
63
|
+
});
|
|
64
|
+
it('Should return false when other filters are selected', async () => {
|
|
65
|
+
const countryId = '30'; // UK
|
|
66
|
+
const tuitionFee = '[0,2500]'; // Affordable
|
|
67
|
+
const disciplineId = '54'; // Agriculture & Forestry
|
|
68
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
69
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
70
|
+
[FilterKey.TUITION_FEE, [tuitionFee]],
|
|
71
|
+
[FilterKey.DISCIPLINES, [disciplineId]]
|
|
72
|
+
]));
|
|
73
|
+
const result = await tuitionFeeCountryPolicy.shouldIndex();
|
|
74
|
+
expect(result).toBe(false);
|
|
75
|
+
});
|
|
76
|
+
it('Should return false when tuition fee is not [0,2500] (affordable)', async () => {
|
|
77
|
+
const countryId = '30'; // UK
|
|
78
|
+
const tuitionFee = '[0,3000]';
|
|
79
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
80
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
81
|
+
[FilterKey.TUITION_FEE, [tuitionFee]]
|
|
82
|
+
]));
|
|
83
|
+
const result = await tuitionFeeCountryPolicy.shouldIndex();
|
|
84
|
+
expect(result).toBe(false);
|
|
85
|
+
});
|
|
86
|
+
it('Should return false when number of results is less than 7', async () => {
|
|
87
|
+
const countryId = '30'; // UK
|
|
88
|
+
const tuitionFee = '[0,2500]'; // Affordable
|
|
89
|
+
searchDependenciesHelper.setResultsCount(6);
|
|
90
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
91
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
92
|
+
[FilterKey.TUITION_FEE, [tuitionFee]]
|
|
93
|
+
]));
|
|
94
|
+
const result = await tuitionFeeCountryPolicy.shouldIndex();
|
|
95
|
+
expect(result).toBe(false);
|
|
96
|
+
});
|
|
97
|
+
it('Should return false when page number is higher than 2', async () => {
|
|
98
|
+
const countryId = '82'; // US
|
|
99
|
+
const tuitionFee = '[0,2500]'; // Affordable
|
|
100
|
+
searchDependenciesHelper.setPageNumber(5);
|
|
101
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
102
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
103
|
+
[FilterKey.TUITION_FEE, [tuitionFee]]
|
|
104
|
+
]));
|
|
105
|
+
const result = await tuitionFeeCountryPolicy.shouldIndex();
|
|
106
|
+
expect(result).toBe(false);
|
|
107
|
+
});
|
|
108
|
+
it('Should return false when portal type is distance learning', async () => {
|
|
109
|
+
const countryId = '82'; // US
|
|
110
|
+
const tuitionFee = '[0,2500]'; // Affordable
|
|
111
|
+
searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
|
|
112
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
113
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
114
|
+
[FilterKey.TUITION_FEE, [tuitionFee]]
|
|
115
|
+
]));
|
|
116
|
+
const result = await tuitionFeeCountryPolicy.shouldIndex();
|
|
117
|
+
expect(result).toBe(false);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
describe('generateUrls', () => {
|
|
121
|
+
let sitemapDependenciesHelper;
|
|
122
|
+
let tuitionFeeCountryPolicy;
|
|
123
|
+
beforeEach(() => {
|
|
124
|
+
sitemapDependenciesHelper = new SitemapDependencies();
|
|
125
|
+
sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
|
|
126
|
+
tuitionFeeCountryPolicy = new TuitionFeeCountry(sitemapDependenciesHelper.dependencies);
|
|
127
|
+
CountryPresenter.getInstance = vi.fn().mockReturnValue({
|
|
128
|
+
getFragments: vi.fn().mockReturnValue([
|
|
129
|
+
{ id: '30', path: 'uk' },
|
|
130
|
+
{ id: '202', path: 'australia' },
|
|
131
|
+
{ id: '56', path: 'usa' }
|
|
132
|
+
])
|
|
133
|
+
});
|
|
134
|
+
TuitionFeePresenter.getInstance = vi.fn().mockReturnValue({
|
|
135
|
+
getFragments: vi.fn().mockReturnValue([
|
|
136
|
+
{ id: '[0,2500]', path: 'affordable' },
|
|
137
|
+
{ id: '[2501,5000]', path: 'moderate' },
|
|
138
|
+
{ id: '[5001,10000]', path: 'expensive' }
|
|
139
|
+
])
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
afterEach(() => {
|
|
143
|
+
sitemapDependenciesHelper.resetMocks();
|
|
144
|
+
});
|
|
145
|
+
it('Should generate URLs for valid country-tuition fee combinations with affordable tuition fees', async () => {
|
|
146
|
+
// Mock the checkRulesForSitemap to only allow affordable tuition fee options
|
|
147
|
+
// due to AffordableTuitionFeeRule
|
|
148
|
+
const resultMap = new Map();
|
|
149
|
+
// Set up all possible combinations but only allow affordable ones
|
|
150
|
+
for (const country of ['30', '202', '56']) {
|
|
151
|
+
for (const tuitionFee of ['[0,2500]', '[2501,5000]', '[5001,10000]']) {
|
|
152
|
+
const key = `${FilterKey.TUITION_FEE}:${tuitionFee}|${FilterKey.COUNTRY}:${country}`;
|
|
153
|
+
// Only affordable tuition fee should pass
|
|
154
|
+
resultMap.set(key, tuitionFee === '[0,2500]');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
|
|
158
|
+
// Call the method via reflection since it's protected
|
|
159
|
+
const urls = await tuitionFeeCountryPolicy.generateUrls();
|
|
160
|
+
// Calculate expected URLs: 3 countries * 1 tuition fee option (affordable) * 1 page = 3 URLs
|
|
161
|
+
expect(urls).toHaveLength(3);
|
|
162
|
+
// Verify affordable tuition fee combinations
|
|
163
|
+
expect(urls).toContain('affordable/uk');
|
|
164
|
+
expect(urls).toContain('affordable/usa');
|
|
165
|
+
expect(urls).toContain('affordable/australia');
|
|
166
|
+
// Verify expensive tuition fees are excluded
|
|
167
|
+
expect(urls).not.toContain('moderate/uk');
|
|
168
|
+
expect(urls).not.toContain('expensive/uk');
|
|
169
|
+
});
|
|
170
|
+
it('Should exclude specific country-tuition fee combinations based on rules', async () => {
|
|
171
|
+
// Create a map that returns false for specific combinations
|
|
172
|
+
const resultMap = new Map();
|
|
173
|
+
// Only allow affordable tuition fee, but exclude UK
|
|
174
|
+
for (const country of ['30', '56', '202']) {
|
|
175
|
+
for (const tuitionFee of ['[0,2500]', '[2501,5000]', '[5001,10000]']) {
|
|
176
|
+
const key = `${FilterKey.TUITION_FEE}:${tuitionFee}|${FilterKey.COUNTRY}:${country}`;
|
|
177
|
+
// Only affordable tuition fee should pass and exclude UK (30)
|
|
178
|
+
resultMap.set(key, tuitionFee === '[0,2500]' && country !== '30');
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap, false);
|
|
182
|
+
const urls = await tuitionFeeCountryPolicy.generateUrls();
|
|
183
|
+
// Calculate expected URLs: 2 countries (excluding UK) * 1 tuition fee option * 1 page = 2 URLs
|
|
184
|
+
expect(urls).toHaveLength(2);
|
|
185
|
+
// Verify excluded combinations
|
|
186
|
+
expect(urls).not.toContain('affordable/uk');
|
|
187
|
+
expect(urls).not.toContain('moderate/uk');
|
|
188
|
+
// Verify included combinations
|
|
189
|
+
expect(urls).toContain('affordable/usa');
|
|
190
|
+
expect(urls).toContain('affordable/australia');
|
|
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 country of ['30', '82', '202']) {
|
|
196
|
+
for (const tuitionFee of ['[0,2500]', '[2501,5000]', '[5001,10000]']) {
|
|
197
|
+
const key = `${FilterKey.TUITION_FEE}:${tuitionFee}|${FilterKey.COUNTRY}:${country}`;
|
|
198
|
+
resultMap.set(key, false);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap, false);
|
|
202
|
+
const urls = await tuitionFeeCountryPolicy.generateUrls();
|
|
203
|
+
// Should include no URLs
|
|
204
|
+
expect(urls).toHaveLength(0);
|
|
205
|
+
});
|
|
206
|
+
it('Should handle empty country fragments', async () => {
|
|
207
|
+
// Mock the CountryPresenter to return empty fragments
|
|
208
|
+
CountryPresenter.getInstance.mockReturnValueOnce({
|
|
209
|
+
getFragments: vi.fn().mockReturnValue([])
|
|
210
|
+
});
|
|
211
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap();
|
|
212
|
+
const urls = await tuitionFeeCountryPolicy.generateUrls();
|
|
213
|
+
// Should return empty array
|
|
214
|
+
expect(urls).toHaveLength(0);
|
|
215
|
+
});
|
|
216
|
+
it('Should handle empty tuition fee fragments', async () => {
|
|
217
|
+
// Mock the TuitionFeePresenter to return empty fragments
|
|
218
|
+
TuitionFeePresenter.getInstance.mockReturnValueOnce({
|
|
219
|
+
getFragments: vi.fn().mockReturnValue([])
|
|
220
|
+
});
|
|
221
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap();
|
|
222
|
+
const urls = await tuitionFeeCountryPolicy.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 largeCountrySet = Array.from({ length: 30 }, (_, index) => ({
|
|
229
|
+
id: `country-${index}`,
|
|
230
|
+
path: `country-path-${index}`
|
|
231
|
+
}));
|
|
232
|
+
const largeTuitionFeeSet = Array.from({ length: 5 }, (_, index) => ({
|
|
233
|
+
id: `tuition-${index}`,
|
|
234
|
+
path: `tuition-path-${index}`
|
|
235
|
+
}));
|
|
236
|
+
// Override mocks with large datasets
|
|
237
|
+
CountryPresenter.getInstance.mockReturnValueOnce({
|
|
238
|
+
getFragments: vi.fn().mockReturnValue(largeCountrySet)
|
|
239
|
+
});
|
|
240
|
+
TuitionFeePresenter.getInstance.mockReturnValueOnce({
|
|
241
|
+
getFragments: vi.fn().mockReturnValue(largeTuitionFeeSet)
|
|
242
|
+
});
|
|
243
|
+
// Mock to only allow combinations where country index is even and tuition fee index is 0
|
|
244
|
+
// This simulates the AffordableTuitionFeeRule that only allows affordable (lowest) tuition fees
|
|
245
|
+
const resultMap = new Map();
|
|
246
|
+
for (let c = 0; c < largeCountrySet.length; c++) {
|
|
247
|
+
for (let t = 0; t < largeTuitionFeeSet.length; t++) {
|
|
248
|
+
const countryId = largeCountrySet[c].id;
|
|
249
|
+
const tuitionFeeId = largeTuitionFeeSet[t].id;
|
|
250
|
+
const key = `${FilterKey.TUITION_FEE}:${tuitionFeeId}|${FilterKey.COUNTRY}:${countryId}`;
|
|
251
|
+
resultMap.set(key, c % 2 === 0 && t === 0); // Only even countries and affordable (index 0) tuition
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap, false);
|
|
255
|
+
const urls = await tuitionFeeCountryPolicy.generateUrls();
|
|
256
|
+
// Calculate expected count: 15 countries (even indices) * 1 tuition fee (index 0) * 1 page
|
|
257
|
+
// 15 * 1 * 1 = 15 URLs
|
|
258
|
+
expect(urls).toHaveLength(15);
|
|
259
|
+
// Test specific items
|
|
260
|
+
expect(urls).toContain('tuition-path-0/country-path-0'); // Even country, affordable tuition
|
|
261
|
+
expect(urls).toContain('tuition-path-0/country-path-2'); // Even country, affordable tuition
|
|
262
|
+
expect(urls).not.toContain('tuition-path-0/country-path-1'); // Odd country
|
|
263
|
+
expect(urls).not.toContain('tuition-path-1/country-path-0'); // Non-affordable tuition
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|