/*
* #%L
* BroadleafCommerce Common Libraries
* %%
* Copyright (C) 2009 - 2013 Broadleaf Commerce
* %%
* 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 org.broadleafcommerce.common.sitemap.service;
import org.apache.commons.collections.CollectionUtils;
import org.broadleafcommerce.common.config.domain.ModuleConfiguration;
import org.broadleafcommerce.common.config.service.ModuleConfigurationService;
import org.broadleafcommerce.common.config.service.type.ModuleConfigurationType;
import org.broadleafcommerce.common.file.service.BroadleafFileServiceImpl;
import org.broadleafcommerce.common.file.service.FileServiceProvider;
import org.broadleafcommerce.common.file.service.FileSystemFileServiceProvider;
import org.broadleafcommerce.common.sitemap.domain.SiteMapConfiguration;
import org.broadleafcommerce.common.sitemap.domain.SiteMapConfigurationImpl;
import org.broadleafcommerce.common.sitemap.domain.SiteMapGeneratorConfiguration;
import org.broadleafcommerce.common.sitemap.exception.SiteMapException;
import org.broadleafcommerce.common.web.BaseUrlResolver;
import org.easymock.EasyMock;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/**
* Base class for site map generator tests
*
* @author Joshua Skorton (jskorton)
*/
public class SiteMapGeneratorTest {
protected SiteMapServiceImpl siteMapService = new SiteMapServiceImpl();
protected BroadleafFileServiceImpl fileService = new BroadleafFileServiceImpl();
protected BaseUrlResolver baseUrlResolver = new BaseUrlResolver() {
@Override
public String getSiteBaseUrl() {
return "http://www.heatclinic.com";
}
@Override
public String getAdminBaseUrl() {
return "http://www.heatclinic.com/admin";
}
};
@Before
public void setup() {
FileServiceProvider defaultFileServiceProvider = new FileSystemFileServiceProvider();
fileService.setDefaultFileServiceProvider(defaultFileServiceProvider);
siteMapService.broadleafFileService = fileService;
siteMapService.baseUrlResolver = baseUrlResolver;
}
@After
public void deleteTempFiles() {
fileService.removeResource("/sitemap_index.xml");
fileService.removeResource("/sitemap1.xml");
fileService.removeResource("/sitemap2.xml");
fileService.removeResource("/sitemap3.xml");
fileService.removeResource("/sitemap.xml");
}
protected void testGenerator(SiteMapGeneratorConfiguration smgc, SiteMapGenerator smg) throws SiteMapException,
IOException {
testGenerator(smgc, smg, 2);
}
protected void testGenerator(SiteMapGeneratorConfiguration smgc, SiteMapGenerator smg, int maxEntriesPerFile)
throws SiteMapException, IOException {
List<SiteMapGeneratorConfiguration> smgcList = new ArrayList<SiteMapGeneratorConfiguration>();
smgcList.add(smgc);
testGenerator(smgcList, smg, maxEntriesPerFile);
}
protected void testGenerator(List<SiteMapGeneratorConfiguration> smgcList, SiteMapGenerator smg, int maxEntriesPerFile)
throws SiteMapException, IOException {
if (CollectionUtils.isNotEmpty(smgcList)) {
SiteMapConfiguration smc = new SiteMapConfigurationImpl();
smc.setMaximumUrlEntriesPerFile(maxEntriesPerFile);
smc.setSiteMapGeneratorConfigurations(smgcList);
smc.setIndexedSiteMapFileName("sitemap_index.xml");
for (SiteMapGeneratorConfiguration smgc : smgcList) {
smgc.setSiteMapConfiguration(smc);
}
List<ModuleConfiguration> mcList = new ArrayList<ModuleConfiguration>();
mcList.add(smc);
ModuleConfigurationService mcs = EasyMock.createMock(ModuleConfigurationService.class);
EasyMock.expect(mcs.findActiveConfigurationsByType(ModuleConfigurationType.SITE_MAP)).andReturn(mcList);
EasyMock.replay(mcs);
List<SiteMapGenerator> smgList = new ArrayList<SiteMapGenerator>();
smgList.add(smg);
siteMapService.setGzipSiteMapFiles(false);
siteMapService.setModuleConfigurationService(mcs);
siteMapService.setSiteMapGenerators(smgList);
SiteMapGenerationResponse smgr = siteMapService.generateSiteMap();
Assert.assertFalse(smgr.isHasError());
}
}
protected void compareFiles(File file1, String pathToFile2) throws IOException {
String actualOutput = convertFileToString(file1);
String expectedOutput = convertFileToString(new File(pathToFile2));
Assert.assertTrue(actualOutput.equals(expectedOutput));
}
protected String convertFileToString(File file) throws IOException {
FileInputStream fin = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fin));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
if (line.contains("</lastmod>")) {
continue;
}
line = line.replaceAll("\\s+", "");
sb.append(line);
}
br.close();
fin.close();
return sb.toString();
}
}