mirror of
https://github.com/lucaspalomodevelop/eventcally.git
synced 2026-03-13 00:07:22 +00:00
350 lines
17 KiB
Python
350 lines
17 KiB
Python
class Seeder(object):
|
|
def __init__(self, app, db, utils):
|
|
self._app = app
|
|
self._db = db
|
|
self._utils = utils
|
|
|
|
def setup_base(self, admin=False, log_in=True):
|
|
user_id = self.create_user(admin=admin)
|
|
if log_in:
|
|
self._utils.login()
|
|
admin_unit_id = self.create_admin_unit(user_id)
|
|
return (user_id, admin_unit_id)
|
|
|
|
def setup_base_event_verifier(self):
|
|
owner_id = self.create_user("owner@owner")
|
|
admin_unit_id = self.create_admin_unit(owner_id, "Other crew")
|
|
member_id = self.create_admin_unit_member_event_verifier(admin_unit_id)
|
|
self._utils.login()
|
|
return (owner_id, admin_unit_id, member_id)
|
|
|
|
def create_user(
|
|
self, email="test@test.de", password="MeinPasswortIstDasBeste", admin=False
|
|
):
|
|
from flask_security.confirmable import confirm_user
|
|
|
|
from project.services.user import (
|
|
add_admin_roles_to_user,
|
|
create_user,
|
|
find_user_by_email,
|
|
)
|
|
|
|
with self._app.app_context():
|
|
user = find_user_by_email(email)
|
|
|
|
if user is None:
|
|
user = create_user(email, password)
|
|
confirm_user(user)
|
|
|
|
if admin:
|
|
add_admin_roles_to_user(email)
|
|
|
|
self._db.session.commit()
|
|
user_id = user.id
|
|
|
|
return user_id
|
|
|
|
def create_admin_unit(self, user_id, name="Meine Crew"):
|
|
from project.models import AdminUnit
|
|
from project.services.admin_unit import insert_admin_unit_for_user
|
|
from project.services.user import get_user
|
|
|
|
with self._app.app_context():
|
|
user = get_user(user_id)
|
|
admin_unit = AdminUnit()
|
|
admin_unit.name = name
|
|
admin_unit.short_name = name.lower().replace(" ", "")
|
|
admin_unit.incoming_reference_requests_allowed = True
|
|
insert_admin_unit_for_user(admin_unit, user)
|
|
self._db.session.commit()
|
|
admin_unit_id = admin_unit.id
|
|
|
|
return admin_unit_id
|
|
|
|
def create_admin_unit_member(self, admin_unit_id, role_names):
|
|
from project.services.admin_unit import (
|
|
add_user_to_admin_unit_with_roles,
|
|
get_admin_unit_by_id,
|
|
)
|
|
from project.services.user import get_user
|
|
|
|
with self._app.app_context():
|
|
user_id = self.create_user()
|
|
user = get_user(user_id)
|
|
admin_unit = get_admin_unit_by_id(admin_unit_id)
|
|
member = add_user_to_admin_unit_with_roles(user, admin_unit, role_names)
|
|
self._db.session.commit()
|
|
member_id = member.id
|
|
|
|
return member_id
|
|
|
|
def create_invitation(self, admin_unit_id, email, role_names=["admin"]):
|
|
from project.services.admin_unit import insert_admin_unit_member_invitation
|
|
|
|
with self._app.app_context():
|
|
invitation = insert_admin_unit_member_invitation(
|
|
admin_unit_id, email, role_names
|
|
)
|
|
invitation_id = invitation.id
|
|
|
|
return invitation_id
|
|
|
|
def create_admin_unit_member_event_verifier(self, admin_unit_id):
|
|
return self.create_admin_unit_member(admin_unit_id, ["event_verifier"])
|
|
|
|
def upsert_event_place(self, admin_unit_id, name):
|
|
from project.services.place import upsert_event_place
|
|
|
|
with self._app.app_context():
|
|
place = upsert_event_place(admin_unit_id, name)
|
|
self._db.session.commit()
|
|
place_id = place.id
|
|
|
|
return place_id
|
|
|
|
def upsert_default_event_place(self, admin_unit_id):
|
|
from project.services.admin_unit import get_admin_unit_by_id
|
|
|
|
with self._app.app_context():
|
|
admin_unit = get_admin_unit_by_id(admin_unit_id)
|
|
place_id = self.upsert_event_place(admin_unit_id, admin_unit.name)
|
|
|
|
return place_id
|
|
|
|
def upsert_event_organizer(self, admin_unit_id, name):
|
|
from project.services.organizer import upsert_event_organizer
|
|
|
|
with self._app.app_context():
|
|
organizer = upsert_event_organizer(admin_unit_id, name)
|
|
self._db.session.commit()
|
|
organizer_id = organizer.id
|
|
|
|
return organizer_id
|
|
|
|
def upsert_default_event_organizer(self, admin_unit_id):
|
|
from project.services.admin_unit import get_admin_unit_by_id
|
|
|
|
with self._app.app_context():
|
|
admin_unit = get_admin_unit_by_id(admin_unit_id)
|
|
organizer_id = self.upsert_event_organizer(admin_unit_id, admin_unit.name)
|
|
|
|
return organizer_id
|
|
|
|
def insert_default_oauth2_client(self, user_id):
|
|
from project.api import scope_list
|
|
from project.models import OAuth2Client
|
|
from project.services.oauth2_client import complete_oauth2_client
|
|
|
|
with self._app.app_context():
|
|
client = OAuth2Client()
|
|
client.user_id = user_id
|
|
complete_oauth2_client(client)
|
|
|
|
metadata = dict()
|
|
metadata["client_name"] = "Mein Client"
|
|
metadata["scope"] = " ".join(scope_list)
|
|
metadata["grant_types"] = ["authorization_code", "refresh_token"]
|
|
metadata["response_types"] = ["code"]
|
|
metadata["token_endpoint_auth_method"] = "client_secret_post"
|
|
metadata["redirect_uris"] = [self._utils.get_url("swagger_oauth2_redirect")]
|
|
client.set_client_metadata(metadata)
|
|
|
|
self._db.session.add(client)
|
|
self._db.session.commit()
|
|
client_id = client.id
|
|
|
|
return client_id
|
|
|
|
def setup_api_access(self):
|
|
user_id, admin_unit_id = self.setup_base(admin=True)
|
|
oauth2_client_id = self.insert_default_oauth2_client(user_id)
|
|
|
|
with self._app.app_context():
|
|
from project.models import OAuth2Client
|
|
|
|
oauth2_client = OAuth2Client.query.get(oauth2_client_id)
|
|
client_id = oauth2_client.client_id
|
|
client_secret = oauth2_client.client_secret
|
|
scope = oauth2_client.scope
|
|
|
|
self._utils.authorize(client_id, client_secret, scope)
|
|
return (user_id, admin_unit_id)
|
|
|
|
def get_event_category_id(self, category_name):
|
|
from project.services.event import get_event_category
|
|
|
|
category = get_event_category(category_name)
|
|
return category.id
|
|
|
|
def create_event(self, admin_unit_id, recurrence_rule="", external_link=""):
|
|
from project.models import Event
|
|
from project.services.event import insert_event, upsert_event_category
|
|
|
|
with self._app.app_context():
|
|
event = Event()
|
|
event.admin_unit_id = admin_unit_id
|
|
event.categories = [upsert_event_category("Other")]
|
|
event.name = "Name"
|
|
event.description = "Beschreibung"
|
|
event.start = self.get_now_by_minute()
|
|
event.event_place_id = self.upsert_default_event_place(admin_unit_id)
|
|
event.organizer_id = self.upsert_default_event_organizer(admin_unit_id)
|
|
event.recurrence_rule = recurrence_rule
|
|
event.external_link = external_link
|
|
event.ticket_link = ""
|
|
event.tags = ""
|
|
event.price_info = ""
|
|
insert_event(event)
|
|
self._db.session.commit()
|
|
event_id = event.id
|
|
return event_id
|
|
|
|
def create_event_via_form(self, admin_unit_id: int) -> str:
|
|
place_id = self.upsert_default_event_place(admin_unit_id)
|
|
organizer_id = self.upsert_default_event_organizer(admin_unit_id)
|
|
url = self._utils.get_url("event_create_for_admin_unit_id", id=admin_unit_id)
|
|
response = self._utils.get_ok(url)
|
|
response = self._utils.post_form(
|
|
url,
|
|
response,
|
|
{
|
|
"name": "Name",
|
|
"description": "Beschreibung",
|
|
"start": ["2030-12-31", "23", "59"],
|
|
"event_place_id": place_id,
|
|
"organizer_id": organizer_id,
|
|
"photo-image_base64": self.get_default_image_upload_base64(),
|
|
},
|
|
)
|
|
|
|
with self._app.app_context():
|
|
from project.models import Event
|
|
|
|
event = (
|
|
Event.query.filter(Event.admin_unit_id == admin_unit_id)
|
|
.filter(Event.name == "Name")
|
|
.first()
|
|
)
|
|
return event.id
|
|
|
|
def create_event_via_api(self, admin_unit_id: int) -> int:
|
|
place_id = self.upsert_default_event_place(admin_unit_id)
|
|
organizer_id = self.upsert_default_event_organizer(admin_unit_id)
|
|
|
|
url = self._utils.get_url("api_v1_organization_event_list", id=admin_unit_id)
|
|
response = self._utils.post_json(
|
|
url,
|
|
{
|
|
"name": "Name",
|
|
"start": "2021-02-07T11:00:00.000Z",
|
|
"place": {"id": place_id},
|
|
"organizer": {"id": organizer_id},
|
|
},
|
|
)
|
|
self._utils.assert_response_created(response)
|
|
assert "id" in response.json
|
|
return response.json["id"]
|
|
|
|
def get_default_image_base64(self):
|
|
return """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"""
|
|
|
|
def get_default_image_upload_base64(self):
|
|
base64_str = self.get_default_image_base64()
|
|
return "data:image/png;base64,{}".format(base64_str)
|
|
|
|
def upsert_default_image(self):
|
|
from project.services.image import upsert_image_with_base64_str
|
|
|
|
with self._app.app_context():
|
|
base64_str = self.get_default_image_base64()
|
|
image = upsert_image_with_base64_str(None, base64_str, "image/png")
|
|
self._db.session.add(image)
|
|
self._db.session.commit()
|
|
image_id = image.id
|
|
|
|
return image_id
|
|
|
|
def create_event_suggestion(self, admin_unit_id, free_text=False):
|
|
from project.models import EventSuggestion
|
|
from project.services.event import upsert_event_category
|
|
from project.services.event_suggestion import insert_event_suggestion
|
|
|
|
with self._app.app_context():
|
|
suggestion = EventSuggestion()
|
|
suggestion.admin_unit_id = admin_unit_id
|
|
suggestion.contact_name = "Vorname Nachname"
|
|
suggestion.contact_email = "vorname@nachname.de"
|
|
suggestion.contact_email_notice = True
|
|
suggestion.name = "Vorschlag"
|
|
suggestion.description = "Beschreibung"
|
|
suggestion.start = self.get_now_by_minute()
|
|
suggestion.photo_id = self.upsert_default_image()
|
|
suggestion.categories = [upsert_event_category("Other")]
|
|
|
|
if free_text:
|
|
suggestion.event_place_text = "Freitext Ort"
|
|
suggestion.organizer_text = "Freitext Organisator"
|
|
else:
|
|
suggestion.event_place_id = self.upsert_default_event_place(
|
|
admin_unit_id
|
|
)
|
|
suggestion.organizer_id = self.upsert_default_event_organizer(
|
|
admin_unit_id
|
|
)
|
|
insert_event_suggestion(suggestion)
|
|
self._db.session.commit()
|
|
suggestion_id = suggestion.id
|
|
return suggestion_id
|
|
|
|
def create_reference(self, event_id, admin_unit_id):
|
|
from project.models import EventReference
|
|
|
|
with self._app.app_context():
|
|
reference = EventReference()
|
|
reference.event_id = event_id
|
|
reference.admin_unit_id = admin_unit_id
|
|
self._db.session.add(reference)
|
|
self._db.session.commit()
|
|
reference_id = reference.id
|
|
return reference_id
|
|
|
|
def create_any_reference(self, admin_unit_id):
|
|
other_user_id = self.create_user("other@test.de")
|
|
other_admin_unit_id = self.create_admin_unit(other_user_id, "Other Crew")
|
|
event_id = self.create_event(other_admin_unit_id)
|
|
reference_id = self.create_reference(event_id, admin_unit_id)
|
|
return (other_user_id, other_admin_unit_id, event_id, reference_id)
|
|
|
|
def create_reference_request(self, event_id, admin_unit_id):
|
|
from project.models import (
|
|
EventReferenceRequest,
|
|
EventReferenceRequestReviewStatus,
|
|
)
|
|
|
|
with self._app.app_context():
|
|
reference_request = EventReferenceRequest()
|
|
reference_request.event_id = event_id
|
|
reference_request.admin_unit_id = admin_unit_id
|
|
reference_request.review_status = EventReferenceRequestReviewStatus.inbox
|
|
self._db.session.add(reference_request)
|
|
self._db.session.commit()
|
|
reference_request_id = reference_request.id
|
|
return reference_request_id
|
|
|
|
def create_incoming_reference_request(self, admin_unit_id):
|
|
other_user_id = self.create_user("other@test.de")
|
|
other_admin_unit_id = self.create_admin_unit(other_user_id, "Other Crew")
|
|
event_id = self.create_event(other_admin_unit_id)
|
|
reference_request_id = self.create_reference_request(event_id, admin_unit_id)
|
|
return (other_user_id, other_admin_unit_id, event_id, reference_request_id)
|
|
|
|
def get_now_by_minute(self):
|
|
from datetime import datetime
|
|
|
|
from project.dateutils import get_now
|
|
|
|
now = get_now()
|
|
return datetime(
|
|
now.year, now.month, now.day, now.hour, now.minute, tzinfo=now.tzinfo
|
|
)
|