from sftp_transfer import ( SFTPConfig, SFTPTransferManager, resolve_password_interactive, ) def test_resolve_password_existing(): assert resolve_password_interactive("secret") == "secret" def test_resolve_password_prompt(monkeypatch, tmp_path): # Simulate interactive environment monkeypatch.setenv("SFTP_PROMPT_PASSWORD", "True") monkeypatch.setenv("ENVIRONMENT", "DEV") # Provide fake getpass # Monkeypatch getpass.getpass import getpass monkeypatch.setattr(getpass, "getpass", lambda prompt="": "typed") # Simulate TTY by monkeypatching isatty monkeypatch.setattr("sys.stdin.isatty", lambda: True) monkeypatch.setattr("sys.stdout.isatty", lambda: True) assert resolve_password_interactive(None) == "typed" def test_resolve_password_noninteractive(monkeypatch): monkeypatch.setenv("SFTP_PROMPT_PASSWORD", "True") monkeypatch.setenv("ENVIRONMENT", "DEV") monkeypatch.setattr("sys.stdin.isatty", lambda: False) monkeypatch.setattr("sys.stdout.isatty", lambda: False) assert resolve_password_interactive(None) is None def test_mock_mode_upload(monkeypatch, tmp_path): # Enable mock mode so connect() does not use paramiko. monkeypatch.setenv("SFTP_MOCK", "True") cfg = SFTPConfig(host="h", username="u", password="pw", remote_dir="r") mgr = SFTPTransferManager(cfg) mgr.connect() # Create a dummy file to "upload" f = tmp_path / "demo.txt" f.write_text("data") res = mgr.upload_files([f]) assert res.uploaded == 1 assert res.failed == [] mgr.close()