mirror of
https://github.com/lucaspalomodevelop/eventcally.git
synced 2026-03-13 08:09:37 +00:00
288 lines
7.6 KiB
Python
288 lines
7.6 KiB
Python
import pytest
|
|
|
|
|
|
def test_normal_user(client, seeder, utils):
|
|
seeder.create_user()
|
|
utils.login()
|
|
response = client.get("/admin")
|
|
assert response.status_code == 403
|
|
|
|
|
|
def test_admin_user(client, seeder, utils, app):
|
|
seeder.create_user(admin=True)
|
|
utils.login()
|
|
response = client.get("/admin")
|
|
assert response.status_code == 200
|
|
|
|
|
|
def test_admin_units(client, seeder, utils, app):
|
|
seeder.create_user(admin=True)
|
|
user = utils.login()
|
|
seeder.create_admin_unit(user, "Meine Crew")
|
|
response = client.get("/admin/admin_units")
|
|
assert b"Meine Crew" in response.data
|
|
|
|
|
|
@pytest.mark.parametrize("db_error", [True, False])
|
|
def test_admin_settings(client, seeder, utils, app, mocker, db_error):
|
|
user_id, admin_unit_id = seeder.setup_base(True)
|
|
|
|
url = utils.get_url("admin_settings")
|
|
response = utils.get_ok(url)
|
|
|
|
if db_error:
|
|
utils.mock_db_commit(mocker)
|
|
|
|
response = utils.post_form(
|
|
url,
|
|
response,
|
|
{
|
|
"tos": "Meine Nutzungsbedingungen",
|
|
"legal_notice": "Mein Impressum",
|
|
"contact": "Mein Kontakt",
|
|
"privacy": "Mein Datenschutz",
|
|
},
|
|
)
|
|
|
|
if db_error:
|
|
utils.assert_response_db_error(response)
|
|
return
|
|
|
|
utils.assert_response_redirect(response, "admin")
|
|
|
|
with app.app_context():
|
|
from project.services.admin import upsert_settings
|
|
|
|
settings = upsert_settings()
|
|
assert settings.tos == "Meine Nutzungsbedingungen"
|
|
assert settings.legal_notice == "Mein Impressum"
|
|
assert settings.contact == "Mein Kontakt"
|
|
assert settings.privacy == "Mein Datenschutz"
|
|
|
|
|
|
def test_admin_email(client, seeder, utils, app, mocker):
|
|
user_id, admin_unit_id = seeder.setup_base(True)
|
|
|
|
url = utils.get_url("admin_email")
|
|
response = utils.get_ok(url)
|
|
|
|
mail_mock = utils.mock_send_mails(mocker)
|
|
response = utils.post_form(
|
|
url,
|
|
response,
|
|
{
|
|
"recipient": "test@test.de",
|
|
},
|
|
)
|
|
|
|
utils.assert_response_ok(response)
|
|
utils.assert_send_mail_called(mail_mock, "test@test.de")
|
|
|
|
|
|
def test_newsletter(app, utils, seeder):
|
|
user_id, admin_unit_id = seeder.setup_base(True)
|
|
|
|
for i in range(10):
|
|
seeder.create_user(f"test{i}@test.de")
|
|
|
|
url = utils.get_url("admin_newsletter")
|
|
response = utils.get_ok(url)
|
|
|
|
response = utils.post_form(
|
|
url,
|
|
response,
|
|
{
|
|
"recipient_choice": 2,
|
|
"message": "Message",
|
|
},
|
|
)
|
|
|
|
utils.assert_response_ok(response)
|
|
assert "result_id" in response.json
|
|
|
|
|
|
def test_admin_users(client, seeder, utils, app):
|
|
seeder.create_user(admin=True)
|
|
user = utils.login()
|
|
seeder.create_admin_unit(user, "Meine Crew")
|
|
response = client.get("/admin/users")
|
|
assert b"test@test.de" in response.data
|
|
|
|
|
|
@pytest.mark.parametrize("db_error", [True, False])
|
|
def test_admin_user_update(client, seeder, utils, app, mocker, db, db_error):
|
|
user_id, admin_unit_id = seeder.setup_base(True)
|
|
other_user_id = seeder.create_user("other@test.de")
|
|
|
|
with app.app_context():
|
|
from project.models import User
|
|
from project.services.user import set_roles_for_user
|
|
|
|
user = User.query.get_or_404(other_user_id)
|
|
set_roles_for_user(user.email, ["event_verifier"])
|
|
db.session.commit()
|
|
|
|
url = utils.get_url("admin_user_update", id=other_user_id)
|
|
response = utils.get_ok(url)
|
|
|
|
if db_error:
|
|
utils.mock_db_commit(mocker)
|
|
|
|
response = utils.post_form(
|
|
url,
|
|
response,
|
|
{
|
|
"roles": "admin",
|
|
},
|
|
)
|
|
|
|
if db_error:
|
|
utils.assert_response_db_error(response)
|
|
return
|
|
|
|
utils.assert_response_redirect(response, "admin_users")
|
|
|
|
with app.app_context():
|
|
from project.models import User
|
|
|
|
user = User.query.get_or_404(other_user_id)
|
|
assert len(user.roles) == 1
|
|
assert any(r.name == "admin" for r in user.roles)
|
|
|
|
|
|
@pytest.mark.parametrize("db_error", [True, False])
|
|
@pytest.mark.parametrize("non_match", [True, False])
|
|
def test_user_delete(client, seeder, utils, app, db, mocker, db_error, non_match):
|
|
user_id, admin_unit_id = seeder.setup_base(True)
|
|
other_user_id = seeder.create_user("other@test.de")
|
|
|
|
url = utils.get_url("admin_user_delete", id=other_user_id)
|
|
response = utils.get_ok(url)
|
|
|
|
if db_error:
|
|
utils.mock_db_commit(mocker)
|
|
|
|
form_email = "other@test.de"
|
|
|
|
if non_match:
|
|
form_email = "wrong@test.de"
|
|
|
|
response = utils.post_form(
|
|
url,
|
|
response,
|
|
{
|
|
"email": form_email,
|
|
},
|
|
)
|
|
|
|
if non_match:
|
|
utils.assert_response_error_message(
|
|
response, "Die eingegebene Email passt nicht zur Email des Nutzers"
|
|
)
|
|
return
|
|
|
|
if db_error:
|
|
utils.assert_response_db_error(response)
|
|
return
|
|
|
|
utils.assert_response_redirect(response, "admin_users")
|
|
|
|
with app.app_context():
|
|
from project.models import User
|
|
|
|
user = db.session.get(User, other_user_id)
|
|
assert user is None
|
|
|
|
|
|
@pytest.mark.parametrize("db_error", [True, False])
|
|
def test_admin_admin_unit_update(client, seeder, utils, app, mocker, db, db_error):
|
|
user_id, admin_unit_id = seeder.setup_base(True)
|
|
|
|
with app.app_context():
|
|
from project.models import AdminUnit
|
|
|
|
admin_unit = AdminUnit.query.get_or_404(admin_unit_id)
|
|
admin_unit.incoming_reference_requests_allowed = False
|
|
admin_unit.suggestions_enabled = False
|
|
admin_unit.can_create_other = False
|
|
admin_unit.can_invite_other = False
|
|
admin_unit.can_verify_other = False
|
|
db.session.commit()
|
|
|
|
url = utils.get_url("admin_admin_unit_update", id=admin_unit_id)
|
|
response = utils.get_ok(url)
|
|
|
|
if db_error:
|
|
utils.mock_db_commit(mocker)
|
|
|
|
response = utils.post_form(
|
|
url,
|
|
response,
|
|
{
|
|
"incoming_reference_requests_allowed": "y",
|
|
"suggestions_enabled": "y",
|
|
"can_create_other": "y",
|
|
"can_invite_other": "y",
|
|
"can_verify_other": "y",
|
|
},
|
|
)
|
|
|
|
if db_error:
|
|
utils.assert_response_db_error(response)
|
|
return
|
|
|
|
utils.assert_response_redirect(response, "admin_admin_units")
|
|
|
|
with app.app_context():
|
|
from project.models import AdminUnit
|
|
|
|
admin_unit = AdminUnit.query.get_or_404(admin_unit_id)
|
|
assert admin_unit.incoming_reference_requests_allowed
|
|
assert admin_unit.suggestions_enabled
|
|
assert admin_unit.can_create_other
|
|
assert admin_unit.can_invite_other
|
|
assert admin_unit.can_verify_other
|
|
|
|
|
|
@pytest.mark.parametrize("db_error", [True, False])
|
|
@pytest.mark.parametrize("non_match", [True, False])
|
|
def test_admin_unit_delete(client, seeder, utils, app, db, mocker, db_error, non_match):
|
|
user_id, admin_unit_id = seeder.setup_base(True)
|
|
|
|
url = utils.get_url("admin_admin_unit_delete", id=admin_unit_id)
|
|
response = utils.get_ok(url)
|
|
|
|
if db_error:
|
|
utils.mock_db_commit(mocker)
|
|
|
|
form_name = "Meine Crew"
|
|
|
|
if non_match:
|
|
form_name = "wrong"
|
|
|
|
response = utils.post_form(
|
|
url,
|
|
response,
|
|
{
|
|
"name": form_name,
|
|
},
|
|
)
|
|
|
|
if non_match:
|
|
utils.assert_response_error_message(
|
|
response, "Der eingegebene Name entspricht nicht dem Namen der Organisation"
|
|
)
|
|
return
|
|
|
|
if db_error:
|
|
utils.assert_response_db_error(response)
|
|
return
|
|
|
|
utils.assert_response_redirect(response, "admin_admin_units")
|
|
|
|
with app.app_context():
|
|
from project.models import AdminUnit
|
|
|
|
admin_unit = db.session.get(AdminUnit, admin_unit_id)
|
|
assert admin_unit is None
|