Source code for univention.testing.ucsschool.klasse

"""
.. module:: Klasse
    :platform: Unix

.. moduleauthor:: Ammar Najjar <najjar@univention.de>
"""
from __future__ import print_function

import univention.testing.strings as uts
import univention.testing.ucr as ucr_test
from ucsschool.lib.roles import create_ucsschool_role_string, role_school_class, role_school_class_share
from univention.testing import utils
from univention.testing.ucsschool.ucs_test_school import UCSTestSchool
from univention.testing.umc import Client


[docs] class Klasse(object): """ Contains the needed functionality for classes in an already created OU, By default they are randomly formed except the OU, should be provided\n :param school: name of the ou :type school: str :param connection: :type connection: UMC connection object :param ucr: :type ucr: UCR object :param name: name of the class to be created later :type name: str :param description: description of the class to be created later :type description: str """ def __init__(self, school, connection=None, ucr=None, name=None, users=None, description=None): self.school = school self.users = users or [] self.name = name or uts.random_string() self.description = description or uts.random_string() self.ucr = ucr or ucr_test.UCSTestConfigRegistry() self.ucr.load() self.client = connection or Client.get_test_connection(self.ucr.get("ldap/master")) def __enter__(self): return self def __exit__(self, type, value, trace_back): self.ucr.revert_to_original_registry()
[docs] def create(self): """Creates object class""" flavor = "schoolwizards/classes" param = [ { "object": {"name": self.name, "school": self.school, "description": self.description}, "options": None, } ] print("Creating class %s in school %s" % (self.name, self.school)) print("param = %s" % (param,)) reqResult = self.client.umc_command("schoolwizards/classes/add", param, flavor).result assert reqResult[0], "Unable to create class (%r)" % (param,)
[docs] def query(self): """get the list of existing classes in the school""" flavor = "schoolwizards/classes" param = {"school": self.school, "filter": ""} reqResult = self.client.umc_command("schoolwizards/classes/query", param, flavor).result return reqResult
[docs] def check_query(self, classes_names): q = self.query() k = [x["name"] for x in q] assert set(classes_names) == set( k ), "Classes from query do not match existing ones\nfound (%r)\nexpected (%r)" % ( k, classes_names, )
[docs] def dn(self): return "cn=%s-%s,cn=klassen,cn=schueler,cn=groups,%s" % ( self.school, self.name, UCSTestSchool().get_ou_base_dn(self.school), )
@property def share_dn(self): return "cn=%s-%s,cn=klassen,cn=shares,%s" % ( self.school, self.name, UCSTestSchool().get_ou_base_dn(self.school), )
[docs] def get(self): """Get class""" flavor = "schoolwizards/classes" param = [{"object": {"$dn$": self.dn(), "school": self.school}}] reqResult = self.client.umc_command("schoolwizards/classes/get", param, flavor).result assert reqResult[0], "Unable to get class (%s)" % self.name return reqResult[0]
[docs] def check_get(self): info = { "$dn$": self.dn(), "school": self.school, "description": self.description, "name": self.name, "users": self.users, "objectType": "groups/group", "ucsschool_roles": [create_ucsschool_role_string(role_school_class, self.school)], } get_result = self.get() assert ( get_result == info ), "Failed get request for class %s. Returned result: %r. Expected result: %r" % ( self.name, get_result, info, )
[docs] def remove(self): """Remove class""" flavor = "schoolwizards/classes" param = [{"object": {"$dn$": self.dn(), "school": self.school}, "options": None}] reqResult = self.client.umc_command("schoolwizards/classes/remove", param, flavor).result assert reqResult[0], "Unable to remove class (%s)" % self.name
[docs] def edit(self, new_attributes): """Edit object class""" flavor = "schoolwizards/classes" param = [ { "object": { "$dn$": self.dn(), "name": new_attributes["name"], "school": self.school, "description": new_attributes["description"], }, "options": None, } ] print("Editing class %s in school %s" % (self.name, self.school)) print("param = %s" % (param,)) reqResult = self.client.umc_command("schoolwizards/classes/put", param, flavor).result assert reqResult[0], "Unable to edit class (%s) with the parameters (%r)" % (self.name, param) self.name = new_attributes["name"] self.description = new_attributes["description"]
[docs] def check_existence(self, should_exist): utils.verify_ldap_object(self.dn(), should_exist=should_exist)
[docs] def verify(self): # TODO: check all attributes utils.verify_ldap_object( self.dn(), expected_attr={ "ucsschoolRole": [create_ucsschool_role_string(role_school_class, self.school)] }, should_exist=True, ) utils.verify_ldap_object( self.share_dn, expected_attr={ "ucsschoolRole": [create_ucsschool_role_string(role_school_class_share, self.school)] }, should_exist=True, )