From 8afb41640c6b20a9f7f9bc87e7f6a26f6c16a4c8 Mon Sep 17 00:00:00 2001
From: Bjarke Madsen <bjarke@nordu.net>
Date: Tue, 1 Aug 2023 13:26:11 +0200
Subject: [PATCH] Fix tests

---
 compendium_v2/auth/session_management.py | 21 +++++++++++----------
 compendium_v2/routes/survey.py           |  2 +-
 test/conftest.py                         |  7 +++++++
 3 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/compendium_v2/auth/session_management.py b/compendium_v2/auth/session_management.py
index eed857ee..37be02d9 100644
--- a/compendium_v2/auth/session_management.py
+++ b/compendium_v2/auth/session_management.py
@@ -1,6 +1,6 @@
 from functools import wraps
 from sqlalchemy import select
-from flask import jsonify
+from flask import jsonify, current_app
 from datetime import datetime
 from flask_login import LoginManager, current_user  # type: ignore
 from compendium_v2.db import session_scope
@@ -16,15 +16,16 @@ def admin_required(func):
     """
 
     def wrapper(*args, **kwargs):
-        if not current_user.is_authenticated:
-            return jsonify(success=False,
-                           data={'login_required': True},
-                           message='Authorize to access this page.'), 401
-        role = current_user.roles
-        if role != ROLES.admin:
-            return jsonify(success=False,
-                           data={'admin_required': True},
-                           message='Admin privileges required to access this page.'), 401
+        if not current_app.config.get('LOGIN_DISABLED'):
+            if not current_user.is_authenticated:
+                return jsonify(success=False,
+                               data={'login_required': True},
+                               message='Authorize to access this page.'), 401
+            role = current_user.roles
+            if role != ROLES.admin:
+                return jsonify(success=False,
+                               data={'admin_required': True},
+                               message='Admin privileges required to access this page.'), 401
 
         return func(*args, **kwargs)
 
diff --git a/compendium_v2/routes/survey.py b/compendium_v2/routes/survey.py
index 61f85680..bfbcaab0 100644
--- a/compendium_v2/routes/survey.py
+++ b/compendium_v2/routes/survey.py
@@ -3,7 +3,7 @@ from enum import Enum
 from typing import Any, TypedDict, List, Dict
 
 from flask import Blueprint, jsonify, request
-from flask_login import login_required
+from flask_login import login_required  # type: ignore
 from sqlalchemy import select
 from sqlalchemy.orm import joinedload, load_only
 
diff --git a/test/conftest.py b/test/conftest.py
index fa53adf0..be9e652d 100644
--- a/test/conftest.py
+++ b/test/conftest.py
@@ -3,9 +3,11 @@ import os
 import pytest
 import random
 
+from flask_login import LoginManager  # type: ignore
 import compendium_v2
 from compendium_v2.db import db, model, survey_model
 from compendium_v2.survey_db import model as survey_db_model
+from compendium_v2.auth.session_management import setup_login_manager
 
 
 def _test_data_csv(filename):
@@ -141,6 +143,11 @@ def test_survey_data(app):
 @pytest.fixture
 def app(dummy_config):
     app = compendium_v2._create_app_with_db(dummy_config)
+    app.config['LOGIN_DISABLED'] = True  # disable login and admin_required decorators
+    login_manager = LoginManager()
+    login_manager.init_app(app)
+    login_manager.login_view = 'authentication.login'
+    setup_login_manager(login_manager)
     with app.app_context():
         db.create_all(bind_key=None)
     yield app
-- 
GitLab