mirror of
https://github.com/tcsenpai/pensieve.git
synced 2025-06-10 13:07:15 +00:00
test: dry
This commit is contained in:
parent
354bf4f742
commit
9d6977ac4f
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"data_type": "attribute",
|
||||||
|
"entity_id": 1,
|
||||||
|
"id": 1,
|
||||||
|
"key": "author",
|
||||||
|
"source": "plugin_generated",
|
||||||
|
"value": "John Doe"
|
||||||
|
}
|
31
memos/fixtures/patch_entity_metadata_response.json
Normal file
31
memos/fixtures/patch_entity_metadata_response.json
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"file_created_at": "2023-01-01T00:00:00",
|
||||||
|
"file_last_modified_at": "2023-01-01T00:00:00",
|
||||||
|
"file_type": "text/plain",
|
||||||
|
"filename": "metadata_test_file.txt",
|
||||||
|
"filepath": "/tmp/metadata_folder/metadata_test_file.txt",
|
||||||
|
"folder_id": 1,
|
||||||
|
"id": 1,
|
||||||
|
"last_scan_at": null,
|
||||||
|
"library_id": 1,
|
||||||
|
"metadata_entries": [
|
||||||
|
{
|
||||||
|
"data_type": "attribute",
|
||||||
|
"entity_id": 1,
|
||||||
|
"id": 1,
|
||||||
|
"key": "author",
|
||||||
|
"source": "user_generated",
|
||||||
|
"value": "Jane Smith"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data_type": "attribute",
|
||||||
|
"entity_id": 1,
|
||||||
|
"id": 2,
|
||||||
|
"key": "year",
|
||||||
|
"source": "user_generated",
|
||||||
|
"value": "2023"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"size": 5678,
|
||||||
|
"tags": []
|
||||||
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
import json
|
||||||
|
import os
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from fastapi.testclient import TestClient
|
from fastapi.testclient import TestClient
|
||||||
@ -9,7 +11,6 @@ from pathlib import Path
|
|||||||
|
|
||||||
from memos.server import app, get_db
|
from memos.server import app, get_db
|
||||||
from memos.schemas import (
|
from memos.schemas import (
|
||||||
Library,
|
|
||||||
NewPluginParam,
|
NewPluginParam,
|
||||||
NewLibraryParam,
|
NewLibraryParam,
|
||||||
NewEntityParam,
|
NewEntityParam,
|
||||||
@ -30,6 +31,47 @@ engine = create_engine(
|
|||||||
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
||||||
|
|
||||||
|
|
||||||
|
def load_fixture(filename):
|
||||||
|
with open(Path(__file__).parent / "fixtures" / filename, "r") as file:
|
||||||
|
return json.load(file)
|
||||||
|
|
||||||
|
|
||||||
|
def setup_library_with_entity(client):
|
||||||
|
# Create a new library
|
||||||
|
new_library = NewLibraryParam(name="Test Library for Metadata")
|
||||||
|
library_response = client.post(
|
||||||
|
"/libraries", json=new_library.model_dump(mode="json")
|
||||||
|
)
|
||||||
|
assert library_response.status_code == 200
|
||||||
|
library_id = library_response.json()["id"]
|
||||||
|
|
||||||
|
# Create a new folder in the library
|
||||||
|
new_folder = NewFolderParam(path="/tmp")
|
||||||
|
folder_response = client.post(
|
||||||
|
f"/libraries/{library_id}/folders", json=new_folder.model_dump(mode="json")
|
||||||
|
)
|
||||||
|
assert folder_response.status_code == 200
|
||||||
|
folder_id = folder_response.json()["id"]
|
||||||
|
|
||||||
|
# Create a new entity in the folder
|
||||||
|
new_entity = NewEntityParam(
|
||||||
|
filename="metadata_test_file.txt",
|
||||||
|
filepath="/tmp/metadata_folder/metadata_test_file.txt",
|
||||||
|
size=5678,
|
||||||
|
file_created_at="2023-01-01T00:00:00",
|
||||||
|
file_last_modified_at="2023-01-01T00:00:00",
|
||||||
|
file_type="text/plain",
|
||||||
|
folder_id=folder_id,
|
||||||
|
)
|
||||||
|
entity_response = client.post(
|
||||||
|
f"/libraries/{library_id}/entities", json=new_entity.model_dump(mode="json")
|
||||||
|
)
|
||||||
|
assert entity_response.status_code == 200
|
||||||
|
entity_id = entity_response.json()["id"]
|
||||||
|
|
||||||
|
return library_id, folder_id, entity_id
|
||||||
|
|
||||||
|
|
||||||
def override_get_db():
|
def override_get_db():
|
||||||
try:
|
try:
|
||||||
db = TestingSessionLocal()
|
db = TestingSessionLocal()
|
||||||
@ -148,26 +190,7 @@ def test_new_entity(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_update_entity(client):
|
def test_update_entity(client):
|
||||||
# Setup data: Create a new library and entity
|
library_id, _, entity_id = setup_library_with_entity(client)
|
||||||
new_library = NewLibraryParam(name="Library for Update Test", folders=["/tmp"])
|
|
||||||
library_response = client.post(
|
|
||||||
"/libraries", json=new_library.model_dump(mode="json")
|
|
||||||
)
|
|
||||||
library_id = library_response.json()["id"]
|
|
||||||
|
|
||||||
new_entity = NewEntityParam(
|
|
||||||
filename="test.txt",
|
|
||||||
filepath="test.txt",
|
|
||||||
size=100,
|
|
||||||
file_created_at="2023-01-01T00:00:00",
|
|
||||||
file_last_modified_at="2023-01-01T00:00:00",
|
|
||||||
file_type="text/plain",
|
|
||||||
folder_id=1,
|
|
||||||
)
|
|
||||||
entity_response = client.post(
|
|
||||||
f"/libraries/{library_id}/entities", json=new_entity.model_dump(mode="json")
|
|
||||||
)
|
|
||||||
entity_id = entity_response.json()["id"]
|
|
||||||
|
|
||||||
# Update the entity
|
# Update the entity
|
||||||
updated_entity = UpdateEntityParam(
|
updated_entity = UpdateEntityParam(
|
||||||
@ -326,34 +349,7 @@ def test_list_entities_in_folder(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_remove_entity(client):
|
def test_remove_entity(client):
|
||||||
# Create a new library
|
library_id, _, entity_id = setup_library_with_entity(client)
|
||||||
new_library = NewLibraryParam(name="Test Library")
|
|
||||||
library_response = client.post(
|
|
||||||
"/libraries", json=new_library.model_dump(mode="json")
|
|
||||||
)
|
|
||||||
library_id = library_response.json()["id"]
|
|
||||||
|
|
||||||
# Create a new folder in the library
|
|
||||||
new_folder = NewFolderParam(path="/tmp")
|
|
||||||
folder_response = client.post(
|
|
||||||
f"/libraries/{library_id}/folders", json=new_folder.model_dump(mode="json")
|
|
||||||
)
|
|
||||||
folder_id = folder_response.json()["id"]
|
|
||||||
|
|
||||||
# Create a new entity to be deleted
|
|
||||||
new_entity = NewEntityParam(
|
|
||||||
filename="test_delete.txt",
|
|
||||||
filepath="test_delete.txt",
|
|
||||||
size=100,
|
|
||||||
file_created_at="2023-01-01T00:00:00",
|
|
||||||
file_last_modified_at="2023-01-01T00:00:00",
|
|
||||||
file_type="text/plain",
|
|
||||||
folder_id=folder_id,
|
|
||||||
)
|
|
||||||
entity_response = client.post(
|
|
||||||
f"/libraries/{library_id}/entities", json=new_entity.model_dump(mode="json")
|
|
||||||
)
|
|
||||||
entity_id = entity_response.json()["id"]
|
|
||||||
|
|
||||||
# Delete the entity
|
# Delete the entity
|
||||||
delete_response = client.delete(f"/libraries/{library_id}/entities/{entity_id}")
|
delete_response = client.delete(f"/libraries/{library_id}/entities/{entity_id}")
|
||||||
@ -373,9 +369,6 @@ def test_remove_entity(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_add_folder_to_library(client):
|
def test_add_folder_to_library(client):
|
||||||
|
|
||||||
import os
|
|
||||||
|
|
||||||
# Prepare tmp folders for the test
|
# Prepare tmp folders for the test
|
||||||
tmp_folder_path = "/tmp/new_folder"
|
tmp_folder_path = "/tmp/new_folder"
|
||||||
if not os.path.exists(tmp_folder_path):
|
if not os.path.exists(tmp_folder_path):
|
||||||
@ -461,37 +454,7 @@ def test_new_plugin(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_update_entity_with_tags(client):
|
def test_update_entity_with_tags(client):
|
||||||
# Create a new library
|
library_id, _, entity_id = setup_library_with_entity(client)
|
||||||
new_library = NewLibraryParam(name="Test Library")
|
|
||||||
library_response = client.post(
|
|
||||||
"/libraries", json=new_library.model_dump(mode="json")
|
|
||||||
)
|
|
||||||
assert library_response.status_code == 200
|
|
||||||
library_id = library_response.json()["id"]
|
|
||||||
|
|
||||||
# Create a new folder in the library
|
|
||||||
new_folder = NewFolderParam(path="/tmp/new_folder")
|
|
||||||
folder_response = client.post(
|
|
||||||
f"/libraries/{library_id}/folders", json=new_folder.model_dump(mode="json")
|
|
||||||
)
|
|
||||||
assert folder_response.status_code == 200
|
|
||||||
folder_id = folder_response.json()["id"]
|
|
||||||
|
|
||||||
# Create a new entity in the folder
|
|
||||||
new_entity = NewEntityParam(
|
|
||||||
filename="test_file.txt",
|
|
||||||
filepath="/tmp/new_folder/test_file.txt",
|
|
||||||
size=1234,
|
|
||||||
file_created_at="2023-01-01T00:00:00",
|
|
||||||
file_last_modified_at="2023-01-01T00:00:00",
|
|
||||||
file_type="text/plain",
|
|
||||||
folder_id=folder_id,
|
|
||||||
)
|
|
||||||
entity_response = client.post(
|
|
||||||
f"/libraries/{library_id}/entities", json=new_entity.model_dump(mode="json")
|
|
||||||
)
|
|
||||||
assert entity_response.status_code == 200
|
|
||||||
entity_id = entity_response.json()["id"]
|
|
||||||
|
|
||||||
# Update the entity with tags
|
# Update the entity with tags
|
||||||
update_entity_param = UpdateEntityParam(tags=["tag1", "tag2"])
|
update_entity_param = UpdateEntityParam(tags=["tag1", "tag2"])
|
||||||
@ -513,44 +476,7 @@ def test_update_entity_with_tags(client):
|
|||||||
assert "tag2" in [tag["name"] for tag in updated_entity_data["tags"]]
|
assert "tag2" in [tag["name"] for tag in updated_entity_data["tags"]]
|
||||||
|
|
||||||
|
|
||||||
def setup_library_with_entity(client):
|
|
||||||
# Create a new library
|
|
||||||
new_library = NewLibraryParam(name="Test Library for Metadata")
|
|
||||||
library_response = client.post(
|
|
||||||
"/libraries", json=new_library.model_dump(mode="json")
|
|
||||||
)
|
|
||||||
assert library_response.status_code == 200
|
|
||||||
library_id = library_response.json()["id"]
|
|
||||||
|
|
||||||
# Create a new folder in the library
|
|
||||||
new_folder = NewFolderParam(path="/tmp")
|
|
||||||
folder_response = client.post(
|
|
||||||
f"/libraries/{library_id}/folders", json=new_folder.model_dump(mode="json")
|
|
||||||
)
|
|
||||||
assert folder_response.status_code == 200
|
|
||||||
folder_id = folder_response.json()["id"]
|
|
||||||
|
|
||||||
# Create a new entity in the folder
|
|
||||||
new_entity = NewEntityParam(
|
|
||||||
filename="metadata_test_file.txt",
|
|
||||||
filepath="/tmp/metadata_folder/metadata_test_file.txt",
|
|
||||||
size=5678,
|
|
||||||
file_created_at="2023-01-01T00:00:00",
|
|
||||||
file_last_modified_at="2023-01-01T00:00:00",
|
|
||||||
file_type="text/plain",
|
|
||||||
folder_id=folder_id,
|
|
||||||
)
|
|
||||||
entity_response = client.post(
|
|
||||||
f"/libraries/{library_id}/entities", json=new_entity.model_dump(mode="json")
|
|
||||||
)
|
|
||||||
assert entity_response.status_code == 200
|
|
||||||
entity_id = entity_response.json()["id"]
|
|
||||||
|
|
||||||
return library_id, folder_id, entity_id
|
|
||||||
|
|
||||||
|
|
||||||
def test_add_metadata_entry_to_entity_success(client):
|
def test_add_metadata_entry_to_entity_success(client):
|
||||||
|
|
||||||
library_id, _, entity_id = setup_library_with_entity(client)
|
library_id, _, entity_id = setup_library_with_entity(client)
|
||||||
|
|
||||||
# Add metadata entry to the entity
|
# Add metadata entry to the entity
|
||||||
@ -573,15 +499,12 @@ def test_add_metadata_entry_to_entity_success(client):
|
|||||||
|
|
||||||
# Check the response data
|
# Check the response data
|
||||||
updated_entity_data = update_response.json()
|
updated_entity_data = update_response.json()
|
||||||
|
expected_metadata_entry = load_fixture(
|
||||||
|
"add_metadata_entry_to_entity_sucess_response.json"
|
||||||
|
)
|
||||||
assert "metadata_entries" in updated_entity_data
|
assert "metadata_entries" in updated_entity_data
|
||||||
assert len(updated_entity_data["metadata_entries"]) == 1
|
assert len(updated_entity_data["metadata_entries"]) == 1
|
||||||
assert updated_entity_data["metadata_entries"][0]["key"] == "author"
|
assert updated_entity_data["metadata_entries"][0] == expected_metadata_entry
|
||||||
assert updated_entity_data["metadata_entries"][0]["value"] == "John Doe"
|
|
||||||
assert updated_entity_data["metadata_entries"][0]["source"] == "plugin_generated"
|
|
||||||
assert (
|
|
||||||
updated_entity_data["metadata_entries"][0]["data_type"]
|
|
||||||
== MetadataType.ATTRIBUTE.value
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def test_update_entity_tags(client):
|
def test_update_entity_tags(client):
|
||||||
@ -627,9 +550,7 @@ def test_patch_entity_metadata_entries(client):
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
update_entity_param = UpdateEntityParam(
|
update_entity_param = UpdateEntityParam(
|
||||||
attrs=[
|
attrs=[EntityMetadataParam(**entry) for entry in patch_metadata_entries]
|
||||||
EntityMetadataParam(**entry) for entry in patch_metadata_entries
|
|
||||||
]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Make a PUT request to the /libraries/{library_id}/entities/{entity_id} endpoint
|
# Make a PUT request to the /libraries/{library_id}/entities/{entity_id} endpoint
|
||||||
@ -643,22 +564,8 @@ def test_patch_entity_metadata_entries(client):
|
|||||||
|
|
||||||
# Check the response data
|
# Check the response data
|
||||||
patched_entity_data = patch_response.json()
|
patched_entity_data = patch_response.json()
|
||||||
assert "metadata_entries" in patched_entity_data
|
expected_data = load_fixture("patch_entity_metadata_response.json")
|
||||||
assert len(patched_entity_data["metadata_entries"]) == 2
|
assert patched_entity_data == expected_data
|
||||||
assert patched_entity_data["metadata_entries"][0]["key"] == "author"
|
|
||||||
assert patched_entity_data["metadata_entries"][0]["value"] == "Jane Smith"
|
|
||||||
assert patched_entity_data["metadata_entries"][0]["source"] == "user_generated"
|
|
||||||
assert (
|
|
||||||
patched_entity_data["metadata_entries"][0]["data_type"]
|
|
||||||
== MetadataType.ATTRIBUTE.value
|
|
||||||
)
|
|
||||||
assert patched_entity_data["metadata_entries"][1]["key"] == "year"
|
|
||||||
assert patched_entity_data["metadata_entries"][1]["value"] == "2023"
|
|
||||||
assert patched_entity_data["metadata_entries"][1]["source"] == "user_generated"
|
|
||||||
assert (
|
|
||||||
patched_entity_data["metadata_entries"][1]["data_type"]
|
|
||||||
== MetadataType.ATTRIBUTE.value
|
|
||||||
)
|
|
||||||
|
|
||||||
# Update the "author" attribute of the entity
|
# Update the "author" attribute of the entity
|
||||||
updated_metadata_entries = [
|
updated_metadata_entries = [
|
||||||
|
Loading…
x
Reference in New Issue
Block a user