"""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'