001/**
002 * Copyright 2005-2014 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.kuali.rice.kim.test.service;
017
018import java.util.Collections;
019import java.util.HashMap;
020import java.util.List;
021import java.util.Map;
022
023import org.junit.Test;
024import org.kuali.rice.kim.api.common.attribute.KimAttribute;
025import org.kuali.rice.kim.api.group.Group;
026import org.kuali.rice.kim.api.services.KimApiServiceLocator;
027import org.kuali.rice.kim.api.type.KimType;
028import org.kuali.rice.kim.api.type.KimTypeAttribute;
029import org.kuali.rice.kim.impl.common.attribute.KimAttributeBo;
030import org.kuali.rice.kim.impl.type.KimTypeAttributeBo;
031import org.kuali.rice.kim.impl.type.KimTypeBo;
032import org.kuali.rice.kim.test.KIMTestCase;
033import org.kuali.rice.krad.service.KRADServiceLocator;
034import org.kuali.rice.test.BaselineTestCase;
035
036import static org.junit.Assert.*;
037
038/**
039 * Unit test for {@link org.kuali.rice.kim.api.group.GroupService}
040 *
041 * @author Kuali Rice Team (rice.collab@kuali.org)
042 *
043 */
044@BaselineTestCase.BaselineMode(BaselineTestCase.Mode.NONE)
045public class GroupUpdateServiceApiCustomTest extends KIMTestCase {
046
047    private static final String NAMESPACE = "KUALI";
048    private static final String KIM_ATTRIBUTE_ID = "KS-KRIM-ATTR-DEFN-1003";
049    private static final String KIM_ATTRIBUTE_LABEL = "Hold Authorization Org Id";
050    private static final String KIM_ATTRIBUTE_NAME = "org.kuali.student.hold.authorization.orgId";
051    private static final String KIM_ATTRIBUTE_VALUE = "ORGID-128487550";
052    private static final String KIM_ATTRIBUTE_COMPONENT_NAME = "org.kuali.rice.student.bo.KualiStudentKimAttributes";
053    private static final String KIM_TYPE_ID = "KS-KRIM-TYP-1011";
054    private static final String KIM_TYPE_NAME = "KS Hold Org Authorization Group Type";
055    private static final String KIM_TYPE_SERVICE_NAME = "kimGroupTypeService";
056    private static final String KIM_TYPE_ATTRIBUTE_ID = "KS-KRIM-TYP-ATTR-1027";
057    private static final String GROUP_NAME = "gAwAttrs";
058
059    @Test
060    public void testCreateGroupWithCustomKimTypeAttributes() {
061        // This test needs to be run in separate test class
062        // with @BaselineTestCase.BaselineMode(BaselineTestCase.Mode.NONE)
063        KimAttribute.Builder kimAttribute = KimAttribute.Builder.create(KIM_ATTRIBUTE_COMPONENT_NAME,
064                KIM_ATTRIBUTE_NAME, NAMESPACE);
065        kimAttribute.setAttributeLabel(KIM_ATTRIBUTE_LABEL);
066        kimAttribute.setId(KIM_ATTRIBUTE_ID);
067        kimAttribute.setActive(true);
068        KimAttributeBo kimAddrBo = KRADServiceLocator.getDataObjectService().save(KimAttributeBo.from(kimAttribute.build()));
069
070        KimType.Builder kimTypeBuilder = KimType.Builder.create();
071        kimTypeBuilder.setId(KIM_TYPE_ID);
072        kimTypeBuilder.setName(KIM_TYPE_NAME);
073        kimTypeBuilder.setNamespaceCode(NAMESPACE);
074        kimTypeBuilder.setServiceName(KIM_TYPE_SERVICE_NAME);
075        kimTypeBuilder.setActive(true);
076        KimTypeBo kimTypeBo = KRADServiceLocator.getDataObjectService().save(KimTypeBo.from(kimTypeBuilder.build()));
077
078        KimTypeAttribute.Builder kimTypeAttributeBuilder = KimTypeAttribute.Builder.create();
079        kimTypeAttributeBuilder.setId(KIM_TYPE_ATTRIBUTE_ID);
080        kimTypeAttributeBuilder.setActive(true);
081        kimTypeAttributeBuilder.setSortCode("a");
082        kimTypeAttributeBuilder.setKimTypeId(KIM_TYPE_ID);
083        kimTypeAttributeBuilder.setKimAttribute(kimAttribute);
084        KimTypeAttributeBo kimTypeAttrBo = KRADServiceLocator.getDataObjectService().save(KimTypeAttributeBo.from(kimTypeAttributeBuilder.build()));
085
086        kimTypeBuilder = KimType.Builder.create(KimApiServiceLocator.getKimTypeInfoService().getKimType(KIM_TYPE_ID));
087        kimTypeAttributeBuilder = KimTypeAttribute.Builder.create(kimTypeAttrBo);
088        List<KimTypeAttribute.Builder> attrList = Collections.singletonList(kimTypeAttributeBuilder);
089        kimTypeBuilder.setAttributeDefinitions(attrList);
090
091        kimTypeBo = KRADServiceLocator.getDataObjectService().save(KimTypeBo.from(kimTypeBuilder.build()));
092        KRADServiceLocator.getDataObjectService().flush(KimTypeBo.class);
093
094        Map<String, String> attributes = new HashMap<String, String>();
095        attributes.put(KIM_ATTRIBUTE_NAME, KIM_ATTRIBUTE_VALUE);
096
097        Group.Builder groupInfo = Group.Builder.create(NAMESPACE, GROUP_NAME, KIM_TYPE_ID);
098        groupInfo.setAttributes(attributes);
099        groupInfo.setActive(true);
100        groupInfo.setDescription(KIM_ATTRIBUTE_LABEL + " " + KIM_ATTRIBUTE_VALUE);
101        Group group = KimApiServiceLocator.getGroupService().createGroup(groupInfo.build());
102
103        Group result = KimApiServiceLocator.getGroupService().getGroupByNamespaceCodeAndName(NAMESPACE, GROUP_NAME);
104        assertEquals(groupInfo.isActive(), result.isActive());
105        assertTrue(groupInfo.getNamespaceCode().equals(result.getNamespaceCode()));
106        assertTrue(groupInfo.getName().equals(result.getName()));
107        assertTrue(groupInfo.getKimTypeId().equals(result.getKimTypeId()));
108        assertEquals(1, result.getAttributes().size());
109        assertTrue(result.getAttributes().get(KIM_ATTRIBUTE_NAME).contains(KIM_ATTRIBUTE_VALUE));
110    }
111}