#!/usr/share/ucs-test/runner python3
## desc: Apply valid/invalid values for UDM syntaxes emailAddress and emailAddressTemplate
## tags: [udm]
## roles: [domaincontroller_master]
## exposure: careful
## packages:
##   - univention-config
##   - univention-directory-manager-tools

from __future__ import print_function
import univention.testing.udm as udm_test
import univention.testing.utils as utils
import univention.testing.strings as uts

if __name__ == '__main__':
	for syntax in ('emailAddress', 'emailAddressTemplate'):
		with udm_test.UCSTestUDM() as udm:
			cli_name = uts.random_string()
			udm.create_object(
				'settings/extended_attribute',
				position=udm.UNIVENTION_CONTAINER,
				name=uts.random_name(),
				shortDescription=uts.random_string(),
				CLIName=cli_name,
				module='users/user',
				objectClass='univentionFreeAttributes',
				ldapMapping='univentionFreeAttribute15',
				syntax=syntax
			)
			udm.stop_cli_server()

			# check valid values
			for value in ('foo@example.com', 'foo+bar@example.com', 'foo-bar@example.com', 'foo@sub.sub.sub.domain.example.com', ''):
				user_dn, username = udm.create_user(**{cli_name: value})
				utils.verify_ldap_object(
					user_dn,
					{
						'univentionFreeAttribute15': [value] if value else [],
					})

			# check invalid values
			for value in ('foo', 'example.com', '@', 'foo', 'foo@', '@example.com'):
				try:
					print('*** Testing value for %r for %s syntax' % (value, syntax))
					udm.create_user(**{cli_name: value})
				except udm_test.UCSTestUDM_CreateUDMObjectFailed:
					continue

				utils.fail('Applied invalid value %r for %s syntax without expected exception' % (value, syntax))
