diff --git a/mydreamjob-server/src/main/java/com/mydreamjob/skill/repository/OccupationSkillRepository.java b/mydreamjob-server/src/main/java/com/mydreamjob/skill/repository/OccupationSkillRepository.java index 828fc02..d3c0de1 100644 --- a/mydreamjob-server/src/main/java/com/mydreamjob/skill/repository/OccupationSkillRepository.java +++ b/mydreamjob-server/src/main/java/com/mydreamjob/skill/repository/OccupationSkillRepository.java @@ -36,6 +36,7 @@ public interface OccupationSkillRepository extends JpaRepository findSkillProjectionsByOccupationId( @@ -62,6 +63,7 @@ public interface OccupationSkillRepository extends JpaRepository redisTemplate; @@ -115,6 +120,37 @@ class SkillTaxonomyRepositoryTest { .isEmpty(); } + @Test + @Transactional + void projectionQueriesRejectCrossOccupationCategoryMismatch() { + jdbcTemplate.update(""" + INSERT INTO occupation_skills ( + occupation_id, skill_id, category_id, importance, + importance_source_code, importance_element_id, + importance_is_proxy, relationship_type, source_version_id + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) + """, + 1L, 1L, 201L, new BigDecimal("4.61"), + "15-1252.00", "4.A.3.b.1", 1, "ESSENTIAL", 2L); + + List occupationOneSkills = + occupationSkillRepository.findSkillProjectionsByOccupationId(1L); + + assertThat(occupationOneSkills) + .extracting(SkillCloudSkillProjection::skillId) + .contains(3L) + .doesNotContain(1L); + + assertThat(occupationSkillRepository + .findSkillProjectionsByOccupationIdAndCategoryId(1L, 201L)) + .isEmpty(); + + assertThat(occupationSkillRepository + .findSkillProjectionsByOccupationIdAndCategoryId(2L, 201L)) + .extracting(SkillCloudSkillProjection::skillId) + .contains(1L); + } + @Test void projectionCarriesOnetProvenanceNullImportanceAndSortOrders() { SkillCloudSkillProjection react = occupationSkillRepository