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