mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-25 13:13:48 +01:00 
			
		
		
		
	Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: J. Nick Koston <nick@koston.org>
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import os
 | |
| from pathlib import Path
 | |
| from unittest.mock import patch
 | |
| 
 | |
| import py
 | |
| import pytest
 | |
| 
 | |
| from esphome.dashboard.util.file import write_file, write_utf8_file
 | |
| 
 | |
| 
 | |
| def test_write_utf8_file(tmp_path: Path) -> None:
 | |
|     write_utf8_file(tmp_path.joinpath("foo.txt"), "foo")
 | |
|     assert tmp_path.joinpath("foo.txt").read_text() == "foo"
 | |
| 
 | |
|     with pytest.raises(OSError):
 | |
|         write_utf8_file(Path("/dev/not-writable"), "bar")
 | |
| 
 | |
| 
 | |
| def test_write_file(tmp_path: Path) -> None:
 | |
|     write_file(tmp_path.joinpath("foo.txt"), b"foo")
 | |
|     assert tmp_path.joinpath("foo.txt").read_text() == "foo"
 | |
| 
 | |
| 
 | |
| def test_write_utf8_file_fails_at_rename(
 | |
|     tmpdir: py.path.local, caplog: pytest.LogCaptureFixture
 | |
| ) -> None:
 | |
|     """Test that if rename fails not not remove, we do not log the failed cleanup."""
 | |
|     test_dir = tmpdir.mkdir("files")
 | |
|     test_file = Path(test_dir / "test.json")
 | |
| 
 | |
|     with (
 | |
|         pytest.raises(OSError),
 | |
|         patch("esphome.dashboard.util.file.os.replace", side_effect=OSError),
 | |
|     ):
 | |
|         write_utf8_file(test_file, '{"some":"data"}', False)
 | |
| 
 | |
|     assert not os.path.exists(test_file)
 | |
| 
 | |
|     assert "File replacement cleanup failed" not in caplog.text
 | |
| 
 | |
| 
 | |
| def test_write_utf8_file_fails_at_rename_and_remove(
 | |
|     tmpdir: py.path.local, caplog: pytest.LogCaptureFixture
 | |
| ) -> None:
 | |
|     """Test that if rename and remove both fail, we log the failed cleanup."""
 | |
|     test_dir = tmpdir.mkdir("files")
 | |
|     test_file = Path(test_dir / "test.json")
 | |
| 
 | |
|     with (
 | |
|         pytest.raises(OSError),
 | |
|         patch("esphome.dashboard.util.file.os.remove", side_effect=OSError),
 | |
|         patch("esphome.dashboard.util.file.os.replace", side_effect=OSError),
 | |
|     ):
 | |
|         write_utf8_file(test_file, '{"some":"data"}', False)
 | |
| 
 | |
|     assert "File replacement cleanup failed" in caplog.text
 |