OpenSlides/tests/unit/motions/test_projector.py
2019-07-04 07:12:31 +02:00

354 lines
12 KiB
Python

from typing import Any, Dict
import pytest
from openslides.motions import projector
from ...integration.helpers import all_data_config, all_data_users
@pytest.fixture
def all_data():
return_value = all_data_config()
return_value.update(all_data_users())
return_value["motions/motion"] = {
1: {
"id": 1,
"identifier": "4",
"title": "12345",
"text": "motion text",
"amendment_paragraphs": None,
"modified_final_version": "",
"reason": "",
"parent_id": None,
"category_id": None,
"comments": [],
"motion_block_id": None,
"origin": "",
"submitters": [{"id": 4, "user_id": 1, "motion_id": 1, "weight": 1}],
"supporters_id": [],
"state_id": 1,
"state_extension": None,
"state_restriction": [],
"statute_paragraph_id": None,
"workflow_id": 1,
"recommendation_id": None,
"recommendation_extension": None,
"tags_id": [],
"attachments_id": [],
"polls": [
{
"id": 1,
"motion_id": 4,
"yes": "10.000000",
"no": "-1.000000",
"abstain": "20.000000",
"votesvalid": "11.000000",
"votesinvalid": "2.000000",
"votescast": "30.000000",
"has_votes": True,
}
],
"agenda_item_id": 4,
"log_messages": [
{
"message_list": "['Vote updated']",
"person_id": 1,
"time": "2019-01-19T22:15:53.291123+01:00",
"message": "Jan. 19, 2019, 10:15 p.m. Vote updated by Administrator",
},
{
"message_list": "['Vote created']",
"person_id": 1,
"time": "2019-01-19T22:15:37.446262+01:00",
"message": "Jan. 19, 2019, 10:15 p.m. Vote created by Administrator",
},
{
"message_list": "['Motion created']",
"person_id": 1,
"time": "2019-01-19T18:37:34.833749+01:00",
"message": "Jan. 19, 2019, 6:37 p.m. Motion created by Administrator",
},
],
"sort_parent_id": None,
"weight": 10000,
"created": "2019-01-19T18:37:34.741336+01:00",
"last_modified": "2019-01-19T18:37:34.741368+01:00",
"change_recommendations": [
{
"id": 1,
"motion_id": 1,
"rejected": False,
"internal": True,
"type": 0,
"other_description": "",
"line_from": 1,
"line_to": 2,
"text": "internal new motion text",
"creation_time": "2019-02-09T09:54:06.256378+01:00",
},
{
"id": 2,
"motion_id": 1,
"rejected": False,
"internal": False,
"type": 0,
"other_description": "",
"line_from": 1,
"line_to": 2,
"text": "public new motion text",
"creation_time": "2019-02-09T09:54:06.256378+01:00",
},
],
},
2: {
"id": 2,
"identifier": "Ä1",
"title": "Amendment for 12345",
"text": "",
"amendment_paragraphs": ["New motion text"],
"modified_final_version": "",
"reason": "",
"parent_id": 1,
"category_id": None,
"comments": [],
"motion_block_id": None,
"origin": "",
"submitters": [{"id": 4, "user_id": 1, "motion_id": 1, "weight": 1}],
"supporters_id": [],
"state_id": 1,
"state_extension": None,
"state_restriction": [],
"statute_paragraph_id": None,
"workflow_id": 1,
"recommendation_id": None,
"recommendation_extension": None,
"tags_id": [],
"attachments_id": [],
"polls": [],
"agenda_item_id": 4,
"log_messages": [],
"sort_parent_id": None,
"weight": 10000,
"created": "2019-01-19T18:37:34.741336+01:00",
"last_modified": "2019-01-19T18:37:34.741368+01:00",
"change_recommendations": [],
},
3: {
"id": 3,
"identifier": None,
"title": "Statute amendment for §1 Preamble",
"text": "<p>Some other preamble text</p>",
"amendment_paragraphs": None,
"modified_final_version": "",
"reason": "",
"parent_id": None,
"category_id": None,
"comments": [],
"motion_block_id": None,
"origin": "",
"submitters": [{"id": 4, "user_id": 1, "motion_id": 1, "weight": 1}],
"supporters_id": [],
"state_id": 1,
"state_extension": None,
"state_restriction": [],
"statute_paragraph_id": 1,
"workflow_id": 1,
"recommendation_id": None,
"recommendation_extension": None,
"tags_id": [],
"attachments_id": [],
"polls": [],
"agenda_item_id": 4,
"log_messages": [],
"sort_parent_id": None,
"weight": 10000,
"created": "2019-01-19T18:37:34.741336+01:00",
"last_modified": "2019-01-19T18:37:34.741368+01:00",
"change_recommendations": [],
},
}
return_value["motions/workflow"] = {
1: {
"id": 1,
"name": "Simple Workflow",
"states": [
{
"id": 1,
"name": "submitted",
"recommendation_label": None,
"css_class": "primary",
"restriction": [],
"allow_support": True,
"allow_create_poll": True,
"allow_submitter_edit": True,
"dont_set_identifier": False,
"show_state_extension_field": False,
"merge_amendment_into_final": 0,
"show_recommendation_extension_field": False,
"next_states_id": [2, 3, 4],
"workflow_id": 1,
},
{
"id": 2,
"name": "accepted",
"recommendation_label": "Acceptance",
"css_class": "success",
"restriction": [],
"allow_support": False,
"allow_create_poll": False,
"allow_submitter_edit": False,
"dont_set_identifier": False,
"show_state_extension_field": False,
"merge_amendment_into_final": 1,
"show_recommendation_extension_field": False,
"next_states_id": [],
"workflow_id": 1,
},
{
"id": 3,
"name": "rejected",
"recommendation_label": "Rejection",
"css_class": "danger",
"restriction": [],
"allow_support": False,
"allow_create_poll": False,
"allow_submitter_edit": False,
"dont_set_identifier": False,
"show_state_extension_field": False,
"merge_amendment_into_final": -1,
"show_recommendation_extension_field": False,
"next_states_id": [],
"workflow_id": 1,
},
{
"id": 4,
"name": "not decided",
"recommendation_label": "No decision",
"css_class": "default",
"restriction": [],
"allow_support": False,
"allow_create_poll": False,
"allow_submitter_edit": False,
"dont_set_identifier": False,
"show_state_extension_field": False,
"merge_amendment_into_final": -1,
"show_recommendation_extension_field": False,
"next_states_id": [],
"workflow_id": 1,
},
],
"first_state_id": 1,
}
}
return_value["motions/statute-paragraph"] = {
1: {
"id": 1,
"title": "§1 Preamble",
"text": "<p>Some preamble text</p>",
"weight": 10000,
}
}
return_value["motions/motion-change-recommendation"] = {}
return return_value
@pytest.mark.asyncio
async def test_motion_slide(all_data):
element: Dict[str, Any] = {"id": 1}
data = await projector.motion_slide(all_data, element, 1)
assert data == {
"identifier": "4",
"title": "12345",
"text": "motion text",
"amendments": [
{
"id": 2,
"title": "Amendment for 12345",
"amendment_paragraphs": ["New motion text"],
"identifier": "Ä1",
"merge_amendment_into_final": 0,
"merge_amendment_into_diff": 0,
}
],
"amendment_paragraphs": None,
"change_recommendations": [
{
"id": 2,
"motion_id": 1,
"rejected": False,
"internal": False,
"type": 0,
"other_description": "",
"line_from": 1,
"line_to": 2,
"text": "public new motion text",
"creation_time": "2019-02-09T09:54:06.256378+01:00",
}
],
"base_motion": None,
"base_statute": None,
"is_child": False,
"show_meta_box": True,
"reason": "",
"submitter": ["Administrator"],
"line_length": 90,
"line_numbering_mode": "none",
"preamble": "The assembly may decide:",
"recommendation_referencing_motions": None,
}
@pytest.mark.asyncio
async def test_amendment_slide(all_data):
element: Dict[str, Any] = {"id": 2}
data = await projector.motion_slide(all_data, element, 1)
assert data == {
"identifier": "Ä1",
"title": "Amendment for 12345",
"text": "",
"amendments": [],
"amendment_paragraphs": ["New motion text"],
"change_recommendations": [],
"base_motion": {"identifier": "4", "text": "motion text", "title": "12345"},
"base_statute": None,
"is_child": True,
"show_meta_box": True,
"reason": "",
"submitter": ["Administrator"],
"line_length": 90,
"line_numbering_mode": "none",
"preamble": "The assembly may decide:",
"recommendation_referencing_motions": None,
}
@pytest.mark.asyncio
async def test_statute_amendment_slide(all_data):
element: Dict[str, Any] = {"id": 3}
data = await projector.motion_slide(all_data, element, 1)
assert data == {
"identifier": None,
"title": "Statute amendment for §1 Preamble",
"text": "<p>Some other preamble text</p>",
"amendments": [],
"amendment_paragraphs": None,
"change_recommendations": [],
"base_motion": None,
"base_statute": {"title": "§1 Preamble", "text": "<p>Some preamble text</p>"},
"is_child": False,
"show_meta_box": True,
"reason": "",
"submitter": ["Administrator"],
"line_length": 90,
"line_numbering_mode": "none",
"preamble": "The assembly may decide:",
"recommendation_referencing_motions": None,
}