[Feature] Server pagination implementation (#243)

## Major Changes
- Implement a REST style API app in epapi
- Currently implements a GET method for all entity types in the browse menu (both package level and global)
- Provides paginated results per default with query style filtering for reviewed vs unreviewed.
- Provides new paginated templates with thin wrappers per entity types for easier maintainability
- Implements e2e tests for the API

## Minor changes
- Added more comprehensive gitignore to cover coverage reports and other test/node.js etc. data.
- Add additional CI file for API tests that only gets triggered on API relevant changes.

## ⚠️ Currently only works with session-based authentication. Token based will be added in new PR.

Co-authored-by: Tim Lorsbach <tim@lorsba.ch>
Co-authored-by: jebus <lorsbach@envipath.com>
Reviewed-on: enviPath/enviPy#243
Co-authored-by: Tobias O <tobias.olenyi@envipath.com>
Co-committed-by: Tobias O <tobias.olenyi@envipath.com>
This commit is contained in:
2025-12-15 11:34:53 +13:00
committed by jebus
parent d2d475b990
commit 8adb93012a
59 changed files with 3101 additions and 620 deletions

View File

@ -37,7 +37,6 @@ class TestPackagePage(EnviPyStaticLiveServerTestCase):
# Find number of current pathways by extracting it from pathway button
num_pathways = int(re.search(r"Pathways \((\d+)\)", pathway_button.inner_text()).group(1))
pathway_button.click()
page.get_by_role("button", name="Actions").click()
page.get_by_role("link", name="New Pathway").click()
# Check that the predict page 'in [package_name]' text shows the current package
expect(page.get_by_role("strong").get_by_text("test package")).to_be_visible()
@ -59,8 +58,7 @@ class TestPackagePage(EnviPyStaticLiveServerTestCase):
"""Make a new empty package with name 'test package'"""
page.get_by_role("button", name="Browse").click()
page.get_by_role("link", name="Package", exact=True).click()
page.get_by_role("button", name="Actions").click()
page.get_by_role("button", name="New Package").click()
page.locator("#new-package-button").click()
page.get_by_role("textbox", name="Name").click()
page.get_by_role("textbox", name="Name").fill("test package")
page.get_by_role("textbox", name="Description").click()