From ad3e2882033ec5a331710f7dcc0a5e782844e28a Mon Sep 17 00:00:00 2001 From: Chris Coutinho Date: Sun, 3 Aug 2025 14:22:45 +0200 Subject: [PATCH] test: Replace test_*_clients with single nc_client for tests --- tests/conftest.py | 2 +- tests/integration/test_calendar_operations.py | 114 ++++++------------ 2 files changed, 40 insertions(+), 76 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index ff28f07..cb45de8 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -13,7 +13,7 @@ from nextcloud_mcp_server.client import NextcloudClient logger = logging.getLogger(__name__) -@pytest.fixture(scope="session") +@pytest.fixture(scope="module") async def nc_client() -> AsyncGenerator[NextcloudClient, Any]: """ Fixture to create a NextcloudClient instance for integration tests. diff --git a/tests/integration/test_calendar_operations.py b/tests/integration/test_calendar_operations.py index 1de3d27..94b2aa5 100644 --- a/tests/integration/test_calendar_operations.py +++ b/tests/integration/test_calendar_operations.py @@ -15,16 +15,6 @@ logger = logging.getLogger(__name__) pytestmark = pytest.mark.integration -@pytest.fixture -async def calendar_test_client(): - """Create a new, isolated NextcloudClient for calendar tests.""" - client = NextcloudClient.from_env() - try: - yield client - finally: - await client.close() - - @pytest.fixture def test_calendar_name(): """Unique calendar name for testing.""" @@ -32,16 +22,14 @@ def test_calendar_name(): @pytest.fixture -async def temporary_calendar( - calendar_test_client: NextcloudClient, test_calendar_name: str -): +async def temporary_calendar(nc_client: NextcloudClient, test_calendar_name: str): """Create a temporary calendar for testing and clean up afterward.""" calendar_name = test_calendar_name try: # Create a test calendar logger.info(f"Creating temporary calendar: {calendar_name}") - result = await calendar_test_client.calendar.create_calendar( + result = await nc_client.calendar.create_calendar( calendar_name=calendar_name, display_name=f"Test Calendar {calendar_name}", description="Temporary calendar for integration testing", @@ -62,16 +50,14 @@ async def temporary_calendar( # Cleanup: Delete the temporary calendar try: logger.info(f"Cleaning up temporary calendar: {calendar_name}") - await calendar_test_client.calendar.delete_calendar(calendar_name) + await nc_client.calendar.delete_calendar(calendar_name) logger.info(f"Successfully deleted temporary calendar: {calendar_name}") except Exception as e: logger.error(f"Error deleting temporary calendar {calendar_name}: {e}") @pytest.fixture -async def temporary_event( - calendar_test_client: NextcloudClient, temporary_calendar: str -): +async def temporary_event(nc_client: NextcloudClient, temporary_calendar: str): """Create a temporary event for testing and clean up afterward.""" event_uid = None calendar_name = temporary_calendar @@ -91,9 +77,7 @@ async def temporary_event( try: logger.info(f"Creating temporary event in calendar: {calendar_name}") - result = await calendar_test_client.calendar.create_event( - calendar_name, event_data - ) + result = await nc_client.calendar.create_event(calendar_name, event_data) event_uid = result.get("uid") if not event_uid: @@ -107,9 +91,7 @@ async def temporary_event( if event_uid: try: logger.info(f"Cleaning up temporary event: {event_uid}") - await calendar_test_client.calendar.delete_event( - calendar_name, event_uid - ) + await nc_client.calendar.delete_event(calendar_name, event_uid) logger.info(f"Successfully deleted temporary event: {event_uid}") except HTTPStatusError as e: if e.response.status_code != 404: @@ -120,9 +102,9 @@ async def temporary_event( ) -async def test_list_calendars(calendar_test_client: NextcloudClient): +async def test_list_calendars(nc_client: NextcloudClient): """Test listing available calendars.""" - calendars = await calendar_test_client.calendar.list_calendars() + calendars = await nc_client.calendar.list_calendars() assert isinstance(calendars, list) @@ -144,7 +126,7 @@ async def test_list_calendars(calendar_test_client: NextcloudClient): async def test_create_and_delete_event( - calendar_test_client: NextcloudClient, temporary_calendar: str + nc_client: NextcloudClient, temporary_calendar: str ): """Test creating and deleting a basic event.""" calendar_name = temporary_calendar @@ -163,9 +145,7 @@ async def test_create_and_delete_event( } try: - result = await calendar_test_client.calendar.create_event( - calendar_name, event_data - ) + result = await nc_client.calendar.create_event(calendar_name, event_data) assert "uid" in result assert result["status_code"] in [200, 201, 204] @@ -173,7 +153,7 @@ async def test_create_and_delete_event( logger.info(f"Created event with UID: {event_uid}") # Verify event was created by retrieving it - retrieved_event, etag = await calendar_test_client.calendar.get_event( + retrieved_event, etag = await nc_client.calendar.get_event( calendar_name, event_uid ) assert retrieved_event["uid"] == event_uid @@ -181,9 +161,7 @@ async def test_create_and_delete_event( assert retrieved_event["location"] == "Test Room" # Delete event - delete_result = await calendar_test_client.calendar.delete_event( - calendar_name, event_uid - ) + delete_result = await nc_client.calendar.delete_event(calendar_name, event_uid) assert delete_result["status_code"] in [200, 204, 404] logger.info(f"Successfully deleted event: {event_uid}") @@ -194,7 +172,7 @@ async def test_create_and_delete_event( async def test_create_all_day_event( - calendar_test_client: NextcloudClient, temporary_calendar: str + nc_client: NextcloudClient, temporary_calendar: str ): """Test creating an all-day event.""" calendar_name = temporary_calendar @@ -209,21 +187,19 @@ async def test_create_all_day_event( } try: - result = await calendar_test_client.calendar.create_event( - calendar_name, event_data - ) + result = await nc_client.calendar.create_event(calendar_name, event_data) event_uid = result["uid"] logger.info(f"Created all-day event with UID: {event_uid}") # Verify event - retrieved_event, _ = await calendar_test_client.calendar.get_event( + retrieved_event, _ = await nc_client.calendar.get_event( calendar_name, event_uid ) assert retrieved_event["title"] == "All Day Test Event" assert retrieved_event.get("all_day") is True # Cleanup - await calendar_test_client.calendar.delete_event(calendar_name, event_uid) + await nc_client.calendar.delete_event(calendar_name, event_uid) except Exception as e: logger.error(f"All-day event test failed: {e}") @@ -231,7 +207,7 @@ async def test_create_all_day_event( async def test_create_recurring_event( - calendar_test_client: NextcloudClient, temporary_calendar: str + nc_client: NextcloudClient, temporary_calendar: str ): """Test creating a recurring event.""" calendar_name = temporary_calendar @@ -248,30 +224,26 @@ async def test_create_recurring_event( } try: - result = await calendar_test_client.calendar.create_event( - calendar_name, event_data - ) + result = await nc_client.calendar.create_event(calendar_name, event_data) event_uid = result["uid"] logger.info(f"Created recurring event with UID: {event_uid}") # Verify event - retrieved_event, _ = await calendar_test_client.calendar.get_event( + retrieved_event, _ = await nc_client.calendar.get_event( calendar_name, event_uid ) assert retrieved_event["title"] == "Weekly Recurring Test" assert retrieved_event.get("recurring") is True # Cleanup - await calendar_test_client.calendar.delete_event(calendar_name, event_uid) + await nc_client.calendar.delete_event(calendar_name, event_uid) except Exception as e: logger.error(f"Recurring event test failed: {e}") raise -async def test_list_events_in_range( - calendar_test_client: NextcloudClient, temporary_event: dict -): +async def test_list_events_in_range(nc_client: NextcloudClient, temporary_event: dict): """Test listing events within a date range.""" calendar_name = temporary_event["calendar_name"] @@ -279,7 +251,7 @@ async def test_list_events_in_range( start_datetime = datetime.now() end_datetime = datetime.now() + timedelta(days=7) - events = await calendar_test_client.calendar.get_calendar_events( + events = await nc_client.calendar.get_calendar_events( calendar_name=calendar_name, start_datetime=start_datetime, end_datetime=end_datetime, @@ -300,9 +272,7 @@ async def test_list_events_in_range( assert "start_datetime" in event -async def test_update_event( - calendar_test_client: NextcloudClient, temporary_event: dict -): +async def test_update_event(nc_client: NextcloudClient, temporary_event: dict): """Test updating an existing event.""" calendar_name = temporary_event["calendar_name"] event_uid = temporary_event["uid"] @@ -316,15 +286,13 @@ async def test_update_event( } try: - result = await calendar_test_client.calendar.update_event( + result = await nc_client.calendar.update_event( calendar_name, event_uid, updated_data ) assert result["uid"] == event_uid # Verify updates - updated_event, _ = await calendar_test_client.calendar.get_event( - calendar_name, event_uid - ) + updated_event, _ = await nc_client.calendar.get_event(calendar_name, event_uid) assert updated_event["title"] == "Updated Test Event Title" assert updated_event["description"] == "Updated description for test event" assert updated_event["location"] == "Updated Location" @@ -338,7 +306,7 @@ async def test_update_event( async def test_create_event_with_attendees( - calendar_test_client: NextcloudClient, temporary_calendar: str + nc_client: NextcloudClient, temporary_calendar: str ): """Test creating an event with attendees.""" calendar_name = temporary_calendar @@ -356,14 +324,12 @@ async def test_create_event_with_attendees( } try: - result = await calendar_test_client.calendar.create_event( - calendar_name, event_data - ) + result = await nc_client.calendar.create_event(calendar_name, event_data) event_uid = result["uid"] logger.info(f"Created event with attendees, UID: {event_uid}") # Verify event - retrieved_event, _ = await calendar_test_client.calendar.get_event( + retrieved_event, _ = await nc_client.calendar.get_event( calendar_name, event_uid ) assert retrieved_event["title"] == "Meeting with Attendees" @@ -371,7 +337,7 @@ async def test_create_event_with_attendees( assert retrieved_event["status"] == "TENTATIVE" # Cleanup - await calendar_test_client.calendar.delete_event(calendar_name, event_uid) + await nc_client.calendar.delete_event(calendar_name, event_uid) except Exception as e: logger.error(f"Event with attendees test failed: {e}") @@ -379,33 +345,33 @@ async def test_create_event_with_attendees( async def test_get_nonexistent_event( - calendar_test_client: NextcloudClient, temporary_calendar: str + nc_client: NextcloudClient, temporary_calendar: str ): """Test retrieving a non-existent event.""" calendar_name = temporary_calendar fake_uid = f"nonexistent-{uuid.uuid4()}" with pytest.raises(HTTPStatusError) as exc_info: - await calendar_test_client.calendar.get_event(calendar_name, fake_uid) + await nc_client.calendar.get_event(calendar_name, fake_uid) assert exc_info.value.response.status_code == 404 logger.info(f"Correctly got 404 for nonexistent event: {fake_uid}") async def test_delete_nonexistent_event( - calendar_test_client: NextcloudClient, temporary_calendar: str + nc_client: NextcloudClient, temporary_calendar: str ): """Test deleting a non-existent event.""" calendar_name = temporary_calendar fake_uid = f"nonexistent-{uuid.uuid4()}" - result = await calendar_test_client.calendar.delete_event(calendar_name, fake_uid) + result = await nc_client.calendar.delete_event(calendar_name, fake_uid) assert result["status_code"] == 404 logger.info(f"Correctly got 404 for deleting nonexistent event: {fake_uid}") async def test_event_with_url_and_categories( - calendar_test_client: NextcloudClient, temporary_calendar: str + nc_client: NextcloudClient, temporary_calendar: str ): """Test creating an event with URL and multiple categories.""" calendar_name = temporary_calendar @@ -423,14 +389,12 @@ async def test_event_with_url_and_categories( } try: - result = await calendar_test_client.calendar.create_event( - calendar_name, event_data - ) + result = await nc_client.calendar.create_event(calendar_name, event_data) event_uid = result["uid"] logger.info(f"Created event with metadata, UID: {event_uid}") # Verify event - retrieved_event, _ = await calendar_test_client.calendar.get_event( + retrieved_event, _ = await nc_client.calendar.get_event( calendar_name, event_uid ) assert retrieved_event["title"] == "Event with URL and Categories" @@ -441,7 +405,7 @@ async def test_event_with_url_and_categories( assert retrieved_event.get("priority") == 2 # Cleanup - await calendar_test_client.calendar.delete_event(calendar_name, event_uid) + await nc_client.calendar.delete_event(calendar_name, event_uid) except Exception as e: logger.error(f"Event with metadata test failed: {e}") @@ -449,7 +413,7 @@ async def test_event_with_url_and_categories( async def test_calendar_operations_error_handling( - calendar_test_client: NextcloudClient, + nc_client: NextcloudClient, ): """Test error handling for calendar operations.""" @@ -457,6 +421,6 @@ async def test_calendar_operations_error_handling( fake_calendar = f"nonexistent_calendar_{uuid.uuid4().hex}" with pytest.raises(HTTPStatusError): - await calendar_test_client.calendar.get_calendar_events(fake_calendar) + await nc_client.calendar.get_calendar_events(fake_calendar) logger.info("Error handling tests completed successfully")