Skip to content

Commit

Permalink
Refactor test suite for webapp (asreview#1461)
Browse files Browse the repository at this point in the history
  • Loading branch information
cskaandorp authored Jun 12, 2023
1 parent 7b97af6 commit 031156c
Show file tree
Hide file tree
Showing 48 changed files with 4,038 additions and 3,424 deletions.
7 changes: 6 additions & 1 deletion .github/workflows/ci-frontend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,18 @@ jobs:
node-version: '16'
cache: 'npm'
cache-dependency-path: 'asreview/webapp/package-lock.json'
- name : Get Tags
run: |
git fetch --prune --unshallow --tags
git tag
- name: Compile assets
run: |
python setup.py compile_assets
- name: Install pytest and package
run: |
pip install pytest
pip install pytest-random-order
pip install --no-cache-dir .
- name: Test flask app
run: |
pytest asreview/webapp/tests
pytest --random-order asreview/webapp/tests
70 changes: 37 additions & 33 deletions asreview/entry_points/auth_tool.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import argparse
import json
import sys
from argparse import RawTextHelpFormatter
from pathlib import Path
from uuid import UUID

from sqlalchemy import create_engine
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import sessionmaker

from asreview.entry_points.base import BaseEntryPoint
from asreview.project import ASReviewProject
from asreview.utils import asreview_path
from asreview.webapp.authentication.models import Project
from asreview.webapp.authentication.models import User
Expand Down Expand Up @@ -86,6 +88,14 @@ def auth_parser():
return parser


def verify_id(id):
try:
UUID(id)
return True
except ValueError:
return False


def insert_user(session, entry):
"""Inserts a dictionary containing user data
into the database."""
Expand All @@ -102,27 +112,11 @@ def insert_user(session, entry):
session.add(user)
session.commit()
print(f"User with email {user.email} created.")
return True
except IntegrityError:
print(f"User with identifier {user.email} already exists")


def rename_project_folder(project_id, new_project_id):
"""Rename folder with an authenticated project id"""
folder = asreview_path() / project_id
folder.rename(asreview_path() / new_project_id)
try:
# take care of the id inside the project.json file
with open(asreview_path() / new_project_id / "project.json", mode="r") as f:
data = json.load(f)
# change id
data["id"] = new_project_id
# overwrite original project.json file with new project id
with open(asreview_path() / new_project_id / "project.json", mode="w") as f:
json.dump(data, f)
except Exception as exc:
# revert renaming the folder
folder.rename(asreview_path() / project_id)
raise exc
session.rollback()
sys.stderr.write(f"User with identifier {user.email} already exists")
return False


def insert_project(session, project):
Expand All @@ -139,12 +133,12 @@ def insert_project(session, project):
# create new record
session.add(Project(owner_id=owner_id, project_id=project_id))
else:
# update record
# update record (project_id must be the same)
db_project.owner_id = owner_id
db_project.project_id = project_id
# commit
session.commit()
print("Project data is stored.")
return True


def get_users(session):
Expand All @@ -158,6 +152,7 @@ def execute(self, argv):

self.args = args
self.argv = argv
print(self.args)

# create a conn object for the database
if hasattr(self.args, "db_path") and self.args.db_path is not None:
Expand Down Expand Up @@ -193,7 +188,7 @@ def _ensure_valid_value_for(self, name, validation_function, hint=""):
if validation_function(value):
return value
else:
print(hint)
sys.stderr.write(hint)

def enter_users(self):
while True:
Expand Down Expand Up @@ -249,17 +244,23 @@ def _get_projects(self):
projects = [f for f in asreview_path().glob("*") if f.is_dir()]
result = []
for folder in projects:
with open(Path(folder) / "project.json", "r") as out:
project = json.load(out)
project = ASReviewProject(folder)

# Raise a RuntimeError if the project version is too low.
if project.config.get("version").startswith("0."):
id = project.config.get("id")
message = f"""Version of project with id {id} is too old,
please upgrade first before using this tool."""
raise RuntimeError(message)

result.append(
{
"folder": folder.name,
"version": project["version"],
"project_id": project["id"],
"name": project["name"],
"authors": project["authors"],
"created": project["datetimeCreated"],
"version": project.config.get("version"),
"project_id": project.config.get("id"),
"name": project.config.get("name"),
"authors": project.config.get("authors"),
"created": project.config.get("datetimeCreated"),
"owner_id": 0,
}
)
Expand All @@ -275,6 +276,8 @@ def list_users(self):
def list_projects(self):
projects = self._get_projects()
if self.args.json:
# dump the data twice to create a string
# that can be loaded again by the tool.
print(json.dumps(json.dumps(projects)))
else:
[self._print_project(p) for p in projects]
Expand All @@ -299,7 +302,8 @@ def _generate_project_links(self):
while True:
id = input("Enter the ID number of the owner: ")
try:
id = id.replace(".", "")
if isinstance(id, str):
id = id.replace(".", "")
id = int(id)
if id not in user_ids:
print("Entered ID does not exists, try again.")
Expand All @@ -310,7 +314,7 @@ def _generate_project_links(self):
)
break
except ValueError:
print("Entered ID is not a number, please try again.")
sys.stderr.write("Entered ID is not a number, please try again.")
return result

def link_projects(self):
Expand Down
Loading

0 comments on commit 031156c

Please sign in to comment.