#!/usr/share/ucs-test/runner python
## -*- coding: utf-8 -*-
## desc: CSV import module
## roles: [domaincontroller_master]
## tags: [apptest, ucsschool]
## exposure: dangerous
## packages: [ucs-school-umc-csv-import]

from essential.importcsv import update_persons, verify_persons, transform_usernames
from essential.importcsv import stu_tea_file, staff_file, check_import_users
import univention.testing.ucr as ucr_test
import univention.testing.ucsschool as utu


def main():
	with utu.UCSTestSchool() as schoolenv:
		with ucr_test.UCSTestConfigRegistry() as ucr:
			school, oudn = schoolenv.create_ou(name_edudc=ucr.get('hostname'))

			persons_list = []

			# Check healthy import with healthy data
			user_types = ['student', 'teacher', 'staff',  'teachersAndStaff']
			nr_of_lines = 2 # number of users to import for each type
			# Generate import files ; staff does not have class attr
			files_01 = [
					stu_tea_file(nr_of_lines),
					stu_tea_file(nr_of_lines),
					staff_file(nr_of_lines),
					stu_tea_file(nr_of_lines)
					]
			expected_upload_status = 200
			delete_not_mentioned = False
			# checking importing the users
			users, errors, warnings = check_import_users(
					school,
					user_types,
					files_01,
					delete_not_mentioned,
					expected_upload_status,
					[],
					[])
			# update persons list with the actual persons imported
			update_persons(school, persons_list, users)
			# verify imported persons in ldap
			verify_persons(persons_list)

			# do the same steps with delete_not_mentioned=True
			nr_of_lines = 1
			files_02 = [
					stu_tea_file(nr_of_lines),
					stu_tea_file(nr_of_lines),
					staff_file(nr_of_lines),
					stu_tea_file(nr_of_lines)
					]
			delete_not_mentioned = True
			users, errors, warnings = check_import_users(
					school,
					user_types,
					files_02,
					delete_not_mentioned,
					expected_upload_status,
					[],
					[]
					)
			update_persons(school, persons_list, users)
			verify_persons(persons_list)

			# Check warnings for changing firstname, lastname and birthday of an existing user
			warnings_keys = [
					'firstname', 'lastname', 'birthday', 'email',
					'firstname', 'lastname', 'birthday', 'email',
					'firstname', 'lastname', 'birthday', 'email',
					'firstname', 'lastname', 'birthday', 'email'
					]
			nr_of_lines = 1
			files_03 = [
					stu_tea_file(nr_of_lines),
					stu_tea_file(nr_of_lines),
					staff_file(nr_of_lines),
					stu_tea_file(nr_of_lines)
					]
			# Assign the same usernames of users in files_02 to users in files_03
			transform_usernames(files_02, files_03, nr_of_lines)
			delete_not_mentioned = False
			# Try to import the new users with the same names
			# check if warnings/ errors are detected
			users, errors, warnings = check_import_users(
					school,
					user_types,
					files_03,
					delete_not_mentioned,
					expected_upload_status,
					[],
					warnings_keys
					)
			update_persons(school, persons_list, users)
			verify_persons(persons_list)

			# import new users with delete_not_mentioned=False
			files_02 = [
					stu_tea_file(nr_of_lines),
					stu_tea_file(nr_of_lines),
					staff_file(nr_of_lines),
					stu_tea_file(nr_of_lines)
					]
			users, errors, warnings = check_import_users(
					school,
					user_types,
					files_02,
					delete_not_mentioned,
					expected_upload_status,
					[],
					[])
			update_persons(school, persons_list, users)
			verify_persons(persons_list)

			files_04 = [stu_tea_file(nr_of_lines),
					stu_tea_file(nr_of_lines),
					staff_file(nr_of_lines),
					stu_tea_file(nr_of_lines)
					]
			# Assign the same usernames of users in files_02 to users in files_04
			transform_usernames(files_02, files_04, nr_of_lines)
			delete_not_mentioned = True
			users, errors, warnings = check_import_users(
					school,
					user_types,
					files_04,
					delete_not_mentioned,
					expected_upload_status,
					[],
					warnings_keys)
			update_persons(school, persons_list, users)
			verify_persons(persons_list)

			# Check errors when changing the role of an already existing users
			user_types = ['teacher', 'teachersAndStaff', 'staff', 'student']
			delete_not_mentioned = False
			errors_keys = ['name', 'name', 'name']
			users, errors, warnings = check_import_users(
					school,
					user_types,
					files_04,
					delete_not_mentioned,
					expected_upload_status,
					errors_keys,
					[])
			verify_persons(persons_list)

if __name__ == '__main__':
	main()
