Files
GTI_GERENCIADOR_FISCAL/fiscal/central/tests/test_questionnaire.py
T
gti d21a9d1140 Add 'fiscal/' from commit '102ba84500dbd9655a0471288c3e278652593ca9'
git-subtree-dir: fiscal
git-subtree-mainline: d95165fc8f
git-subtree-split: 102ba84500
2026-09-29 14:43:23 -03:00

62 lines
3.0 KiB
Python

import json
import pytest
from central.app.ai.questionnaire import build_questionnaire, group_questions, validate_answers
def test_questionnaire_groups_by_scope_and_preserves_effects():
rows = [
{"QUESTION_ID": "Q1", "DATABASE": "ACME", "SCOPE": "COMPANY", "GROUP": "", "KEY": "entry_scope",
"VALID_OPTIONS": ["INTRA", "INTER", "MIXED_OR_DYNAMIC"], "PRODUCTS_AFFECTED": 2, "CELLS": 3,
"QUESTION": "Escopo?", "EXAMPLES": "P1; P2"},
{"QUESTION_ID": "Q2", "DATABASE": "ACME", "SCOPE": "GROUP", "GROUP": "G1", "KEY": "product_role",
"VALID_OPTIONS": ["RESALE"], "PRODUCTS_AFFECTED": 1, "CELLS": 1, "QUESTION": "Papel?"},
]
result = build_questionnaire(rows)
assert [item["question_id"] for item in result] == ["Q1", "Q2"]
assert result[0]["affected"] == {"products": 2, "cells": 3}
assert "MIXED_OR_DYNAMIC" in result[0]["options"]
assert result[1]["scope_key"] == "G1"
def test_answers_are_validated_without_persisting_and_mixed_scope_is_explicit():
questions = build_questionnaire([{
"QUESTION_ID": "Q1", "DATABASE": "ACME", "SCOPE": "COMPANY", "GROUP": "", "KEY": "entry_scope",
"VALID_OPTIONS": ["INTRA", "INTER", "MIXED_OR_DYNAMIC"], "QUESTION": "Escopo?",
}])
answers = validate_answers(questions, {"Q1": "MIXED_OR_DYNAMIC"})
assert answers["entries"] == [{"scope": "COMPANY", "scope_key": "", "key": "entry_scope", "value": "MIXED_OR_DYNAMIC", "reason": None, "company_key": "ACME"}]
assert answers["effects"][0]["behavior"] == "no_static_cfop_entrada"
with pytest.raises(ValueError, match="nothing was persisted"):
validate_answers(questions, {"Q1": "OUTSIDE"})
def test_store_ipi_profile_requires_explicit_choice_and_only_plans_rollback():
questions = build_questionnaire([{
"QUESTION_ID": "QIPI-ACME", "DATABASE": "ACME", "SCOPE": "COMPANY", "GROUP": "", "KEY": "store_ipi_profile",
"VALID_OPTIONS": ["POPULATE_REFERENCE_RATE", "LEAVE_NOT_APPLICABLE"], "QUESTION": "IPI?",
"PRODUCTS_AFFECTED": 4, "CELLS": 4,
}])
result = validate_answers(questions, {"QIPI-ACME": "LEAVE_NOT_APPLICABLE"})
assert result["entries"][0]["value"] == "LEAVE_NOT_APPLICABLE"
assert result["rollback_plan"] == [{"database": "ACME", "field": "IPI", "affected_cells": 4}]
assert json.dumps(result)
def test_equivalent_questions_are_grouped_with_aggregated_impact():
questions = build_questionnaire([
{"QUESTION_ID": "Q1", "DATABASE": "ACME", "SCOPE": "GROUP", "GROUP": "REFRIGERANTES", "KEY": "product_role", "VALID_OPTIONS": ["RESALE"], "CELLS": 10, "PRODUCTS_AFFECTED": 3, "QUESTION": "Qual o papel?"},
{"QUESTION_ID": "Q2", "DATABASE": "ACME", "SCOPE": "GROUP", "GROUP": "REFRIGERANTES", "KEY": "product_role", "VALID_OPTIONS": ["RESALE"], "CELLS": 20, "PRODUCTS_AFFECTED": 5, "QUESTION": "Qual o papel?"},
])
groups = group_questions(questions)
assert len(groups) == 1 and groups[0]["question_ids"] == ["Q1", "Q2"]
assert groups[0]["affected"] == {"products": 8, "cells": 30}