test_provider.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import io
  2. import pytest
  3. from open_webui.storage import provider
  4. def mock_upload_dir(monkeypatch, tmp_path):
  5. """Fixture to monkey-patch the UPLOAD_DIR and create a temporary directory."""
  6. directory = tmp_path / "uploads"
  7. directory.mkdir()
  8. monkeypatch.setattr(provider, "UPLOAD_DIR", str(directory))
  9. return directory
  10. def test_imports():
  11. provider.StorageProvider
  12. provider.LocalStorageProvider
  13. provider.S3StorageProvider
  14. provider.Storage
  15. def test_get_storage_provider():
  16. Storage = provider.get_storage_provider("local")
  17. assert isinstance(Storage, provider.LocalStorageProvider)
  18. Storage = provider.get_storage_provider("s3")
  19. assert isinstance(Storage, provider.S3StorageProvider)
  20. with pytest.raises(RuntimeError):
  21. provider.get_storage_provider("invalid")
  22. def test_class_instantiation():
  23. with pytest.raises(TypeError):
  24. provider.StorageProvider()
  25. with pytest.raises(TypeError):
  26. class Test(provider.StorageProvider):
  27. pass
  28. Test()
  29. provider.LocalStorageProvider()
  30. provider.S3StorageProvider()
  31. class TestLocalStorageProvider(provider.LocalStorageProvider):
  32. file_content = b"test content"
  33. file_bytesio = io.BytesIO(file_content)
  34. filename = "test.txt"
  35. filename_extra = "test_exyta.txt"
  36. file_bytesio_empty = io.BytesIO()
  37. def test_upload_file(self, monkeypatch, tmp_path):
  38. upload_dir = mock_upload_dir(monkeypatch, tmp_path)
  39. contents, file_path = self.upload_file(self.file_bytesio, self.filename)
  40. assert (upload_dir / self.filename).exists()
  41. assert (upload_dir / self.filename).read_bytes() == self.file_content
  42. assert contents == self.file_content
  43. assert file_path == str(upload_dir / self.filename)
  44. with pytest.raises(ValueError):
  45. self.upload_file(self.file_bytesio_empty, self.filename)
  46. def test_get_file(self, monkeypatch, tmp_path):
  47. upload_dir = mock_upload_dir(monkeypatch, tmp_path)
  48. file_path = str(upload_dir / self.filename)
  49. file_path_return = self.get_file(file_path)
  50. assert file_path == file_path_return
  51. def test_delete_file(self, monkeypatch, tmp_path):
  52. upload_dir = mock_upload_dir(monkeypatch, tmp_path)
  53. (upload_dir / self.filename).write_bytes(self.file_content)
  54. assert (upload_dir / self.filename).exists()
  55. file_path = str(upload_dir / self.filename)
  56. self.delete_file(file_path)
  57. assert not (upload_dir / self.filename).exists()
  58. def test_delete_all_files(self, monkeypatch, tmp_path):
  59. upload_dir = mock_upload_dir(monkeypatch, tmp_path)
  60. (upload_dir / self.filename).write_bytes(self.file_content)
  61. (upload_dir / self.filename_extra).write_bytes(self.file_content)
  62. self.delete_all_files()
  63. assert not (upload_dir / self.filename).exists()
  64. assert not (upload_dir / self.filename_extra).exists()
  65. class TestS3StorageProvider(provider.S3StorageProvider):
  66. file_content = b"test content"
  67. file_bytesio = io.BytesIO(file_content)
  68. filename = "test.txt"
  69. filename_extra = "test_extra.txt"
  70. file_bytesio_empty = io.BytesIO()
  71. bucket_name = "my-bucket"
  72. def test_upload_file(self, monkeypatch, tmp_path):
  73. upload_dir = mock_upload_dir(monkeypatch, tmp_path)
  74. contents, file_path = self.upload_file(self.file_bytesio, self.filename)
  75. assert (upload_dir / self.filename).exists()
  76. assert (upload_dir / self.filename).read_bytes() == self.file_content
  77. assert contents == self.file_content
  78. assert file_path == str(upload_dir / self.filename)
  79. with pytest.raises(ValueError):
  80. self.upload_file(self.file_bytesio_empty, self.filename)
  81. def test_get_file(self):
  82. pass
  83. def test_delete_file(self):
  84. pass
  85. def test_delete_all_files(self):
  86. pass