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