test_documents.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from test.util.abstract_integration_test import AbstractPostgresTest
  2. from test.util.mock_user import mock_webui_user
  3. class TestDocuments(AbstractPostgresTest):
  4. BASE_PATH = "/api/v1/documents"
  5. def setup_class(cls):
  6. super().setup_class()
  7. from open_webui.apps.webui.models.documents import Documents
  8. cls.documents = Documents
  9. def test_documents(self):
  10. # Empty database
  11. assert len(self.documents.get_docs()) == 0
  12. with mock_webui_user(id="2"):
  13. response = self.fast_api_client.get(self.create_url("/"))
  14. assert response.status_code == 200
  15. assert len(response.json()) == 0
  16. # Create a new document
  17. with mock_webui_user(id="2"):
  18. response = self.fast_api_client.post(
  19. self.create_url("/create"),
  20. json={
  21. "name": "doc_name",
  22. "title": "doc title",
  23. "collection_name": "custom collection",
  24. "filename": "doc_name.pdf",
  25. "content": "",
  26. },
  27. )
  28. assert response.status_code == 200
  29. assert response.json()["name"] == "doc_name"
  30. assert len(self.documents.get_docs()) == 1
  31. # Get the document
  32. with mock_webui_user(id="2"):
  33. response = self.fast_api_client.get(self.create_url("/doc?name=doc_name"))
  34. assert response.status_code == 200
  35. data = response.json()
  36. assert data["collection_name"] == "custom collection"
  37. assert data["name"] == "doc_name"
  38. assert data["title"] == "doc title"
  39. assert data["filename"] == "doc_name.pdf"
  40. assert data["content"] == {}
  41. # Create another document
  42. with mock_webui_user(id="2"):
  43. response = self.fast_api_client.post(
  44. self.create_url("/create"),
  45. json={
  46. "name": "doc_name 2",
  47. "title": "doc title 2",
  48. "collection_name": "custom collection 2",
  49. "filename": "doc_name2.pdf",
  50. "content": "",
  51. },
  52. )
  53. assert response.status_code == 200
  54. assert response.json()["name"] == "doc_name 2"
  55. assert len(self.documents.get_docs()) == 2
  56. # Get all documents
  57. with mock_webui_user(id="2"):
  58. response = self.fast_api_client.get(self.create_url("/"))
  59. assert response.status_code == 200
  60. assert len(response.json()) == 2
  61. # Update the first document
  62. with mock_webui_user(id="2"):
  63. response = self.fast_api_client.post(
  64. self.create_url("/doc/update?name=doc_name"),
  65. json={"name": "doc_name rework", "title": "updated title"},
  66. )
  67. assert response.status_code == 200
  68. data = response.json()
  69. assert data["name"] == "doc_name rework"
  70. assert data["title"] == "updated title"
  71. # Tag the first document
  72. with mock_webui_user(id="2"):
  73. response = self.fast_api_client.post(
  74. self.create_url("/doc/tags"),
  75. json={
  76. "name": "doc_name rework",
  77. "tags": [{"name": "testing-tag"}, {"name": "another-tag"}],
  78. },
  79. )
  80. assert response.status_code == 200
  81. data = response.json()
  82. assert data["name"] == "doc_name rework"
  83. assert data["content"] == {
  84. "tags": [{"name": "testing-tag"}, {"name": "another-tag"}]
  85. }
  86. assert len(self.documents.get_docs()) == 2
  87. # Delete the first document
  88. with mock_webui_user(id="2"):
  89. response = self.fast_api_client.delete(
  90. self.create_url("/doc/delete?name=doc_name rework")
  91. )
  92. assert response.status_code == 200
  93. assert len(self.documents.get_docs()) == 1