#!/usr/share/ucs-test/runner bash
## desc: |
##  Create OX group with non-OX-user
##  1. Create OX group
##  2. Create at least one non-OX-user before multiple OX users
##  3. Convert the non-OX-user into an OX-user to create a higher ID for an alphabetically lower user
##  4. Add all users to the LDAP group
##  5. Check all users are in the OX group
## bugs: [34267]
## packages:
##  - univention-ox
## tags:
##  - apptest
## exposure: dangerous

. "/usr/share/univention-lib/all.sh" || exit 137
. "ox.sh" || exit 137

eval "$(/usr/sbin/ucr shell)"

RETVAL=100

COUNT=3
username1="Emil$(user_randomname)"
usermail1="$(random_mailaddress)@$domainname"
username2="Frank$(user_randomname)"
usermail2="$(random_mailaddress)@$domainname"
username3="Herbert$(user_randomname)"
usermail3="$(random_mailaddress)@$domainname"
groupname="$(ox_group_randomname)"
groupmail="$(random_mailaddress)@$domainname"

create_non_ox_user "$username1"
create_ox_user "$username2" "$usermail2"
create_ox_user "$username3" "$usermail3"
MAILADDR="${groupmail%@$domainname}" group_create "$groupname" \
	--set isOxGroup=OK ||
	fail_test 110 "Failed to create OX group"

wait_for_replication  # Bug #30560.4 work-around for S4-connector

/opt/open-xchange/sbin/listgroup \
	--contextid 10 \
	--adminuser oxadmin \
	--adminpass "$(cat /etc/ox-secrets/context10.secret)" \
	--searchpattern "$groupname" \
	--csv | tail -n +2 | grep -q "$groupname" ||
     fail_test 110 "LDAP group has not been synced to OX"

udm-test users/user modify \
	--dn "uid=$username1,cn=users,$ldap_base" \
	--set mailPrimaryAddress="$usermail1" \
	--set isOxUser=OK ||
     fail_test 110 "Failed to modify OX user"

wait_for_replication

udm-test groups/group modify \
	--dn "cn=$groupname,cn=groups,$ldap_base" \
	--append users="uid=$username1,cn=users,$ldap_base" \
	--append users="uid=$username2,cn=users,$ldap_base" \
	--append users="uid=$username3,cn=users,$ldap_base" ||
     fail_test 110 "Failed to modify OX group"

wait_for_replication_and_postrun

ox_csv_setup
ox_sudo listgroup --searchpattern "$groupname" --csv |
	sed -re '1d;s/^"[0-9]+",".+",".+","([0-9,]+)"$/\1,/;T;/^([0-9]+,){'$COUNT'}/Q1' &&
	fail_test 110 "Group does not have the $COUNT expected members"

group_remove "$groupname"
wait_for_replication

/opt/open-xchange/sbin/listgroup \
	--contextid 10 \
	--adminuser oxadmin \
	--adminpass "$(cat /etc/ox-secrets/context10.secret)" \
	--searchpattern "$groupname" \
	--csv | tail -n +2 | grep -q "$groupname" &&
     fail_test 110 "OX group does still exist after LDAP removal"

user_remove "$username1"
user_remove "$username2"
user_remove "$username3"

wait_for_replication

exit $RETVAL
# vim:set ft=sh:
