import contextlib import io import unittest from unittest.mock import MagicMock, patch from scripts.sync_fio_to_sheets import COLUMN_LABELS, as_text_cell, sync_to_sheets class TestAsTextCell(unittest.TestCase): def test_digits_get_text_marker(self): self.assertEqual(as_text_cell("0308"), "'0308") self.assertEqual(as_text_cell(123), "'123") def test_empty_stays_empty(self): self.assertEqual(as_text_cell(""), "") self.assertEqual(as_text_cell(None), "") class TestSyncWritesVSAsText(unittest.TestCase): def test_appended_row_has_text_vs(self): service = MagicMock() sheet = service.spreadsheets.return_value sheet.values.return_value.get.return_value.execute.return_value = {"values": [COLUMN_LABELS]} tx = {"date": "2026-04-10", "amount": 750.0, "sender": "Test Sender", "vs": "0308", "message": "fee", "bank_id": "111"} with patch("scripts.sync_fio_to_sheets.get_sheets_service", return_value=service), \ patch("scripts.sync_fio_to_sheets.fetch_transactions_all", return_value=[tx]), \ contextlib.redirect_stdout(io.StringIO()): sync_to_sheets("sheet-id", "creds.json", days=30) body = sheet.values.return_value.append.call_args.kwargs["body"] self.assertEqual(len(body["values"]), 1) self.assertEqual(body["values"][0][7], "'0308")