-
{{ event.admin_unit.name }}{{ render_admin_unit_badges(event.admin_unit) }}
+
{{ render_link_prop(event.admin_unit.url) }}
{{ render_email_prop(event.admin_unit.email) }}
@@ -1552,40 +1555,44 @@ $('#allday').on('change', function() {
$("#name").rules("add", {
remote: {
- url: "{{ url_for('js_check_org_name') }}",
- type: "post"
- {% if admin_unit %}
- ,data: {
- admin_unit_id: function() {
- return "{{ admin_unit.id }}";
+ param: {
+ url: "{{ url_for('js_check_org_name') }}",
+ type: "post"
+ {% if admin_unit %}
+ ,data: {
+ admin_unit_id: function() {
+ return "{{ admin_unit.id }}";
+ }
}
+ {% endif %}
}
- {% if admin_unit.name %}
- ,depends: function() {
- return $('#name').val() != '{{ admin_unit.name }}';
+ {% if admin_unit and admin_unit.name %}
+ ,depends: function(element) {
+ return $('#name').val() !== '{{ admin_unit.name }}';
}
{% endif %}
- {% endif %}
}
});
$("#short_name").rules("add", "shortName");
$("#short_name").rules("add", {
remote: {
- url: "{{ url_for('js_check_org_short_name') }}",
- type: "post"
- {% if admin_unit %}
- ,data: {
- admin_unit_id: function() {
- return "{{ admin_unit.id }}";
+ param: {
+ url: "{{ url_for('js_check_org_short_name') }}",
+ type: "post"
+ {% if admin_unit %}
+ ,data: {
+ admin_unit_id: function() {
+ return "{{ admin_unit.id }}";
+ }
}
+ {% endif %}
}
{% if admin_unit.short_name %}
- ,depends: function() {
- return $('#short_name').val() != '{{ admin_unit.short_name }}';
+ ,depends: function(element) {
+ return $('#short_name').val() !== '{{ admin_unit.short_name }}';
}
{% endif %}
- {% endif %}
}
});
diff --git a/project/templates/example.html b/project/templates/example.html
deleted file mode 100644
index cb1afe1..0000000
--- a/project/templates/example.html
+++ /dev/null
@@ -1,18 +0,0 @@
-{% extends "layout.html" %}
-{%- block title -%}
-oveda - Terminkalender für Goslar und Hahnenklee
-{%- endblock -%}
-{% block content %}
-{% block header_before_site_js %}
-
-
-{%- endblock -%}
-
-
Terminkalender für Goslar und Hahnenklee
-
-
-{% endblock %}
\ No newline at end of file
diff --git a/project/templates/layout.html b/project/templates/layout.html
index 6b72797..c06738c 100644
--- a/project/templates/layout.html
+++ b/project/templates/layout.html
@@ -173,8 +173,8 @@
diff --git a/project/templates/layout_vue.html b/project/templates/layout_vue.html
index f78a2ec..29fbab7 100644
--- a/project/templates/layout_vue.html
+++ b/project/templates/layout_vue.html
@@ -52,6 +52,12 @@
en: {
shared: {
models: {
+ adminUnit: {
+ className: "Organization",
+ listName: "Organizations",
+ name: "Name",
+ shortName: "Short name",
+ },
adminUnitRelation: {
targetOrganization: "Other organization",
autoVerifyEventReferenceRequests: "Verify reference requests automatically",
@@ -132,6 +138,12 @@
de: {
shared: {
models: {
+ adminUnit: {
+ className: "Organisation",
+ listName: "Organisationen",
+ name: "Name",
+ shortName: "Kurzname",
+ },
adminUnitRelation: {
targetOrganization: "Andere Organisation",
autoVerifyEventReferenceRequests:
diff --git a/project/templates/organization/main.html b/project/templates/organization/main.html
new file mode 100644
index 0000000..07ae9c6
--- /dev/null
+++ b/project/templates/organization/main.html
@@ -0,0 +1,34 @@
+{% extends "layout_vue.html" %}
+
+{%- block title -%}
+{{ _('Organizations') }}
+{%- endblock -%}
+
+{% block header_before_site_js %}
+{{ super() }}
+
+{%- endblock -%}
+
+{% block component_scripts %}
+
+
+{% endblock %}
+
+{% block component_definitions %}
+Vue.component("OrganizationList", OrganizationList);
+Vue.component("OrganizationRead", OrganizationRead);
+{% endblock %}
+
+{% block vue_routes %}
+const routes = [
+ {
+ path: "/organizations",
+ component: OrganizationList,
+ },
+ {
+ path: "/organizations/:organization_id",
+ component: OrganizationRead,
+ name: "OrganizationById",
+ },
+];
+{% endblock %}
diff --git a/project/views/organization.py b/project/views/organization.py
new file mode 100644
index 0000000..52c2855
--- /dev/null
+++ b/project/views/organization.py
@@ -0,0 +1,9 @@
+from flask import render_template
+
+from project import app
+
+
+@app.route("/organizations")
+@app.route("/organizations/
")
+def organizations(path=None):
+ return render_template("organization/main.html")
diff --git a/project/views/root.py b/project/views/root.py
index 14f19f6..4dd80a1 100644
--- a/project/views/root.py
+++ b/project/views/root.py
@@ -32,11 +32,6 @@ def home():
)
-@app.route("/example")
-def example():
- return render_template("example.html")
-
-
@app.route("/tos")
def tos():
title = gettext("Terms of service")
diff --git a/tests/api/test_event_date.py b/tests/api/test_event_date.py
index 4fa6e2b..0920000 100644
--- a/tests/api/test_event_date.py
+++ b/tests/api/test_event_date.py
@@ -41,8 +41,11 @@ def test_list(client, seeder, utils):
def test_search(client, seeder, utils):
+ from project.dateutils import create_berlin_date
+
user_id, admin_unit_id = seeder.setup_base()
- event_id = seeder.create_event(admin_unit_id)
+ start = create_berlin_date(2020, 10, 3, 10)
+ event_id = seeder.create_event(admin_unit_id, start=start)
seeder.create_event(admin_unit_id, draft=True)
seeder.create_event_unverified()
@@ -50,7 +53,7 @@ def test_search(client, seeder, utils):
response = utils.get_ok(url)
assert len(response.json["items"]) == 1
assert response.json["items"][0]["event"]["id"] == event_id
- assert response.json["items"][0]["start"].endswith("+02:00")
+ assert response.json["items"][0]["start"] == "2020-10-03T10:00:00+02:00"
url = utils.get_url("api_v1_event_date_search", keyword="name")
response = utils.get_ok(url)
diff --git a/tests/api/test_organization.py b/tests/api/test_organization.py
index 9a4a2da..c160295 100644
--- a/tests/api/test_organization.py
+++ b/tests/api/test_organization.py
@@ -15,12 +15,61 @@ def test_read(client, seeder, utils):
def test_list(client, seeder, utils):
- user_id, admin_unit_id = seeder.setup_base()
-
+ seeder.setup_base()
url = utils.get_url("api_v1_organization_list", keyword="crew")
utils.get_ok(url)
+def test_list_unverified(client, app, seeder, utils):
+ _, verified_admin_unit_id = seeder.setup_base(
+ email="verified@test.de",
+ log_in=False,
+ name="Verified",
+ admin_unit_verified=True,
+ )
+ _, unverified_admin_unit_id = seeder.setup_base(
+ email="unverified@test.de",
+ log_in=False,
+ name="Unverified",
+ admin_unit_verified=False,
+ )
+
+ # Unauthorisierte Nutzer sehen nur verifizierte Organisationen
+ url = utils.get_url("api_v1_organization_list")
+ response = utils.get_ok(url)
+ assert len(response.json["items"]) == 1
+ assert response.json["items"][0]["id"] == verified_admin_unit_id
+
+ # user_id1 sieht verified_admin_unit_id, weil sie verifiziert ist,
+ # aber nicht unverified_admin_unit_id, weil sie nicht verifiziert ist.
+ utils.login("verified@test.de")
+ response = utils.get_ok(url)
+ assert len(response.json["items"]) == 1
+ assert response.json["items"][0]["id"] == verified_admin_unit_id
+
+ # Authorisierte Nutzer, die Organisationen verifizieren dürfen, sehen alle Organisationen.
+ # "admin@oveda.de" ist Mitglied der Organisation "Oveda", die andere Organisationen verifizieren darf.
+ with app.app_context():
+ from project.services.admin_unit import get_admin_unit_by_name
+
+ oveda_id = get_admin_unit_by_name("Oveda").id
+
+ utils.logout()
+ utils.login("admin@oveda.de")
+ response = utils.get_ok(url)
+ assert len(response.json["items"]) == 3
+ assert response.json["items"][0]["id"] == oveda_id
+ assert response.json["items"][1]["id"] == unverified_admin_unit_id
+ assert response.json["items"][2]["id"] == verified_admin_unit_id
+
+ # Globale Admins dürfen alle Organisationen sehen
+ seeder.create_user("admin@test.de", admin=True)
+ utils.logout()
+ utils.login("admin@test.de")
+ response = utils.get_ok(url)
+ assert len(response.json["items"]) == 3
+
+
def test_event_date_search(client, seeder, utils):
user_id, admin_unit_id = seeder.setup_base(log_in=False)
event_id = seeder.create_event(admin_unit_id)
diff --git a/tests/seeder.py b/tests/seeder.py
index bc58838..d420da0 100644
--- a/tests/seeder.py
+++ b/tests/seeder.py
@@ -4,11 +4,20 @@ class Seeder(object):
self._db = db
self._utils = utils
- def setup_base(self, admin=False, log_in=True, admin_unit_verified=True):
- user_id = self.create_user(admin=admin)
+ def setup_base(
+ self,
+ admin=False,
+ log_in=True,
+ admin_unit_verified=True,
+ email="test@test.de",
+ name="Meine Crew",
+ ):
+ user_id = self.create_user(email=email, admin=admin)
if log_in:
self._utils.login()
- admin_unit_id = self.create_admin_unit(user_id, verified=admin_unit_verified)
+ admin_unit_id = self.create_admin_unit(
+ user_id, name=name, verified=admin_unit_verified
+ )
return (user_id, admin_unit_id)
def setup_base_event_verifier(self):
@@ -86,7 +95,7 @@ class Seeder(object):
if other_admin_unit:
other_admin_unit_id = other_admin_unit.id
else:
- other_user_id = self.create_user("other@test.de")
+ other_user_id = self.create_user("admin@oveda.de")
other_admin_unit_id = self.create_admin_unit(
other_user_id, "Oveda", can_verify_other=True
)
diff --git a/tests/views/test_root.py b/tests/views/test_root.py
index cfa7c19..778e786 100644
--- a/tests/views/test_root.py
+++ b/tests/views/test_root.py
@@ -12,8 +12,8 @@ def test_home(client, seeder, utils):
utils.assert_response_redirect(response, "home")
-def test_example(client, seeder, utils):
- url = utils.get_url("example")
+def test_organizations(client, seeder, utils):
+ url = utils.get_url("organizations")
utils.get_ok(url)