Skip to content

Commit

Permalink
Make test users configurable.
Browse files Browse the repository at this point in the history
Backport to Yoda 1.8
  • Loading branch information
lwesterhof authored and stsnel committed Jul 17, 2023
1 parent 6f46463 commit b3fc2b6
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 41 deletions.
4 changes: 2 additions & 2 deletions tests/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ Use `-k` to only run API or UI tests:
$ pytest -k api
```

If Yoda is not running on development address or test password is not the default, use `--url` and `--password` to specify:
If Yoda is not running on development address or test users / passwords are not the default, use `--environment` to specify environment file:
```bash
$ pytest --url <url> --password <password>
$ pytest --environment <environment_file>
```

Datarequest tests are disabled by default, enable using `--datarequest`:
Expand Down
59 changes: 23 additions & 36 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,9 @@
)


portal_url = "https://portal.yoda.test"
api_url = "https://portal.yoda.test/api"
password = "test"
users = ['researcher',
'datamanager',
'groupmanager',
'technicaladmin']
portal_url = ""
api_url = ""
roles = {}
user_cookies = {}

datarequest = False
Expand All @@ -35,62 +31,53 @@


def pytest_addoption(parser):
parser.addoption("--url", action="store", default="https://portal.yoda.test")
parser.addoption("--password", action="store", default="test")
parser.addoption("--datarequest", action="store_true", default=False, help="Run datarequest tests")
parser.addoption("--deposit", action="store_true", default=False, help="Run deposit tests")
parser.addoption("--intake", action="store_true", default=False, help="Run intake tests")
parser.addoption("--oidc", action="store_true", default=False, help="Run login OIDC tests")
parser.addoption("--all", action="store_true", default=False, help="Run all tests")
parser.addoption("--environment", action="store", default="environments/development.json", help="Specify configuration file")


def pytest_configure(config):
config.addinivalue_line("markers", "datarequest: Run datarequest tests")
config.addinivalue_line("markers", "deposit: Run deposit tests")
config.addinivalue_line("markers", "intake: Run intake tests")
config.addinivalue_line("markers", "oidc: Run login OIDC tests")
config.addinivalue_line("markers", "all: Run all tests")

global environment
environment = config.getoption("--environment")

with open(environment) as f:
configuration = json.loads(f.read())

global portal_url
portal_url = config.getoption("--url")
portal_url = configuration.get("url", "https://portal.yoda.test")

global api_url
api_url = "{}/api".format(portal_url)

global password
password = config.getoption("--password")
global roles
roles = configuration.get("roles", {})

global datarequest
datarequest = config.getoption("--datarequest")
# Store cookies for each user.
for role, user in roles.items():
csrf, session = login(user["username"], user["password"])
user_cookies[role] = (csrf, session)

global deposit
global datarequest, deposit, intake, login_oidc, run_all
datarequest = config.getoption("--datarequest")
deposit = config.getoption("--deposit")

global intake
intake = config.getoption("--intake")

global login_oidc
login_oidc = config.getoption("--oidc")

global run_all
run_all = config.getoption("--all")
if run_all:
datarequest = True
deposit = True
intake = True
login_oidc = True

global users
if datarequest:
users = users + ['projectmanager', 'dacmember']

if deposit:
users = users + ['viewer']

# Store cookies for each user.
for user in users:
csrf, session = login(user, password)
user_cookies[user] = (csrf, session)


def pytest_bdd_apply_tag(tag, function):
if tag == 'datarequest' and not datarequest:
Expand Down Expand Up @@ -232,7 +219,7 @@ def post_form_data(user, request, files):

@given(parsers.parse("user {user:w} is authenticated"), target_fixture="user")
def api_user_authenticated(user):
assert user in users
assert user in roles
return user


Expand All @@ -243,11 +230,11 @@ def ui_login(browser, user):
browser.visit(url)

# Fill in username
browser.find_by_id('f-login-username').fill(user)
browser.find_by_id('f-login-username').fill(roles[user]["username"])
browser.find_by_id('f-login-submit').click()

# Fill in password
browser.find_by_id('f-login-password').fill(password)
browser.find_by_id('f-login-password').fill(roles[user]["password"])

# Find and click the 'Sign in' button
browser.find_by_id('f-login-submit').click()
Expand Down
13 changes: 13 additions & 0 deletions tests/environments/development.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"url": "https://portal.yoda.test",
"roles": {
"researcher": {"username": "researcher", "password": "test"},
"groupmanager": {"username": "groupmanager", "password": "test"},
"datamanager": {"username": "datamanager", "password": "test"},
"functionaladminpriv": {"username": "functionaladminpriv", "password": "test"},
"technicaladmin": {"username": "technicaladmin", "password": "test"},
"projectmanager": {"username": "projectmanager", "password": "test"},
"dacmember": {"username": "dacmember", "password": "test"},
"viewer": {"username": "viewer", "password": "test"}
}
}
6 changes: 3 additions & 3 deletions tests/step_defs/ui/test_ui_login_redirect.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
when,
)

from conftest import password, portal_url
from conftest import portal_url, roles


scenarios('../../features/ui/ui_login_redirect.feature')
Expand All @@ -23,11 +23,11 @@ def ui_login_directly(browser, user):
assert "{}/user/gate".format(portal_url) in browser.url

# Fill in username
browser.find_by_id('f-login-username').fill(user)
browser.find_by_id('f-login-username').fill(roles[user]["username"])
browser.find_by_id('f-login-submit').click()

# Fill in password
browser.find_by_id('f-login-password').fill(password)
browser.find_by_id('f-login-password').fill(roles[user]["password"])

# Find and click the 'Sign in' button
browser.find_by_id('f-login-submit').click()

0 comments on commit b3fc2b6

Please sign in to comment.