"""Tests for macros_store: record/save/cancel/list/delete + control-phrase filter.""" def test_is_macro_control_filters_record_phrases(isolated_state): m = isolated_state('macros_store', ['_PATH']) assert m._is_control("Запиши макрос работа") assert m._is_control("сохрани макрос") assert m._is_control("запусти макрос работа") assert m._is_control("Удали макрос работа") # Regular commands NOT filtered assert not m._is_control("открой браузер") assert not m._is_control("установи громкость 50") def test_start_save_round_trip(isolated_state): m = isolated_state('macros_store', ['_PATH']) m.start("test") assert m.is_recording() assert m.recording_name() == 'test' m.record_step("открой браузер") m.record_step("режим работа") m.record_step("установи громкость 30") # Control phrase should be filtered m.record_step("запиши макрос новый") count = m.save() assert count == 3 # 3 + 1 filtered = 3 assert not m.is_recording() mac = m.get('test') assert mac is not None assert mac['steps'] == [ 'открой браузер', 'режим работа', 'установи громкость 30', ] def test_save_without_recording_raises(isolated_state): import pytest m = isolated_state('macros_store', ['_PATH']) with pytest.raises(RuntimeError): m.save() def test_save_empty_recording_raises(isolated_state): import pytest m = isolated_state('macros_store', ['_PATH']) m.start("empty") with pytest.raises(RuntimeError): m.save() def test_cancel_aborts_without_saving(isolated_state): m = isolated_state('macros_store', ['_PATH']) m.start("test") m.record_step("foo") assert m.cancel() is True assert not m.is_recording() assert m.get('test') is None def test_delete(isolated_state): m = isolated_state('macros_store', ['_PATH']) m.start("test") m.record_step("x") m.save() assert m.delete("test") is True assert m.get('test') is None assert m.delete("test") is False # idempotent def test_list_names_sorted(isolated_state): m = isolated_state('macros_store', ['_PATH']) for name in ('zeta', 'alpha', 'beta'): m.start(name) m.record_step("step") m.save() assert m.list_names() == ['alpha', 'beta', 'zeta'] def test_replay_unknown_raises(isolated_state): import pytest m = isolated_state('macros_store', ['_PATH']) with pytest.raises(KeyError): m.replay("nonexistent", lambda s: None)