#!/usr/share/ucs-test/runner python
## -*- coding: utf-8 -*-
## desc: create OX user in new context
## tags: [apptest]
## exposure: dangerous
## packages:
##   - univention-ox (>= 8.1.0-72)
##   - open-xchange-authentication-ucs (>= 7.8.4-0)
## bugs: [43264]

import univention.testing.udm as testing_udm
import univention.testing.ucr as testing_ucr
import univention.testing.strings as uts
import univention.config_registry
import essential.common


with essential.common.OXTestEnv() as oxenv, \
		testing_udm.UCSTestUDM() as udm, \
		testing_ucr.UCSTestConfigRegistry() as ucr, \
		essential.common.OXTestEmptyQueue():

	context_id = uts.random_int(100, 300)
	mail_domain = ucr.get('mail/hosteddomains').split()[-1].strip()
	ldap_base = ucr.get('ldap/base')

	oxenv.create_context(context_id)
	oxenv.check_if_context_exists_in_ldap(context_id)
	oxenv.check_if_context_exists_in_ox(context_id)

	print('*** Creating user in OX context {}...'.format(context_id))
	ox_user_password = uts.random_string()
	mpa = '{}@{}'.format(uts.random_username(), mail_domain)
	ox_user_dn, ox_username = udm.create_user(
		mailPrimaryAddress=mpa,
		password=ox_user_password,
		isOxUser='OK',
		oxContext=context_id)

	oxenv.check_if_user_exists_in_context(ox_username, context_id)
	print('*** Testing login with username...')
	oxenv.check_if_user_can_login(ox_username, ox_user_password)
	print('*** Testing login with mPA...')
	univention.config_registry.handler_set(['ox/cfg/authplugin.properties/com.openexchange.authentication.ucs.searchFilter=(&(objectClass=oxUserObject)(|(uid=%s)(mailPrimaryAddress=%s)))'])
	oxenv.restart_ox_server()
	oxenv.check_if_user_can_login(mpa, ox_user_password)

	print('*** Removing user from OX context {}...'.format(context_id))
	udm.remove_object('users/user', dn=ox_user_dn)

	oxenv.check_if_user_exists_in_context(ox_username, context_id, expected=False)

# restart OX server after resetting ox/cfg/authplugin.properties/com.openexchange.authentication.ucs.searchFilter
essential.common.OXTestEnv.restart_ox_server()
