"""Test helpers.""" import base64 import json from src.events.neo4j_v5.base import Operation as Neo4jV5Operation def neo4j_v5_cdc_node_event(operation, labels, before, after): """Package extracted and decoded V5 event.""" data = { 'txId': 12345, 'metadata': { 'executingUser': 'graphql', 'serverId': 'c8a08cf4', 'captureMode': 'FULL', 'txStartTime': { 'B': None, 'I64': None, 'TZDT': '2025-01-23T05:55:27.535Z', }, 'txCommitTime': { 'B': None, 'I64': None, 'TZDT': '2025-01-23T05:55:28.075Z', }, }, 'event': { 'eventType': 'node', 'operation': operation, 'labels': labels, 'keys': {}, 'state': { 'after': None, 'before': None } } } if operation in (Neo4jV5Operation.DELETED.value, Neo4jV5Operation.UPDATED.value): # noqa:E501 data['event']['state']['before'] = { 'properties': before, 'labels': labels } if operation in (Neo4jV5Operation.CREATED.value, Neo4jV5Operation.UPDATED.value): # noqa:E501 data['event']['state']['after'] = { 'properties': after, 'labels': labels } return data def neo4j_v5_cdc_rel_event( operation, rel_type, start_labels, start_keys, end_labels, end_keys): """Package extracted and decoded V5 rel event.""" return { 'txId': 12345, 'metadata': { 'executingUser': 'graphql', 'serverId': 'c8a08cf4', 'captureMode': 'FULL', 'txStartTime': { 'B': None, 'I64': None, 'TZDT': '2025-01-23T05:55:27.535Z', }, 'txCommitTime': { 'B': None, 'I64': None, 'TZDT': '2025-01-23T05:55:28.075Z', }, }, 'event': { 'eventType': 'RELATIONSHIP', 'operation': operation, 'type': rel_type, 'keys': {}, 'start': { 'labels': start_labels, 'keys': start_keys }, 'end': { 'labels': end_labels, 'keys': end_keys }, 'state': { 'after': {'properties': {}}, 'before': {'properties': {}} } } } def msk_event(topic, value): """Create records in MSK-Lambda connector format.""" result = { 'bootstrapServers': 'kafka-servers', 'eventSource': 'aws:kafka', 'eventSourceArn': 'arn:aws:kafka:us-east-1:437795906767:cluster/cdc/uuid', # noqa:E501 'records': { f'{topic}-0': [ { 'headers': [], 'key': 'key-123', 'offset': 1, 'partition': 0, 'timestamp': 1634921120616, 'timestampType': 'CREATE_TIME', 'topic': topic, } ] } } if value: result['records'][f'{topic}-0'][0]['value'] = base64.b64encode(json.dumps(value).encode('utf-8')).decode('utf-8') # noqa:E501 return result