1414pytestmark = pytest .mark .integration
1515
1616
17+ @pytest .fixture
18+ async def calendar_test_client ():
19+ """Create a new, isolated NextcloudClient for calendar tests."""
20+ client = NextcloudClient .from_env ()
21+ try :
22+ yield client
23+ finally :
24+ await client .close ()
25+
26+
1727@pytest .fixture
1828def test_calendar_name ():
1929 """Unique calendar name for testing."""
2030 return f"test_calendar_{ uuid .uuid4 ().hex [:8 ]} "
2131
2232
2333@pytest .fixture
24- async def temporary_calendar (nc_client : NextcloudClient , test_calendar_name : str ):
34+ async def temporary_calendar (
35+ calendar_test_client : NextcloudClient , test_calendar_name : str
36+ ):
2537 """Create a temporary calendar for testing and clean up afterward."""
2638 calendar_name = test_calendar_name
2739
2840 try :
2941 # Create a test calendar
3042 logger .info (f"Creating temporary calendar: { calendar_name } " )
31- result = await nc_client .calendar .create_calendar (
43+ result = await calendar_test_client .calendar .create_calendar (
3244 calendar_name = calendar_name ,
3345 display_name = f"Test Calendar { calendar_name } " ,
3446 description = "Temporary calendar for integration testing" ,
@@ -49,14 +61,16 @@ async def temporary_calendar(nc_client: NextcloudClient, test_calendar_name: str
4961 # Cleanup: Delete the temporary calendar
5062 try :
5163 logger .info (f"Cleaning up temporary calendar: { calendar_name } " )
52- await nc_client .calendar .delete_calendar (calendar_name )
64+ await calendar_test_client .calendar .delete_calendar (calendar_name )
5365 logger .info (f"Successfully deleted temporary calendar: { calendar_name } " )
5466 except Exception as e :
5567 logger .error (f"Error deleting temporary calendar { calendar_name } : { e } " )
5668
5769
5870@pytest .fixture
59- async def temporary_event (nc_client : NextcloudClient , temporary_calendar : str ):
71+ async def temporary_event (
72+ calendar_test_client : NextcloudClient , temporary_calendar : str
73+ ):
6074 """Create a temporary event for testing and clean up afterward."""
6175 event_uid = None
6276 calendar_name = temporary_calendar
@@ -76,7 +90,9 @@ async def temporary_event(nc_client: NextcloudClient, temporary_calendar: str):
7690
7791 try :
7892 logger .info (f"Creating temporary event in calendar: { calendar_name } " )
79- result = await nc_client .calendar .create_event (calendar_name , event_data )
93+ result = await calendar_test_client .calendar .create_event (
94+ calendar_name , event_data
95+ )
8096 event_uid = result .get ("uid" )
8197
8298 if not event_uid :
@@ -90,7 +106,9 @@ async def temporary_event(nc_client: NextcloudClient, temporary_calendar: str):
90106 if event_uid :
91107 try :
92108 logger .info (f"Cleaning up temporary event: { event_uid } " )
93- await nc_client .calendar .delete_event (calendar_name , event_uid )
109+ await calendar_test_client .calendar .delete_event (
110+ calendar_name , event_uid
111+ )
94112 logger .info (f"Successfully deleted temporary event: { event_uid } " )
95113 except HTTPStatusError as e :
96114 if e .response .status_code != 404 :
@@ -101,9 +119,9 @@ async def temporary_event(nc_client: NextcloudClient, temporary_calendar: str):
101119 )
102120
103121
104- async def test_list_calendars (nc_client : NextcloudClient ):
122+ async def test_list_calendars (calendar_test_client : NextcloudClient ):
105123 """Test listing available calendars."""
106- calendars = await nc_client .calendar .list_calendars ()
124+ calendars = await calendar_test_client .calendar .list_calendars ()
107125
108126 assert isinstance (calendars , list )
109127
@@ -125,7 +143,7 @@ async def test_list_calendars(nc_client: NextcloudClient):
125143
126144
127145async def test_create_and_delete_event (
128- nc_client : NextcloudClient , temporary_calendar : str
146+ calendar_test_client : NextcloudClient , temporary_calendar : str
129147):
130148 """Test creating and deleting a basic event."""
131149 calendar_name = temporary_calendar
@@ -144,23 +162,27 @@ async def test_create_and_delete_event(
144162 }
145163
146164 try :
147- result = await nc_client .calendar .create_event (calendar_name , event_data )
165+ result = await calendar_test_client .calendar .create_event (
166+ calendar_name , event_data
167+ )
148168 assert "uid" in result
149169 assert result ["status_code" ] in [200 , 201 , 204 ]
150170
151171 event_uid = result ["uid" ]
152172 logger .info (f"Created event with UID: { event_uid } " )
153173
154174 # Verify event was created by retrieving it
155- retrieved_event , etag = await nc_client .calendar .get_event (
175+ retrieved_event , etag = await calendar_test_client .calendar .get_event (
156176 calendar_name , event_uid
157177 )
158178 assert retrieved_event ["uid" ] == event_uid
159179 assert retrieved_event ["title" ] == "Integration Test Event"
160180 assert retrieved_event ["location" ] == "Test Room"
161181
162182 # Delete event
163- delete_result = await nc_client .calendar .delete_event (calendar_name , event_uid )
183+ delete_result = await calendar_test_client .calendar .delete_event (
184+ calendar_name , event_uid
185+ )
164186 assert delete_result ["status_code" ] in [200 , 204 , 404 ]
165187
166188 logger .info (f"Successfully deleted event: { event_uid } " )
@@ -171,7 +193,7 @@ async def test_create_and_delete_event(
171193
172194
173195async def test_create_all_day_event (
174- nc_client : NextcloudClient , temporary_calendar : str
196+ calendar_test_client : NextcloudClient , temporary_calendar : str
175197):
176198 """Test creating an all-day event."""
177199 calendar_name = temporary_calendar
@@ -186,27 +208,29 @@ async def test_create_all_day_event(
186208 }
187209
188210 try :
189- result = await nc_client .calendar .create_event (calendar_name , event_data )
211+ result = await calendar_test_client .calendar .create_event (
212+ calendar_name , event_data
213+ )
190214 event_uid = result ["uid" ]
191215 logger .info (f"Created all-day event with UID: { event_uid } " )
192216
193217 # Verify event
194- retrieved_event , _ = await nc_client .calendar .get_event (
218+ retrieved_event , _ = await calendar_test_client .calendar .get_event (
195219 calendar_name , event_uid
196220 )
197221 assert retrieved_event ["title" ] == "All Day Test Event"
198222 assert retrieved_event .get ("all_day" ) is True
199223
200224 # Cleanup
201- await nc_client .calendar .delete_event (calendar_name , event_uid )
225+ await calendar_test_client .calendar .delete_event (calendar_name , event_uid )
202226
203227 except Exception as e :
204228 logger .error (f"All-day event test failed: { e } " )
205229 raise
206230
207231
208232async def test_create_recurring_event (
209- nc_client : NextcloudClient , temporary_calendar : str
233+ calendar_test_client : NextcloudClient , temporary_calendar : str
210234):
211235 """Test creating a recurring event."""
212236 calendar_name = temporary_calendar
@@ -223,34 +247,38 @@ async def test_create_recurring_event(
223247 }
224248
225249 try :
226- result = await nc_client .calendar .create_event (calendar_name , event_data )
250+ result = await calendar_test_client .calendar .create_event (
251+ calendar_name , event_data
252+ )
227253 event_uid = result ["uid" ]
228254 logger .info (f"Created recurring event with UID: { event_uid } " )
229255
230256 # Verify event
231- retrieved_event , _ = await nc_client .calendar .get_event (
257+ retrieved_event , _ = await calendar_test_client .calendar .get_event (
232258 calendar_name , event_uid
233259 )
234260 assert retrieved_event ["title" ] == "Weekly Recurring Test"
235261 assert retrieved_event .get ("recurring" ) is True
236262
237263 # Cleanup
238- await nc_client .calendar .delete_event (calendar_name , event_uid )
264+ await calendar_test_client .calendar .delete_event (calendar_name , event_uid )
239265
240266 except Exception as e :
241267 logger .error (f"Recurring event test failed: { e } " )
242268 raise
243269
244270
245- async def test_list_events_in_range (nc_client : NextcloudClient , temporary_event : dict ):
271+ async def test_list_events_in_range (
272+ calendar_test_client : NextcloudClient , temporary_event : dict
273+ ):
246274 """Test listing events within a date range."""
247275 calendar_name = temporary_event ["calendar_name" ]
248276
249277 # Get events for the next week
250278 start_datetime = datetime .now ()
251279 end_datetime = datetime .now () + timedelta (days = 7 )
252280
253- events = await nc_client .calendar .get_calendar_events (
281+ events = await calendar_test_client .calendar .get_calendar_events (
254282 calendar_name = calendar_name ,
255283 start_datetime = start_datetime ,
256284 end_datetime = end_datetime ,
@@ -271,7 +299,9 @@ async def test_list_events_in_range(nc_client: NextcloudClient, temporary_event:
271299 assert "start_datetime" in event
272300
273301
274- async def test_update_event (nc_client : NextcloudClient , temporary_event : dict ):
302+ async def test_update_event (
303+ calendar_test_client : NextcloudClient , temporary_event : dict
304+ ):
275305 """Test updating an existing event."""
276306 calendar_name = temporary_event ["calendar_name" ]
277307 event_uid = temporary_event ["uid" ]
@@ -285,13 +315,15 @@ async def test_update_event(nc_client: NextcloudClient, temporary_event: dict):
285315 }
286316
287317 try :
288- result = await nc_client .calendar .update_event (
318+ result = await calendar_test_client .calendar .update_event (
289319 calendar_name , event_uid , updated_data
290320 )
291321 assert result ["uid" ] == event_uid
292322
293323 # Verify updates
294- updated_event , _ = await nc_client .calendar .get_event (calendar_name , event_uid )
324+ updated_event , _ = await calendar_test_client .calendar .get_event (
325+ calendar_name , event_uid
326+ )
295327 assert updated_event ["title" ] == "Updated Test Event Title"
296328 assert updated_event ["description" ] == "Updated description for test event"
297329 assert updated_event ["location" ] == "Updated Location"
@@ -305,7 +337,7 @@ async def test_update_event(nc_client: NextcloudClient, temporary_event: dict):
305337
306338
307339async def test_create_event_with_attendees (
308- nc_client : NextcloudClient , temporary_calendar : str
340+ calendar_test_client : NextcloudClient , temporary_calendar : str
309341):
310342 """Test creating an event with attendees."""
311343 calendar_name = temporary_calendar
@@ -323,54 +355,56 @@ async def test_create_event_with_attendees(
323355 }
324356
325357 try :
326- result = await nc_client .calendar .create_event (calendar_name , event_data )
358+ result = await calendar_test_client .calendar .create_event (
359+ calendar_name , event_data
360+ )
327361 event_uid = result ["uid" ]
328362 logger .info (f"Created event with attendees, UID: { event_uid } " )
329363
330364 # Verify event
331- retrieved_event , _ = await nc_client .calendar .get_event (
365+ retrieved_event , _ = await calendar_test_client .calendar .get_event (
332366 calendar_name , event_uid
333367 )
334368 assert retrieved_event ["title" ] == "Meeting with Attendees"
335369 assert "[email protected] " in retrieved_event .
get (
"attendees" ,
"" )
336370 assert retrieved_event ["status" ] == "TENTATIVE"
337371
338372 # Cleanup
339- await nc_client .calendar .delete_event (calendar_name , event_uid )
373+ await calendar_test_client .calendar .delete_event (calendar_name , event_uid )
340374
341375 except Exception as e :
342376 logger .error (f"Event with attendees test failed: { e } " )
343377 raise
344378
345379
346380async def test_get_nonexistent_event (
347- nc_client : NextcloudClient , temporary_calendar : str
381+ calendar_test_client : NextcloudClient , temporary_calendar : str
348382):
349383 """Test retrieving a non-existent event."""
350384 calendar_name = temporary_calendar
351385 fake_uid = f"nonexistent-{ uuid .uuid4 ()} "
352386
353387 with pytest .raises (HTTPStatusError ) as exc_info :
354- await nc_client .calendar .get_event (calendar_name , fake_uid )
388+ await calendar_test_client .calendar .get_event (calendar_name , fake_uid )
355389
356390 assert exc_info .value .response .status_code == 404
357391 logger .info (f"Correctly got 404 for nonexistent event: { fake_uid } " )
358392
359393
360394async def test_delete_nonexistent_event (
361- nc_client : NextcloudClient , temporary_calendar : str
395+ calendar_test_client : NextcloudClient , temporary_calendar : str
362396):
363397 """Test deleting a non-existent event."""
364398 calendar_name = temporary_calendar
365399 fake_uid = f"nonexistent-{ uuid .uuid4 ()} "
366400
367- result = await nc_client .calendar .delete_event (calendar_name , fake_uid )
401+ result = await calendar_test_client .calendar .delete_event (calendar_name , fake_uid )
368402 assert result ["status_code" ] == 404
369403 logger .info (f"Correctly got 404 for deleting nonexistent event: { fake_uid } " )
370404
371405
372406async def test_event_with_url_and_categories (
373- nc_client : NextcloudClient , temporary_calendar : str
407+ calendar_test_client : NextcloudClient , temporary_calendar : str
374408):
375409 """Test creating an event with URL and multiple categories."""
376410 calendar_name = temporary_calendar
@@ -388,12 +422,14 @@ async def test_event_with_url_and_categories(
388422 }
389423
390424 try :
391- result = await nc_client .calendar .create_event (calendar_name , event_data )
425+ result = await calendar_test_client .calendar .create_event (
426+ calendar_name , event_data
427+ )
392428 event_uid = result ["uid" ]
393429 logger .info (f"Created event with metadata, UID: { event_uid } " )
394430
395431 # Verify event
396- retrieved_event , _ = await nc_client .calendar .get_event (
432+ retrieved_event , _ = await calendar_test_client .calendar .get_event (
397433 calendar_name , event_uid
398434 )
399435 assert retrieved_event ["title" ] == "Event with URL and Categories"
@@ -404,20 +440,22 @@ async def test_event_with_url_and_categories(
404440 assert retrieved_event .get ("priority" ) == 2
405441
406442 # Cleanup
407- await nc_client .calendar .delete_event (calendar_name , event_uid )
443+ await calendar_test_client .calendar .delete_event (calendar_name , event_uid )
408444
409445 except Exception as e :
410446 logger .error (f"Event with metadata test failed: { e } " )
411447 raise
412448
413449
414- async def test_calendar_operations_error_handling (nc_client : NextcloudClient ):
450+ async def test_calendar_operations_error_handling (
451+ calendar_test_client : NextcloudClient ,
452+ ):
415453 """Test error handling for calendar operations."""
416454
417455 # Test with non-existent calendar
418456 fake_calendar = f"nonexistent_calendar_{ uuid .uuid4 ().hex } "
419457
420458 with pytest .raises (HTTPStatusError ):
421- await nc_client .calendar .get_calendar_events (fake_calendar )
459+ await calendar_test_client .calendar .get_calendar_events (fake_calendar )
422460
423461 logger .info ("Error handling tests completed successfully" )
0 commit comments