/*
*
* Copyright 2015 Andrey Yakovlev
*
* 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 jodtemplate.pptx;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import jodtemplate.OOXMLDocumentProcessor;
import jodtemplate.exception.JODTemplateException;
import jodtemplate.io.ZipReader;
import jodtemplate.io.ZipWriter;
import jodtemplate.pptx.Configuration;
import jodtemplate.pptx.PPTXDocument;
import jodtemplate.resource.Resources;
import jodtemplate.resource.factory.ResourcesFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class PPTXDocumentTest {
@InjectMocks
private PPTXDocument document;
@Mock
private Configuration configuration;
@Mock
private OOXMLDocumentProcessor documentProcessor;
@Mock
private ZipReader zipReader;
@Mock
private ZipWriter zipWriter;
@Test
public void testSetConfiguration() {
document.setConfiguration(configuration);
verify(documentProcessor, times(1)).setConfiguration(configuration);
}
@Test
public void testProcess() throws Exception {
final Map<String, Object> context = new HashMap<>();
final InputStream input = Mockito.mock(InputStream.class);
final OutputStream output = Mockito.mock(OutputStream.class);
final Resources resources = Mockito.mock(Resources.class);
final ResourcesFactory factory = Mockito.mock(ResourcesFactory.class);
doNothing().when(resources).clean();
when(configuration.getResourcesFactory()).thenReturn(factory);
when(zipReader.unzipContents(input, factory)).thenReturn(resources);
document.process(context, input, output);
verify(zipReader, times(1)).unzipContents(input, factory);
verify(documentProcessor, times(1)).process(context, resources);
verify(zipWriter, times(1)).zipResources(resources, output);
verify(resources, times(1)).clean();
}
@Test(expected = JODTemplateException.class)
public void testProcessDocumentProcessorProcessError() throws Exception {
final Map<String, Object> context = new HashMap<>();
final InputStream input = Mockito.mock(InputStream.class);
final OutputStream output = Mockito.mock(OutputStream.class);
final Resources resources = Mockito.mock(Resources.class);
final ResourcesFactory factory = Mockito.mock(ResourcesFactory.class);
doNothing().when(resources).clean();
when(configuration.getResourcesFactory()).thenReturn(factory);
when(zipReader.unzipContents(input, factory)).thenReturn(resources);
doThrow(JODTemplateException.class).when(documentProcessor).process(context, resources);
document.process(context, input, output);
verify(zipReader, times(1)).unzipContents(input, factory);
verify(documentProcessor, times(1)).process(context, resources);
verify(zipWriter, times(0)).zipResources(resources, output);
verify(resources, times(1)).clean();
}
@Test(expected = JODTemplateException.class)
public void testProcessThrowExceptionAndDeleteDirectoryIfIOErrorOccurred() throws Exception {
final Map<String, Object> context = new HashMap<>();
final InputStream input = Mockito.mock(InputStream.class);
final OutputStream output = Mockito.mock(OutputStream.class);
final Resources resources = Mockito.mock(Resources.class);
final ResourcesFactory factory = Mockito.mock(ResourcesFactory.class);
doNothing().when(resources).clean();
when(configuration.getResourcesFactory()).thenReturn(factory);
when(zipReader.unzipContents(input, factory)).thenReturn(resources);;
doThrow(IOException.class).when(zipWriter).zipResources(resources, output);
document.process(context, input, output);
verify(zipReader, times(1)).unzipContents(input, factory);
verify(documentProcessor, times(1)).process(context, resources);
verify(zipWriter, times(1)).zipResources(resources, output);
verify(resources, times(1)).clean();
}
}