/*
* (C) Copyright 2015 Netcentric AG.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package biz.netcentric.cq.tools.actool.configreader;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
import static org.mockito.MockitoAnnotations.initMocks;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import biz.netcentric.cq.tools.actool.configmodel.AcConfiguration;
import biz.netcentric.cq.tools.actool.configmodel.AuthorizableConfigBean;
import biz.netcentric.cq.tools.actool.configmodel.AuthorizablesConfig;
import biz.netcentric.cq.tools.actool.history.AcInstallationLog;
import biz.netcentric.cq.tools.actool.validators.exceptions.AcConfigBeanValidationException;
import biz.netcentric.cq.tools.actool.validators.impl.ObsoleteAuthorizablesValidatorImpl;
/** Tests the YamlConfigurationMerger
*
* @author Roland Gruber */
public class YamlConfigurationMergerTest {
private YamlConfigurationMerger merger;
@Mock
Session session;
@Before
public void setup() {
initMocks(this);
merger = new YamlConfigurationMerger();
merger.yamlMacroProcessor = new YamlMacroProcessorImpl();
merger.obsoleteAuthorizablesValidator = new ObsoleteAuthorizablesValidatorImpl();
}
@Test
public void testMemberGroups() throws IOException, RepositoryException, AcConfigBeanValidationException {
final String config = YamlConfigReaderTest.getTestConfigAsString("test-membergroups.yaml");
final ConfigReader reader = new YamlConfigReader();
final Map<String, String> configs = new HashMap<String, String>();
configs.put("/etc/config", config);
AcConfiguration acConfiguration = merger.getMergedConfigurations(configs, mock(AcInstallationLog.class), reader, session);
final AuthorizablesConfig groups = acConfiguration.getAuthorizablesConfig();
final AuthorizableConfigBean groupA = groups.getAuthorizableConfig("groupA");
assertEquals(3, groupA.getMemberOf().length);
final AuthorizableConfigBean groupB = groups.getAuthorizableConfig("groupB");
assertEquals(2, groupB.getMemberOf().length);
assertNotNull(groups.getAuthorizableConfig("groupC"));
assertNotNull(groups.getAuthorizableConfig("groupD"));
}
@Test
public void testEnsureIsMemberOfIsUsedWherePossible() throws RepositoryException, IOException, AcConfigBeanValidationException {
final String config = YamlConfigReaderTest.getTestConfigAsString("test-membergroups.yaml");
final ConfigReader reader = new YamlConfigReader();
final Map<String, String> configs = new HashMap<String, String>();
configs.put("/etc/config", config);
AcConfiguration acConfiguration = merger.getMergedConfigurations(configs, mock(AcInstallationLog.class), reader, session);
AuthorizableConfigBean groupAConfig = acConfiguration.getAuthorizablesConfig().getAuthorizableConfig("groupA");
assertEquals("groupA", groupAConfig.getAuthorizableId());
String[] members = groupAConfig.getMemberOf();
assertArrayEquals("check if groups have been copied over into isMemberOf field",
new String[] { "groupB", "groupC", "groupD" }, members);
//
AuthorizableConfigBean groupBConfig = acConfiguration.getAuthorizablesConfig().getAuthorizableConfig("groupB");
assertArrayEquals("ensure that members that were added to isMemberOf are removed from original members arr", new String[0],
groupBConfig.getMembers());
}
}