backup: uncommitted changes from MAC-M9FQ0900T3 2026-05-17 15:52:31
This commit is contained in:
@@ -18,6 +18,7 @@ def test_frame_produces_correct_header():
|
||||
@pytest.fixture(autouse=True)
|
||||
def reset_modules():
|
||||
BicepModuleCatalog._modules = []
|
||||
BicepModuleCatalog._principals = {}
|
||||
yield
|
||||
|
||||
|
||||
@@ -386,6 +387,111 @@ def test_param_value_injected_in_completion_response():
|
||||
assert labels == ["DEV", "TEST", "PROD"]
|
||||
|
||||
|
||||
# ── Array item completion tests ────────────────────────────────────────────────
|
||||
|
||||
def test_detect_param_array_item_context():
|
||||
"""Cursor inside [...] for an array param → param_array_item context."""
|
||||
lines = [
|
||||
"module keyVault 'br/modules:modules/keyvault:2.1.x' = {",
|
||||
" params: {",
|
||||
" additionalAccess: ['", # ← cursor after opening quote inside array
|
||||
" }",
|
||||
"}",
|
||||
]
|
||||
session = _make_session_with_doc(URI, lines)
|
||||
# character 24 = after the `'` (4 spaces + 16 "additionalAccess" + 2 ": " + 1 "[" + 1 "'" = 24)
|
||||
ctx = session._detect_context(URI, {"line": 2, "character": 24})
|
||||
assert ctx["type"] == "param_array_item"
|
||||
assert ctx["module"] == "modules/keyvault"
|
||||
assert ctx["param"] == "additionalAccess"
|
||||
assert ctx["has_open_quote"] is True
|
||||
|
||||
|
||||
def test_detect_param_array_item_context_no_quote():
|
||||
"""Cursor at start of empty array → param_array_item, no open quote."""
|
||||
lines = [
|
||||
"module keyVault 'br/modules:modules/keyvault:2.1.x' = {",
|
||||
" params: {",
|
||||
" additionalAccess: [", # ← cursor after [
|
||||
" }",
|
||||
"}",
|
||||
]
|
||||
session = _make_session_with_doc(URI, lines)
|
||||
ctx = session._detect_context(URI, {"line": 2, "character": 23})
|
||||
assert ctx["type"] == "param_array_item"
|
||||
assert ctx["has_open_quote"] is False
|
||||
|
||||
|
||||
def test_detect_param_array_item_context_after_existing_item():
|
||||
"""Cursor after an existing item inside array → still param_array_item."""
|
||||
lines = [
|
||||
"module keyVault 'br/modules:modules/keyvault:2.1.x' = {",
|
||||
" params: {",
|
||||
" additionalAccess: ['c88bf29d-b13a-4153-9738-8995085a451e', '",
|
||||
" }",
|
||||
"}",
|
||||
]
|
||||
session = _make_session_with_doc(URI, lines)
|
||||
char = len(" additionalAccess: ['c88bf29d-b13a-4153-9738-8995085a451e', '")
|
||||
ctx = session._detect_context(URI, {"line": 2, "character": char})
|
||||
assert ctx["type"] == "param_array_item"
|
||||
assert ctx["has_open_quote"] is True
|
||||
|
||||
|
||||
def test_param_array_item_completion_items():
|
||||
"""param_array_item_completion_items returns entries from principals catalog."""
|
||||
BicepModuleCatalog._principals = {
|
||||
"additionalAccess": [
|
||||
{"id": "aaaa-bbbb", "label": "My-SP", "description": "Test SP"},
|
||||
]
|
||||
}
|
||||
items = BicepModuleCatalog.param_array_item_completion_items(
|
||||
"modules/keyvault", "2.1.x", "additionalAccess"
|
||||
)
|
||||
assert len(items) == 1
|
||||
assert items[0]["label"] == "My-SP"
|
||||
assert items[0]["detail"] == "aaaa-bbbb"
|
||||
assert items[0]["insertText"] == "'aaaa-bbbb'"
|
||||
|
||||
|
||||
def test_param_array_item_completion_items_open_quote():
|
||||
BicepModuleCatalog._principals = {
|
||||
"additionalAccess": [{"id": "aaaa-bbbb", "label": "My-SP"}]
|
||||
}
|
||||
items = BicepModuleCatalog.param_array_item_completion_items(
|
||||
"modules/keyvault", "2.1.x", "additionalAccess", has_open_quote=True
|
||||
)
|
||||
assert items[0]["insertText"] == "aaaa-bbbb'"
|
||||
|
||||
|
||||
def test_param_array_item_empty_when_no_catalog_entry():
|
||||
BicepModuleCatalog._principals = {}
|
||||
items = BicepModuleCatalog.param_array_item_completion_items(
|
||||
"modules/keyvault", "2.1.x", "additionalAccess"
|
||||
)
|
||||
assert items == []
|
||||
|
||||
|
||||
def test_param_array_item_injected_in_completion_response():
|
||||
"""Full pipeline: param_array_item context injects principal completions."""
|
||||
BicepModuleCatalog._principals = {
|
||||
"additionalAccess": [{"id": "aaaa-1111", "label": "IaC-SP", "description": "Pipeline SP"}]
|
||||
}
|
||||
msg = _completion_response([{"label": "noise", "sortText": "z"}])
|
||||
ctx = {
|
||||
"type": "param_array_item",
|
||||
"module": "modules/keyvault",
|
||||
"version": "2.1.x",
|
||||
"param": "additionalAccess",
|
||||
"has_open_quote": False,
|
||||
}
|
||||
out = json.loads(_inject_completions(msg, ctx))
|
||||
items = out["result"]["items"]
|
||||
assert len(items) == 1
|
||||
assert items[0]["label"] == "IaC-SP"
|
||||
assert items[0]["detail"] == "aaaa-1111"
|
||||
|
||||
|
||||
def test_detect_unknown_context_outside_module():
|
||||
lines = ["var x = 'hello'"]
|
||||
session = _make_session_with_doc(URI, lines)
|
||||
|
||||
Reference in New Issue
Block a user