@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,179 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
+
import { FilterKey } from '@studyportals/search-filters/server-side';
|
|
3
|
+
import { SearchDependencies } from '../utils/SearchDependencies.util.mjs';
|
|
4
|
+
import { Duration } from '@/programmes/policies/Duration';
|
|
5
|
+
import { PortalType } from '@studyportals/domain-client';
|
|
6
|
+
import { SitemapDependencies } from '../utils/SitemapDependencies.util.mjs';
|
|
7
|
+
import { DurationPresenter } from '@/presenters/DurationPresenter';
|
|
8
|
+
describe('Policy:Duration', () => {
|
|
9
|
+
describe('shouldIndex', () => {
|
|
10
|
+
let searchDependenciesHelper;
|
|
11
|
+
let durationPolicy;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
searchDependenciesHelper = new SearchDependencies();
|
|
14
|
+
durationPolicy = new Duration(searchDependenciesHelper.dependencies);
|
|
15
|
+
searchDependenciesHelper.setResultsCount(10);
|
|
16
|
+
searchDependenciesHelper.setPageNumber(1);
|
|
17
|
+
searchDependenciesHelper.setPortalType(PortalType.BACHELOR);
|
|
18
|
+
});
|
|
19
|
+
it('Should return true when 1 year duration is selected', async () => {
|
|
20
|
+
const duration = '[360,360]'; // 1 year
|
|
21
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
22
|
+
[FilterKey.DURATION, [duration]]
|
|
23
|
+
]));
|
|
24
|
+
const result = await durationPolicy.shouldIndex();
|
|
25
|
+
expect(result).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
it('Should return true when 2 years duration is selected', async () => {
|
|
28
|
+
const duration = '[720,720]'; // 2 years
|
|
29
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
30
|
+
[FilterKey.DURATION, [duration]]
|
|
31
|
+
]));
|
|
32
|
+
const result = await durationPolicy.shouldIndex();
|
|
33
|
+
expect(result).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
it('Should return false when multiple durations are selected', async () => {
|
|
36
|
+
const firstDuration = '[360,360]'; // 1 year
|
|
37
|
+
const secondDuration = '[720,720]'; // 2 years
|
|
38
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
39
|
+
[FilterKey.DURATION, [firstDuration, secondDuration]]
|
|
40
|
+
]));
|
|
41
|
+
const result = await durationPolicy.shouldIndex();
|
|
42
|
+
expect(result).toBe(false);
|
|
43
|
+
});
|
|
44
|
+
it('Should return false when no duration is selected', async () => {
|
|
45
|
+
searchDependenciesHelper.setFilterKeyValues(new Map());
|
|
46
|
+
const result = await durationPolicy.shouldIndex();
|
|
47
|
+
expect(result).toBe(false);
|
|
48
|
+
});
|
|
49
|
+
it('Should return false when other filters are selected', async () => {
|
|
50
|
+
const duration = '[360,360]'; // 1 year
|
|
51
|
+
const countryId = '30'; // UK
|
|
52
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
53
|
+
[FilterKey.DURATION, [duration]],
|
|
54
|
+
[FilterKey.COUNTRY, [countryId]]
|
|
55
|
+
]));
|
|
56
|
+
const result = await durationPolicy.shouldIndex();
|
|
57
|
+
expect(result).toBe(false);
|
|
58
|
+
});
|
|
59
|
+
it('Should return false when duration filter is not 1 year or 2 years', async () => {
|
|
60
|
+
const duration = '[-1,359]'; // This will be filtered out in generateUrls, but shouldIndex only checks basic rules
|
|
61
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
62
|
+
[FilterKey.DURATION, [duration]]
|
|
63
|
+
]));
|
|
64
|
+
const result = await durationPolicy.shouldIndex();
|
|
65
|
+
expect(result).toBe(false);
|
|
66
|
+
});
|
|
67
|
+
it('Should return false when number of results is less than 7', async () => {
|
|
68
|
+
const duration = '[720,720]'; // 2 years
|
|
69
|
+
searchDependenciesHelper.setResultsCount(6);
|
|
70
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
71
|
+
[FilterKey.DURATION, [duration]]
|
|
72
|
+
]));
|
|
73
|
+
const result = await durationPolicy.shouldIndex();
|
|
74
|
+
expect(result).toBe(false);
|
|
75
|
+
});
|
|
76
|
+
it('Should return false when page number is higher than 2', async () => {
|
|
77
|
+
const duration = '[360,360]'; // 1 year
|
|
78
|
+
searchDependenciesHelper.setPageNumber(4);
|
|
79
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
80
|
+
[FilterKey.DURATION, [duration]]
|
|
81
|
+
]));
|
|
82
|
+
const result = await durationPolicy.shouldIndex();
|
|
83
|
+
expect(result).toBe(false);
|
|
84
|
+
});
|
|
85
|
+
it('Should return false when portal is distance learning', async () => {
|
|
86
|
+
const duration = '[720,720]'; // 2 years
|
|
87
|
+
searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
|
|
88
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
89
|
+
[FilterKey.DURATION, [duration]]
|
|
90
|
+
]));
|
|
91
|
+
const result = await durationPolicy.shouldIndex();
|
|
92
|
+
expect(result).toBe(false);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe('generateUrls', () => {
|
|
96
|
+
let sitemapDependenciesHelper;
|
|
97
|
+
let durationPolicy;
|
|
98
|
+
beforeEach(() => {
|
|
99
|
+
sitemapDependenciesHelper = new SitemapDependencies();
|
|
100
|
+
sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
|
|
101
|
+
durationPolicy = new Duration(sitemapDependenciesHelper.dependencies);
|
|
102
|
+
// Mock DurationPresenter with all durations including ones that should be filtered out
|
|
103
|
+
DurationPresenter.getInstance = vi.fn().mockReturnValue({
|
|
104
|
+
getFragments: vi.fn().mockReturnValue([
|
|
105
|
+
{ id: '[360,360]', path: '1-year' }, // Should be included
|
|
106
|
+
{ id: '[720,720]', path: '2-years' }, // Should be included
|
|
107
|
+
{ id: '[1080,1080]', path: '3-years' }, // Should be filtered out
|
|
108
|
+
{ id: '[1440,1440]', path: '4-years' }, // Should be filtered out
|
|
109
|
+
{ id: '[-1,359]', path: 'less-than-1-year' } // Should be filtered out
|
|
110
|
+
])
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
afterEach(() => {
|
|
114
|
+
sitemapDependenciesHelper.resetMocks();
|
|
115
|
+
});
|
|
116
|
+
it('Should generate URLs only for 1 year and 2 years durations', async () => {
|
|
117
|
+
// Mock the checkRulesForSitemap to return true for allowed durations
|
|
118
|
+
const resultMap = new Map([
|
|
119
|
+
[`${FilterKey.DURATION}:[360,360]`, true], // 1 year
|
|
120
|
+
[`${FilterKey.DURATION}:[720,720]`, true], // 2 years
|
|
121
|
+
[`${FilterKey.DURATION}:[1080,1080]`, true], // Won't be used due to filtering
|
|
122
|
+
[`${FilterKey.DURATION}:[1440,1440]`, true], // Won't be used due to filtering
|
|
123
|
+
[`${FilterKey.DURATION}:[-1,359]`, true] // Won't be used due to filtering
|
|
124
|
+
]);
|
|
125
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
|
|
126
|
+
const urls = await durationPolicy.generateUrls();
|
|
127
|
+
// Should only include 1 year and 2 years
|
|
128
|
+
expect(urls).toHaveLength(2);
|
|
129
|
+
expect(urls).toContain('1-year');
|
|
130
|
+
expect(urls).toContain('2-years');
|
|
131
|
+
// Should exclude other durations
|
|
132
|
+
expect(urls).not.toContain('3-years');
|
|
133
|
+
expect(urls).not.toContain('4-years');
|
|
134
|
+
expect(urls).not.toContain('less-than-1-year');
|
|
135
|
+
});
|
|
136
|
+
it('Should exclude URLs when rule checks fail', async () => {
|
|
137
|
+
const resultMap = new Map([
|
|
138
|
+
[`${FilterKey.DURATION}:[360,360]`, false], // 1 year fails
|
|
139
|
+
[`${FilterKey.DURATION}:[720,720]`, true] // 2 years passes
|
|
140
|
+
]);
|
|
141
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
|
|
142
|
+
const urls = await durationPolicy.generateUrls();
|
|
143
|
+
// Should only include 2 years
|
|
144
|
+
expect(urls).toHaveLength(1);
|
|
145
|
+
expect(urls).toContain('2-years');
|
|
146
|
+
expect(urls).not.toContain('1-year');
|
|
147
|
+
});
|
|
148
|
+
it('Should handle empty duration fragments', async () => {
|
|
149
|
+
DurationPresenter.getInstance.mockReturnValueOnce({
|
|
150
|
+
getFragments: vi.fn().mockReturnValue([])
|
|
151
|
+
});
|
|
152
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap();
|
|
153
|
+
const urls = await durationPolicy.generateUrls();
|
|
154
|
+
expect(urls).toHaveLength(0);
|
|
155
|
+
});
|
|
156
|
+
it('Should verify filtering logic with exact duration IDs', async () => {
|
|
157
|
+
// Test that only specific duration IDs are allowed
|
|
158
|
+
const mockFragments = [
|
|
159
|
+
{ id: '[360,360]', path: '1-year' },
|
|
160
|
+
{ id: '[720,720]', path: '2-years' },
|
|
161
|
+
{ id: '[900,900]', path: 'other-duration' } // Should be filtered out
|
|
162
|
+
];
|
|
163
|
+
DurationPresenter.getInstance.mockReturnValueOnce({
|
|
164
|
+
getFragments: vi.fn().mockReturnValue(mockFragments)
|
|
165
|
+
});
|
|
166
|
+
const resultMap = new Map([
|
|
167
|
+
[`${FilterKey.DURATION}:[360,360]`, true],
|
|
168
|
+
[`${FilterKey.DURATION}:[720,720]`, true],
|
|
169
|
+
[`${FilterKey.DURATION}:[900,900]`, true] // Won't be used
|
|
170
|
+
]);
|
|
171
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
|
|
172
|
+
const urls = await durationPolicy.generateUrls();
|
|
173
|
+
expect(urls).toHaveLength(2);
|
|
174
|
+
expect(urls).toContain('1-year');
|
|
175
|
+
expect(urls).toContain('2-years');
|
|
176
|
+
expect(urls).not.toContain('other-duration');
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
+
import { FilterKey } from '@studyportals/search-filters/server-side';
|
|
3
|
+
import { SearchDependencies } from '../utils/SearchDependencies.util.mjs';
|
|
4
|
+
import { Format } from '@/programmes/policies/Format';
|
|
5
|
+
import { PortalType } from '@studyportals/domain-client';
|
|
6
|
+
import { SitemapDependencies } from '../utils/SitemapDependencies.util.mjs';
|
|
7
|
+
import { FormatPresenter } from '@/presenters/FormatPresenter';
|
|
8
|
+
describe('Policy:Format', () => {
|
|
9
|
+
describe('shouldIndex', () => {
|
|
10
|
+
let searchDependenciesHelper;
|
|
11
|
+
let formatPolicy;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
searchDependenciesHelper = new SearchDependencies();
|
|
14
|
+
formatPolicy = new Format(searchDependenciesHelper.dependencies);
|
|
15
|
+
searchDependenciesHelper.setResultsCount(10);
|
|
16
|
+
searchDependenciesHelper.setPageNumber(1);
|
|
17
|
+
searchDependenciesHelper.setPortalType(PortalType.BACHELOR);
|
|
18
|
+
});
|
|
19
|
+
it('Should return true when fulltime format is selected', async () => {
|
|
20
|
+
const format = 'fulltime';
|
|
21
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
22
|
+
[FilterKey.ATTENDANCE, [format]]
|
|
23
|
+
]));
|
|
24
|
+
const result = await formatPolicy.shouldIndex();
|
|
25
|
+
expect(result).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
it('Should return true when parttime format is selected', async () => {
|
|
28
|
+
const format = 'parttime';
|
|
29
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
30
|
+
[FilterKey.ATTENDANCE, [format]]
|
|
31
|
+
]));
|
|
32
|
+
const result = await formatPolicy.shouldIndex();
|
|
33
|
+
expect(result).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
it('Should return false when multiple formats are selected', async () => {
|
|
36
|
+
const firstFormat = 'fulltime';
|
|
37
|
+
const secondFormat = 'parttime';
|
|
38
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
39
|
+
[FilterKey.ATTENDANCE, [firstFormat, secondFormat]]
|
|
40
|
+
]));
|
|
41
|
+
const result = await formatPolicy.shouldIndex();
|
|
42
|
+
expect(result).toBe(false);
|
|
43
|
+
});
|
|
44
|
+
it('Should return false when no format is selected', async () => {
|
|
45
|
+
searchDependenciesHelper.setFilterKeyValues(new Map());
|
|
46
|
+
const result = await formatPolicy.shouldIndex();
|
|
47
|
+
expect(result).toBe(false);
|
|
48
|
+
});
|
|
49
|
+
it('Should return false when other filters are selected', async () => {
|
|
50
|
+
const format = 'fulltime';
|
|
51
|
+
const countryId = '30'; // UK
|
|
52
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
53
|
+
[FilterKey.ATTENDANCE, [format]],
|
|
54
|
+
[FilterKey.COUNTRY, [countryId]]
|
|
55
|
+
]));
|
|
56
|
+
const result = await formatPolicy.shouldIndex();
|
|
57
|
+
expect(result).toBe(false);
|
|
58
|
+
});
|
|
59
|
+
it('Should return false when number of results is less than 7', async () => {
|
|
60
|
+
const format = 'parttime';
|
|
61
|
+
searchDependenciesHelper.setResultsCount(6);
|
|
62
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
63
|
+
[FilterKey.ATTENDANCE, [format]]
|
|
64
|
+
]));
|
|
65
|
+
const result = await formatPolicy.shouldIndex();
|
|
66
|
+
expect(result).toBe(false);
|
|
67
|
+
});
|
|
68
|
+
it('Should return false when page number is higher than 2', async () => {
|
|
69
|
+
const format = 'fulltime';
|
|
70
|
+
searchDependenciesHelper.setPageNumber(4);
|
|
71
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
72
|
+
[FilterKey.ATTENDANCE, [format]]
|
|
73
|
+
]));
|
|
74
|
+
const result = await formatPolicy.shouldIndex();
|
|
75
|
+
expect(result).toBe(false);
|
|
76
|
+
});
|
|
77
|
+
it('Should return false when portal is distance learning', async () => {
|
|
78
|
+
const format = 'parttime';
|
|
79
|
+
searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
|
|
80
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
81
|
+
[FilterKey.ATTENDANCE, [format]]
|
|
82
|
+
]));
|
|
83
|
+
const result = await formatPolicy.shouldIndex();
|
|
84
|
+
expect(result).toBe(false);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('generateUrls', () => {
|
|
88
|
+
let sitemapDependenciesHelper;
|
|
89
|
+
let formatPolicy;
|
|
90
|
+
beforeEach(() => {
|
|
91
|
+
sitemapDependenciesHelper = new SitemapDependencies();
|
|
92
|
+
sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
|
|
93
|
+
formatPolicy = new Format(sitemapDependenciesHelper.dependencies);
|
|
94
|
+
// Mock FormatPresenter with all formats including ones that should be filtered out
|
|
95
|
+
FormatPresenter.getInstance = vi.fn().mockReturnValue({
|
|
96
|
+
getFragments: vi.fn().mockReturnValue([
|
|
97
|
+
{ id: 'fulltime', path: 'full-time' },
|
|
98
|
+
{ id: 'parttime', path: 'part-time' },
|
|
99
|
+
{ id: 'online', path: 'online' }, // Should be filtered out
|
|
100
|
+
{ id: 'blended', path: 'blended' }, // Should be filtered out
|
|
101
|
+
{ id: 'face2face', path: 'on-campus' } // Should be filtered out
|
|
102
|
+
])
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
afterEach(() => {
|
|
106
|
+
sitemapDependenciesHelper.resetMocks();
|
|
107
|
+
});
|
|
108
|
+
it('Should handle empty format fragments', async () => {
|
|
109
|
+
FormatPresenter.getInstance.mockReturnValueOnce({
|
|
110
|
+
getFragments: vi.fn().mockReturnValue([])
|
|
111
|
+
});
|
|
112
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap();
|
|
113
|
+
const urls = await formatPolicy.generateUrls();
|
|
114
|
+
expect(urls).toHaveLength(0);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
+
import { FilterKey } from '@studyportals/search-filters/server-side';
|
|
3
|
+
import { SearchDependencies } from '../utils/SearchDependencies.util.mjs';
|
|
4
|
+
import { PortalType } from '@studyportals/domain-client';
|
|
5
|
+
// Import all policies to validate new rules
|
|
6
|
+
import { Format } from '@/programmes/policies/Format';
|
|
7
|
+
import { Degree } from '@/programmes/policies/Degree';
|
|
8
|
+
import { DegreeFormat } from '@/programmes/policies/DegreeFormat';
|
|
9
|
+
import { AttendanceDegree } from '@/programmes/policies/AttendanceDegree';
|
|
10
|
+
import { Duration } from '@/programmes/policies/Duration';
|
|
11
|
+
import { DegreeDuration } from '@/programmes/policies/DegreeDuration';
|
|
12
|
+
import { AttendanceDuration } from '@/programmes/policies/AttendanceDuration';
|
|
13
|
+
import { AttendanceFormat } from '@/programmes/policies/AttendanceFormat';
|
|
14
|
+
import { AttendanceContinent } from '@/programmes/policies/AttendanceContinent';
|
|
15
|
+
import { ContinentFormat } from '@/programmes/policies/ContinentFormat';
|
|
16
|
+
import { DegreeTuitionFee } from '@/programmes/policies/DegreeTuitionFee';
|
|
17
|
+
import { DegreeContinent } from '@/programmes/policies/DegreeContinent';
|
|
18
|
+
import { TuitionFeeAttendance } from '@/programmes/policies/TuitionFeeAttendance';
|
|
19
|
+
import { DegreeTuitionFeeArea } from '@/programmes/policies/DegreeTuitionFeeArea';
|
|
20
|
+
import { DegreeTuitionFeeContinent } from '@/programmes/policies/DegreeTuitionFeeContinent';
|
|
21
|
+
import { SpecialProgrammes } from '@/programmes/policies/SpecialProgrammes';
|
|
22
|
+
import { DisciplineContinentAttendance } from '@/programmes/policies/DisciplineContinentAttendance';
|
|
23
|
+
import { DisciplineCountryAttendance } from '@/programmes/policies/DisciplineCountryAttendance';
|
|
24
|
+
import { DisciplineCountryFormat } from '@/programmes/policies/DisciplineCountryFormat';
|
|
25
|
+
import { DegreeSpecialProgrammes } from '@/programmes/policies/DegreeSpecialProgrammes';
|
|
26
|
+
import { DegreeAttendanceSpecialProgrammes } from '@/programmes/policies/DegreeAttendanceSpecialProgrammes';
|
|
27
|
+
import { ContinentSpecialProgrammes } from '@/programmes/policies';
|
|
28
|
+
/**
|
|
29
|
+
* Test suite to validate that all new indexing rules from new-rules.md are properly implemented
|
|
30
|
+
* This ensures we match the requirements exactly as specified
|
|
31
|
+
*/
|
|
32
|
+
describe('New Rules Validation (from new-rules.md)', () => {
|
|
33
|
+
let searchDependenciesHelper;
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
searchDependenciesHelper = new SearchDependencies();
|
|
36
|
+
searchDependenciesHelper.setResultsCount(10);
|
|
37
|
+
searchDependenciesHelper.setPageNumber(1);
|
|
38
|
+
searchDependenciesHelper.setPortalType(PortalType.BACHELOR);
|
|
39
|
+
});
|
|
40
|
+
describe('Format Rules (Rules 1-2)', () => {
|
|
41
|
+
it('Rule 1: Full-time (Format) should be indexable', async () => {
|
|
42
|
+
const formatPolicy = new Format(searchDependenciesHelper.dependencies);
|
|
43
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.ATTENDANCE, ['fulltime']]]));
|
|
44
|
+
const result = await formatPolicy.shouldIndex();
|
|
45
|
+
expect(result).toBe(true);
|
|
46
|
+
});
|
|
47
|
+
it('Rule 2: Part-time (Format) should be indexable', async () => {
|
|
48
|
+
const formatPolicy = new Format(searchDependenciesHelper.dependencies);
|
|
49
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.ATTENDANCE, ['parttime']]]));
|
|
50
|
+
const result = await formatPolicy.shouldIndex();
|
|
51
|
+
expect(result).toBe(true);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('Degree Rules (Rules 3-9)', () => {
|
|
55
|
+
it('Rule 3: Degree should be indexable', async () => {
|
|
56
|
+
const degreePolicy = new Degree(searchDependenciesHelper.dependencies);
|
|
57
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DEGREE_TYPE, ['mba']]]));
|
|
58
|
+
const result = await degreePolicy.shouldIndex();
|
|
59
|
+
expect(result).toBe(true);
|
|
60
|
+
});
|
|
61
|
+
it('Rule 4: Part-time + Degree should be indexable', async () => {
|
|
62
|
+
searchDependenciesHelper.setPortalType(PortalType.MASTER);
|
|
63
|
+
const degreeFormatPolicy = new DegreeFormat(searchDependenciesHelper.dependencies);
|
|
64
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
65
|
+
[FilterKey.ATTENDANCE, ['parttime']],
|
|
66
|
+
[FilterKey.DEGREE_TYPE, ['mba']]
|
|
67
|
+
]));
|
|
68
|
+
const result = await degreeFormatPolicy.shouldIndex();
|
|
69
|
+
expect(result).toBe(true);
|
|
70
|
+
});
|
|
71
|
+
it('Rule 7: Full-time + Degree should be indexable', async () => {
|
|
72
|
+
searchDependenciesHelper.setPortalType(PortalType.MASTER);
|
|
73
|
+
const degreeFormatPolicy = new DegreeFormat(searchDependenciesHelper.dependencies);
|
|
74
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
75
|
+
[FilterKey.ATTENDANCE, ['fulltime']],
|
|
76
|
+
[FilterKey.DEGREE_TYPE, ['msc']]
|
|
77
|
+
]));
|
|
78
|
+
const result = await degreeFormatPolicy.shouldIndex();
|
|
79
|
+
expect(result).toBe(true);
|
|
80
|
+
});
|
|
81
|
+
it('Rule 8: Tuition Fee + Degree should be indexable', async () => {
|
|
82
|
+
const degreeTuitionFeePolicy = new DegreeTuitionFee(searchDependenciesHelper.dependencies);
|
|
83
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
84
|
+
[FilterKey.TUITION_FEE, ['[0,2500]']],
|
|
85
|
+
[FilterKey.DEGREE_TYPE, ['phd']]
|
|
86
|
+
]));
|
|
87
|
+
const result = await degreeTuitionFeePolicy.shouldIndex();
|
|
88
|
+
expect(result).toBe(true);
|
|
89
|
+
});
|
|
90
|
+
it('Rule 9: Continent + Degree should be indexable', async () => {
|
|
91
|
+
searchDependenciesHelper.setPortalType(PortalType.MASTER);
|
|
92
|
+
const degreeContinentPolicy = new DegreeContinent(searchDependenciesHelper.dependencies);
|
|
93
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
94
|
+
[FilterKey.CONTINENT, ['europe']],
|
|
95
|
+
[FilterKey.DEGREE_TYPE, ['mba']]
|
|
96
|
+
]));
|
|
97
|
+
const result = await degreeContinentPolicy.shouldIndex();
|
|
98
|
+
expect(result).toBe(true);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
describe('Duration Rules (Rules 11-12, 17-22, 28-30)', () => {
|
|
102
|
+
it('Rule 11: 1 year (Duration) should be indexable', async () => {
|
|
103
|
+
const durationPolicy = new Duration(searchDependenciesHelper.dependencies);
|
|
104
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DURATION, ['[360,360]']]]));
|
|
105
|
+
const result = await durationPolicy.shouldIndex();
|
|
106
|
+
expect(result).toBe(true);
|
|
107
|
+
});
|
|
108
|
+
it('Rule 17: 2 years (Duration) should be indexable', async () => {
|
|
109
|
+
const durationPolicy = new Duration(searchDependenciesHelper.dependencies);
|
|
110
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DURATION, ['[720,720]']]]));
|
|
111
|
+
const result = await durationPolicy.shouldIndex();
|
|
112
|
+
expect(result).toBe(true);
|
|
113
|
+
});
|
|
114
|
+
it('Rule 12: Online Learning + 1 year should be indexable', async () => {
|
|
115
|
+
const attendanceDurationPolicy = new AttendanceDuration(searchDependenciesHelper.dependencies);
|
|
116
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
117
|
+
[FilterKey.DELIVERY_METHOD, ['online']],
|
|
118
|
+
[FilterKey.DURATION, ['[360,360]']]
|
|
119
|
+
]));
|
|
120
|
+
const result = await attendanceDurationPolicy.shouldIndex();
|
|
121
|
+
expect(result).toBe(true);
|
|
122
|
+
});
|
|
123
|
+
it('Rule 21: Degree + 2 years should be indexable', async () => {
|
|
124
|
+
searchDependenciesHelper.setPortalType(PortalType.MASTER);
|
|
125
|
+
const degreeDurationPolicy = new DegreeDuration(searchDependenciesHelper.dependencies);
|
|
126
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
127
|
+
[FilterKey.DEGREE_TYPE, ['msc']],
|
|
128
|
+
[FilterKey.DURATION, ['[720,720]']]
|
|
129
|
+
]));
|
|
130
|
+
const result = await degreeDurationPolicy.shouldIndex();
|
|
131
|
+
expect(result).toBe(true);
|
|
132
|
+
});
|
|
133
|
+
it('Rule 29: Degree + 1 year should be indexable', async () => {
|
|
134
|
+
searchDependenciesHelper.setPortalType(PortalType.MASTER);
|
|
135
|
+
const degreeDurationPolicy = new DegreeDuration(searchDependenciesHelper.dependencies);
|
|
136
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
137
|
+
[FilterKey.DEGREE_TYPE, ['mba']],
|
|
138
|
+
[FilterKey.DURATION, ['[360,360]']]
|
|
139
|
+
]));
|
|
140
|
+
const result = await degreeDurationPolicy.shouldIndex();
|
|
141
|
+
expect(result).toBe(true);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
describe('Attendance Combination Rules (Rules 10, 16, 18-20, 25-27)', () => {
|
|
145
|
+
it('Rule 10: Tuition Fee + Online Learning should be indexable', async () => {
|
|
146
|
+
const attendanceTuitionFeePolicy = new TuitionFeeAttendance(searchDependenciesHelper.dependencies);
|
|
147
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
148
|
+
[FilterKey.TUITION_FEE, ['[0,2500]']],
|
|
149
|
+
[FilterKey.DELIVERY_METHOD, ['online']]
|
|
150
|
+
]));
|
|
151
|
+
const result = await attendanceTuitionFeePolicy.shouldIndex();
|
|
152
|
+
expect(result).toBe(true);
|
|
153
|
+
});
|
|
154
|
+
it('Rule 16: Part-time + Online Learning should be indexable', async () => {
|
|
155
|
+
const attendanceFormatPolicy = new AttendanceFormat(searchDependenciesHelper.dependencies);
|
|
156
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
157
|
+
[FilterKey.ATTENDANCE, ['parttime']],
|
|
158
|
+
[FilterKey.DELIVERY_METHOD, ['online']]
|
|
159
|
+
]));
|
|
160
|
+
const result = await attendanceFormatPolicy.shouldIndex();
|
|
161
|
+
expect(result).toBe(true);
|
|
162
|
+
});
|
|
163
|
+
it('Rule 18: Blended Learning + Degree should be indexable', async () => {
|
|
164
|
+
searchDependenciesHelper.setPortalType(PortalType.PHD);
|
|
165
|
+
const attendanceDegreePolicy = new AttendanceDegree(searchDependenciesHelper.dependencies);
|
|
166
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
167
|
+
[FilterKey.DELIVERY_METHOD, ['blended']],
|
|
168
|
+
[FilterKey.DEGREE_TYPE, ['phd']]
|
|
169
|
+
]));
|
|
170
|
+
const result = await attendanceDegreePolicy.shouldIndex();
|
|
171
|
+
expect(result).toBe(true);
|
|
172
|
+
});
|
|
173
|
+
it('Rule 19: Continent + Online Learning should be indexable', async () => {
|
|
174
|
+
const attendanceContinentPolicy = new AttendanceContinent(searchDependenciesHelper.dependencies);
|
|
175
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
176
|
+
[FilterKey.CONTINENT, ['europe']],
|
|
177
|
+
[FilterKey.DELIVERY_METHOD, ['online']]
|
|
178
|
+
]));
|
|
179
|
+
const result = await attendanceContinentPolicy.shouldIndex();
|
|
180
|
+
expect(result).toBe(true);
|
|
181
|
+
});
|
|
182
|
+
it('Rule 20: Continent + Part-time should be indexable', async () => {
|
|
183
|
+
const continentFormatPolicy = new ContinentFormat(searchDependenciesHelper.dependencies);
|
|
184
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
185
|
+
[FilterKey.CONTINENT, ['europe']],
|
|
186
|
+
[FilterKey.ATTENDANCE, ['parttime']]
|
|
187
|
+
]));
|
|
188
|
+
const result = await continentFormatPolicy.shouldIndex();
|
|
189
|
+
expect(result).toBe(true);
|
|
190
|
+
});
|
|
191
|
+
it('Rule 25: Full-time + Online Learning should be indexable', async () => {
|
|
192
|
+
const attendanceFormatPolicy = new AttendanceFormat(searchDependenciesHelper.dependencies);
|
|
193
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
194
|
+
[FilterKey.ATTENDANCE, ['fulltime']],
|
|
195
|
+
[FilterKey.DELIVERY_METHOD, ['online']]
|
|
196
|
+
]));
|
|
197
|
+
const result = await attendanceFormatPolicy.shouldIndex();
|
|
198
|
+
expect(result).toBe(true);
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
describe('Complex Combination Rules (Rules 13-15, 27-28)', () => {
|
|
202
|
+
it('Rule 13: Region + Tuition Fee + Degree - Policy exists (DegreeTuitionFeeArea)', async () => {
|
|
203
|
+
// This test verifies the policy exists and can be instantiated
|
|
204
|
+
// The actual rule validation may require additional filters based on implementation
|
|
205
|
+
const degreeTuitionFeeAreaPolicy = new DegreeTuitionFeeArea(searchDependenciesHelper.dependencies);
|
|
206
|
+
expect(degreeTuitionFeeAreaPolicy).toBeDefined();
|
|
207
|
+
expect(degreeTuitionFeeAreaPolicy.name).toBe('Degree Area Tuition fee Policy');
|
|
208
|
+
});
|
|
209
|
+
it('Rule 15: Continent + Tuition Fee + Degree should be indexable', async () => {
|
|
210
|
+
searchDependenciesHelper.setPortalType(PortalType.MASTER);
|
|
211
|
+
const degreeContinentTuitionFeePolicy = new DegreeTuitionFeeContinent(searchDependenciesHelper.dependencies);
|
|
212
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
213
|
+
[FilterKey.CONTINENT, ['europe']],
|
|
214
|
+
[FilterKey.TUITION_FEE, ['[0,2500]']],
|
|
215
|
+
[FilterKey.DEGREE_TYPE, ['msc']]
|
|
216
|
+
]));
|
|
217
|
+
const result = await degreeContinentTuitionFeePolicy.shouldIndex();
|
|
218
|
+
expect(result).toBe(true);
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
describe('Special Programmes Rules (Rules 22-24, 30, 34-35)', () => {
|
|
222
|
+
it('Rule 24: Executive Programmes (Special) should be indexable', async () => {
|
|
223
|
+
const specialProgrammesPolicy = new SpecialProgrammes(searchDependenciesHelper.dependencies);
|
|
224
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.SPECIAL_PROGRAMMES, ['executive']]]));
|
|
225
|
+
const result = await specialProgrammesPolicy.shouldIndex();
|
|
226
|
+
expect(result).toBe(true);
|
|
227
|
+
});
|
|
228
|
+
it('Rule 34: MBA + Executive Programmes should be indexable', async () => {
|
|
229
|
+
const degreeSpecialProgrammesPolicy = new DegreeSpecialProgrammes(searchDependenciesHelper.dependencies);
|
|
230
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
231
|
+
[FilterKey.DEGREE_TYPE, ['mba']],
|
|
232
|
+
[FilterKey.SPECIAL_PROGRAMMES, ['executive']]
|
|
233
|
+
]));
|
|
234
|
+
const result = await degreeSpecialProgrammesPolicy.shouldIndex();
|
|
235
|
+
expect(result).toBe(true);
|
|
236
|
+
});
|
|
237
|
+
it('Rule 35: MBA + Executive Programmes + online - Policy exists (DegreeAttendanceSpecialProgrammes)', async () => {
|
|
238
|
+
// This test verifies the policy exists and implements the required functionality
|
|
239
|
+
// The policy filters for MBA + Executive programs and uses OnlineAttendanceRule
|
|
240
|
+
const degreeAttendanceSpecialProgrammesPolicy = new DegreeAttendanceSpecialProgrammes(searchDependenciesHelper.dependencies);
|
|
241
|
+
expect(degreeAttendanceSpecialProgrammesPolicy).toBeDefined();
|
|
242
|
+
expect(degreeAttendanceSpecialProgrammesPolicy.name).toBe('Degree Attendance Special Programmes Policy');
|
|
243
|
+
expect(degreeAttendanceSpecialProgrammesPolicy.description).toContain('online');
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
describe('Discipline Combination Rules (Rules 14, 32-33)', () => {
|
|
247
|
+
it('Rule 14: Continent + Discipline + Online should be indexable', async () => {
|
|
248
|
+
const disciplineContinentAttendancePolicy = new DisciplineContinentAttendance(searchDependenciesHelper.dependencies);
|
|
249
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
250
|
+
[FilterKey.CONTINENT, ['europe']],
|
|
251
|
+
[FilterKey.DISCIPLINES, ['business']],
|
|
252
|
+
[FilterKey.DELIVERY_METHOD, ['online']]
|
|
253
|
+
]));
|
|
254
|
+
const result = await disciplineContinentAttendancePolicy.shouldIndex();
|
|
255
|
+
expect(result).toBe(true);
|
|
256
|
+
});
|
|
257
|
+
it('Rule 32: Discipline + Country + Online learning should be indexable', async () => {
|
|
258
|
+
const disciplineCountryAttendancePolicy = new DisciplineCountryAttendance(searchDependenciesHelper.dependencies);
|
|
259
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
260
|
+
[FilterKey.DISCIPLINES, ['engineering']],
|
|
261
|
+
[FilterKey.COUNTRY, ['30']], // UK
|
|
262
|
+
[FilterKey.DELIVERY_METHOD, ['online']]
|
|
263
|
+
]));
|
|
264
|
+
const result = await disciplineCountryAttendancePolicy.shouldIndex();
|
|
265
|
+
expect(result).toBe(true);
|
|
266
|
+
});
|
|
267
|
+
it('Rule 33: Discipline + Country + Part-time should be indexable', async () => {
|
|
268
|
+
const disciplineCountryFormatPolicy = new DisciplineCountryFormat(searchDependenciesHelper.dependencies);
|
|
269
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
270
|
+
[FilterKey.DISCIPLINES, ['medicine']],
|
|
271
|
+
[FilterKey.COUNTRY, ['56']], // USA
|
|
272
|
+
[FilterKey.ATTENDANCE, ['parttime']]
|
|
273
|
+
]));
|
|
274
|
+
const result = await disciplineCountryFormatPolicy.shouldIndex();
|
|
275
|
+
expect(result).toBe(true);
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
describe('Verify Policy Behavior', () => {
|
|
279
|
+
it('Format policy allows any attendance type in shouldIndex (filtering in generateUrls)', async () => {
|
|
280
|
+
const formatPolicy = new Format(searchDependenciesHelper.dependencies);
|
|
281
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.ATTENDANCE, ['online']]]) // This passes shouldIndex but gets filtered in generateUrls
|
|
282
|
+
);
|
|
283
|
+
const result = await formatPolicy.shouldIndex();
|
|
284
|
+
expect(result).toBe(true); // Basic validation passes
|
|
285
|
+
});
|
|
286
|
+
it('Duration policy allows 1 year duration in shouldIndex (filtering in generateUrls)', async () => {
|
|
287
|
+
const durationPolicy = new Duration(searchDependenciesHelper.dependencies);
|
|
288
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DURATION, ['[360,360]']]]) // 1 year - allowed in shouldIndex, filtered in generateUrls
|
|
289
|
+
);
|
|
290
|
+
const result = await durationPolicy.shouldIndex();
|
|
291
|
+
expect(result).toBe(true); // Basic validation passes
|
|
292
|
+
});
|
|
293
|
+
it('Duration policy allows 2 years duration in shouldIndex (filtering in generateUrls)', async () => {
|
|
294
|
+
const durationPolicy = new Duration(searchDependenciesHelper.dependencies);
|
|
295
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.DURATION, ['[720,720]']]]) // 2 years - allowed in shouldIndex, filtered in generateUrls
|
|
296
|
+
);
|
|
297
|
+
const result = await durationPolicy.shouldIndex();
|
|
298
|
+
expect(result).toBe(true); // Basic validation passes
|
|
299
|
+
});
|
|
300
|
+
it('AttendanceDegree allows blended in shouldIndex (filtering in generateUrls)', async () => {
|
|
301
|
+
searchDependenciesHelper.setPortalType(PortalType.MASTER);
|
|
302
|
+
const attendanceDegreePolicy = new AttendanceDegree(searchDependenciesHelper.dependencies);
|
|
303
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
304
|
+
[FilterKey.DELIVERY_METHOD, ['blended']], // Allowed in shouldIndex, filtered in generateUrls
|
|
305
|
+
[FilterKey.DEGREE_TYPE, ['mba']]
|
|
306
|
+
]));
|
|
307
|
+
const result = await attendanceDegreePolicy.shouldIndex();
|
|
308
|
+
expect(result).toBe(true); // Basic validation passes
|
|
309
|
+
});
|
|
310
|
+
it('AttendanceDegree allows blended in shouldIndex (filtering in generateUrls)', async () => {
|
|
311
|
+
const continentSpecialProgrammesPolicy = new ContinentSpecialProgrammes(searchDependenciesHelper.dependencies);
|
|
312
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
313
|
+
[FilterKey.SPECIAL_PROGRAMMES, ['erasmus']], // Allowed in shouldIndex, filtered in generateUrls
|
|
314
|
+
[FilterKey.CONTINENT, ['1']]
|
|
315
|
+
]));
|
|
316
|
+
const result = await continentSpecialProgrammesPolicy.shouldIndex();
|
|
317
|
+
expect(result).toBe(true); // Basic validation passes
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|