"""Missing access metadata must never turn into empty or approved permissions."""
import hashlib
import importlib.util
import json
from pathlib import Path
import pytest
SPEC = importlib.util.spec_from_file_location(
'bubble_access_audit', Path(__file__).resolve().parents[1] / 'scripts/audit-bubble-access.py')
audit = importlib.util.module_from_spec(SPEC)
SPEC.loader.exec_module(audit)
def inputs():
return {'spaces': {'1x1': {'crew_list_user': ['LOOKUP__User__9x9'],
'members_list_user': [], 'isprivate_boolean': False}},
'articles': {'2x2': {'_owner_user': '9x9', 'Created By': 'unresolved'}},
'retained_spaces': {'1x1': {}, '3x3': {}}}
def test_aliases_collapse_but_no_grants_or_empty_missing_inference():
report = audit.audit(inputs())
assert report['source_principals'] == ['9x9']
fields = report['records']['spaces'][0]['fields']
assert fields['members_list_user']['state'] == 'empty'
assert fields['guests_list_user']['state'] == 'missing'
created_by = report['records']['articles'][0]['fields']['Created By']
assert created_by['state'] == 'unresolved_reference'
assert report['inventory_only_space_ids'] == ['3x3']
assert report['summary']['known_spaces'] == 2
assert report['summary']['target_grants_proposed'] == 0
assert report['summary']['target_identity_mappings_established'] == 0
assert '9x9' not in json.dumps(report['summary'])
@pytest.mark.parametrize('raw,expected', [(None, 'null'), ('9x9', 'invalid_container'),
([], 'empty'), ([{}], 'unresolved_reference'),
(['9x9', None], 'unresolved_reference')])
def test_field_states(raw, expected):
result = audit.field_state({'members_list_user': raw}, 'members_list_user', True)
assert result['state'] == expected
assert result['raw'] == raw
def test_private_html_escapes_source_and_disables_network():
data = inputs()
data['articles']['2x2']['Created By'] = ''
result = audit.review_html(audit.audit(data))
assert b'