nte-exporter/tests/test_achievement.py
2026-08-19 13:00:09 +01:00

37 lines
1.5 KiB
Python

import struct
import unittest
from nte_history_exporter.decoder.achievement import (
ACHIEVEMENT_RECORD_MARKER,
extract_achievement_ids,
extract_achievement_records,
reassemble_tcp_segments,
)
class AchievementPacketTests(unittest.TestCase):
def test_extracts_only_completed_achievements(self):
header = ACHIEVEMENT_RECORD_MARKER + b"\0" * 4 + struct.pack("<I", 2) + b"\0" * 12
completed = b"\x0a\0\0\0Battle_30\0" + b"\0" * 8 + struct.pack("<Q", 1)
incomplete = b"\x13\0\0\0Playstation_035\0" + b"\0" * 16
decoded = header + completed + incomplete
extension = len(decoded) - 15
compressed = b"\xf0" + bytes([extension]) + decoded
frame = struct.pack("<I", 0) + b"\0" * 8 + struct.pack("<I", len(compressed)) + compressed
stream = struct.pack("<I", len(frame)) + frame
self.assertEqual(extract_achievement_ids(stream), ["Battle_30"])
self.assertEqual(extract_achievement_ids(b"\x01\0\0\0\0"), [])
records = extract_achievement_records(stream)
self.assertEqual(len(records), 2)
self.assertEqual(records[0].achievement_id, "Battle_30")
self.assertTrue(records[0].completed)
self.assertEqual(records[1].achievement_id, "Playstation_035")
self.assertEqual(records[1].status, "in_progress")
def test_reassembles_tcp_data(self):
self.assertEqual(
reassemble_tcp_segments([(104, b"bar"), (100, b"foobar"), (100, b"foobar")]),
b"foobarr",
)