/* * Copyright (c) 2010-2017 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.evolveum.midpoint.certification.test; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.delta.builder.DeltaBuilder; import com.evolveum.midpoint.schema.SearchResultList; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.Test; import java.io.File; import static com.evolveum.midpoint.test.IntegrationTestTools.display; import static org.testng.AssertJUnit.assertEquals; /** * Testing ad hoc certification (when changing parent orgs). * * @author mederly */ @ContextConfiguration(locations = {"classpath:ctx-certification-test-main.xml"}) @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) public class TestAdHocCertification extends AbstractCertificationTest { protected static final File TEST_DIR = new File("src/test/resources/adhoc"); protected static final File ASSIGNMENT_CERT_DEF_FILE = new File(TEST_DIR, "adhoc-certification-assignment.xml"); protected static final String ASSIGNMENT_CERT_DEF_OID = "540940e9-4ac5-4340-ba85-fd7e8b5e6686"; protected static final File MODIFICATION_CERT_DEF_FILE = new File(TEST_DIR, "adhoc-certification-modification.xml"); protected static final String MODIFICATION_CERT_DEF_OID = "83a16584-bb2a-448c-aee1-82fc6d577bcb"; protected static final File ORG_LABORATORY_FILE = new File(TEST_DIR, "org-laboratory.xml"); protected static final String ORG_LABORATORY_OID = "027faec7-7763-4b26-ab92-c5c0acbb1173"; protected static final File USER_INDIGO_FILE = new File(TEST_DIR, "user-indigo.xml"); protected static final String USER_INDIGO_OID = "11b35bd2-9b2f-4a00-94fa-7ed0079a7500"; protected AccessCertificationDefinitionType assignmentCertificationDefinition; protected AccessCertificationDefinitionType modificationCertificationDefinition; @Override public void initSystem(Task initTask, OperationResult initResult) throws Exception { super.initSystem(initTask, initResult); DebugUtil.setPrettyPrintBeansAs(PrismContext.LANG_YAML); assignmentCertificationDefinition = repoAddObjectFromFile(ASSIGNMENT_CERT_DEF_FILE, AccessCertificationDefinitionType.class, initResult).asObjectable(); modificationCertificationDefinition = repoAddObjectFromFile(MODIFICATION_CERT_DEF_FILE, AccessCertificationDefinitionType.class, initResult).asObjectable(); repoAddObjectFromFile(ORG_LABORATORY_FILE, initResult); repoAddObjectFromFile(USER_INDIGO_FILE, initResult); } @Test public void test010HireIndigo() throws Exception { final String TEST_NAME = "test010HireIndigo"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = taskManager.createTaskInstance(TestAdHocCertification.class.getName() + "." + TEST_NAME); task.setOwner(userAdministrator.asPrismObject()); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); assignOrg(USER_INDIGO_OID, ORG_LABORATORY_OID, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); SearchResultList<PrismObject<AccessCertificationCampaignType>> campaigns = repositoryService .searchObjects(AccessCertificationCampaignType.class, null, null, result); assertEquals("Wrong # of campaigns", 1, campaigns.size()); AccessCertificationCampaignType campaign = campaigns.get(0).asObjectable(); campaign = getCampaignWithCases(campaign.getOid()); display("campaign", campaign); assertAfterCampaignStart(campaign, assignmentCertificationDefinition, 1); // beware, maybe not all details would match (in the future) - then adapt this test assertPercentComplete(campaign, 0, 0, 0); // no cases, no problems } @Test public void test020ModifyIndigo() throws Exception { final String TEST_NAME = "test020ModifyIndigo"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN Task task = taskManager.createTaskInstance(TestAdHocCertification.class.getName() + "." + TEST_NAME); task.setOwner(userAdministrator.asPrismObject()); OperationResult result = task.getResult(); // WHEN TestUtil.displayWhen(TEST_NAME); @SuppressWarnings({ "unchecked", "raw" }) ObjectDelta<UserType> delta = (ObjectDelta<UserType>) DeltaBuilder.deltaFor(UserType.class, prismContext) .item(UserType.F_DESCRIPTION).replace("new description") .item(UserType.F_ACTIVATION, ActivationType.F_ADMINISTRATIVE_STATUS).replace(ActivationStatusType.DISABLED) .asObjectDelta(USER_INDIGO_OID); executeChanges(delta, null, task, result); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); SearchResultList<PrismObject<AccessCertificationCampaignType>> campaigns = repositoryService .searchObjects(AccessCertificationCampaignType.class, null, null, result); assertEquals("Wrong # of campaigns", 2, campaigns.size()); AccessCertificationCampaignType campaign = campaigns.stream() .filter(c -> MODIFICATION_CERT_DEF_OID.equals(c.asObjectable().getDefinitionRef().getOid())) .findFirst() .orElseThrow(() -> new AssertionError("No modification-triggered campaign")).asObjectable(); campaign = getCampaignWithCases(campaign.getOid()); display("campaign", campaign); assertAfterCampaignStart(campaign, modificationCertificationDefinition, 1); // beware, maybe not all details would match (in the future) - then adapt this test assertPercentComplete(campaign, 0, 0, 0); // no cases, no problems } }