blob: c1cde2697c43122321f323fc1ce3c2503f88993f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.sling.caconfig.impl;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.Map;
import java.util.SortedSet;
import javax.script.Bindings;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.scripting.SlingBindings;
import org.apache.sling.api.wrappers.ValueMapDecorator;
import org.apache.sling.caconfig.ConfigurationBuilder;
import org.apache.sling.caconfig.impl.metadata.ConfigurationMetadataProviderMultiplexerImpl;
import org.apache.sling.caconfig.spi.ConfigurationMetadataProvider;
import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
import org.apache.sling.caconfig.spi.metadata.PropertyMetadata;
import org.apache.sling.testing.mock.sling.junit.SlingContext;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSortedSet;
@RunWith(MockitoJUnitRunner.class)
@SuppressWarnings("unchecked")
public class ConfigurationBindingsValueProviderTest {
private final static ValueMap VALUEMAP = new ValueMapDecorator(
ImmutableMap.<String, Object> of("param1", "value1"));
private static final SortedSet<String> CONFIG_NAMES = ImmutableSortedSet.of("name1", "name.2");
@Rule
public SlingContext context = new SlingContext();
@Mock
private SlingHttpServletRequest request;
@Mock
private Resource resource;
@Mock
private Bindings bindings;
@Mock
private ConfigurationBuilder configBuilder;
@Mock
private ConfigurationMetadataProvider configMetadataProvider;
private ConfigurationBindingsValueProvider underTest;
@Before
public void setUp() {
context.registerInjectActivateService(new ConfigurationMetadataProviderMultiplexerImpl());
context.registerService(ConfigurationMetadataProvider.class, configMetadataProvider);
when(configMetadataProvider.getConfigurationNames()).thenReturn(CONFIG_NAMES);
when(bindings.containsKey(SlingBindings.REQUEST)).thenReturn(true);
when(bindings.get(SlingBindings.REQUEST)).thenReturn(request);
when(request.getResource()).thenReturn(resource);
when(resource.adaptTo(ConfigurationBuilder.class)).thenReturn(configBuilder);
when(configBuilder.name(anyString())).thenReturn(configBuilder);
when(configBuilder.asValueMap()).thenReturn(VALUEMAP);
when(configBuilder.asValueMapCollection()).thenReturn(ImmutableList.of(VALUEMAP));
when(configMetadataProvider.getConfigurationMetadata("name1")).thenReturn(
new ConfigurationMetadata("name1", ImmutableList.<PropertyMetadata<?>>of(), false));
when(configMetadataProvider.getConfigurationMetadata("name.2")).thenReturn(
new ConfigurationMetadata("name.2", ImmutableList.<PropertyMetadata<?>>of(), true));
}
@Test
public void testWithConfig() {
underTest = context.registerInjectActivateService(new ConfigurationBindingsValueProvider(), "enabled", true);
underTest.addBindings(bindings);
ArgumentCaptor<Map<String, ValueMap>> configMapCaptor = ArgumentCaptor.forClass(Map.class);
verify(bindings).put(eq(ConfigurationBindingsValueProvider.BINDING_VARIABLE), configMapCaptor.capture());
Map<String, ValueMap> configMap = configMapCaptor.getValue();
assertEquals(CONFIG_NAMES, configMap.keySet());
assertEquals(VALUEMAP, configMap.get("name1"));
assertEquals(ImmutableList.of(VALUEMAP), configMap.get("name.2"));
}
@Test
public void testNoResource() {
when(request.getResource()).thenReturn(null);
underTest = context.registerInjectActivateService(new ConfigurationBindingsValueProvider(), "enabled", true);
underTest.addBindings(bindings);
verify(bindings, never()).put(anyString(), any(Object.class));
}
@Test
public void testNoRequest() {
underTest = context.registerInjectActivateService(new ConfigurationBindingsValueProvider(), "enabled", true);
when(bindings.containsKey(SlingBindings.REQUEST)).thenReturn(false);
underTest.addBindings(bindings);
verify(bindings, never()).put(anyString(), any(Object.class));
}
@Test
public void testDisabled() {
underTest = context.registerInjectActivateService(new ConfigurationBindingsValueProvider(), "enabled", false);
underTest.addBindings(bindings);
verify(bindings, never()).put(anyString(), any(Object.class));
}
}