/*
* #%L
* ACS AEM Commons Bundle
* %%
* Copyright (C) 2013 Adobe
* %%
* 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.
* #L%
*/
package com.adobe.acs.commons.designer.impl;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.sling.commons.json.JSONArray;
import org.apache.sling.commons.testing.sling.MockSlingHttpServletRequest;
import org.apache.sling.commons.testing.sling.MockSlingHttpServletResponse;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import com.adobe.granite.ui.clientlibs.ClientLibrary;
import com.adobe.granite.ui.clientlibs.HtmlLibraryManager;
import com.adobe.granite.ui.clientlibs.LibraryType;
@RunWith(MockitoJUnitRunner.class)
public class OptionsServletTest {
@Mock
private HtmlLibraryManager manager;
@InjectMocks
public OptionsServlet servlet = new OptionsServlet();
@Test
public void testWithNoType() throws Exception {
MockSlingHttpServletRequest request = new MockSlingHttpServletRequest(
"/apps/acs-commons/components/utilities/designer/clientlibsmanager/options", null, "json", null,
null);
MockSlingHttpServletResponse response = new MockSlingHttpServletResponse();
servlet.doGet(request, response);
assertEquals("application/json", response.getContentType());
assertEquals("[]", response.getOutput().toString());
}
@Test
public void testWithBadType() throws Exception {
MockSlingHttpServletRequest request = new MockSlingHttpServletRequest(
"/apps/acs-commons/components/utilities/designer/clientlibsmanager/options", "html", "json", null,
null);
MockSlingHttpServletResponse response = new MockSlingHttpServletResponse();
servlet.doGet(request, response);
assertEquals("application/json", response.getContentType());
assertEquals("[]", response.getOutput().toString());
}
@Test
public void testWithNormalType() throws Exception {
Map<String, ClientLibrary> libraries = new HashMap<String, ClientLibrary>();
String jsOnlyCategory1 = RandomStringUtils.randomAlphanumeric(5);
String jsOnlyCategory2 = RandomStringUtils.randomAlphanumeric(5);
String bothCategory1 = RandomStringUtils.randomAlphanumeric(5);
String bothCategory2 = RandomStringUtils.randomAlphanumeric(5);
addLibrary(libraries, RandomStringUtils.random(10), new String[] { "js" }, new String[] { jsOnlyCategory1,
jsOnlyCategory2 });
addLibrary(libraries, RandomStringUtils.random(10), new String[] { "js" },
new String[] { jsOnlyCategory2 });
addLibrary(libraries, RandomStringUtils.random(10), new String[] { "js", "css" }, new String[] {
bothCategory1, bothCategory2 });
addLibrary(libraries, RandomStringUtils.random(10), new String[] { "js", "css" },
new String[] { bothCategory2 });
when(manager.getLibraries()).thenReturn(libraries);
MockSlingHttpServletRequest request = new MockSlingHttpServletRequest(
"/apps/acs-commons/components/utilities/designer/clientlibsmanager/options", "js", "json", null,
null);
MockSlingHttpServletResponse response = new MockSlingHttpServletResponse();
servlet.doGet(request, response);
assertEquals("application/json", response.getContentType());
JSONArray array = new JSONArray(response.getOutput().toString());
assertEquals(4, array.length());
}
private void
addLibrary(Map<String, ClientLibrary> libraries, String path, String[] types, String[] categories) {
ClientLibrary library = mock(ClientLibrary.class);
when(library.getTypes()).thenReturn(toLibraryTypeSet(types));
when(library.getCategories()).thenReturn(categories);
libraries.put(path, library);
}
private Set<LibraryType> toLibraryTypeSet(String[] types) {
Set<LibraryType> set = new HashSet<LibraryType>();
for (String type : types) {
set.add(LibraryType.valueOf(type.toUpperCase()));
}
return set;
}
}