diff --git a/integ_tests/test_delete.py b/integ_tests/test_delete.py index 3fe63a5f..20357adb 100644 --- a/integ_tests/test_delete.py +++ b/integ_tests/test_delete.py @@ -35,41 +35,43 @@ def radicale_server(tmp_path: pathlib.Path) -> Generator[str, Any, None]: def test_delete_wrong_confirmation(page: Page, radicale_server: str) -> None: login(page, radicale_server) create_collection(page, radicale_server) - + # Open delete scene page.hover("article:not(.hidden)") page.click('article:not(.hidden) a[data-name="delete"]', force=True) - + # Input wrong confirmation page.fill('#deletecollectionscene input[data-name="confirmationtxt"]', "foo") page.click('#deletecollectionscene button[data-name="delete"]') - + # Check for error message error_locator = page.locator('#deletecollectionscene span[data-name="error"]') expect(error_locator).to_be_visible() - expect(error_locator).to_contain_text("Please type DELETE in the confirmation field") - + expect(error_locator).to_contain_text( + "Please type DELETE in the confirmation field" + ) + # Scene should still be visible - expect(page.locator('#deletecollectionscene')).to_be_visible() + expect(page.locator("#deletecollectionscene")).to_be_visible() def test_delete_correct_confirmation(page: Page, radicale_server: str) -> None: login(page, radicale_server) create_collection(page, radicale_server) - + # Verify collection exists - expect(page.locator('article:not(.hidden)')).to_have_count(1) - + expect(page.locator("article:not(.hidden)")).to_have_count(1) + # Open delete scene page.hover("article:not(.hidden)") page.click('article:not(.hidden) a[data-name="delete"]', force=True) - + # Input correct confirmation page.fill('#deletecollectionscene input[data-name="confirmationtxt"]', "DELETE") page.click('#deletecollectionscene button[data-name="delete"]') - + # Verify collection is gone - expect(page.locator('article:not(.hidden)')).to_have_count(0) - + expect(page.locator("article:not(.hidden)")).to_have_count(0) + # Scene should be hidden - expect(page.locator('#deletecollectionscene')).to_be_hidden() + expect(page.locator("#deletecollectionscene")).to_be_hidden() diff --git a/integ_tests/test_edit.py b/integ_tests/test_edit.py index 60ca1b95..39e6631b 100644 --- a/integ_tests/test_edit.py +++ b/integ_tests/test_edit.py @@ -35,21 +35,21 @@ def radicale_server(tmp_path: pathlib.Path) -> Generator[str, Any, None]: def test_edit_save(page: Page, radicale_server: str) -> None: login(page, radicale_server) create_collection(page, radicale_server) - + # Get original values - article = page.locator('article:not(.hidden)') - + article = page.locator("article:not(.hidden)") + # Open edit scene page.hover("article:not(.hidden)") page.click('article:not(.hidden) a[data-name="edit"]', force=True) - + # Update title and description new_title = "Updated Title" new_description = "Updated Description" page.fill('#editcollectionscene input[data-name="displayname"]', new_title) page.fill('#editcollectionscene input[data-name="description"]', new_description) page.click('#editcollectionscene button[data-name="submit"]') - + # Verify updates in the list expect(article.locator('[data-name="title"]')).to_have_text(new_title) expect(article.locator('[data-name="description"]')).to_have_text(new_description) @@ -58,21 +58,25 @@ def test_edit_save(page: Page, radicale_server: str) -> None: def test_edit_cancel(page: Page, radicale_server: str) -> None: login(page, radicale_server) create_collection(page, radicale_server) - + # Get original values - article = page.locator('article:not(.hidden)') + article = page.locator("article:not(.hidden)") original_title = article.locator('[data-name="title"]').text_content() original_description = article.locator('[data-name="description"]').text_content() - + # Open edit scene page.hover("article:not(.hidden)") page.click('article:not(.hidden) a[data-name="edit"]', force=True) - + # Update title and description but cancel page.fill('#editcollectionscene input[data-name="displayname"]', "Changed Title") - page.fill('#editcollectionscene input[data-name="description"]', "Changed Description") + page.fill( + '#editcollectionscene input[data-name="description"]', "Changed Description" + ) page.click('#editcollectionscene button[data-name="cancel"]') - + # Verify values remain unchanged expect(article.locator('[data-name="title"]')).to_have_text(original_title) - expect(article.locator('[data-name="description"]')).to_have_text(original_description) + expect(article.locator('[data-name="description"]')).to_have_text( + original_description + ) diff --git a/integ_tests/test_sharing.py b/integ_tests/test_sharing.py index a526465e..b7fc796e 100644 --- a/integ_tests/test_sharing.py +++ b/integ_tests/test_sharing.py @@ -118,8 +118,12 @@ def test_share_with_property_overrides(page: Page, radicale_server: str) -> None login(page, radicale_server) # Create a collection with specific details page.click('a[data-name="new"]') - page.locator('#createcollectionscene input[data-name="displayname"]').fill("Test Collection") - page.locator('#createcollectionscene input[data-name="description"]').fill("Original Description") + page.locator('#createcollectionscene input[data-name="displayname"]').fill( + "Test Collection" + ) + page.locator('#createcollectionscene input[data-name="description"]').fill( + "Original Description" + ) page.locator('#createcollectionscene input[data-name="color"]').fill("#ff0000") page.click('#createcollectionscene button[data-name="submit"]') @@ -128,14 +132,18 @@ def test_share_with_property_overrides(page: Page, radicale_server: str) -> None page.click('button[data-name="sharebytoken"]') # Verify defaults - expect(page.locator('input[data-name="description_override"]')).to_have_value("Original Description") + expect(page.locator('input[data-name="description_override"]')).to_have_value( + "Original Description" + ) expect(page.locator('input[data-name="color_override"]')).to_have_value("#ff0000") expect(page.locator('input[data-name="description_override"]')).to_be_disabled() expect(page.locator('input[data-name="color_override"]')).to_be_disabled() # Set overrides page.click('label[for="newshare_attr_description_enabled"]') - page.locator('input[data-name="description_override"]').fill("Overridden Description") + page.locator('input[data-name="description_override"]').fill( + "Overridden Description" + ) page.click('label[for="newshare_attr_color_enabled"]') page.locator('input[data-name="color_override"]').fill("#00ff00") @@ -151,9 +159,15 @@ def test_share_journal_no_overrides(page: Page, radicale_server: str) -> None: login(page, radicale_server) # Create a collection of type JOURNAL page.click('a[data-name="new"]') - page.locator('#createcollectionscene select[data-name="type"]').select_option("JOURNAL") - page.locator('#createcollectionscene input[data-name="displayname"]').fill("Test Journal") - page.locator('#createcollectionscene input[data-name="description"]').fill("Journal Description") + page.locator('#createcollectionscene select[data-name="type"]').select_option( + "JOURNAL" + ) + page.locator('#createcollectionscene input[data-name="displayname"]').fill( + "Test Journal" + ) + page.locator('#createcollectionscene input[data-name="description"]').fill( + "Journal Description" + ) page.click('#createcollectionscene button[data-name="submit"]') page.hover("article:not(.hidden)") @@ -187,7 +201,7 @@ def test_edit_share_by_token(page: Page, radicale_server: str) -> None: # Edit to RW page.click('tr:not(.hidden) button[data-name="edit"]') - expect(page.locator('#newshare h1')).to_have_text("Edit Share") + expect(page.locator("#newshare h1")).to_have_text("Edit Share") page.click('label[for="newshare_attr_permissions_rw"]') page.click('#newshare button[data-name="submit"]') @@ -214,7 +228,7 @@ def test_edit_share_by_map(page: Page, radicale_server: str) -> None: # Edit map share page.click('tr:not(.hidden) button[data-name="edit"]') - expect(page.locator('#newshare h1')).to_have_text("Edit Share") + expect(page.locator("#newshare h1")).to_have_text("Edit Share") expect(page.locator('input[data-name="shareuser"]')).to_be_disabled() expect(page.locator('input[data-name="sharehref"]')).to_be_disabled() diff --git a/integ_tests/test_upload.py b/integ_tests/test_upload.py index b852ce37..66a1ca7d 100644 --- a/integ_tests/test_upload.py +++ b/integ_tests/test_upload.py @@ -36,67 +36,84 @@ def radicale_server(tmp_path: pathlib.Path) -> Generator[str, Any, None]: def test_upload_zero_files(page: Page, radicale_server: str) -> None: login(page, radicale_server) page.click('.fabcontainer a[data-name="upload"]') - + # Click upload without selecting files page.click('#uploadcollectionscene button[data-name="submit"]') - + # Check for error message at the bottom of the scene error_locator = page.locator('#uploadcollectionscene > span[data-name="error"]') expect(error_locator).to_be_visible() expect(error_locator).to_contain_text("Please select at least one file") -def test_upload_one_file_custom_href(page: Page, radicale_server: str, tmp_path: pathlib.Path) -> None: +def test_upload_one_file_custom_href( + page: Page, radicale_server: str, tmp_path: pathlib.Path +) -> None: login(page, radicale_server) - + # Create a fake file to upload test_file = tmp_path / "test.ics" test_file.write_text("BEGIN:VCALENDAR\nVERSION:2.0\nEND:VCALENDAR") - + page.click('.fabcontainer a[data-name="upload"]') - + # Upload 1 file and set custom href - page.set_input_files('#uploadcollectionscene input[data-name="uploadfile"]', str(test_file)) + page.set_input_files( + '#uploadcollectionscene input[data-name="uploadfile"]', str(test_file) + ) page.fill('#uploadcollectionscene input[data-name="href"]', "testcollection") page.click('#uploadcollectionscene button[data-name="submit"]') - + # Wait for upload to complete in the list item - expect(page.locator('#uploadcollectionscene li:not(.hidden) [data-name="success"]')).to_be_visible() - + expect( + page.locator('#uploadcollectionscene li:not(.hidden) [data-name="success"]') + ).to_be_visible() + # Close scene page.click('#uploadcollectionscene button[data-name="close"]') - + # Verify 1 collection exists with "testcollection" in url - expect(page.locator('article:not(.hidden)')).to_have_count(1) - expect(page.locator('article:not(.hidden) input[data-name="url"]')).to_have_value(re.compile(r".*testcollection/.*")) + expect(page.locator("article:not(.hidden)")).to_have_count(1) + expect(page.locator('article:not(.hidden) input[data-name="url"]')).to_have_value( + re.compile(r".*testcollection/.*") + ) -def test_upload_two_files(page: Page, radicale_server: str, tmp_path: pathlib.Path) -> None: +def test_upload_two_files( + page: Page, radicale_server: str, tmp_path: pathlib.Path +) -> None: login(page, radicale_server) - + # Create two fake files file1 = tmp_path / "test1.ics" file1.write_text("BEGIN:VCALENDAR\nVERSION:2.0\nEND:VCALENDAR") file2 = tmp_path / "test2.ics" file2.write_text("BEGIN:VCALENDAR\nVERSION:2.0\nEND:VCALENDAR") - + page.click('.fabcontainer a[data-name="upload"]') - + # Upload 2 files - page.set_input_files('#uploadcollectionscene input[data-name="uploadfile"]', [str(file1), str(file2)]) - + page.set_input_files( + '#uploadcollectionscene input[data-name="uploadfile"]', [str(file1), str(file2)] + ) + # HREF field should be hidden - expect(page.locator('#uploadcollectionscene input[data-name="href"]')).to_be_hidden() - expect(page.locator('#uploadcollectionscene [data-name="hreflimitmsg"]')).to_be_visible() - + expect( + page.locator('#uploadcollectionscene input[data-name="href"]') + ).to_be_hidden() + expect( + page.locator('#uploadcollectionscene [data-name="hreflimitmsg"]') + ).to_be_visible() + page.click('#uploadcollectionscene button[data-name="submit"]') - + # Wait for uploads to complete # Wait until 2 entries in the upload list show success - expect(page.locator('#uploadcollectionscene li:not(.hidden) [data-name="success"]')).to_have_count(2) - + expect( + page.locator('#uploadcollectionscene li:not(.hidden) [data-name="success"]') + ).to_have_count(2) + # Close scene page.click('#uploadcollectionscene button[data-name="close"]') - # Verify 2 collections exist - expect(page.locator('article:not(.hidden)')).to_have_count(2) + expect(page.locator("article:not(.hidden)")).to_have_count(2)