@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,260 @@
|
|
|
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 { CountryEducationalForm } from '@/programmes/policies/CountryEducationalForm';
|
|
5
|
+
import { PortalType } from '@studyportals/domain-client';
|
|
6
|
+
import { SitemapDependencies } from '../utils/SitemapDependencies.util.mjs';
|
|
7
|
+
import { CountryPresenter } from '@/presenters/CountryPresenter';
|
|
8
|
+
import { EducationalFormPresenter } from '@/presenters/EducationalFormPresenter';
|
|
9
|
+
describe('Policy:CountryEducationalForm', () => {
|
|
10
|
+
describe('shouldIndex', () => {
|
|
11
|
+
let searchDependenciesHelper;
|
|
12
|
+
let countryEducationalFormPolicy;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
searchDependenciesHelper = new SearchDependencies();
|
|
15
|
+
countryEducationalFormPolicy = new CountryEducationalForm(searchDependenciesHelper.dependencies);
|
|
16
|
+
searchDependenciesHelper.setResultsCount(10);
|
|
17
|
+
searchDependenciesHelper.setPageNumber(1);
|
|
18
|
+
searchDependenciesHelper.setPortalType(PortalType.SHORT);
|
|
19
|
+
});
|
|
20
|
+
it('Should return true when all conditions are met', async () => {
|
|
21
|
+
const countryId = '30'; // UK
|
|
22
|
+
const educationalForm = 'academic';
|
|
23
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
24
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
25
|
+
[FilterKey.EDUCATIONAL_FORM, [educationalForm]]
|
|
26
|
+
]));
|
|
27
|
+
const result = await countryEducationalFormPolicy.shouldIndex();
|
|
28
|
+
expect(result).toBe(true);
|
|
29
|
+
});
|
|
30
|
+
it('Should return false when multiple countries are selected', async () => {
|
|
31
|
+
const firstCountryId = '30'; // UK
|
|
32
|
+
const secondCountryId = '21'; // Portugal
|
|
33
|
+
const educationalForm = 'academic';
|
|
34
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
35
|
+
[FilterKey.COUNTRY, [firstCountryId, secondCountryId]],
|
|
36
|
+
[FilterKey.EDUCATIONAL_FORM, [educationalForm]]
|
|
37
|
+
]));
|
|
38
|
+
const result = await countryEducationalFormPolicy.shouldIndex();
|
|
39
|
+
expect(result).toBe(false);
|
|
40
|
+
});
|
|
41
|
+
it('Should return false when multiple educational form values are selected', async () => {
|
|
42
|
+
const countryId = '30'; // UK
|
|
43
|
+
const firstEducationalForm = 'academic';
|
|
44
|
+
const secondEducationalForm = 'semester';
|
|
45
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
46
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
47
|
+
[FilterKey.DURATION, [firstEducationalForm, secondEducationalForm]]
|
|
48
|
+
]));
|
|
49
|
+
const result = await countryEducationalFormPolicy.shouldIndex();
|
|
50
|
+
expect(result).toBe(false);
|
|
51
|
+
});
|
|
52
|
+
it('Should return false when no educational form values are selected', async () => {
|
|
53
|
+
const countryId = '30'; // UK
|
|
54
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.COUNTRY, [countryId]]]));
|
|
55
|
+
const result = await countryEducationalFormPolicy.shouldIndex();
|
|
56
|
+
expect(result).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
it('Should return false when no countries are selected', async () => {
|
|
59
|
+
const educationalForm = 'academic';
|
|
60
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.EDUCATIONAL_FORM, [educationalForm]]]));
|
|
61
|
+
const result = await countryEducationalFormPolicy.shouldIndex();
|
|
62
|
+
expect(result).toBe(false);
|
|
63
|
+
});
|
|
64
|
+
it('Should return false when other filters are selected', async () => {
|
|
65
|
+
const countryId = '30'; // UK
|
|
66
|
+
const educationalForm = 'academic';
|
|
67
|
+
const disciplineId = '54'; // Agriculture & Forestry
|
|
68
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
69
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
70
|
+
[FilterKey.EDUCATIONAL_FORM, [educationalForm]],
|
|
71
|
+
[FilterKey.DISCIPLINES, [disciplineId]]
|
|
72
|
+
]));
|
|
73
|
+
const result = await countryEducationalFormPolicy.shouldIndex();
|
|
74
|
+
expect(result).toBe(false);
|
|
75
|
+
});
|
|
76
|
+
it('Should return false when educational form is not indexable (i.e. Winter School)', async () => {
|
|
77
|
+
const countryId = '30'; // UK
|
|
78
|
+
const educationalForm = 'winter_school';
|
|
79
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
80
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
81
|
+
[FilterKey.EDUCATIONAL_FORM, [educationalForm]]
|
|
82
|
+
]));
|
|
83
|
+
const result = await countryEducationalFormPolicy.shouldIndex();
|
|
84
|
+
expect(result).toBe(false);
|
|
85
|
+
});
|
|
86
|
+
it('Should return false when number of results is less than 7', async () => {
|
|
87
|
+
const countryId = '30'; // UK
|
|
88
|
+
const educationalForm = 'academic';
|
|
89
|
+
searchDependenciesHelper.setResultsCount(6);
|
|
90
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
91
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
92
|
+
[FilterKey.EDUCATIONAL_FORM, [educationalForm]]
|
|
93
|
+
]));
|
|
94
|
+
const result = await countryEducationalFormPolicy.shouldIndex();
|
|
95
|
+
expect(result).toBe(false);
|
|
96
|
+
});
|
|
97
|
+
it('Should return false when page number is higher than 2', async () => {
|
|
98
|
+
const countryId = '30'; // UK
|
|
99
|
+
const educationalForm = 'academic';
|
|
100
|
+
searchDependenciesHelper.setPageNumber(3);
|
|
101
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
102
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
103
|
+
[FilterKey.EDUCATIONAL_FORM, [educationalForm]]
|
|
104
|
+
]));
|
|
105
|
+
const result = await countryEducationalFormPolicy.shouldIndex();
|
|
106
|
+
expect(result).toBe(false);
|
|
107
|
+
});
|
|
108
|
+
it('Should return false when portal is distance learning', async () => {
|
|
109
|
+
const countryId = '30'; // UK
|
|
110
|
+
const educationalForm = 'academic';
|
|
111
|
+
searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
|
|
112
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
113
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
114
|
+
[FilterKey.EDUCATIONAL_FORM, [educationalForm]]
|
|
115
|
+
]));
|
|
116
|
+
const result = await countryEducationalFormPolicy.shouldIndex();
|
|
117
|
+
expect(result).toBe(false);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
describe('generateUrls', () => {
|
|
121
|
+
let sitemapDependenciesHelper;
|
|
122
|
+
let countryEducationalFormPolicy;
|
|
123
|
+
beforeEach(() => {
|
|
124
|
+
sitemapDependenciesHelper = new SitemapDependencies();
|
|
125
|
+
sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
|
|
126
|
+
countryEducationalFormPolicy = new CountryEducationalForm(sitemapDependenciesHelper.dependencies);
|
|
127
|
+
CountryPresenter.getInstance = vi.fn().mockReturnValue({
|
|
128
|
+
getFragments: vi.fn().mockReturnValue([
|
|
129
|
+
{ id: '30', path: 'uk' },
|
|
130
|
+
{ id: '21', path: 'portugal' },
|
|
131
|
+
{ id: '56', path: 'usa' },
|
|
132
|
+
{ id: '82', path: 'netherlands' }
|
|
133
|
+
])
|
|
134
|
+
});
|
|
135
|
+
EducationalFormPresenter.getInstance = vi.fn().mockReturnValue({
|
|
136
|
+
getFragments: vi.fn().mockReturnValue([
|
|
137
|
+
{ id: 'academic', path: 'academic-programmes' },
|
|
138
|
+
{ id: 'semester', path: 'semester-programmes' },
|
|
139
|
+
{ id: 'winter_school', path: 'winter-school-programmes' },
|
|
140
|
+
{ id: 'summer_school', path: 'summer-school-programmes' }
|
|
141
|
+
])
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
afterEach(() => {
|
|
145
|
+
sitemapDependenciesHelper.resetMocks();
|
|
146
|
+
});
|
|
147
|
+
it('Should generate URLs for all valid country-form combinations', async () => {
|
|
148
|
+
// Mock the checkRulesForSitemap to exclude winter_school
|
|
149
|
+
const resultMap = new Map();
|
|
150
|
+
// Set rules to exclude winter_school (as per shouldIndex test)
|
|
151
|
+
for (const countryId of ['30', '21', '56', '82']) {
|
|
152
|
+
for (const formId of ['academic', 'semester', 'winter_school', 'summer_school']) {
|
|
153
|
+
const key = `${FilterKey.COUNTRY}:${countryId}|${FilterKey.EDUCATIONAL_FORM}:${formId}`;
|
|
154
|
+
resultMap.set(key, formId !== 'winter_school');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
|
|
158
|
+
// Call the method via reflection since it's protected
|
|
159
|
+
const urls = await countryEducationalFormPolicy.generateUrls();
|
|
160
|
+
// Verify winter_school is excluded (3 forms * 4 countries * 2 pages = 24 URLs)
|
|
161
|
+
expect(urls).toHaveLength(12);
|
|
162
|
+
expect(urls).toContain('uk/academic-programmes');
|
|
163
|
+
expect(urls).toContain('uk/semester-programmes');
|
|
164
|
+
expect(urls).toContain('uk/summer-school-programmes');
|
|
165
|
+
expect(urls).toContain('portugal/academic-programmes');
|
|
166
|
+
expect(urls).toContain('usa/academic-programmes');
|
|
167
|
+
expect(urls).toContain('netherlands/academic-programmes');
|
|
168
|
+
expect(urls).not.toContain('uk/winter-school-programmes');
|
|
169
|
+
expect(urls).not.toContain('portugal/winter-school-programmes');
|
|
170
|
+
});
|
|
171
|
+
it('Should exclude certain country-form combinations', async () => {
|
|
172
|
+
// Mock to exclude UK combinations
|
|
173
|
+
const resultMap = new Map();
|
|
174
|
+
// Set up rules to exclude UK for all forms
|
|
175
|
+
for (const countryId of ['30', '21', '56', '82']) {
|
|
176
|
+
for (const formId of ['academic', 'semester', 'winter_school', 'summer_school']) {
|
|
177
|
+
const key = `${FilterKey.COUNTRY}:${countryId}|${FilterKey.EDUCATIONAL_FORM}:${formId}`;
|
|
178
|
+
// Exclude UK (30) and winter_school
|
|
179
|
+
resultMap.set(key, countryId !== '30' && formId !== 'winter_school');
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
|
|
183
|
+
const urls = await countryEducationalFormPolicy.generateUrls();
|
|
184
|
+
// Should include others but not UK (3 forms * 3 countries * 2 pages = 18 URLs)
|
|
185
|
+
expect(urls).toHaveLength(9);
|
|
186
|
+
expect(urls).toContain('portugal/academic-programmes');
|
|
187
|
+
expect(urls).toContain('usa/academic-programmes');
|
|
188
|
+
expect(urls).toContain('netherlands/academic-programmes');
|
|
189
|
+
expect(urls).not.toContain('uk/academic-programmes');
|
|
190
|
+
expect(urls).not.toContain('uk/semester-programmes');
|
|
191
|
+
expect(urls).not.toContain('portugal/winter-school-programmes');
|
|
192
|
+
});
|
|
193
|
+
it('Should exclude all URLs when all checks fail', async () => {
|
|
194
|
+
// Create a map that returns false for all combinations
|
|
195
|
+
const resultMap = new Map();
|
|
196
|
+
// Set all combinations to fail
|
|
197
|
+
for (const countryId of ['30', '21', '56', '82']) {
|
|
198
|
+
for (const formId of ['academic', 'semester', 'winter_school', 'summer_school']) {
|
|
199
|
+
const key = `${FilterKey.COUNTRY}:${countryId}|${FilterKey.EDUCATIONAL_FORM}:${formId}`;
|
|
200
|
+
resultMap.set(key, false);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap, false);
|
|
204
|
+
const urls = await countryEducationalFormPolicy.generateUrls();
|
|
205
|
+
// Should include no URLs
|
|
206
|
+
expect(urls).toHaveLength(0);
|
|
207
|
+
});
|
|
208
|
+
it('Should handle empty fragments arrays', async () => {
|
|
209
|
+
// Mock the CountryPresenter to return empty fragments
|
|
210
|
+
CountryPresenter.getInstance.mockReturnValueOnce({
|
|
211
|
+
getFragments: vi.fn().mockReturnValue([])
|
|
212
|
+
});
|
|
213
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap();
|
|
214
|
+
const urls = await countryEducationalFormPolicy.generateUrls();
|
|
215
|
+
// Should return empty array
|
|
216
|
+
expect(urls).toHaveLength(0);
|
|
217
|
+
});
|
|
218
|
+
it('Should handle large number of combinations efficiently', async () => {
|
|
219
|
+
// Generate a larger set of countries (10) and educational forms (5)
|
|
220
|
+
const largeCountrySet = Array.from({ length: 10 }, (_, index) => ({
|
|
221
|
+
id: `${1000 + index}`,
|
|
222
|
+
path: `country-${1000 + index}`
|
|
223
|
+
}));
|
|
224
|
+
const largeFormSet = Array.from({ length: 5 }, (_, index) => ({
|
|
225
|
+
id: `form-${index}`,
|
|
226
|
+
path: `educational-form-${index}`
|
|
227
|
+
}));
|
|
228
|
+
// Mock the presenters to return large sets
|
|
229
|
+
CountryPresenter.getInstance.mockReturnValueOnce({
|
|
230
|
+
getFragments: vi.fn().mockReturnValue(largeCountrySet)
|
|
231
|
+
});
|
|
232
|
+
EducationalFormPresenter.getInstance.mockReturnValueOnce({
|
|
233
|
+
getFragments: vi.fn().mockReturnValue(largeFormSet)
|
|
234
|
+
});
|
|
235
|
+
// Mock to allow only specific combinations
|
|
236
|
+
// Only allow countries divisible by 2, and forms with odd indices
|
|
237
|
+
const resultMap = new Map();
|
|
238
|
+
for (let c = 0; c < largeCountrySet.length; c++) {
|
|
239
|
+
for (let f = 0; f < largeFormSet.length; f++) {
|
|
240
|
+
const countryId = largeCountrySet[c].id;
|
|
241
|
+
const formId = largeFormSet[f].id;
|
|
242
|
+
const key = `${FilterKey.COUNTRY}:${countryId}|${FilterKey.EDUCATIONAL_FORM}:${formId}`;
|
|
243
|
+
// Only include countries where index is divisible by 2, and form indices that are odd
|
|
244
|
+
resultMap.set(key, c % 2 === 0 && f % 2 === 1);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
|
|
248
|
+
const urls = await countryEducationalFormPolicy.generateUrls();
|
|
249
|
+
// Should generate 5 countries (10/2) * 2 forms (5/2 rounded down + ignore index 0) * 2 pages = 20 URLs
|
|
250
|
+
expect(urls).toHaveLength(10);
|
|
251
|
+
// Test some specific combinations
|
|
252
|
+
expect(urls).toContain('country-1000/educational-form-1'); // First valid country, first valid form
|
|
253
|
+
expect(urls).toContain('country-1000/educational-form-3'); // First valid country, second valid form
|
|
254
|
+
expect(urls).toContain('country-1002/educational-form-1'); // Another valid country, first valid form
|
|
255
|
+
expect(urls).not.toContain('country-1001/educational-form-1'); // Invalid country (not divisible by 2)
|
|
256
|
+
expect(urls).not.toContain('country-1000/educational-form-0'); // Invalid form (not odd index)
|
|
257
|
+
expect(urls).not.toContain('country-1000/educational-form-2'); // Invalid form (not odd index)
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,253 @@
|
|
|
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 { CountryFormat } from '@/programmes/policies/CountryFormat';
|
|
5
|
+
import { PortalType } from '@studyportals/domain-client';
|
|
6
|
+
import { SitemapDependencies } from '../utils/SitemapDependencies.util.mjs';
|
|
7
|
+
import { CountryPresenter } from '@/presenters/CountryPresenter';
|
|
8
|
+
import { FormatPresenter } from '@/presenters/FormatPresenter';
|
|
9
|
+
describe('Policy:CountryFormat', () => {
|
|
10
|
+
describe('shouldIndex', () => {
|
|
11
|
+
let searchDependenciesHelper;
|
|
12
|
+
let countryFormatPolicy;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
searchDependenciesHelper = new SearchDependencies();
|
|
15
|
+
countryFormatPolicy = new CountryFormat(searchDependenciesHelper.dependencies);
|
|
16
|
+
searchDependenciesHelper.setResultsCount(10);
|
|
17
|
+
searchDependenciesHelper.setPageNumber(1);
|
|
18
|
+
searchDependenciesHelper.setPortalType(PortalType.MASTER);
|
|
19
|
+
});
|
|
20
|
+
it('Should return true when all conditions are met', async () => {
|
|
21
|
+
const countryId = '82'; // US
|
|
22
|
+
const format = 'parttime';
|
|
23
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
24
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
25
|
+
[FilterKey.ATTENDANCE, [format]]
|
|
26
|
+
]));
|
|
27
|
+
const result = await countryFormatPolicy.shouldIndex();
|
|
28
|
+
expect(result).toBe(true);
|
|
29
|
+
});
|
|
30
|
+
it('Should return false when multiple countries are selected', async () => {
|
|
31
|
+
const firstCountryId = '30'; // UK
|
|
32
|
+
const secondCountryId = '21'; // Portugal
|
|
33
|
+
const format = 'parttime';
|
|
34
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
35
|
+
[FilterKey.COUNTRY, [firstCountryId, secondCountryId]],
|
|
36
|
+
[FilterKey.ATTENDANCE, [format]]
|
|
37
|
+
]));
|
|
38
|
+
const result = await countryFormatPolicy.shouldIndex();
|
|
39
|
+
expect(result).toBe(false);
|
|
40
|
+
});
|
|
41
|
+
it('Should return false when multiple format values are selected', async () => {
|
|
42
|
+
const countryId = '30'; // UK
|
|
43
|
+
const firstFormat = 'parttime';
|
|
44
|
+
const secondFormat = 'fulltime';
|
|
45
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
46
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
47
|
+
[FilterKey.ATTENDANCE, [firstFormat, secondFormat]]
|
|
48
|
+
]));
|
|
49
|
+
const result = await countryFormatPolicy.shouldIndex();
|
|
50
|
+
expect(result).toBe(false);
|
|
51
|
+
});
|
|
52
|
+
it('Should return false when no format values are selected', async () => {
|
|
53
|
+
const countryId = '30'; // UK
|
|
54
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.COUNTRY, [countryId]]]));
|
|
55
|
+
const result = await countryFormatPolicy.shouldIndex();
|
|
56
|
+
expect(result).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
it('Should return false when no countries are selected', async () => {
|
|
59
|
+
const format = 'parttime';
|
|
60
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([[FilterKey.EDUCATIONAL_FORM, [format]]]));
|
|
61
|
+
const result = await countryFormatPolicy.shouldIndex();
|
|
62
|
+
expect(result).toBe(false);
|
|
63
|
+
});
|
|
64
|
+
it('Should return false when other filters are selected', async () => {
|
|
65
|
+
const countryId = '30'; // UK
|
|
66
|
+
const format = 'parttime';
|
|
67
|
+
const disciplineId = '54'; // Agriculture & Forestry
|
|
68
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
69
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
70
|
+
[FilterKey.ATTENDANCE, [format]],
|
|
71
|
+
[FilterKey.DISCIPLINES, [disciplineId]]
|
|
72
|
+
]));
|
|
73
|
+
const result = await countryFormatPolicy.shouldIndex();
|
|
74
|
+
expect(result).toBe(false);
|
|
75
|
+
});
|
|
76
|
+
it('Should return false when format is not part-time', async () => {
|
|
77
|
+
const countryId = '30'; // UK
|
|
78
|
+
const format = 'fulltime';
|
|
79
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
80
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
81
|
+
[FilterKey.ATTENDANCE, [format]]
|
|
82
|
+
]));
|
|
83
|
+
const result = await countryFormatPolicy.shouldIndex();
|
|
84
|
+
expect(result).toBe(false);
|
|
85
|
+
});
|
|
86
|
+
it('Should return false when number of results is less than 7', async () => {
|
|
87
|
+
const countryId = '30'; // UK
|
|
88
|
+
const format = 'parttime';
|
|
89
|
+
searchDependenciesHelper.setResultsCount(6);
|
|
90
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
91
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
92
|
+
[FilterKey.ATTENDANCE, [format]]
|
|
93
|
+
]));
|
|
94
|
+
const result = await countryFormatPolicy.shouldIndex();
|
|
95
|
+
expect(result).toBe(false);
|
|
96
|
+
});
|
|
97
|
+
it('Should return false when page number is higher than 2', async () => {
|
|
98
|
+
const countryId = '82'; // US
|
|
99
|
+
const format = 'parttime';
|
|
100
|
+
searchDependenciesHelper.setPageNumber(5);
|
|
101
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
102
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
103
|
+
[FilterKey.ATTENDANCE, [format]]
|
|
104
|
+
]));
|
|
105
|
+
const result = await countryFormatPolicy.shouldIndex();
|
|
106
|
+
expect(result).toBe(false);
|
|
107
|
+
});
|
|
108
|
+
it('Should return false when portal is distance learning', async () => {
|
|
109
|
+
const countryId = '82'; // US
|
|
110
|
+
const format = 'parttime';
|
|
111
|
+
searchDependenciesHelper.setPortalType(PortalType.DISTANCE_LEARNING);
|
|
112
|
+
searchDependenciesHelper.setFilterKeyValues(new Map([
|
|
113
|
+
[FilterKey.COUNTRY, [countryId]],
|
|
114
|
+
[FilterKey.ATTENDANCE, [format]]
|
|
115
|
+
]));
|
|
116
|
+
const result = await countryFormatPolicy.shouldIndex();
|
|
117
|
+
expect(result).toBe(false);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
describe('generateUrls', () => {
|
|
121
|
+
let sitemapDependenciesHelper;
|
|
122
|
+
let countryFormatPolicy;
|
|
123
|
+
beforeEach(() => {
|
|
124
|
+
sitemapDependenciesHelper = new SitemapDependencies();
|
|
125
|
+
sitemapDependenciesHelper.setProgrammeCount(10); // More than 7 programs
|
|
126
|
+
countryFormatPolicy = new CountryFormat(sitemapDependenciesHelper.dependencies);
|
|
127
|
+
CountryPresenter.getInstance = vi.fn().mockReturnValue({
|
|
128
|
+
getFragments: vi.fn().mockReturnValue([
|
|
129
|
+
{ id: '30', path: 'uk' },
|
|
130
|
+
{ id: '21', path: 'portugal' },
|
|
131
|
+
{ id: '56', path: 'usa' },
|
|
132
|
+
{ id: '82', path: 'netherlands' }
|
|
133
|
+
])
|
|
134
|
+
});
|
|
135
|
+
FormatPresenter.getInstance = vi.fn().mockReturnValue({
|
|
136
|
+
getFragments: vi.fn().mockReturnValue([
|
|
137
|
+
{ id: 'parttime', path: 'part-time-programmes' },
|
|
138
|
+
{ id: 'fulltime', path: 'full-time-programmes' }
|
|
139
|
+
])
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
afterEach(() => {
|
|
143
|
+
sitemapDependenciesHelper.resetMocks();
|
|
144
|
+
});
|
|
145
|
+
it('Should generate URLs for all valid country-format combinations', async () => {
|
|
146
|
+
// Mock the checkRulesForSitemap to only allow part-time format
|
|
147
|
+
const resultMap = new Map();
|
|
148
|
+
// Set rules to only allow part-time format (as per shouldIndex test)
|
|
149
|
+
for (const countryId of ['30', '21', '56', '82']) {
|
|
150
|
+
for (const formatId of ['parttime', 'fulltime']) {
|
|
151
|
+
const key = `${FilterKey.ATTENDANCE}:${formatId}|${FilterKey.COUNTRY}:${countryId}`;
|
|
152
|
+
resultMap.set(key, formatId === 'parttime');
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
|
|
156
|
+
// Call the method via reflection since it's protected
|
|
157
|
+
const urls = await countryFormatPolicy.generateUrls();
|
|
158
|
+
// Verify only part-time and full-time format is included (2 format * 4 countries * 1 pages = 8 URLs)
|
|
159
|
+
expect(urls).toHaveLength(8);
|
|
160
|
+
expect(urls).toContain('part-time-programmes/uk');
|
|
161
|
+
expect(urls).toContain('part-time-programmes/portugal');
|
|
162
|
+
expect(urls).toContain('part-time-programmes/usa');
|
|
163
|
+
expect(urls).toContain('part-time-programmes/netherlands');
|
|
164
|
+
expect(urls).toContain('full-time-programmes/uk');
|
|
165
|
+
expect(urls).toContain('full-time-programmes/portugal');
|
|
166
|
+
});
|
|
167
|
+
it('Should exclude certain country-format combinations', async () => {
|
|
168
|
+
// Mock to exclude UK combinations
|
|
169
|
+
const resultMap = new Map();
|
|
170
|
+
// Set up rules to exclude UK for all formats
|
|
171
|
+
for (const countryId of ['30', '21', '56', '82']) {
|
|
172
|
+
for (const formatId of ['parttime', 'fulltime']) {
|
|
173
|
+
const key = `${FilterKey.COUNTRY}:${countryId}|${FilterKey.ATTENDANCE}:${formatId}`;
|
|
174
|
+
// Exclude UK (30) and only allow part-time for others
|
|
175
|
+
resultMap.set(key, countryId !== '30' && formatId === 'parttime');
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
|
|
179
|
+
const urls = await countryFormatPolicy.generateUrls();
|
|
180
|
+
// Should include others but not UK (1 format * 3 countries * 2 pages = 6 URLs)
|
|
181
|
+
expect(urls).toHaveLength(3);
|
|
182
|
+
expect(urls).toContain('part-time-programmes/portugal');
|
|
183
|
+
expect(urls).toContain('part-time-programmes/usa');
|
|
184
|
+
expect(urls).toContain('part-time-programmes/netherlands');
|
|
185
|
+
expect(urls).not.toContain('part-time-programmes/uk');
|
|
186
|
+
expect(urls).not.toContain('full-time-programmes/uk');
|
|
187
|
+
});
|
|
188
|
+
it('Should exclude all URLs when all checks fail', async () => {
|
|
189
|
+
// Create a map that returns false for all combinations
|
|
190
|
+
const resultMap = new Map();
|
|
191
|
+
// Set all combinations to fail
|
|
192
|
+
for (const countryId of ['30', '21', '56', '82']) {
|
|
193
|
+
for (const formatId of ['parttime', 'fulltime']) {
|
|
194
|
+
const key = `${FilterKey.ATTENDANCE}:${formatId}|${FilterKey.COUNTRY}:${countryId}`;
|
|
195
|
+
resultMap.set(key, false);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap, false);
|
|
199
|
+
const urls = await countryFormatPolicy.generateUrls();
|
|
200
|
+
// Should include no URLs
|
|
201
|
+
expect(urls).toHaveLength(0);
|
|
202
|
+
});
|
|
203
|
+
it('Should handle empty fragments arrays', async () => {
|
|
204
|
+
// Mock the CountryPresenter to return empty fragments
|
|
205
|
+
CountryPresenter.getInstance.mockReturnValueOnce({
|
|
206
|
+
getFragments: vi.fn().mockReturnValue([])
|
|
207
|
+
});
|
|
208
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap();
|
|
209
|
+
const urls = await countryFormatPolicy.generateUrls();
|
|
210
|
+
// Should return empty array
|
|
211
|
+
expect(urls).toHaveLength(0);
|
|
212
|
+
});
|
|
213
|
+
it('Should handle large number of combinations efficiently', async () => {
|
|
214
|
+
// Generate a larger set of countries (20) and format types (3)
|
|
215
|
+
const largeCountrySet = Array.from({ length: 20 }, (_, index) => ({
|
|
216
|
+
id: `${1000 + index}`,
|
|
217
|
+
path: `country-${1000 + index}`
|
|
218
|
+
}));
|
|
219
|
+
const largeFormatSet = Array.from({ length: 3 }, (_, index) => ({
|
|
220
|
+
id: `format-${index}`,
|
|
221
|
+
path: `format-type-${index}`
|
|
222
|
+
}));
|
|
223
|
+
// Mock the presenters to return large sets
|
|
224
|
+
CountryPresenter.getInstance.mockReturnValueOnce({
|
|
225
|
+
getFragments: vi.fn().mockReturnValue(largeCountrySet)
|
|
226
|
+
});
|
|
227
|
+
FormatPresenter.getInstance.mockReturnValueOnce({
|
|
228
|
+
getFragments: vi.fn().mockReturnValue(largeFormatSet)
|
|
229
|
+
});
|
|
230
|
+
// Mock to allow only specific combinations
|
|
231
|
+
// Only allow countries divisible by 3, and format index 0 (part-time equivalent)
|
|
232
|
+
const resultMap = new Map();
|
|
233
|
+
for (let c = 0; c < largeCountrySet.length; c++) {
|
|
234
|
+
for (let f = 0; f < largeFormatSet.length; f++) {
|
|
235
|
+
const countryId = largeCountrySet[c].id;
|
|
236
|
+
const formatId = largeFormatSet[f].id;
|
|
237
|
+
const key = `${FilterKey.COUNTRY}:${countryId}|${FilterKey.ATTENDANCE}:${formatId}`;
|
|
238
|
+
// Only include countries where index is divisible by 3, and format index 0
|
|
239
|
+
resultMap.set(key, c % 3 === 0 && f === 0);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
sitemapDependenciesHelper.mockCheckRulesForSitemap(resultMap);
|
|
243
|
+
const urls = await countryFormatPolicy.generateUrls();
|
|
244
|
+
// Should generate 7 countries (20/3 rounded up) * 1 format type * 2 pages = 14 URLs
|
|
245
|
+
expect(urls).toHaveLength(7);
|
|
246
|
+
// Test some specific combinations
|
|
247
|
+
expect(urls).toContain('format-type-0/country-1000'); // First valid country, allowed format
|
|
248
|
+
expect(urls).toContain('format-type-0/country-1003'); // Another valid country, allowed format
|
|
249
|
+
expect(urls).not.toContain('format-type-0/country-1001'); // Invalid country (not divisible by 3)
|
|
250
|
+
expect(urls).not.toContain('format-type-1/country-1000'); // Valid country, but invalid format
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|