Remove warnings #441

This commit is contained in:
Daniel Grams 2023-04-19 15:32:30 +02:00
parent 9b70a1fd63
commit 84882971b6
107 changed files with 59280 additions and 326 deletions

1603
.dcignore Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
describe("Event", () => { describe("Event", () => {
[{ recurrence: false }, { recurrence: true }].forEach(function (test) { [{ recurrence: false }, { recurrence: true }].forEach(function (test) {
it.only("creates event with recurrence=" + test.recurrence, () => { it("creates event with recurrence=" + test.recurrence, () => {
cy.login(); cy.login();
cy.createAdminUnit().then(function (adminUnitId) { cy.createAdminUnit().then(function (adminUnitId) {
cy.visit("/admin_unit/" + adminUnitId + "/events/create"); cy.visit("/admin_unit/" + adminUnitId + "/events/create");
@ -48,7 +48,7 @@ describe("Event", () => {
}); });
}); });
it.only("saves draft", () => { it("saves draft", () => {
cy.login(); cy.login();
cy.createAdminUnit().then(function (adminUnitId) { cy.createAdminUnit().then(function (adminUnitId) {
cy.visit("/admin_unit/" + adminUnitId + "/events/create"); cy.visit("/admin_unit/" + adminUnitId + "/events/create");

View File

@ -57,7 +57,7 @@ flask db upgrade
## i18n ## i18n
<https://pythonhosted.org/Flask-BabelEx/> <https://python-babel.github.io/flask-babel/>
### Init ### Init

View File

@ -0,0 +1,73 @@
"""empty message
Revision ID: 30650020b4b7
Revises: 421660a4a792
Create Date: 2023-04-18 23:52:37.520530
"""
import sqlalchemy as sa
import sqlalchemy_utils
from alembic import op
from sqlalchemy.dialects import postgresql
from project import dbtypes
# revision identifiers, used by Alembic.
revision = "30650020b4b7"
down_revision = "421660a4a792"
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table("user", schema=None) as batch_op:
batch_op.drop_column("current_login_at")
batch_op.drop_column("current_login_ip")
batch_op.drop_column("last_login_at")
batch_op.drop_column("login_count")
batch_op.drop_column("last_login_ip")
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table("user", schema=None) as batch_op:
batch_op.add_column(
sa.Column(
"last_login_ip",
sa.VARCHAR(length=100),
autoincrement=False,
nullable=True,
)
)
batch_op.add_column(
sa.Column("login_count", sa.INTEGER(), autoincrement=False, nullable=True)
)
batch_op.add_column(
sa.Column(
"last_login_at",
postgresql.TIMESTAMP(),
autoincrement=False,
nullable=True,
)
)
batch_op.add_column(
sa.Column(
"current_login_ip",
sa.VARCHAR(length=100),
autoincrement=False,
nullable=True,
)
)
batch_op.add_column(
sa.Column(
"current_login_at",
postgresql.TIMESTAMP(),
autoincrement=False,
nullable=True,
)
)
# ### end Alembic commands ###

View File

@ -3,7 +3,7 @@ import os
from datetime import timedelta from datetime import timedelta
from flask import Flask from flask import Flask
from flask_babelex import Babel from flask_babel import Babel
from flask_cors import CORS from flask_cors import CORS
from flask_gzip import Gzip from flask_gzip import Gzip
from flask_mail import Mail, email_dispatched from flask_mail import Mail, email_dispatched
@ -36,7 +36,6 @@ app.config["REDIS_URL"] = os.getenv("REDIS_URL")
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
app.config["SECURITY_CONFIRMABLE"] = True app.config["SECURITY_CONFIRMABLE"] = True
app.config["SECURITY_POST_LOGIN_VIEW"] = "manage_after_login" app.config["SECURITY_POST_LOGIN_VIEW"] = "manage_after_login"
app.config["SECURITY_TRACKABLE"] = True
app.config["SECURITY_REGISTERABLE"] = True app.config["SECURITY_REGISTERABLE"] = True
app.config["SECURITY_SEND_REGISTER_EMAIL"] = True app.config["SECURITY_SEND_REGISTER_EMAIL"] = True
app.config["SECURITY_RECOVERABLE"] = True app.config["SECURITY_RECOVERABLE"] = True
@ -62,6 +61,9 @@ app.config["FLASK_DEBUG"] = getenv_bool("FLASK_DEBUG", "False")
if os.getenv("PREFERRED_URL_SCHEME"): # pragma: no cover if os.getenv("PREFERRED_URL_SCHEME"): # pragma: no cover
app.config["PREFERRED_URL_SCHEME"] = os.getenv("PREFERRED_URL_SCHEME") app.config["PREFERRED_URL_SCHEME"] = os.getenv("PREFERRED_URL_SCHEME")
if app.config["PREFERRED_URL_SCHEME"] == "https":
app.config["SESSION_COOKIE_SECURE"] = True
from project.reverse_proxied import ReverseProxied from project.reverse_proxied import ReverseProxied
app.wsgi_app = ReverseProxied(app.wsgi_app) app.wsgi_app = ReverseProxied(app.wsgi_app)
@ -134,9 +136,11 @@ sitemap_path = os.path.join(cache_path, sitemap_file)
robots_txt_path = os.path.join(cache_path, robots_txt_file) robots_txt_path = os.path.join(cache_path, robots_txt_file)
# i18n # i18n
from project.i10n import get_locale
app.config["BABEL_DEFAULT_LOCALE"] = "de" app.config["BABEL_DEFAULT_LOCALE"] = "de"
app.config["BABEL_DEFAULT_TIMEZONE"] = "Europe/Berlin" app.config["BABEL_DEFAULT_TIMEZONE"] = "Europe/Berlin"
babel = Babel(app) babel = Babel(app, locale_selector=get_locale)
# cors # cors
cors = CORS( cors = CORS(
@ -188,9 +192,9 @@ from project.api import RestApi
QRcode(app) QRcode(app)
# JSON # JSON
from project.jsonld import DateTimeEncoder from project.jsonld import CustomJsonProvider
app.json_encoder = DateTimeEncoder app.json_provider_class = CustomJsonProvider
from project.forms.security import ExtendedConfirmRegisterForm, ExtendedLoginForm from project.forms.security import ExtendedConfirmRegisterForm, ExtendedLoginForm
@ -228,7 +232,7 @@ if getenv_bool("TESTING"): # pragma: no cover
app.config["SECURITY_EMAIL_VALIDATOR_ARGS"] = {"check_deliverability": False} app.config["SECURITY_EMAIL_VALIDATOR_ARGS"] = {"check_deliverability": False}
import project.cli.user import project.cli.user
from project import i10n, init_data, jinja_filters, requests from project import init_data, jinja_filters, requests
# Routes # Routes
from project.views import ( from project.views import (

View File

@ -3,7 +3,7 @@ from apispec.exceptions import DuplicateComponentNameError
from apispec.ext.marshmallow import MarshmallowPlugin from apispec.ext.marshmallow import MarshmallowPlugin
from flask import url_for from flask import url_for
from flask_apispec.extension import FlaskApiSpec from flask_apispec.extension import FlaskApiSpec
from flask_babelex import gettext from flask_babel import gettext
from flask_marshmallow import Marshmallow from flask_marshmallow import Marshmallow
from flask_restful import Api from flask_restful import Api
from marshmallow import ValidationError from marshmallow import ValidationError

View File

@ -1,6 +1,6 @@
from flask import abort, request from flask import abort, request
from flask_apispec import doc, marshal_with, use_kwargs from flask_apispec import doc, marshal_with, use_kwargs
from flask_babelex import gettext from flask_babel import gettext
from sqlalchemy import and_ from sqlalchemy import and_
from project import db from project import db
@ -198,6 +198,7 @@ class OrganizationEventImportResource(BaseResource):
importer = EventImporter(admin_unit.id) importer = EventImporter(admin_unit.id)
with db.session.no_autoflush: with db.session.no_autoflush:
# deepcode ignore Ssrf: url sanitized in importer
event = importer.load_event_from_url(import_request["url"]) event = importer.load_event_from_url(import_request["url"])
except Exception: except Exception:
abort(422) abort(422)

View File

@ -445,8 +445,8 @@ def create_event_suggestion(admin_unit_id, freetext):
def _add_event_to_list(event_list_id, event_id): def _add_event_to_list(event_list_id, event_id):
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
event_list = EventList.query.get(event_list_id) event_list = db.session.get(EventList, event_list_id)
event_list.events.append(event) event_list.events.append(event)
db.session.commit() db.session.commit()

View File

@ -1,4 +1,4 @@
from flask_babelex import lazy_gettext from flask_babel import lazy_gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import BooleanField, RadioField, StringField, SubmitField, TextAreaField from wtforms import BooleanField, RadioField, StringField, SubmitField, TextAreaField
from wtforms.fields import EmailField from wtforms.fields import EmailField

View File

@ -1,4 +1,4 @@
from flask_babelex import lazy_gettext from flask_babel import lazy_gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import DecimalField, FormField, StringField, SubmitField, TextAreaField from wtforms import DecimalField, FormField, StringField, SubmitField, TextAreaField
from wtforms.fields import BooleanField, EmailField, TelField, URLField from wtforms.fields import BooleanField, EmailField, TelField, URLField

View File

@ -1,4 +1,4 @@
from flask_babelex import lazy_gettext from flask_babel import lazy_gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import SubmitField from wtforms import SubmitField
from wtforms.fields import EmailField from wtforms.fields import EmailField

View File

@ -1,5 +1,5 @@
from flask import url_for from flask import url_for
from flask_babelex import lazy_gettext from flask_babel import lazy_gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from markupsafe import Markup from markupsafe import Markup
from wtforms import HiddenField, StringField from wtforms import HiddenField, StringField

View File

@ -1,6 +1,6 @@
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from flask import request from flask import request
from flask_babelex import gettext, lazy_gettext from flask_babel import gettext, lazy_gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import ( from wtforms import (
BooleanField, BooleanField,

View File

@ -1,5 +1,5 @@
from flask import request from flask import request
from flask_babelex import lazy_gettext from flask_babel import lazy_gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import HiddenField, SelectField, StringField, SubmitField from wtforms import HiddenField, SelectField, StringField, SubmitField
from wtforms.validators import Optional from wtforms.validators import Optional

View File

@ -1,4 +1,4 @@
from flask_babelex import lazy_gettext from flask_babel import lazy_gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import DecimalField, FormField, StringField, SubmitField, TextAreaField from wtforms import DecimalField, FormField, StringField, SubmitField, TextAreaField
from wtforms.fields import URLField from wtforms.fields import URLField

View File

@ -1,4 +1,4 @@
from flask_babelex import lazy_gettext from flask_babel import lazy_gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import ( from wtforms import (
BooleanField, BooleanField,

View File

@ -1,6 +1,6 @@
import os import os
from flask_babelex import lazy_gettext from flask_babel import lazy_gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, TextAreaField from wtforms import StringField, SubmitField, TextAreaField
from wtforms.validators import DataRequired from wtforms.validators import DataRequired

View File

@ -1,4 +1,4 @@
from flask_babelex import lazy_gettext from flask_babel import lazy_gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import SubmitField from wtforms import SubmitField

View File

@ -1,4 +1,4 @@
from flask_babelex import lazy_gettext from flask_babel import lazy_gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import DecimalField, FormField, StringField, SubmitField from wtforms import DecimalField, FormField, StringField, SubmitField
from wtforms.fields import EmailField, TelField, URLField from wtforms.fields import EmailField, TelField, URLField

View File

@ -1,4 +1,4 @@
from flask_babelex import lazy_gettext from flask_babel import lazy_gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import HiddenField, SelectField, SubmitField from wtforms import HiddenField, SelectField, SubmitField
from wtforms.validators import Optional from wtforms.validators import Optional

View File

@ -1,4 +1,4 @@
from flask_babelex import lazy_gettext from flask_babel import lazy_gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import SelectField, SubmitField from wtforms import SelectField, SubmitField
from wtforms.validators import DataRequired from wtforms.validators import DataRequired

View File

@ -1,4 +1,4 @@
from flask_babelex import lazy_gettext from flask_babel import lazy_gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import SelectField, StringField, SubmitField from wtforms import SelectField, StringField, SubmitField
from wtforms.fields import BooleanField from wtforms.fields import BooleanField

View File

@ -1,4 +1,4 @@
from flask_babelex import gettext, lazy_gettext from flask_babel import gettext, lazy_gettext
from flask_security import url_for_security from flask_security import url_for_security
from flask_security.forms import ( from flask_security.forms import (
ConfirmRegisterForm, ConfirmRegisterForm,

View File

@ -1,4 +1,4 @@
from flask_babelex import lazy_gettext from flask_babel import lazy_gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import BooleanField, SubmitField from wtforms import BooleanField, SubmitField
from wtforms.validators import Optional from wtforms.validators import Optional

View File

@ -1,6 +1,6 @@
from datetime import datetime from datetime import datetime
from flask_babelex import gettext, to_user_timezone from flask_babel import gettext, to_user_timezone
from markupsafe import Markup from markupsafe import Markup
from wtforms import DateTimeField, SelectField, SelectMultipleField from wtforms import DateTimeField, SelectField, SelectMultipleField
from wtforms.fields import StringField from wtforms.fields import StringField

View File

@ -1,11 +1,13 @@
from flask import request from flask import request
from flask_babelex import gettext from flask_babel import gettext
from project import app, babel from project import app
@babel.localeselector
def get_locale(): def get_locale():
if not request:
return app.config["LANGUAGES"][0]
return request.accept_languages.best_match(app.config["LANGUAGES"]) return request.accept_languages.best_match(app.config["LANGUAGES"])

View File

@ -44,7 +44,7 @@ app.jinja_env.filters["is_list"] = is_list
app.jinja_env.filters["any_dict_value_true"] = any_dict_value_true app.jinja_env.filters["any_dict_value_true"] = any_dict_value_true
app.jinja_env.filters["ensure_link_scheme"] = lambda s: ensure_link_scheme(s) app.jinja_env.filters["ensure_link_scheme"] = lambda s: ensure_link_scheme(s)
app.jinja_env.filters["place_str"] = lambda p: get_place_str(p) app.jinja_env.filters["place_str"] = lambda p: get_place_str(p)
app.jinja_env.filters["location_str"] = lambda l: get_location_str(l) app.jinja_env.filters["location_str"] = lambda location: get_location_str(location)
def get_base_url(): def get_base_url():

View File

@ -1,21 +1,24 @@
import datetime import datetime
from json import JSONEncoder
from flask import url_for from flask import url_for
from flask.json.provider import DefaultJSONProvider
from project.dateutils import berlin_tz from project.dateutils import berlin_tz
from project.jinja_filters import url_for_image from project.jinja_filters import url_for_image
from project.models import EventAttendanceMode, EventStatus from project.models import EventAttendanceMode, EventStatus
class DateTimeEncoder(JSONEncoder): class CustomJsonProvider(DefaultJSONProvider):
# Override the default method @staticmethod
def default(self, obj): def default(obj):
if isinstance(obj, datetime.datetime): if isinstance(obj, datetime.datetime):
return (obj.astimezone(berlin_tz)).isoformat() return (obj.astimezone(berlin_tz)).isoformat()
elif isinstance(obj, datetime.date): elif isinstance(obj, datetime.date):
return obj.isoformat() return obj.isoformat()
# pragma: no cover
return super(CustomJsonProvider, CustomJsonProvider).default(obj)
def get_sd_for_admin_unit(admin_unit): def get_sd_for_admin_unit(admin_unit):
result = {} result = {}

View File

@ -38,4 +38,4 @@ from project.models.legacy import (
from project.models.location import Location from project.models.location import Location
from project.models.oauth import OAuth2AuthorizationCode, OAuth2Client, OAuth2Token from project.models.oauth import OAuth2AuthorizationCode, OAuth2Client, OAuth2Token
from project.models.settings import Settings from project.models.settings import Settings
from project.models.user import Role, User, UserFavoriteEvents from project.models.user import OAuth, Role, User, UserFavoriteEvents

View File

@ -40,11 +40,6 @@ class User(db.Model, UserMixin):
email = Column(String(255), unique=True) email = Column(String(255), unique=True)
username = Column(String(255)) username = Column(String(255))
password = Column(String(255)) password = Column(String(255))
last_login_at = Column(DateTime())
current_login_at = Column(DateTime())
last_login_ip = Column(String(100))
current_login_ip = Column(String(100))
login_count = Column(Integer)
active = Column(Boolean()) active = Column(Boolean())
fs_uniquifier = Column(String(255)) fs_uniquifier = Column(String(255))
confirmed_at = Column(DateTime()) confirmed_at = Column(DateTime())

View File

@ -68,7 +68,7 @@ class AuthorizationCodeGrant(grants.AuthorizationCodeGrant):
db.session.commit() db.session.commit()
def authenticate_user(self, authorization_code): def authenticate_user(self, authorization_code):
return User.query.get(authorization_code.user_id) return db.session.get(User, authorization_code.user_id)
class OpenIDCode(_OpenIDCode): class OpenIDCode(_OpenIDCode):
@ -97,7 +97,7 @@ class RefreshTokenGrant(grants.RefreshTokenGrant):
return token return token
def authenticate_user(self, credential): def authenticate_user(self, credential):
return User.query.get(credential.user_id) return db.session.get(User, credential.user_id)
def revoke_old_credential(self, credential): def revoke_old_credential(self, credential):
credential.revoked = True credential.revoked = True

View File

@ -1,6 +1,6 @@
from datetime import datetime, timedelta from datetime import datetime, timedelta
from flask import g from flask import g, request
from flask_login.utils import encode_cookie from flask_login.utils import encode_cookie
from project import app from project import app
@ -16,6 +16,21 @@ def set_manage_admin_unit_cookie(response):
"manage_admin_unit_id", "manage_admin_unit_id",
value=encoded, value=encoded,
expires=datetime.utcnow() + timedelta(days=365), expires=datetime.utcnow() + timedelta(days=365),
secure=app.config["SESSION_COOKIE_SECURE"],
) )
return response return response
@app.after_request
def set_response_headers(response):
if request and request.endpoint:
if request.endpoint != "static" and request.endpoint != "widget_event_dates":
response.headers["X-Frame-Options"] = "SAMEORIGIN"
response.headers["X-Content-Type-Options"] = "nosniff"
response.headers["Referrer-Policy"] = "no-referrer"
response.headers[
"Content-Security-Policy"
] = "default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-eval' 'unsafe-inline'; img-src 'self' data: *.openstreetmap.org;"
return response

View File

@ -5,7 +5,7 @@ import shutil
from sqlalchemy import and_ from sqlalchemy import and_
from sqlalchemy.orm import joinedload from sqlalchemy.orm import joinedload
from project import app, dump_path from project import app, db, dump_path
from project.api.event.schemas import EventDumpSchema from project.api.event.schemas import EventDumpSchema
from project.api.event_category.schemas import EventCategoryDumpSchema from project.api.event_category.schemas import EventCategoryDumpSchema
from project.api.event_reference.schemas import EventReferenceDumpSchema from project.api.event_reference.schemas import EventReferenceDumpSchema
@ -163,7 +163,7 @@ class AdminUnitDumper(Dumper): # pragma: no cover
self.dump_image(organizer.logo) self.dump_image(organizer.logo)
# Organizations # Organizations
organization = AdminUnit.query.get(self.admin_unit_id) organization = db.session.get(AdminUnit, self.admin_unit_id)
self.dump_item(organization, OrganizationDumpSchema(), "organization") self.dump_item(organization, OrganizationDumpSchema(), "organization")
self.dump_image(organization.logo) self.dump_image(organization.logo)

View File

@ -4,7 +4,7 @@ from datetime import datetime
import icalendar import icalendar
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from flask import url_for from flask import url_for
from flask_babelex import format_date, format_time, gettext from flask_babel import format_date, format_time, gettext
from icalendar.prop import vDDDLists from icalendar.prop import vDDDLists
from sqlalchemy import and_, case, func, or_ from sqlalchemy import and_, case, func, or_
from sqlalchemy.orm import ( from sqlalchemy.orm import (

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

10965
project/static/ext/jquery-3.6.4.js vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1035,7 +1035,7 @@
for (d = 0; d < conf.weekdays.length; d++) { for (d = 0; d < conf.weekdays.length; d++) {
day = conf.weekdays[d]; day = conf.weekdays[d];
input = field.find('input[name=riweeklyweekdays' + day + ']'); input = field.find('input[name=riweeklyweekdays' + day + ']');
input.attr('checked', $.inArray(day, byday) !== -1); input.prop('checked', $.inArray(day, byday) !== -1);
} }
break; break;
@ -1077,7 +1077,7 @@
selectors = field.find('input[name=rimonthlytype]'); selectors = field.find('input[name=rimonthlytype]');
for (index = 0; index < selectors.length; index++) { for (index = 0; index < selectors.length; index++) {
radiobutton = selectors[index]; radiobutton = selectors[index];
$(radiobutton).attr('checked', radiobutton.value === monthlyType); $(radiobutton).prop('checked', radiobutton.value === monthlyType);
} }
break; break;
@ -1120,7 +1120,7 @@
selectors = field.find('input[name=riyearlyType]'); selectors = field.find('input[name=riyearlyType]');
for (index = 0; index < selectors.length; index++) { for (index = 0; index < selectors.length; index++) {
radiobutton = selectors[index]; radiobutton = selectors[index];
$(radiobutton).attr('checked', radiobutton.value === yearlyType); $(radiobutton).prop('checked', radiobutton.value === yearlyType);
} }
break; break;
@ -1145,7 +1145,7 @@
selectors = field.find('input[name=rirangetype]'); selectors = field.find('input[name=rirangetype]');
for (index = 0; index < selectors.length; index++) { for (index = 0; index < selectors.length; index++) {
radiobutton = selectors[index]; radiobutton = selectors[index];
$(radiobutton).attr('checked', radiobutton.value === rangeType); $(radiobutton).prop('checked', radiobutton.value === rangeType);
} }
break; break;
} }

View File

@ -3,8 +3,8 @@
<head> <head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
<link rel="stylesheet" type="text/css" href="/static/widget/calendar.css"> <link rel="stylesheet" type="text/css" href="/static/widget/calendar.css">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@6.5.95/css/materialdesignicons.min.css" rel="stylesheet"> <link href="/static/ext/materialdesignicons.6.5.95.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.6.2/dist/vuetify.min.css" rel="stylesheet"> <link href="/static/ext/vuetify.2.6.2.min.css" rel="stylesheet">
<style> <style>
[v-cloak] { [v-cloak] {
display: none; display: none;
@ -90,10 +90,10 @@
</template> </template>
</div> </div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script> <script src="/static/ext/vue.2.6.14.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.6.2/dist/vuetify.js"></script> <script src="/static/ext/vuetify.2.6.2.js"></script>
<script src="https://unpkg.com/axios@0.21.1/dist/axios.min.js"></script> <script src="/static/ext/axios.0.21.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.min.js" integrity="sha256-AdQN98MVZs44Eq2yTwtoKufhnU+uZ7v2kXnD5vqzZVo=" crossorigin="anonymous"></script> <script src="/static/ext/moment.2.24.0.with-locales.min.js"></script>
<script> <script>
axios.defaults.baseURL = window.location.origin; axios.defaults.baseURL = window.location.origin;
moment.locale("de"); moment.locale("de");
@ -268,6 +268,6 @@ Vue.component('event-warning-pills', {
} }
} }
</script> </script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.2/iframeResizer.contentWindow.min.js" integrity="sha512-14SY6teTzhrLWeL55Q4uCyxr6GQOxF3pEoMxo2mBxXwPRikdMtzKMYWy2B5Lqjr6PHHoGOxZgPaxUYKQrSmu0A==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="/static/ext/iframeResizer.4.3.2.contentWindow.min.js"></script>
</body> </body>
</html> </html>

View File

@ -5,20 +5,20 @@
<meta name="viewport" content="width=device-width,initial-scale=1.0"> <meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Event calendar widget</title> <title>Event calendar widget</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> <link rel="stylesheet" href="/static/ext/bootstrap.4.6.2.min.css">
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap-vue@2.21.2/dist/bootstrap-vue.min.css" /> <link type="text/css" rel="stylesheet" href="/static/ext/bootstrap-vue.2.21.2.min.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.1/css/all.min.css"> <link rel="stylesheet" href="/static/ext/font-awesome.5.13.1/css/all.min.css">
<style> <style>
[v-cloak] { [v-cloak] {
display: none; display: none;
} }
</style> </style>
<script src="https://unpkg.com/vue@2.6.14/dist/vue.js"></script> <script src="/static/ext/vue.2.6.14.min.js"></script>
<script src="https://unpkg.com/vue-i18n@8.25.0/dist/vue-i18n.min.js"></script> <script src="/static/ext/vue-i18n.8.25.0.min.js"></script>
<script src="https://unpkg.com/axios@0.21.1/dist/axios.min.js"></script> <script src="/static/ext/axios.0.21.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.min.js" integrity="sha256-AdQN98MVZs44Eq2yTwtoKufhnU+uZ7v2kXnD5vqzZVo=" crossorigin="anonymous"></script> <script src="/static/ext/moment.2.24.0.with-locales.min.js"></script>
<script src="https://unpkg.com/bootstrap-vue@2.21.2/dist/bootstrap-vue.min.js"></script> <script src="/static/ext/bootstrap-vue.2.21.2.min.js"></script>
</head> </head>
<body> <body>
<div id="app" v-cloak> <div id="app" v-cloak>
@ -527,6 +527,6 @@ window.iFrameResizer = {
} }
</script> </script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.2/iframeResizer.contentWindow.min.js" integrity="sha512-14SY6teTzhrLWeL55Q4uCyxr6GQOxF3pEoMxo2mBxXwPRikdMtzKMYWy2B5Lqjr6PHHoGOxZgPaxUYKQrSmu0A==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="/static/ext/iframeResizer.4.3.2.contentWindow.min.js"></script>
</body> </body>
</html> </html>

View File

@ -19,7 +19,6 @@
<th>{{ _('Email') }}</th> <th>{{ _('Email') }}</th>
<th>created_at</th> <th>created_at</th>
<th>confirmed_at</th> <th>confirmed_at</th>
<th>current_login_at</th>
<th></th> <th></th>
</tr> </tr>
</thead> </thead>
@ -29,7 +28,6 @@
<td>{{ user.email }}</td> <td>{{ user.email }}</td>
<td>{% if user.created_at %}{{ user.created_at | dateformat }}{% endif %}</td> <td>{% if user.created_at %}{{ user.created_at | dateformat }}{% endif %}</td>
<td>{% if user.confirmed_at %}{{ user.confirmed_at | dateformat }}{% endif %}</td> <td>{% if user.confirmed_at %}{{ user.confirmed_at | dateformat }}{% endif %}</td>
<td>{% if user.current_login_at %}{{ user.current_login_at | dateformat }}{% endif %}</td>
<td> <td>
<a href="{{ url_for('admin_user_update', id=user.id) }}">{{ _('Edit') }}</a> <a href="{{ url_for('admin_user_update', id=user.id) }}">{{ _('Edit') }}</a>
<a href="{{ url_for('admin_user_delete', id=user.id) }}">{{ _('Delete') }}</a> <a href="{{ url_for('admin_user_delete', id=user.id) }}">{{ _('Delete') }}</a>

View File

@ -43,14 +43,19 @@
<link rel="icon" type="image/png" sizes="16x16" href="{{ url_for('static', filename='apple-touch-icon.png')}}"> <link rel="icon" type="image/png" sizes="16x16" href="{{ url_for('static', filename='apple-touch-icon.png')}}">
<link rel="manifest" href="{{ url_for('static', filename='site.webmanifest')}}"> <link rel="manifest" href="{{ url_for('static', filename='site.webmanifest')}}">
<link rel="stylesheet" href="{{ url_for('static', filename='ext/bootstrap.4.4.1.min.css')}}"> <link rel="stylesheet" href="{{ url_for('static', filename='ext/bootstrap.4.6.2.min.css')}}">
<link rel="stylesheet" href="{{ url_for('static', filename='ext/font-awesome.5.13.1/css/all.min.css')}}"> <link rel="stylesheet" href="{{ url_for('static', filename='ext/font-awesome.5.13.1/css/all.min.css')}}">
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='site.css')}}" /> <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='site.css')}}" />
{%- block styles %} {%- block styles %}
{%- endblock styles %} {%- endblock styles %}
<script src="{{ url_for('static', filename='ext/jquery-1.12.4.min.js')}}"></script> {% if False | env_override('FLASK_DEBUG') %}
<script src="{{ url_for('static', filename='ext/jquery-3.6.4.js')}}"></script>
{% else %}
<script src="{{ url_for('static', filename='ext/jquery-3.6.4.min.js')}}"></script>
{% endif %}
<script src="{{ url_for('static', filename='ext/moment.2.24.0.with-locales.min.js')}}"></script> <script src="{{ url_for('static', filename='ext/moment.2.24.0.with-locales.min.js')}}"></script>
{% block header_before_site_js %} {% block header_before_site_js %}
@ -319,7 +324,7 @@
</div> </div>
<script src="{{ url_for('static', filename='ext/popper.1.16.0.min.js')}}"></script> <script src="{{ url_for('static', filename='ext/popper.1.16.0.min.js')}}"></script>
<script src="{{ url_for('static', filename='ext/bootstrap.4.4.1.min.js')}}"></script> <script src="{{ url_for('static', filename='ext/bootstrap.4.6.2.min.js')}}"></script>
{% block scripts %} {% block scripts %}
{%- endblock scripts %} {%- endblock scripts %}
{%- endblock body %} {%- endblock body %}

View File

@ -1,7 +1,7 @@
import os import os
import pathlib import pathlib
from flask_babelex import lazy_gettext from flask_babel import lazy_gettext
from psycopg2.errorcodes import CHECK_VIOLATION, UNIQUE_VIOLATION from psycopg2.errorcodes import CHECK_VIOLATION, UNIQUE_VIOLATION
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm.base import NO_CHANGE, object_state from sqlalchemy.orm.base import NO_CHANGE, object_state

View File

@ -1,6 +1,6 @@
from celery import group from celery import group
from flask import flash, redirect, render_template, request, url_for from flask import flash, redirect, render_template, request, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import roles_required from flask_security import roles_required
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.sql import func from sqlalchemy.sql import func

View File

@ -1,5 +1,5 @@
from flask import flash, redirect, render_template, request, url_for from flask import flash, redirect, render_template, request, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import auth_required, current_user from flask_security import auth_required, current_user
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError

View File

@ -1,5 +1,5 @@
from flask import flash, redirect, render_template, url_for from flask import flash, redirect, render_template, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import auth_required from flask_security import auth_required
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError

View File

@ -1,5 +1,5 @@
from flask import flash, redirect, render_template, url_for from flask import flash, redirect, render_template, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import auth_required, current_user from flask_security import auth_required, current_user
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError

View File

@ -1,8 +1,7 @@
import json
from datetime import datetime from datetime import datetime
from flask import Response, flash, jsonify, redirect, render_template, request, url_for from flask import Response, flash, jsonify, redirect, render_template, request, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import auth_required, current_user from flask_security import auth_required, current_user
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
@ -17,7 +16,7 @@ from project.access import (
) )
from project.dateutils import create_icalendar, get_next_full_hour from project.dateutils import create_icalendar, get_next_full_hour
from project.forms.event import CreateEventForm, DeleteEventForm, UpdateEventForm from project.forms.event import CreateEventForm, DeleteEventForm, UpdateEventForm
from project.jsonld import DateTimeEncoder, get_sd_for_event_date from project.jsonld import get_sd_for_event_date
from project.models import ( from project.models import (
AdminUnit, AdminUnit,
Event, Event,
@ -64,9 +63,7 @@ def event(event_id):
structured_datas = list() structured_datas = list()
for event_date in dates: for event_date in dates:
structured_data = json.dumps( structured_data = app.json.dumps(get_sd_for_event_date(event_date), indent=2)
get_sd_for_event_date(event_date), indent=2, cls=DateTimeEncoder
)
structured_datas.append(structured_data) structured_datas.append(structured_data)
return render_template( return render_template(
@ -294,7 +291,7 @@ def get_event_category_choices():
def prepare_event_place(form): def prepare_event_place(form):
if form.event_place_id.data and form.event_place_id.data > 0: if form.event_place_id.data and form.event_place_id.data > 0:
place = EventPlace.query.get(form.event_place_id.data) place = db.session.get(EventPlace, form.event_place_id.data)
if place: if place:
form.event_place_id.choices = [(place.id, get_place_str(place))] form.event_place_id.choices = [(place.id, get_place_str(place))]
@ -305,7 +302,7 @@ def prepare_event_place(form):
def prepare_organizer(form): def prepare_organizer(form):
if form.organizer_id.data and form.organizer_id.data > 0: if form.organizer_id.data and form.organizer_id.data > 0:
organizer = EventOrganizer.query.get(form.organizer_id.data) organizer = db.session.get(EventOrganizer, form.organizer_id.data)
if organizer: if organizer:
form.organizer_id.choices = [(organizer.id, organizer.name)] form.organizer_id.choices = [(organizer.id, organizer.name)]

View File

@ -1,5 +1,3 @@
import json
from flask import render_template, request, url_for from flask import render_template, request, url_for
from flask.wrappers import Response from flask.wrappers import Response
@ -7,7 +5,7 @@ from project import app
from project.access import can_read_event_or_401 from project.access import can_read_event_or_401
from project.dateutils import create_icalendar from project.dateutils import create_icalendar
from project.forms.event_date import FindEventDateForm from project.forms.event_date import FindEventDateForm
from project.jsonld import DateTimeEncoder, get_sd_for_event_date from project.jsonld import get_sd_for_event_date
from project.services.event import ( from project.services.event import (
create_ical_event_for_date, create_ical_event_for_date,
get_event_date_with_details_or_404, get_event_date_with_details_or_404,
@ -50,9 +48,7 @@ def event_date(id):
event_date = get_event_date_with_details_or_404(id) event_date = get_event_date_with_details_or_404(id)
can_read_event_or_401(event_date.event) can_read_event_or_401(event_date.event)
structured_data = json.dumps( structured_data = app.json.dumps(get_sd_for_event_date(event_date), indent=2)
get_sd_for_event_date(event_date), indent=2, cls=DateTimeEncoder
)
url = url_for("event_date", id=id, _external=True) url = url_for("event_date", id=id, _external=True)
share_links = get_share_links(url, event_date.event.name) share_links = get_share_links(url, event_date.event.name)

View File

@ -1,5 +1,5 @@
from flask import flash, redirect, render_template, url_for from flask import flash, redirect, render_template, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import auth_required from flask_security import auth_required
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError

View File

@ -1,5 +1,5 @@
from flask import flash, redirect, render_template, url_for from flask import flash, redirect, render_template, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import auth_required from flask_security import auth_required
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError

View File

@ -42,7 +42,7 @@ def image(id, hash=None):
# Save from database to disk # Save from database to disk
make_dir(img_path) make_dir(img_path)
img = get_image_from_bytes(image.data) img = get_image_from_bytes(image.data)
img.thumbnail((width, height), PIL.Image.ANTIALIAS) img.thumbnail((width, height), PIL.Image.Resampling.LANCZOS)
img.save(file_path) img.save(file_path)
# Load from disk # Load from disk

View File

@ -1,6 +1,6 @@
from flask import request from flask import request
from flask.json import jsonify from flask.json import jsonify
from flask_babelex import gettext from flask_babel import gettext
from flask_security import url_for_security from flask_security import url_for_security
from flask_security.utils import localize_callback from flask_security.utils import localize_callback

View File

@ -1,5 +1,5 @@
from flask import flash, redirect, render_template, request, url_for from flask import flash, redirect, render_template, request, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import auth_required, current_user from flask_security import auth_required, current_user
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.sql import desc, func from sqlalchemy.sql import desc, func

View File

@ -1,5 +1,5 @@
from flask import flash, redirect, render_template, url_for from flask import flash, redirect, render_template, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import current_user, permissions_required from flask_security import current_user, permissions_required
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError

View File

@ -1,5 +1,5 @@
from flask import flash, redirect, render_template, url_for from flask import flash, redirect, render_template, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import auth_required, current_user from flask_security import auth_required, current_user
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError

View File

@ -1,5 +1,5 @@
from flask import Response, flash, redirect, render_template, url_for from flask import Response, flash, redirect, render_template, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import auth_required from flask_security import auth_required
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError

View File

@ -1,5 +1,5 @@
from flask import abort, flash, redirect, render_template, url_for from flask import abort, flash, redirect, render_template, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import auth_required from flask_security import auth_required
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.sql import desc from sqlalchemy.sql import desc

View File

@ -1,5 +1,5 @@
from flask import abort, flash, redirect, render_template, url_for from flask import abort, flash, redirect, render_template, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import auth_required from flask_security import auth_required
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.sql import desc from sqlalchemy.sql import desc

View File

@ -1,5 +1,5 @@
from flask import abort, flash, redirect, render_template, url_for from flask import abort, flash, redirect, render_template, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import auth_required from flask_security import auth_required
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError

View File

@ -2,7 +2,7 @@ import json
import os.path import os.path
from flask import render_template, request, send_from_directory, url_for from flask import render_template, request, send_from_directory, url_for
from flask_babelex import gettext from flask_babel import gettext
from markupsafe import Markup from markupsafe import Markup
from sqlalchemy import text from sqlalchemy import text

View File

@ -1,5 +1,5 @@
from flask import flash, redirect, render_template, url_for from flask import flash, redirect, render_template, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import auth_required, current_user from flask_security import auth_required, current_user
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError

View File

@ -1,7 +1,7 @@
from urllib.parse import quote_plus from urllib.parse import quote_plus
from flask import Markup, flash, g, redirect, render_template, request, url_for from flask import Markup, flash, g, redirect, render_template, request, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_login.utils import decode_cookie from flask_login.utils import decode_cookie
from flask_mail import Message from flask_mail import Message
from flask_security import current_user from flask_security import current_user

View File

@ -1,7 +1,5 @@
import json
from flask import flash, redirect, render_template, request, url_for from flask import flash, redirect, render_template, request, url_for
from flask_babelex import gettext from flask_babel import gettext
from flask_security import current_user from flask_security import current_user
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.sql import func from sqlalchemy.sql import func
@ -15,7 +13,7 @@ from project.access import (
from project.dateutils import get_next_full_hour from project.dateutils import get_next_full_hour
from project.forms.event_date import FindEventDateForm from project.forms.event_date import FindEventDateForm
from project.forms.event_suggestion import CreateEventSuggestionForm from project.forms.event_suggestion import CreateEventSuggestionForm
from project.jsonld import DateTimeEncoder, get_sd_for_event_date from project.jsonld import get_sd_for_event_date
from project.models import AdminUnit, EventOrganizer, EventReviewStatus, EventSuggestion from project.models import AdminUnit, EventOrganizer, EventReviewStatus, EventSuggestion
from project.services.event import ( from project.services.event import (
get_event_date_with_details_or_404, get_event_date_with_details_or_404,
@ -75,9 +73,7 @@ def widget_event_date(au_short_name, id):
event_date = get_event_date_with_details_or_404(id) event_date = get_event_date_with_details_or_404(id)
can_read_event_or_401(event_date.event) can_read_event_or_401(event_date.event)
structured_data = json.dumps( structured_data = app.json.dumps(get_sd_for_event_date(event_date), indent=2)
get_sd_for_event_date(event_date), indent=2, cls=DateTimeEncoder
)
url = url_for("event_date", id=id, _external=True) url = url_for("event_date", id=id, _external=True)
share_links = get_share_links(url, event_date.event.name) share_links = get_share_links(url, event_date.event.name)

5
pytest.ini Executable file
View File

@ -0,0 +1,5 @@
[pytest]
filterwarnings =
ignore
default:::project
ignore::sqlalchemy.exc.LegacyAPIWarning

View File

@ -10,7 +10,7 @@ arrow==1.2.3
async-timeout==4.0.2 async-timeout==4.0.2
attrs==20.3.0 attrs==20.3.0
Authlib==1.2.0 Authlib==1.2.0
Babel==2.9.1 Babel==2.12.1
bcrypt==4.0.1 bcrypt==4.0.1
beautifulsoup4==4.12.2 beautifulsoup4==4.12.2
billiard==3.6.4.0 billiard==3.6.4.0
@ -42,7 +42,7 @@ filelock==3.11.0
flake8==6.0.0 flake8==6.0.0
Flask==2.2.3 Flask==2.2.3
flask-apispec==0.11.4 flask-apispec==0.11.4
Flask-BabelEx==0.9.4 flask-babel==3.1.0
Flask-Bootstrap==3.3.7.1 Flask-Bootstrap==3.3.7.1
Flask-Cors==3.0.10 Flask-Cors==3.0.10
Flask-Dance==6.2.0 Flask-Dance==6.2.0

View File

@ -8,7 +8,7 @@ def test_read(client, seeder, utils):
assert response.json["settings"]["color"] == "black" assert response.json["settings"]["color"] == "black"
def test_put(client, seeder, utils, app): def test_put(client, seeder, utils, app, db):
_, admin_unit_id = seeder.setup_api_access() _, admin_unit_id = seeder.setup_api_access()
custom_widget_id = seeder.insert_event_custom_widget(admin_unit_id) custom_widget_id = seeder.insert_event_custom_widget(admin_unit_id)
@ -19,12 +19,12 @@ def test_put(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import CustomWidget from project.models import CustomWidget
custom_widget = CustomWidget.query.get(custom_widget_id) custom_widget = db.session.get(CustomWidget, custom_widget_id)
assert custom_widget.name == "Neuer Name" assert custom_widget.name == "Neuer Name"
assert custom_widget.widget_type == "search" assert custom_widget.widget_type == "search"
def test_patch(client, seeder, utils, app): def test_patch(client, seeder, utils, app, db):
_, admin_unit_id = seeder.setup_api_access() _, admin_unit_id = seeder.setup_api_access()
custom_widget_id = seeder.insert_event_custom_widget(admin_unit_id) custom_widget_id = seeder.insert_event_custom_widget(admin_unit_id)
@ -35,12 +35,12 @@ def test_patch(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import CustomWidget from project.models import CustomWidget
custom_widget = CustomWidget.query.get(custom_widget_id) custom_widget = db.session.get(CustomWidget, custom_widget_id)
assert custom_widget.name == "Neuer Name" assert custom_widget.name == "Neuer Name"
assert custom_widget.widget_type == "search" assert custom_widget.widget_type == "search"
def test_delete(client, seeder, utils, app): def test_delete(client, seeder, utils, app, db):
_, admin_unit_id = seeder.setup_api_access() _, admin_unit_id = seeder.setup_api_access()
custom_widget_id = seeder.insert_event_custom_widget(admin_unit_id) custom_widget_id = seeder.insert_event_custom_widget(admin_unit_id)
@ -51,5 +51,5 @@ def test_delete(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import CustomWidget from project.models import CustomWidget
custom_widget = CustomWidget.query.get(custom_widget_id) custom_widget = db.session.get(CustomWidget, custom_widget_id)
assert custom_widget is None assert custom_widget is None

View File

@ -13,7 +13,7 @@ def test_read(client, app, db, seeder, utils):
from project.models import Event, EventStatus from project.models import Event, EventStatus
from project.services.event import update_event from project.services.event import update_event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
event.status = EventStatus.scheduled event.status = EventStatus.scheduled
update_event(event) update_event(event)
@ -180,7 +180,7 @@ def create_put(
@pytest.mark.parametrize( @pytest.mark.parametrize(
"variant", ["normal", "legacy", "recurrence", "two_date_definitions"] "variant", ["normal", "legacy", "recurrence", "two_date_definitions"]
) )
def test_put(client, seeder, utils, app, mocker, variant): def test_put(client, seeder, utils, app, db, mocker, variant):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
event_id = seeder.create_event(admin_unit_id) event_id = seeder.create_event(admin_unit_id)
place_id = seeder.upsert_default_event_place(admin_unit_id) place_id = seeder.upsert_default_event_place(admin_unit_id)
@ -227,7 +227,7 @@ def test_put(client, seeder, utils, app, mocker, variant):
EventTargetGroupOrigin, EventTargetGroupOrigin,
) )
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert event.name == "Neuer Name" assert event.name == "Neuer Name"
assert event.event_place_id == place_id assert event.event_place_id == place_id
assert event.organizer_id == organizer_id assert event.organizer_id == organizer_id
@ -353,7 +353,7 @@ def test_put_organizerFromAnotherAdminUnit(client, seeder, utils, app):
utils.assert_response_api_error(response, "Check Violation") utils.assert_response_api_error(response, "Check Violation")
def test_put_co_organizers(client, seeder, utils, app): def test_put_co_organizers(client, seeder, utils, app, db):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
event_id = seeder.create_event(admin_unit_id) event_id = seeder.create_event(admin_unit_id)
place_id = seeder.upsert_default_event_place(admin_unit_id) place_id = seeder.upsert_default_event_place(admin_unit_id)
@ -374,7 +374,7 @@ def test_put_co_organizers(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import Event from project.models import Event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert len(event.co_organizers) == 2 assert len(event.co_organizers) == 2
assert event.co_organizers[0].id == organizer_a_id assert event.co_organizers[0].id == organizer_a_id
assert event.co_organizers[1].id == organizer_b_id assert event.co_organizers[1].id == organizer_b_id
@ -443,7 +443,7 @@ def test_put_durationMoreThanMaxAllowedDuration(client, seeder, utils, app):
utils.assert_response_bad_request(response) utils.assert_response_bad_request(response)
def test_put_categories(client, seeder, utils, app): def test_put_categories(client, seeder, utils, app, db):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
event_id = seeder.create_event(admin_unit_id) event_id = seeder.create_event(admin_unit_id)
place_id = seeder.upsert_default_event_place(admin_unit_id) place_id = seeder.upsert_default_event_place(admin_unit_id)
@ -460,11 +460,11 @@ def test_put_categories(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import Event from project.models import Event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert event.category.name == "Art" assert event.category.name == "Art"
def test_put_dateWithTimezone(client, seeder, utils, app): def test_put_dateWithTimezone(client, seeder, utils, app, db):
from project.dateutils import create_berlin_date from project.dateutils import create_berlin_date
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
@ -483,11 +483,11 @@ def test_put_dateWithTimezone(client, seeder, utils, app):
expected = create_berlin_date(2030, 12, 31, 14, 30) expected = create_berlin_date(2030, 12, 31, 14, 30)
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert event.date_definitions[0].start == expected assert event.date_definitions[0].start == expected
def test_put_dateWithoutTimezone(client, seeder, utils, app): def test_put_dateWithoutTimezone(client, seeder, utils, app, db):
from project.dateutils import create_berlin_date from project.dateutils import create_berlin_date
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
@ -506,7 +506,7 @@ def test_put_dateWithoutTimezone(client, seeder, utils, app):
expected = create_berlin_date(2030, 12, 31, 14, 30) expected = create_berlin_date(2030, 12, 31, 14, 30)
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert event.date_definitions[0].start == expected assert event.date_definitions[0].start == expected
@ -552,7 +552,7 @@ def test_put_referencedEventNonDirtyUpdate_doesNotSendMail(
mail_mock.assert_not_called() mail_mock.assert_not_called()
def test_patch(client, seeder, utils, app): def test_patch(client, seeder, utils, app, db):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
event_id = seeder.create_event(admin_unit_id) event_id = seeder.create_event(admin_unit_id)
@ -563,12 +563,12 @@ def test_patch(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import Event from project.models import Event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert event.name == "Name" assert event.name == "Name"
assert event.description == "Neu" assert event.description == "Neu"
def test_patch_startAfterEnd(client, seeder, utils, app): def test_patch_startAfterEnd(client, seeder, utils, app, db):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
event_id = seeder.create_event(admin_unit_id) event_id = seeder.create_event(admin_unit_id)
@ -601,7 +601,7 @@ def test_patch_referencedEventUpdate_sendsMail(client, seeder, utils, app, mocke
utils.assert_send_mail_called(mail_mock, "other@test.de") utils.assert_send_mail_called(mail_mock, "other@test.de")
def test_patch_photo(client, seeder, utils, app, requests_mock): def test_patch_photo(client, seeder, utils, app, db, requests_mock):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
event_id = seeder.create_event(admin_unit_id) event_id = seeder.create_event(admin_unit_id)
@ -619,7 +619,7 @@ def test_patch_photo(client, seeder, utils, app, requests_mock):
with app.app_context(): with app.app_context():
from project.models import Event from project.models import Event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert event.photo is not None assert event.photo is not None
assert event.photo.encoding_format == "image/png" assert event.photo.encoding_format == "image/png"
@ -640,7 +640,7 @@ def test_patch_photo_copyright(client, db, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import Event from project.models import Event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert event.photo.id == image_id assert event.photo.id == image_id
assert event.photo.data is not None assert event.photo.data is not None
assert event.photo.copyright_text == "Heiner" assert event.photo.copyright_text == "Heiner"
@ -662,14 +662,14 @@ def test_patch_photo_delete(client, db, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import Event, Image from project.models import Event, Image
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert event.photo_id is None assert event.photo_id is None
image = Image.query.get(image_id) image = db.session.get(Image, image_id)
assert image is None assert image is None
def test_delete(client, seeder, utils, app): def test_delete(client, seeder, utils, app, db):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
event_id = seeder.create_event(admin_unit_id) event_id = seeder.create_event(admin_unit_id)
@ -680,7 +680,7 @@ def test_delete(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import Event from project.models import Event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert event is None assert event is None

View File

@ -102,7 +102,7 @@ def test_search(client, seeder, utils, app, db):
with app.app_context(): with app.app_context():
from project.models import Event, EventStatus from project.models import Event, EventStatus
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
event.status = EventStatus.cancelled event.status = EventStatus.cancelled
db.session.commit() db.session.commit()

View File

@ -7,7 +7,7 @@ def test_read(client, app, db, seeder, utils):
assert response.json["id"] == event_list_id assert response.json["id"] == event_list_id
def test_put(client, seeder, utils, app): def test_put(client, seeder, utils, app, db):
_, admin_unit_id = seeder.setup_api_access() _, admin_unit_id = seeder.setup_api_access()
event_list_id = seeder.create_event_list(admin_unit_id) event_list_id = seeder.create_event_list(admin_unit_id)
@ -18,11 +18,11 @@ def test_put(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import EventList from project.models import EventList
event_list = EventList.query.get(event_list_id) event_list = db.session.get(EventList, event_list_id)
assert event_list.name == "Neuer Name" assert event_list.name == "Neuer Name"
def test_patch(client, seeder, utils, app): def test_patch(client, seeder, utils, app, db):
_, admin_unit_id = seeder.setup_api_access() _, admin_unit_id = seeder.setup_api_access()
event_list_id = seeder.create_event_list(admin_unit_id) event_list_id = seeder.create_event_list(admin_unit_id)
@ -33,11 +33,11 @@ def test_patch(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import EventList from project.models import EventList
event_list = EventList.query.get(event_list_id) event_list = db.session.get(EventList, event_list_id)
assert event_list.name == "Neuer Name" assert event_list.name == "Neuer Name"
def test_delete(client, seeder, utils, app): def test_delete(client, seeder, utils, app, db):
_, admin_unit_id = seeder.setup_api_access() _, admin_unit_id = seeder.setup_api_access()
event_list_id = seeder.create_event_list(admin_unit_id) event_list_id = seeder.create_event_list(admin_unit_id)
@ -48,7 +48,7 @@ def test_delete(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import EventList from project.models import EventList
event_list = EventList.query.get(event_list_id) event_list = db.session.get(EventList, event_list_id)
assert event_list is None assert event_list is None
@ -63,7 +63,7 @@ def test_events(client, seeder, utils):
assert response.json["items"][0]["id"] == event_id assert response.json["items"][0]["id"] == event_id
def test_events_put(client, seeder, utils, app): def test_events_put(client, seeder, utils, app, db):
_, admin_unit_id = seeder.setup_api_access() _, admin_unit_id = seeder.setup_api_access()
event_id = seeder.create_event(admin_unit_id) event_id = seeder.create_event(admin_unit_id)
event_list_id = seeder.create_event_list(admin_unit_id) event_list_id = seeder.create_event_list(admin_unit_id)
@ -77,12 +77,12 @@ def test_events_put(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import EventList from project.models import EventList
event_list = EventList.query.get(event_list_id) event_list = db.session.get(EventList, event_list_id)
assert len(event_list.events) == 1 assert len(event_list.events) == 1
assert event_list.events[0].id == event_id assert event_list.events[0].id == event_id
def test_events_delete(client, seeder, utils, app): def test_events_delete(client, seeder, utils, app, db):
_, admin_unit_id = seeder.setup_api_access() _, admin_unit_id = seeder.setup_api_access()
event_id = seeder.create_event(admin_unit_id) event_id = seeder.create_event(admin_unit_id)
event_list_id = seeder.create_event_list(admin_unit_id, event_id) event_list_id = seeder.create_event_list(admin_unit_id, event_id)
@ -96,8 +96,8 @@ def test_events_delete(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import Event, EventList from project.models import Event, EventList
event_list = EventList.query.get(event_list_id) event_list = db.session.get(EventList, event_list_id)
assert len(event_list.events) == 0 assert len(event_list.events) == 0
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert event is not None assert event is not None

View File

@ -215,7 +215,7 @@ def test_events_post(client, seeder, utils, app, variant):
assert len(event.date_definitions) == 1 assert len(event.date_definitions) == 1
def test_events_post_co_organizers(client, seeder, utils, app): def test_events_post_co_organizers(client, seeder, utils, app, db):
url, data, admin_unit_id, place_id, organizer_id = prepare_events_post_data( url, data, admin_unit_id, place_id, organizer_id = prepare_events_post_data(
seeder, utils seeder, utils
) )
@ -233,7 +233,7 @@ def test_events_post_co_organizers(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import Event from project.models import Event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert len(event.co_organizers) == 2 assert len(event.co_organizers) == 2
assert event.co_organizers[0].id == organizer_a_id assert event.co_organizers[0].id == organizer_a_id
assert event.co_organizers[1].id == organizer_b_id assert event.co_organizers[1].id == organizer_b_id
@ -267,7 +267,7 @@ def test_events_post_photo_too_small(client, seeder, utils, app):
assert error["message"] == "Image is too small (1x1px). At least 320x320px." assert error["message"] == "Image is too small (1x1px). At least 320x320px."
def test_events_import(client, seeder, utils, app, shared_datadir): def test_events_import(client, seeder, utils, app, db, shared_datadir):
external_url = "https://www.harzinfo.de/event/xy" external_url = "https://www.harzinfo.de/event/xy"
utils.mock_get_request_with_file( utils.mock_get_request_with_file(
external_url, shared_datadir, "harzinfo_biathlon.html" external_url, shared_datadir, "harzinfo_biathlon.html"
@ -284,7 +284,7 @@ def test_events_import(client, seeder, utils, app, shared_datadir):
with app.app_context(): with app.app_context():
from project.models import Event from project.models import Event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert "lädt" in event.description assert "lädt" in event.description
# 422 # 422
@ -459,7 +459,7 @@ def test_outgoing_relation_list_notAuthenticated(client, seeder, utils):
utils.assert_response_unauthorized(response) utils.assert_response_unauthorized(response)
def test_outgoing_relation_post(client, app, seeder, utils): def test_outgoing_relation_post(client, app, seeder, utils, db):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
other_user_id = seeder.create_user("other@test.de") other_user_id = seeder.create_user("other@test.de")
other_admin_unit_id = seeder.create_admin_unit(other_user_id, "Other Crew") other_admin_unit_id = seeder.create_admin_unit(other_user_id, "Other Crew")
@ -480,7 +480,7 @@ def test_outgoing_relation_post(client, app, seeder, utils):
with app.app_context(): with app.app_context():
from project.models import AdminUnitRelation from project.models import AdminUnitRelation
relation = AdminUnitRelation.query.get(int(response.json["id"])) relation = db.session.get(AdminUnitRelation, int(response.json["id"]))
assert relation is not None assert relation is not None
assert relation.source_admin_unit_id == admin_unit_id assert relation.source_admin_unit_id == admin_unit_id
assert relation.target_admin_unit_id == other_admin_unit_id assert relation.target_admin_unit_id == other_admin_unit_id
@ -535,7 +535,7 @@ def test_organization_invitation_list(client, seeder, utils):
assert response.json["items"][0]["organization_name"] == "Invited Organization" assert response.json["items"][0]["organization_name"] == "Invited Organization"
def test_organization_invitation_list_post(client, app, seeder, utils, mocker): def test_organization_invitation_list_post(client, app, seeder, db, utils, mocker):
mail_mock = utils.mock_send_mails(mocker) mail_mock = utils.mock_send_mails(mocker)
_, admin_unit_id = seeder.setup_api_access() _, admin_unit_id = seeder.setup_api_access()
@ -558,7 +558,7 @@ def test_organization_invitation_list_post(client, app, seeder, utils, mocker):
with app.app_context(): with app.app_context():
from project.models import AdminUnitInvitation from project.models import AdminUnitInvitation
invitation = AdminUnitInvitation.query.get(invitation_id) invitation = db.session.get(AdminUnitInvitation, invitation_id)
assert invitation is not None assert invitation is not None
assert invitation.admin_unit_id == admin_unit_id assert invitation.admin_unit_id == admin_unit_id
assert invitation.email == "invited@test.de" assert invitation.email == "invited@test.de"

View File

@ -16,7 +16,7 @@ def test_read(client, seeder, utils):
assert response.json["relation_verify"] is False assert response.json["relation_verify"] is False
def test_put(client, app, seeder, utils): def test_put(client, app, seeder, utils, db):
_, admin_unit_id = seeder.setup_api_access() _, admin_unit_id = seeder.setup_api_access()
invitation_id = seeder.create_admin_unit_invitation(admin_unit_id) invitation_id = seeder.create_admin_unit_invitation(admin_unit_id)
@ -36,7 +36,7 @@ def test_put(client, app, seeder, utils):
with app.app_context(): with app.app_context():
from project.models import AdminUnitInvitation from project.models import AdminUnitInvitation
invitation = AdminUnitInvitation.query.get(invitation_id) invitation = db.session.get(AdminUnitInvitation, invitation_id)
assert invitation is not None assert invitation is not None
assert invitation.admin_unit_id == admin_unit_id assert invitation.admin_unit_id == admin_unit_id
assert invitation.email == "invited@test.de" assert invitation.email == "invited@test.de"
@ -45,7 +45,7 @@ def test_put(client, app, seeder, utils):
assert invitation.relation_verify assert invitation.relation_verify
def test_patch(client, app, seeder, utils): def test_patch(client, app, seeder, utils, db):
_, admin_unit_id = seeder.setup_api_access() _, admin_unit_id = seeder.setup_api_access()
invitation_id = seeder.create_admin_unit_invitation(admin_unit_id) invitation_id = seeder.create_admin_unit_invitation(admin_unit_id)
@ -63,13 +63,13 @@ def test_patch(client, app, seeder, utils):
with app.app_context(): with app.app_context():
from project.models import AdminUnitInvitation from project.models import AdminUnitInvitation
invitation = AdminUnitInvitation.query.get(invitation_id) invitation = db.session.get(AdminUnitInvitation, invitation_id)
assert invitation is not None assert invitation is not None
assert invitation.admin_unit_id == admin_unit_id assert invitation.admin_unit_id == admin_unit_id
assert invitation.relation_auto_verify_event_reference_requests assert invitation.relation_auto_verify_event_reference_requests
def test_delete(client, app, seeder, utils): def test_delete(client, app, seeder, utils, db):
_, admin_unit_id = seeder.setup_api_access() _, admin_unit_id = seeder.setup_api_access()
invitation_id = seeder.create_admin_unit_invitation(admin_unit_id) invitation_id = seeder.create_admin_unit_invitation(admin_unit_id)
@ -83,5 +83,5 @@ def test_delete(client, app, seeder, utils):
with app.app_context(): with app.app_context():
from project.models import AdminUnitInvitation from project.models import AdminUnitInvitation
invitation = AdminUnitInvitation.query.get(invitation_id) invitation = db.session.get(AdminUnitInvitation, invitation_id)
assert invitation is None assert invitation is None

View File

@ -47,7 +47,7 @@ def test_put(client, app, seeder, utils, db):
with app.app_context(): with app.app_context():
from project.models import AdminUnit from project.models import AdminUnit
admin_unit = AdminUnit.query.get(admin_unit_id) admin_unit = db.session.get(AdminUnit, admin_unit_id)
admin_unit.can_verify_other = True admin_unit.can_verify_other = True
db.session.commit() db.session.commit()
@ -66,7 +66,7 @@ def test_put(client, app, seeder, utils, db):
with app.app_context(): with app.app_context():
from project.models import AdminUnitRelation from project.models import AdminUnitRelation
relation = AdminUnitRelation.query.get(relation_id) relation = db.session.get(AdminUnitRelation, relation_id)
assert relation is not None assert relation is not None
assert relation.source_admin_unit_id == admin_unit_id assert relation.source_admin_unit_id == admin_unit_id
assert relation.target_admin_unit_id == other_admin_unit_id assert relation.target_admin_unit_id == other_admin_unit_id
@ -74,7 +74,7 @@ def test_put(client, app, seeder, utils, db):
assert relation.verify assert relation.verify
def test_patch(client, app, seeder, utils): def test_patch(client, app, seeder, utils, db):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
( (
other_user_id, other_user_id,
@ -96,14 +96,14 @@ def test_patch(client, app, seeder, utils):
with app.app_context(): with app.app_context():
from project.models import AdminUnitRelation from project.models import AdminUnitRelation
relation = AdminUnitRelation.query.get(relation_id) relation = db.session.get(AdminUnitRelation, relation_id)
assert relation is not None assert relation is not None
assert relation.source_admin_unit_id == admin_unit_id assert relation.source_admin_unit_id == admin_unit_id
assert relation.target_admin_unit_id == other_admin_unit_id assert relation.target_admin_unit_id == other_admin_unit_id
assert relation.auto_verify_event_reference_requests assert relation.auto_verify_event_reference_requests
def test_delete(client, app, seeder, utils): def test_delete(client, app, seeder, utils, db):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
( (
other_user_id, other_user_id,
@ -121,5 +121,5 @@ def test_delete(client, app, seeder, utils):
with app.app_context(): with app.app_context():
from project.models import AdminUnitRelation from project.models import AdminUnitRelation
relation = AdminUnitRelation.query.get(relation_id) relation = db.session.get(AdminUnitRelation, relation_id)
assert relation is None assert relation is None

View File

@ -6,7 +6,7 @@ def test_read(client, seeder, utils):
utils.get_ok(url) utils.get_ok(url)
def test_put(client, seeder, utils, app): def test_put(client, seeder, utils, app, db):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
organizer_id = seeder.upsert_default_event_organizer(admin_unit_id) organizer_id = seeder.upsert_default_event_organizer(admin_unit_id)
@ -17,11 +17,11 @@ def test_put(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import EventOrganizer from project.models import EventOrganizer
organizer = EventOrganizer.query.get(organizer_id) organizer = db.session.get(EventOrganizer, organizer_id)
assert organizer.name == "Neuer Name" assert organizer.name == "Neuer Name"
def test_patch(client, seeder, utils, app): def test_patch(client, seeder, utils, app, db):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
organizer_id = seeder.upsert_default_event_organizer(admin_unit_id) organizer_id = seeder.upsert_default_event_organizer(admin_unit_id)
@ -32,12 +32,12 @@ def test_patch(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import EventOrganizer from project.models import EventOrganizer
organizer = EventOrganizer.query.get(organizer_id) organizer = db.session.get(EventOrganizer, organizer_id)
assert organizer.name == "Meine Crew" assert organizer.name == "Meine Crew"
assert organizer.phone == "55555" assert organizer.phone == "55555"
def test_delete(client, seeder, utils, app): def test_delete(client, seeder, utils, app, db):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
organizer_id = seeder.upsert_default_event_organizer(admin_unit_id) organizer_id = seeder.upsert_default_event_organizer(admin_unit_id)
@ -48,5 +48,5 @@ def test_delete(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import EventOrganizer from project.models import EventOrganizer
organizer = EventOrganizer.query.get(organizer_id) organizer = db.session.get(EventOrganizer, organizer_id)
assert organizer is None assert organizer is None

View File

@ -6,7 +6,7 @@ def test_read(client, app, db, seeder, utils):
utils.get_ok(url) utils.get_ok(url)
def test_put(client, seeder, utils, app): def test_put(client, seeder, utils, app, db):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
place_id = seeder.upsert_default_event_place(admin_unit_id) place_id = seeder.upsert_default_event_place(admin_unit_id)
@ -17,7 +17,7 @@ def test_put(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import EventPlace from project.models import EventPlace
place = EventPlace.query.get(place_id) place = db.session.get(EventPlace, place_id)
assert place.name == "Neuer Name" assert place.name == "Neuer Name"
@ -28,7 +28,7 @@ def test_put_nonActiveReturnsUnauthorized(client, seeder, db, utils, app):
with app.app_context(): with app.app_context():
from project.models import User from project.models import User
user = User.query.get(user_id) user = db.session.get(User, user_id)
user.active = False user.active = False
db.session.commit() db.session.commit()
@ -37,7 +37,7 @@ def test_put_nonActiveReturnsUnauthorized(client, seeder, db, utils, app):
utils.assert_response_unauthorized(response) utils.assert_response_unauthorized(response)
def test_patch(client, seeder, utils, app): def test_patch(client, seeder, utils, app, db):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
place_id = seeder.upsert_default_event_place(admin_unit_id) place_id = seeder.upsert_default_event_place(admin_unit_id)
@ -48,7 +48,7 @@ def test_patch(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import EventPlace from project.models import EventPlace
place = EventPlace.query.get(place_id) place = db.session.get(EventPlace, place_id)
assert place.name == "Meine Crew" assert place.name == "Meine Crew"
assert place.description == "Klasse" assert place.description == "Klasse"
@ -64,7 +64,7 @@ def test_patch_location(db, seeder, utils, app):
location.postalCode = "12345" location.postalCode = "12345"
location.city = "City" location.city = "City"
event = EventPlace.query.get(place_id) event = db.session.get(EventPlace, place_id)
event.location = location event.location = location
db.session.commit() db.session.commit()
@ -80,12 +80,12 @@ def test_patch_location(db, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import EventPlace from project.models import EventPlace
place = EventPlace.query.get(place_id) place = db.session.get(EventPlace, place_id)
assert place.location.id == location_id assert place.location.id == location_id
assert place.location.postalCode == "54321" assert place.location.postalCode == "54321"
def test_delete(client, seeder, utils, app): def test_delete(client, seeder, utils, app, db):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
place_id = seeder.upsert_default_event_place(admin_unit_id) place_id = seeder.upsert_default_event_place(admin_unit_id)
@ -96,5 +96,5 @@ def test_delete(client, seeder, utils, app):
with app.app_context(): with app.app_context():
from project.models import EventPlace from project.models import EventPlace
place = EventPlace.query.get(place_id) place = db.session.get(EventPlace, place_id)
assert place is None assert place is None

View File

@ -44,7 +44,7 @@ def test_organization_invitation_read_wrongEmail(client, seeder, utils):
utils.assert_response_unauthorized(response) utils.assert_response_unauthorized(response)
def test_organization_invitation_delete(client, app, seeder, utils): def test_organization_invitation_delete(client, app, seeder, utils, db):
_, admin_unit_id = seeder.setup_base(log_in=False) _, admin_unit_id = seeder.setup_base(log_in=False)
invitation_id = seeder.create_admin_unit_invitation(admin_unit_id) invitation_id = seeder.create_admin_unit_invitation(admin_unit_id)
@ -61,7 +61,7 @@ def test_organization_invitation_delete(client, app, seeder, utils):
with app.app_context(): with app.app_context():
from project.models import AdminUnitInvitation from project.models import AdminUnitInvitation
invitation = AdminUnitInvitation.query.get(invitation_id) invitation = db.session.get(AdminUnitInvitation, invitation_id)
assert invitation is None assert invitation is None

View File

@ -292,7 +292,7 @@ class Seeder(object):
with self._app.app_context(): with self._app.app_context():
from project.models import OAuth2Client from project.models import OAuth2Client
oauth2_client = OAuth2Client.query.get(oauth2_client_id) oauth2_client = self._db.session.get(OAuth2Client, oauth2_client_id)
client_id = oauth2_client.client_id client_id = oauth2_client.client_id
client_secret = oauth2_client.client_secret client_secret = oauth2_client.client_secret
scope = oauth2_client.scope scope = oauth2_client.scope
@ -314,7 +314,7 @@ class Seeder(object):
from project.models import Event from project.models import Event
with self._app.app_context(): with self._app.app_context():
event = Event.query.get(event_id) event = self._db.session.get(Event, event_id)
event_date_id = event.dates[0].id event_date_id = event.dates[0].id
return event_date_id return event_date_id
@ -400,7 +400,7 @@ class Seeder(object):
from project.services.event import update_event from project.services.event import update_event
with self._app.app_context(): with self._app.app_context():
event = Event.query.get(event_id) event = self._db.session.get(Event, event_id)
date_definition = self.create_event_date_definition( date_definition = self.create_event_date_definition(
start, end, allday, recurrence_rule start, end, allday, recurrence_rule
@ -501,7 +501,7 @@ class Seeder(object):
with self._app.app_context(): with self._app.app_context():
from project.models import Event from project.models import Event
event = Event.query.get(event_id) event = self._db.session.get(Event, event_id)
event.photo_id = image_id event.photo_id = image_id
self._db.session.commit() self._db.session.commit()
@ -542,8 +542,8 @@ class Seeder(object):
from project.models import Event, EventList from project.models import Event, EventList
with self._app.app_context(): with self._app.app_context():
event = Event.query.get(event_id) event = self._db.session.get(Event, event_id)
event_list = EventList.query.get(event_list_id) event_list = self._db.session.get(EventList, event_list_id)
event_list.events.append(event) event_list.events.append(event)
self._db.session.commit() self._db.session.commit()

View File

@ -1,7 +1,7 @@
import pytest import pytest
def test_update_event_dates_with_recurrence_rule(client, seeder, utils, app): def test_update_event_dates_with_recurrence_rule(client, seeder, utils, app, db):
user_id, admin_unit_id = seeder.setup_base() user_id, admin_unit_id = seeder.setup_base()
event_id = seeder.create_event(admin_unit_id) event_id = seeder.create_event(admin_unit_id)
@ -10,7 +10,7 @@ def test_update_event_dates_with_recurrence_rule(client, seeder, utils, app):
from project.models import Event from project.models import Event
from project.services.event import update_event_dates_with_recurrence_rule from project.services.event import update_event_dates_with_recurrence_rule
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
date_definition = event.date_definitions[0] date_definition = event.date_definitions[0]
date_definition.start = create_berlin_date(2030, 12, 31, 14, 30) date_definition.start = create_berlin_date(2030, 12, 31, 14, 30)
date_definition.end = create_berlin_date(2030, 12, 31, 16, 30) date_definition.end = create_berlin_date(2030, 12, 31, 16, 30)
@ -55,7 +55,7 @@ def test_update_event_dates_with_recurrence_rule(client, seeder, utils, app):
def test_update_event_dates_with_recurrence_rule_past( def test_update_event_dates_with_recurrence_rule_past(
client, seeder, utils, app, mocker client, seeder, utils, app, db, mocker
): ):
user_id, admin_unit_id = seeder.setup_base() user_id, admin_unit_id = seeder.setup_base()
event_id = seeder.create_event(admin_unit_id) event_id = seeder.create_event(admin_unit_id)
@ -67,7 +67,7 @@ def test_update_event_dates_with_recurrence_rule_past(
utils.mock_now(mocker, 2020, 1, 3) utils.mock_now(mocker, 2020, 1, 3)
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
date_definition = event.date_definitions[0] date_definition = event.date_definitions[0]
date_definition.start = create_berlin_date(2020, 1, 2, 14, 30) date_definition.start = create_berlin_date(2020, 1, 2, 14, 30)
date_definition.end = create_berlin_date(2020, 1, 2, 16, 30) date_definition.end = create_berlin_date(2020, 1, 2, 16, 30)
@ -87,7 +87,7 @@ def test_update_event_dates_with_recurrence_rule_past(
def test_update_event_dates_with_recurrence_rule_past_forever( def test_update_event_dates_with_recurrence_rule_past_forever(
client, seeder, utils, app, mocker client, seeder, utils, app, db, mocker
): ):
user_id, admin_unit_id = seeder.setup_base() user_id, admin_unit_id = seeder.setup_base()
event_id = seeder.create_event(admin_unit_id) event_id = seeder.create_event(admin_unit_id)
@ -99,7 +99,7 @@ def test_update_event_dates_with_recurrence_rule_past_forever(
utils.mock_now(mocker, 2020, 1, 3) utils.mock_now(mocker, 2020, 1, 3)
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
date_definition = event.date_definitions[0] date_definition = event.date_definitions[0]
date_definition.start = create_berlin_date(2019, 1, 1, 14, 30) date_definition.start = create_berlin_date(2019, 1, 1, 14, 30)
date_definition.end = create_berlin_date(2019, 1, 1, 16, 30) date_definition.end = create_berlin_date(2019, 1, 1, 16, 30)
@ -124,7 +124,7 @@ def test_update_event_dates_with_recurrence_rule_past_forever(
def test_update_event_dates_with_recurrence_rule_exdate( def test_update_event_dates_with_recurrence_rule_exdate(
client, seeder, utils, app, mocker client, seeder, utils, app, db, mocker
): ):
user_id, admin_unit_id = seeder.setup_base() user_id, admin_unit_id = seeder.setup_base()
event_id = seeder.create_event(admin_unit_id) event_id = seeder.create_event(admin_unit_id)
@ -136,7 +136,7 @@ def test_update_event_dates_with_recurrence_rule_exdate(
utils.mock_now(mocker, 2021, 6, 1) utils.mock_now(mocker, 2021, 6, 1)
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
date_definition = event.date_definitions[0] date_definition = event.date_definitions[0]
date_definition.start = create_berlin_date(2021, 4, 21, 17, 0) date_definition.start = create_berlin_date(2021, 4, 21, 17, 0)
date_definition.end = create_berlin_date(2021, 4, 21, 18, 0) date_definition.end = create_berlin_date(2021, 4, 21, 18, 0)
@ -160,7 +160,7 @@ def test_get_meta_data(seeder, app, db):
from project.models import Event, EventAttendanceMode, Location from project.models import Event, EventAttendanceMode, Location
from project.services.event import get_meta_data from project.services.event import get_meta_data
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
event.attendance_mode = EventAttendanceMode.offline event.attendance_mode = EventAttendanceMode.offline
location = Location() location = Location()
@ -282,7 +282,7 @@ def test_create_ical_events_for_event(client, app, db, utils, seeder):
from project.models import Event, EventStatus, Location from project.models import Event, EventStatus, Location
from project.services.event import create_ical_events_for_event from project.services.event import create_ical_events_for_event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
event.description = "This is a fantastic event. Watch out!" event.description = "This is a fantastic event. Watch out!"
event.status = EventStatus.cancelled event.status = EventStatus.cancelled

View File

@ -5,7 +5,7 @@ def test_has_admin_unit_member_role(client, app, db, seeder):
from project.access import has_admin_unit_member_role from project.access import has_admin_unit_member_role
from project.models import AdminUnitMember from project.models import AdminUnitMember
member = AdminUnitMember.query.get(member_id) member = db.session.get(AdminUnitMember, member_id)
assert has_admin_unit_member_role(member, "admin") is False assert has_admin_unit_member_role(member, "admin") is False
@ -19,7 +19,7 @@ def test_has_current_user_member_role_for_admin_unit(client, app, db, seeder):
from project.access import has_current_user_member_role_for_admin_unit from project.access import has_current_user_member_role_for_admin_unit
from project.models import AdminUnitMember from project.models import AdminUnitMember
member = AdminUnitMember.query.get(member_id) member = db.session.get(AdminUnitMember, member_id)
login_user(member.user) login_user(member.user)
assert ( assert (

View File

@ -8,7 +8,7 @@ def test_get_sd_for_admin_unit(client, app, db, seeder):
from project.jsonld import get_sd_for_admin_unit from project.jsonld import get_sd_for_admin_unit
from project.models import AdminUnit from project.models import AdminUnit
admin_unit = AdminUnit.query.get(admin_unit_id) admin_unit = db.session.get(AdminUnit, admin_unit_id)
admin_unit.url = "http://www.goslar.de" admin_unit.url = "http://www.goslar.de"
result = get_sd_for_admin_unit(admin_unit) result = get_sd_for_admin_unit(admin_unit)
@ -23,7 +23,7 @@ def test_get_sd_for_organizer(client, app, db, seeder):
from project.jsonld import get_sd_for_organizer from project.jsonld import get_sd_for_organizer
from project.models import EventOrganizer from project.models import EventOrganizer
organizer = EventOrganizer.query.get(organizer_id) organizer = db.session.get(EventOrganizer, organizer_id)
organizer.email = "info@goslar.de" organizer.email = "info@goslar.de"
organizer.phone = "12345" organizer.phone = "12345"
organizer.fax = "67890" organizer.fax = "67890"
@ -46,7 +46,7 @@ def test_get_sd_for_place(client, app, db, utils, seeder):
from project.jsonld import get_sd_for_place from project.jsonld import get_sd_for_place
from project.models import EventPlace, Image, Location from project.models import EventPlace, Image, Location
place = EventPlace.query.get(place_id) place = db.session.get(EventPlace, place_id)
place.url = "http://www.goslar.de" place.url = "http://www.goslar.de"
photo = Image() photo = Image()
@ -83,7 +83,7 @@ def test_get_sd_for_place_noCoordinates(client, app, db, utils, seeder):
from project.jsonld import get_sd_for_place from project.jsonld import get_sd_for_place
from project.models import EventPlace, Location from project.models import EventPlace, Location
place = EventPlace.query.get(place_id) place = db.session.get(EventPlace, place_id)
location = Location() location = Location()
location.street = "Markt 7" location.street = "Markt 7"
@ -107,7 +107,7 @@ def test_get_sd_for_event_date(client, app, db, seeder, utils):
from project.models import Event, Image from project.models import Event, Image
from project.services.event import update_event from project.services.event import update_event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
date_definition = event.date_definitions[0] date_definition = event.date_definitions[0]
date_definition.start = create_berlin_date(2030, 12, 31, 14, 30) date_definition.start = create_berlin_date(2030, 12, 31, 14, 30)
date_definition.end = create_berlin_date(2030, 12, 31, 16, 30) date_definition.end = create_berlin_date(2030, 12, 31, 16, 30)
@ -142,14 +142,12 @@ def test_get_sd_for_event_date_allday(client, app, db, seeder, utils):
event_id = seeder.create_event(admin_unit_id) event_id = seeder.create_event(admin_unit_id)
with app.app_context(): with app.app_context():
import json
from project.dateutils import create_berlin_date from project.dateutils import create_berlin_date
from project.jsonld import DateTimeEncoder, get_sd_for_event_date from project.jsonld import get_sd_for_event_date
from project.models import Event from project.models import Event
from project.services.event import update_event from project.services.event import update_event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
date_definition = event.date_definitions[0] date_definition = event.date_definitions[0]
date_definition.start = create_berlin_date(2030, 12, 31, 14, 30) date_definition.start = create_berlin_date(2030, 12, 31, 14, 30)
date_definition.end = create_berlin_date(2030, 12, 31, 16, 30) date_definition.end = create_berlin_date(2030, 12, 31, 16, 30)
@ -160,8 +158,8 @@ def test_get_sd_for_event_date_allday(client, app, db, seeder, utils):
event_date = event.dates[0] event_date = event.dates[0]
with app.test_request_context(): with app.test_request_context():
structured_data = json.dumps( structured_data = app.json.dumps(
get_sd_for_event_date(event_date), indent=2, cls=DateTimeEncoder get_sd_for_event_date(event_date), indent=2
) )
assert '"startDate": "2030-12-31"' in structured_data assert '"startDate": "2030-12-31"' in structured_data
@ -178,7 +176,7 @@ def test_get_sd_for_event_date_with_co_organizer(client, app, db, seeder, utils)
from project.jsonld import get_sd_for_event_date from project.jsonld import get_sd_for_event_date
from project.models import Event from project.models import Event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
event_date = event.dates[0] event_date = event.dates[0]
with app.test_request_context(): with app.test_request_context():
@ -202,7 +200,7 @@ def test_get_sd_for_event_date_ageRange(
from project.models import Event from project.models import Event
from project.services.event import update_event from project.services.event import update_event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
event.age_from = age_from event.age_from = age_from
event.age_to = age_to event.age_to = age_to
@ -235,7 +233,7 @@ def test_get_sd_for_event_date_eventAttendanceMode(
from project.models import Event, EventAttendanceMode from project.models import Event, EventAttendanceMode
from project.services.event import update_event from project.services.event import update_event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
event.attendance_mode = EventAttendanceMode(attendance_mode) event.attendance_mode = EventAttendanceMode(attendance_mode)
update_event(event) update_event(event)
@ -269,7 +267,7 @@ def test_get_sd_for_event_date_eventStatus(
from project.models import Event, EventStatus from project.models import Event, EventStatus
from project.services.event import update_event from project.services.event import update_event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
event.status = EventStatus(status) event.status = EventStatus(status)
update_event(event) update_event(event)

View File

@ -21,7 +21,7 @@ def test_event_category(client, app, db, seeder):
with app.app_context(): with app.app_context():
from project.models import Event from project.models import Event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
event.categories = [] event.categories = []
db.session.commit() db.session.commit()
@ -69,7 +69,7 @@ def test_event_allday(client, app, db, seeder):
from project.models import Event from project.models import Event
# With Start # With Start
event = Event.query.get(event_with_start_id) event = db.session.get(Event, event_with_start_id)
date_definition = event.date_definitions[0] date_definition = event.date_definitions[0]
assert date_definition.allday assert date_definition.allday
assert date_definition.start == create_berlin_date(2030, 12, 31, 0, 0) assert date_definition.start == create_berlin_date(2030, 12, 31, 0, 0)
@ -81,7 +81,7 @@ def test_event_allday(client, app, db, seeder):
assert event_date.end == create_berlin_date(2030, 12, 31, 23, 59, 59) assert event_date.end == create_berlin_date(2030, 12, 31, 23, 59, 59)
# With Start and End # With Start and End
event = Event.query.get(event_with_start_and_end_id) event = db.session.get(Event, event_with_start_and_end_id)
date_definition = event.date_definitions[0] date_definition = event.date_definitions[0]
assert date_definition.allday assert date_definition.allday
assert date_definition.start == create_berlin_date(2030, 12, 31, 0, 0) assert date_definition.start == create_berlin_date(2030, 12, 31, 0, 0)
@ -103,10 +103,10 @@ def test_event_has_multiple_dates(client, app, db, seeder):
with app.app_context(): with app.app_context():
from project.models import Event from project.models import Event
event_with_recc = Event.query.get(event_with_recc_id) event_with_recc = db.session.get(Event, event_with_recc_id)
assert event_with_recc.has_multiple_dates() is True assert event_with_recc.has_multiple_dates() is True
event_without_recc = Event.query.get(event_without_recc_id) event_without_recc = db.session.get(Event, event_without_recc_id)
assert event_without_recc.has_multiple_dates() is False assert event_without_recc.has_multiple_dates() is False
@ -153,7 +153,7 @@ def test_event_date_defintion_deletion(client, app, db, seeder):
from project.models import Event from project.models import Event
# Initial eine Definition # Initial eine Definition
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert len(event.date_definitions) == 1 assert len(event.date_definitions) == 1
date_definition1 = event.date_definitions[0] date_definition1 = event.date_definitions[0]
@ -163,7 +163,7 @@ def test_event_date_defintion_deletion(client, app, db, seeder):
event.date_definitions = [date_definition1, date_definition2] event.date_definitions = [date_definition1, date_definition2]
db.session.commit() db.session.commit()
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert len(event.date_definitions) == 2 assert len(event.date_definitions) == 2
assert len(EventDateDefinition.query.all()) == 2 assert len(EventDateDefinition.query.all()) == 2
@ -174,7 +174,7 @@ def test_event_date_defintion_deletion(client, app, db, seeder):
db.session.delete(date_definition1) db.session.delete(date_definition1)
db.session.commit() db.session.commit()
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert len(event.date_definitions) == 1 assert len(event.date_definitions) == 1
assert len(EventDateDefinition.query.all()) == 1 assert len(EventDateDefinition.query.all()) == 1
assert event.date_definitions[0].id == date_definition2_id assert event.date_definitions[0].id == date_definition2_id
@ -226,7 +226,7 @@ def test_admin_unit_deletion(client, app, db, seeder):
admin_unit = get_admin_unit_by_id(admin_unit_id) admin_unit = get_admin_unit_by_id(admin_unit_id)
other_admin_unit = get_admin_unit_by_id(other_admin_unit_id) other_admin_unit = get_admin_unit_by_id(other_admin_unit_id)
my_event = Event.query.get(my_event_id) my_event = db.session.get(Event, my_event_id)
date_id = my_event.dates[0].id date_id = my_event.dates[0].id
date_definition_id = my_event.date_definitions[0].id date_definition_id = my_event.date_definitions[0].id
@ -234,23 +234,27 @@ def test_admin_unit_deletion(client, app, db, seeder):
db.session.commit() db.session.commit()
assert len(other_admin_unit.outgoing_relations) == 0 assert len(other_admin_unit.outgoing_relations) == 0
assert Event.query.get(my_event_id) is None assert db.session.get(Event, my_event_id) is None
assert EventDate.query.get(date_id) is None assert db.session.get(EventDate, date_id) is None
assert EventDateDefinition.query.get(date_definition_id) is None assert db.session.get(EventDateDefinition, date_definition_id) is None
assert AdminUnitRelation.query.get(incoming_relation_id) is None assert db.session.get(AdminUnitRelation, incoming_relation_id) is None
assert AdminUnitRelation.query.get(outgoing_relation_id) is None assert db.session.get(AdminUnitRelation, outgoing_relation_id) is None
assert EventReference.query.get(incoming_reference_id) is None assert db.session.get(EventReference, incoming_reference_id) is None
assert EventReference.query.get(outgoing_reference_id) is None assert db.session.get(EventReference, outgoing_reference_id) is None
assert EventReferenceRequest.query.get(incoming_reference_request_id) is None assert (
assert EventReferenceRequest.query.get(outgoing_reference_request_id) is None db.session.get(EventReferenceRequest, incoming_reference_request_id) is None
assert EventSuggestion.query.get(suggestion_id) is None )
assert EventPlace.query.get(event_place_id) is None assert (
assert EventOrganizer.query.get(organizer_id) is None db.session.get(EventReferenceRequest, outgoing_reference_request_id) is None
assert AdminUnitMemberInvitation.query.get(invitation_id) is None )
assert EventList.query.get(event_list_id) is None assert db.session.get(EventSuggestion, suggestion_id) is None
assert db.session.get(EventPlace, event_place_id) is None
assert db.session.get(EventOrganizer, organizer_id) is None
assert db.session.get(AdminUnitMemberInvitation, invitation_id) is None
assert db.session.get(EventList, event_list_id) is None
assert AdminUnit.query.get(other_admin_unit_id) is not None assert db.session.get(AdminUnit, other_admin_unit_id) is not None
assert Event.query.get(other_event_id) is not None assert db.session.get(Event, other_event_id) is not None
def test_event_co_organizers_deletion(client, app, db, seeder): def test_event_co_organizers_deletion(client, app, db, seeder):
@ -262,12 +266,12 @@ def test_event_co_organizers_deletion(client, app, db, seeder):
with app.app_context(): with app.app_context():
from project.models import Event, EventOrganizer from project.models import Event, EventOrganizer
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert len(event.co_organizers) == 2 assert len(event.co_organizers) == 2
assert event.co_organizers[0].id == organizer_a_id assert event.co_organizers[0].id == organizer_a_id
assert event.co_organizers[1].id == organizer_b_id assert event.co_organizers[1].id == organizer_b_id
organizer_a = EventOrganizer.query.get(organizer_a_id) organizer_a = db.session.get(EventOrganizer, organizer_a_id)
db.session.delete(organizer_a) db.session.delete(organizer_a)
db.session.commit() db.session.commit()
assert len(event.co_organizers) == 1 assert len(event.co_organizers) == 1
@ -275,7 +279,7 @@ def test_event_co_organizers_deletion(client, app, db, seeder):
db.session.delete(event) db.session.delete(event)
db.session.commit() db.session.commit()
assert EventOrganizer.query.get(organizer_b_id).id is not None assert db.session.get(EventOrganizer, organizer_b_id).id is not None
def test_admin_unit_verification(client, app, db, seeder): def test_admin_unit_verification(client, app, db, seeder):
@ -289,7 +293,7 @@ def test_admin_unit_verification(client, app, db, seeder):
new_admin_unit = AdminUnit() new_admin_unit = AdminUnit()
assert not new_admin_unit.is_verified assert not new_admin_unit.is_verified
admin_unit = AdminUnit.query.get(admin_unit_id) admin_unit = db.session.get(AdminUnit, admin_unit_id)
admin_unit.can_verify_other = True admin_unit.can_verify_other = True
db.session.commit() db.session.commit()
@ -300,18 +304,18 @@ def test_admin_unit_verification(client, app, db, seeder):
all_verified = AdminUnit.query.filter(AdminUnit.is_verified).all() all_verified = AdminUnit.query.filter(AdminUnit.is_verified).all()
assert len(all_verified) == 0 assert len(all_verified) == 0
relation = AdminUnitRelation.query.get(relation_id) relation = db.session.get(AdminUnitRelation, relation_id)
relation.verify = True relation.verify = True
db.session.commit() db.session.commit()
other_admin_unit = AdminUnit.query.get(other_admin_unit_id) other_admin_unit = db.session.get(AdminUnit, other_admin_unit_id)
assert other_admin_unit.is_verified assert other_admin_unit.is_verified
all_verified = AdminUnit.query.filter(AdminUnit.is_verified).all() all_verified = AdminUnit.query.filter(AdminUnit.is_verified).all()
assert len(all_verified) == 1 assert len(all_verified) == 1
assert all_verified[0].id == other_admin_unit_id assert all_verified[0].id == other_admin_unit_id
admin_unit = AdminUnit.query.get(admin_unit_id) admin_unit = db.session.get(AdminUnit, admin_unit_id)
admin_unit.can_verify_other = False admin_unit.can_verify_other = False
db.session.commit() db.session.commit()
@ -334,7 +338,7 @@ def test_admin_unit_invitations(client, app, db, seeder):
db.session.commit() db.session.commit()
assert len(admin_unit.admin_unit_invitations) == 0 assert len(admin_unit.admin_unit_invitations) == 0
invitation = AdminUnitInvitation.query.get(invitation_id) invitation = db.session.get(AdminUnitInvitation, invitation_id)
assert invitation is None assert invitation is None
@ -347,33 +351,33 @@ def test_event_list_deletion(client, app, db, seeder):
with app.app_context(): with app.app_context():
from project.models import Event, EventList from project.models import Event, EventList
event_list_a = EventList.query.get(event_list_a_id) event_list_a = db.session.get(EventList, event_list_a_id)
assert len(event_list_a.events) == 1 assert len(event_list_a.events) == 1
assert event_list_a.events[0].id == event_id assert event_list_a.events[0].id == event_id
event_list_b = EventList.query.get(event_list_b_id) event_list_b = db.session.get(EventList, event_list_b_id)
assert len(event_list_b.events) == 1 assert len(event_list_b.events) == 1
assert event_list_b.events[0].id == event_id assert event_list_b.events[0].id == event_id
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert len(event.event_lists) == 2 assert len(event.event_lists) == 2
assert event.event_lists[0].id == event_list_a_id assert event.event_lists[0].id == event_list_a_id
assert event.event_lists[1].id == event_list_b_id assert event.event_lists[1].id == event_list_b_id
event_list_a = EventList.query.get(event_list_a_id) event_list_a = db.session.get(EventList, event_list_a_id)
db.session.delete(event_list_a) db.session.delete(event_list_a)
db.session.commit() db.session.commit()
assert len(event.event_lists) == 1 assert len(event.event_lists) == 1
assert event.event_lists[0].id == event_list_b_id assert event.event_lists[0].id == event_list_b_id
event_list_b = EventList.query.get(event_list_b_id) event_list_b = db.session.get(EventList, event_list_b_id)
assert len(event_list_b.events) == 1 assert len(event_list_b.events) == 1
assert event_list_b.events[0].id == event_id assert event_list_b.events[0].id == event_id
db.session.delete(event) db.session.delete(event)
db.session.commit() db.session.commit()
event_list_b = EventList.query.get(event_list_b_id) event_list_b = db.session.get(EventList, event_list_b_id)
assert len(event_list_b.events) == 0 assert len(event_list_b.events) == 0
@ -384,5 +388,5 @@ def test_event_is_favored_by_current_user(client, app, db, seeder):
with app.app_context(): with app.app_context():
from project.models import Event from project.models import Event
event = Event.query.get(event_id) event = db.session.get(Event, event_id)
assert event.is_favored_by_current_user() is False assert event.is_favored_by_current_user() is False

View File

@ -238,10 +238,11 @@ class UtilActions(object):
return url return url
def get_image_url_for_id(self, image_id, **values): def get_image_url_for_id(self, image_id, **values):
from project import db
from project.models import Image from project.models import Image
with self._app.app_context(): with self._app.app_context():
image = Image.query.get(image_id) image = db.session.get(Image, image_id)
url = self.get_image_url(image, **values) url = self.get_image_url(image, **values)
return url return url

View File

@ -152,7 +152,7 @@ def test_admin_user_update(client, seeder, utils, app, mocker, db, db_error):
@pytest.mark.parametrize("db_error", [True, False]) @pytest.mark.parametrize("db_error", [True, False])
@pytest.mark.parametrize("non_match", [True, False]) @pytest.mark.parametrize("non_match", [True, False])
def test_user_delete(client, seeder, utils, app, mocker, db_error, non_match): def test_user_delete(client, seeder, utils, app, db, mocker, db_error, non_match):
user_id, admin_unit_id = seeder.setup_base(True) user_id, admin_unit_id = seeder.setup_base(True)
other_user_id = seeder.create_user("other@test.de") other_user_id = seeder.create_user("other@test.de")
@ -190,7 +190,7 @@ def test_user_delete(client, seeder, utils, app, mocker, db_error, non_match):
with app.app_context(): with app.app_context():
from project.models import User from project.models import User
user = User.query.get(other_user_id) user = db.session.get(User, other_user_id)
assert user is None assert user is None
@ -246,7 +246,7 @@ def test_admin_admin_unit_update(client, seeder, utils, app, mocker, db, db_erro
@pytest.mark.parametrize("db_error", [True, False]) @pytest.mark.parametrize("db_error", [True, False])
@pytest.mark.parametrize("non_match", [True, False]) @pytest.mark.parametrize("non_match", [True, False])
def test_admin_unit_delete(client, seeder, utils, app, mocker, db_error, non_match): def test_admin_unit_delete(client, seeder, utils, app, db, mocker, db_error, non_match):
user_id, admin_unit_id = seeder.setup_base(True) user_id, admin_unit_id = seeder.setup_base(True)
url = utils.get_url("admin_admin_unit_delete", id=admin_unit_id) url = utils.get_url("admin_admin_unit_delete", id=admin_unit_id)
@ -283,5 +283,5 @@ def test_admin_unit_delete(client, seeder, utils, app, mocker, db_error, non_mat
with app.app_context(): with app.app_context():
from project.models import AdminUnit from project.models import AdminUnit
admin_unit = AdminUnit.query.get(admin_unit_id) admin_unit = db.session.get(AdminUnit, admin_unit_id)
assert admin_unit is None assert admin_unit is None

View File

@ -134,7 +134,7 @@ def test_create_requiresAdmin_memberOfOrgWithFlag(client, app, utils, seeder):
assert response.status_code == 302 assert response.status_code == 302
def test_create_from_invitation(client, app, utils, seeder, mocker): def test_create_from_invitation(client, app, db, utils, seeder, mocker):
mail_mock = utils.mock_send_mails(mocker) mail_mock = utils.mock_send_mails(mocker)
user_id = seeder.create_user() user_id = seeder.create_user()
admin_unit_id = seeder.create_admin_unit( admin_unit_id = seeder.create_admin_unit(
@ -176,7 +176,7 @@ def test_create_from_invitation(client, app, utils, seeder, mocker):
assert relation.invited assert relation.invited
relation_id = relation.id relation_id = relation.id
invitation = AdminUnitInvitation.query.get(invitation_id) invitation = db.session.get(AdminUnitInvitation, invitation_id)
assert invitation is None assert invitation is None
invitation_url = utils.get_url( invitation_url = utils.get_url(

View File

@ -379,7 +379,9 @@ def test_duplicate(client, app, utils, seeder, mocker, allday):
@pytest.mark.parametrize("free_text", [True, False]) @pytest.mark.parametrize("free_text", [True, False])
@pytest.mark.parametrize("allday", [True, False]) @pytest.mark.parametrize("allday", [True, False])
def test_create_fromSuggestion(client, app, utils, seeder, mocker, free_text, allday): def test_create_fromSuggestion(
client, app, db, utils, seeder, mocker, free_text, allday
):
user_id, admin_unit_id = seeder.setup_base() user_id, admin_unit_id = seeder.setup_base()
suggestion_id = seeder.create_event_suggestion(admin_unit_id, free_text, allday) suggestion_id = seeder.create_event_suggestion(admin_unit_id, free_text, allday)
@ -404,7 +406,7 @@ def test_create_fromSuggestion(client, app, utils, seeder, mocker, free_text, al
assert event is not None assert event is not None
assert event.date_definitions[0].allday == allday assert event.date_definitions[0].allday == allday
suggestion = EventSuggestion.query.get(suggestion_id) suggestion = db.session.get(EventSuggestion, suggestion_id)
assert suggestion is not None assert suggestion is not None
assert suggestion.verified assert suggestion.verified
assert suggestion.event_id == event.id assert suggestion.event_id == event.id

View File

@ -39,7 +39,7 @@ def test_create(client, app, utils, seeder, mocker, db_error):
@pytest.mark.parametrize("db_error", [True, False]) @pytest.mark.parametrize("db_error", [True, False])
def test_update(client, seeder, utils, app, mocker, db_error): def test_update(client, seeder, utils, app, db, mocker, db_error):
user_id, admin_unit_id = seeder.setup_base() user_id, admin_unit_id = seeder.setup_base()
place_id = seeder.upsert_default_event_place(admin_unit_id) place_id = seeder.upsert_default_event_place(admin_unit_id)
@ -68,13 +68,13 @@ def test_update(client, seeder, utils, app, mocker, db_error):
with app.app_context(): with app.app_context():
from project.models import EventPlace from project.models import EventPlace
place = EventPlace.query.get(place_id) place = db.session.get(EventPlace, place_id)
assert place.name == "Neuer Name" assert place.name == "Neuer Name"
@pytest.mark.parametrize("db_error", [True, False]) @pytest.mark.parametrize("db_error", [True, False])
@pytest.mark.parametrize("non_match", [True, False]) @pytest.mark.parametrize("non_match", [True, False])
def test_delete(client, seeder, utils, app, mocker, db_error, non_match): def test_delete(client, seeder, utils, app, db, mocker, db_error, non_match):
user_id, admin_unit_id = seeder.setup_base() user_id, admin_unit_id = seeder.setup_base()
place_id = seeder.upsert_event_place(admin_unit_id, "Mein Ort") place_id = seeder.upsert_event_place(admin_unit_id, "Mein Ort")
@ -114,7 +114,7 @@ def test_delete(client, seeder, utils, app, mocker, db_error, non_match):
with app.app_context(): with app.app_context():
from project.models import EventPlace from project.models import EventPlace
place = EventPlace.query.get(place_id) place = db.session.get(EventPlace, place_id)
assert place is None assert place is None

View File

@ -35,7 +35,7 @@ def test_reject(client, app, utils, seeder, mocker, db, db_error, is_verified):
with app.app_context(): with app.app_context():
from project.models import EventReviewStatus, EventSuggestion from project.models import EventReviewStatus, EventSuggestion
suggestion = EventSuggestion.query.get(event_suggestion_id) suggestion = db.session.get(EventSuggestion, event_suggestion_id)
suggestion.review_status = EventReviewStatus.verified suggestion.review_status = EventReviewStatus.verified
db.session.commit() db.session.commit()
@ -71,6 +71,6 @@ def test_reject(client, app, utils, seeder, mocker, db, db_error, is_verified):
with app.app_context(): with app.app_context():
from project.models import EventReviewStatus, EventSuggestion from project.models import EventReviewStatus, EventSuggestion
suggestion = EventSuggestion.query.get(event_suggestion_id) suggestion = db.session.get(EventSuggestion, event_suggestion_id)
assert suggestion.review_status == EventReviewStatus.rejected assert suggestion.review_status == EventReviewStatus.rejected
assert suggestion.rejection_resaon is None assert suggestion.rejection_resaon is None

View File

@ -64,7 +64,7 @@ def test_create_authorization_code(client, app, utils, seeder, mocker, db_error)
@pytest.mark.parametrize("db_error", [True, False]) @pytest.mark.parametrize("db_error", [True, False])
def test_update(client, seeder, utils, app, mocker, db_error): def test_update(client, seeder, utils, app, db, mocker, db_error):
user_id, admin_unit_id = seeder.setup_base(True) user_id, admin_unit_id = seeder.setup_base(True)
oauth2_client_id = seeder.insert_default_oauth2_client(user_id) oauth2_client_id = seeder.insert_default_oauth2_client(user_id)
@ -92,14 +92,14 @@ def test_update(client, seeder, utils, app, mocker, db_error):
with app.app_context(): with app.app_context():
from project.models import OAuth2Client from project.models import OAuth2Client
oauth2_client = OAuth2Client.query.get(oauth2_client_id) oauth2_client = db.session.get(OAuth2Client, oauth2_client_id)
assert oauth2_client.client_name == "Neuer Name" assert oauth2_client.client_name == "Neuer Name"
assert oauth2_client.redirect_uris == ["localhost:1337", "localhost:1338"] assert oauth2_client.redirect_uris == ["localhost:1337", "localhost:1338"]
@pytest.mark.parametrize("db_error", [True, False]) @pytest.mark.parametrize("db_error", [True, False])
@pytest.mark.parametrize("non_match", [True, False]) @pytest.mark.parametrize("non_match", [True, False])
def test_delete(client, seeder, utils, app, mocker, db_error, non_match): def test_delete(client, seeder, utils, app, db, mocker, db_error, non_match):
user_id, admin_unit_id = seeder.setup_base(True) user_id, admin_unit_id = seeder.setup_base(True)
oauth2_client_id = seeder.insert_default_oauth2_client(user_id) oauth2_client_id = seeder.insert_default_oauth2_client(user_id)
@ -135,5 +135,5 @@ def test_delete(client, seeder, utils, app, mocker, db_error, non_match):
with app.app_context(): with app.app_context():
from project.models import OAuth2Client from project.models import OAuth2Client
oauth2_client = OAuth2Client.query.get(oauth2_client_id) oauth2_client = db.session.get(OAuth2Client, oauth2_client_id)
assert oauth2_client is None assert oauth2_client is None

View File

@ -10,7 +10,7 @@ def test_list(client, seeder, utils):
@pytest.mark.parametrize("db_error", [True, False]) @pytest.mark.parametrize("db_error", [True, False])
def test_revoke(client, seeder, utils, app, mocker, db_error): def test_revoke(client, seeder, utils, app, db, mocker, db_error):
user_id, admin_unit_id = seeder.setup_api_access() user_id, admin_unit_id = seeder.setup_api_access()
utils.login() utils.login()
@ -41,7 +41,7 @@ def test_revoke(client, seeder, utils, app, mocker, db_error):
with app.app_context(): with app.app_context():
from project.models import OAuth2Token from project.models import OAuth2Token
oauth2_token = OAuth2Token.query.get(oauth2_token_id) oauth2_token = db.session.get(OAuth2Token, oauth2_token_id)
assert oauth2_token.is_revoked() > 0 assert oauth2_token.is_revoked() > 0
# Kann nicht zweimal revoked werden # Kann nicht zweimal revoked werden

Some files were not shown because too many files have changed in this diff Show More