OpenSlides/tests/old/motions/test_csv_import.py
Norman Jäckel b30afbd635 Added several motion REST API views.
Added motion creation view, motion update view, version permit and delete view, view to support motions, view to set and reset state. Refactored motion submitters and supporters.
2015-05-13 12:22:50 +02:00

91 lines
4.5 KiB
Python

from io import BytesIO
from unittest import skip
from openslides.motions.models import Category, Motion
from openslides.users.models import User
from openslides.utils.test import TestCase
from openslides.config.api import config
class CSVImport(TestCase):
def setUp(self):
# User1
self.user1 = User.objects.create_user('Admin_ieY0Eereimeimeizuosh', 'eHiK1aiRahxaix0Iequ2')
# Normal user
self.normal_user = User.objects.create_user('User_CiuNgo4giqueeChie5oi', 'eihi1Eequaek4eagaiKu')
# Category
Category.objects.create(name='Bildung', prefix='B1')
Category.objects.create(name='Bildung', prefix='B2')
@skip
def test_example_file_de(self):
# Set config to sort names by first_name because the example csv-file
# expect this.
config['users_sort_users_by_first_name'] = True
special_user = User.objects.create_user(username='Harry_Holland',
password='iegheeChaje7guthie4a',
first_name='Harry',
last_name='Holland')
for i in range(2):
username = 'John_Doe_%d' % i
User.objects.create_user(username=username,
password='default',
first_name='John',
last_name='Doe')
# csv_dir = os.path.join(os.path.dirname(__file__), '..', '..', '..', 'extras', 'csv-examples')
self.assertEqual(Motion.objects.count(), 0)
# with open(csv_dir + '/motions-demo_de.csv', 'rb') as f:
success_message, warning_message, error_message = None
# TODO: import_motions already deleted
# import_motions(csvfile=f, default_submitter=self.normal_user,
# override=False, importing_person=self.user1)
self.assertEqual(Motion.objects.count(), 11)
motion1 = Motion.objects.get(pk=1)
self.assertEqual(motion1.identifier, '1')
self.assertEqual(motion1.title, u'Entlastung des Vorstandes')
self.assertEqual(motion1.text, u'Die Versammlung möge beschließen, den Vorstand für seine letzte Legislaturperiode zu entlasten.')
self.assertEqual(motion1.reason, u'Bericht erfolgt mündlich.')
self.assertEqual(len(motion1.submitters.all()), 1)
self.assertEqual(motion1.submitters.all()[0], self.normal_user)
self.assertTrue(motion1.category is None)
self.assertTrue('Submitter unknown.' in warning_message)
self.assertTrue('Category unknown.' in warning_message)
motion2 = Motion.objects.get(pk=2)
self.assertEqual(motion2.identifier, 'SA 1')
self.assertEqual(motion2.title, u'Satzungsänderung § 2 Abs. 3')
self.assertHTMLEqual(motion2.text, u'''<p>Die Versammlung möge beschließen, die Satzung in § 2 Abs. 3 wie folgt zu ändern:</p>
<p>Es wird vor dem Wort "Zweck" das Wort "gemeinnütziger" eingefügt.</p>''')
self.assertEqual(motion2.reason, u'Die Änderung der Satzung ist aufgrund der letzten Erfahrungen eine sinnvolle Maßnahme, weil ...')
self.assertEqual(len(motion2.submitters.all()), 1)
self.assertEqual(motion2.submitters.all()[0], special_user)
self.assertEqual(motion2.category.name, u"Satzungsanträge") # category is created automatically
# check user 'John Doe'
self.assertTrue('Several suitable submitters found.' in warning_message)
# check category 'Bildung'
self.assertTrue('Several suitable categories found.' in warning_message)
@skip
def test_malformed_file(self):
csv_file = BytesIO()
csv_file.write(bytes('Header\nMalformed data,\n,Title,Text,,,\n', 'utf8'))
success_message, warning_message, error_message = None
# TODO: import_motions already deleted
# import_motions(csvfile=csv_file, default_submitter=self.normal_user.id, override=False)
self.assertEqual(success_message, '')
self.assertTrue('Line is malformed.' in error_message)
@skip
def test_wrong_encoding(self):
# csv_file = BytesIO(bytes('Müller', 'iso-8859-15'))
success_message, warning_message, error_message = None
# TODO: import_motions already deleted
# import_motions(csvfile=csv_file, default_submitter=self.normal_user.id, override=False)
self.assertEqual(success_message, '')
self.assertIn('Import file has wrong character encoding, only UTF-8 is supported!', error_message)