Code / services/cj_assessment_service/tests/unit/test_comparison_request_normalizer.py

services/cj_assessment_service/tests/unit/test_comparison_request_normalizer.py

View this file on Codeberg


  1
  """Unit tests for ComparisonRequestNormalizer batch config handling."""


  2
  


  3
  from __future__ import annotations


  4
  


  5
  import pytest


  6
  from pydantic import ValidationError


  7
  


  8
  from common_core import CourseCode


  9
  from services.cj_assessment_service.cj_core_logic.comparison_request_normalizer import (


  10
      ComparisonRequestNormalizer,


  11
  )


  12
  from services.cj_assessment_service.config import Settings


  13
  from services.cj_assessment_service.models_api import CJAssessmentRequestData, EssayToProcess


  14
  


  15
  


  16
  class TestComparisonRequestNormalizerBatchConfig:


  17
      """Tests for mapping batch_config_overrides into typed overrides."""


  18
  


  19
      def test_retired_batching_mode_override_fails_validation(self) -> None:


  20
          """CJ rejects the retired provider-execution override."""


  21
  


  22
          settings = Settings()


  23
          normalizer = ComparisonRequestNormalizer(settings=settings)


  24
  


  25
          request_data = CJAssessmentRequestData(


  26
              bos_batch_id="bos-batch-123",


  27
              assignment_id="assignment-123",


  28
              essays_to_process=[


  29
                  EssayToProcess(els_essay_id="essay-1", text_storage_id="storage-1"),


  30
              ],


  31
              language="en",


  32
              course_code=CourseCode.ENG5.value,


  33
              cj_source="els",


  34
              cj_request_type="cj_comparison",


  35
              student_prompt_text=None,


  36
              student_prompt_storage_id=None,


  37
              judge_rubric_text=None,


  38
              judge_rubric_storage_id=None,


  39
              llm_config_overrides=None,


  40
              batch_config_overrides={"llm_batching_mode_override": "provider_batch_api"},


  41
              max_comparisons_override=None,


  42
              user_id="user-123",


  43
              org_id="org-123",


  44
          )


  45
  


  46
          with pytest.raises(ValidationError):


  47
              normalizer.normalize(request_data)


  48
  


  49
      def test_unknown_batch_config_override_fails_validation(self) -> None:


  50
          """Unknown batch configuration keys fail before orchestration."""


  51
  


  52
          settings = Settings()


  53
          normalizer = ComparisonRequestNormalizer(settings=settings)


  54
  


  55
          request_data = CJAssessmentRequestData(


  56
              bos_batch_id="bos-batch-123",


  57
              assignment_id="assignment-123",


  58
              essays_to_process=[


  59
                  EssayToProcess(els_essay_id="essay-1", text_storage_id="storage-1"),


  60
              ],


  61
              language="en",


  62
              course_code=CourseCode.ENG5.value,


  63
              cj_source="els",


  64
              cj_request_type="cj_comparison",


  65
              batch_config_overrides={"unsupported_override": "value"},


  66
              user_id="user-123",


  67
              org_id="org-123",


  68
          )


  69
  


  70
          with pytest.raises(ValidationError):


  71
              normalizer.normalize(request_data)