/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2016 by Pentaho : http://www.pentaho.com * ******************************************************************************* * * 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 org.pentaho.di.trans.steps.excelwriter; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.junit.Before; import org.junit.Test; import org.pentaho.di.trans.step.StepDataInterface; import org.pentaho.di.trans.steps.StepMockUtil; import org.pentaho.di.trans.steps.mock.StepMockHelper; import static org.junit.Assert.*; import static org.mockito.Mockito.*; /** * @author Andrey Khayrutdinov */ public class ExcelWriterStep_FormulaRecalculationTest { private ExcelWriterStep step; private ExcelWriterStepData data; @Before public void setUp() throws Exception { StepMockHelper<ExcelWriterStepMeta, StepDataInterface> mockHelper = StepMockUtil.getStepMockHelper( ExcelWriterStepMeta.class, "ExcelWriterStep_FormulaRecalculationTest" ); step = new ExcelWriterStep( mockHelper.stepMeta, mockHelper.stepDataInterface, 0, mockHelper.transMeta, mockHelper.trans ); step = spy( step ); // ignoring to avoid useless errors in log doNothing().when( step ).prepareNextOutputFile(); data = new ExcelWriterStepData(); step.init( mockHelper.initStepMetaInterface, data ); } @Test public void forcesToRecalculate_Sxssf_PropertyIsSet() throws Exception { forcesToRecalculate_Sxssf( "Y", true ); } @Test public void forcesToRecalculate_Sxssf_PropertyIsCleared() throws Exception { forcesToRecalculate_Sxssf( "N", false ); } @Test public void forcesToRecalculate_Sxssf_PropertyIsNotSet() throws Exception { forcesToRecalculate_Sxssf( null, false ); } private void forcesToRecalculate_Sxssf( String property, boolean expectedFlag ) throws Exception { step.setVariable( ExcelWriterStep.STREAMER_FORCE_RECALC_PROP_NAME, property ); data.wb = spy( new SXSSFWorkbook() ); step.recalculateAllWorkbookFormulas(); if ( expectedFlag ) { verify( data.wb ).setForceFormulaRecalculation( true ); } else { verify( data.wb, never() ).setForceFormulaRecalculation( anyBoolean() ); } } @Test public void forcesToRecalculate_Hssf() throws Exception { data.wb = new HSSFWorkbook(); data.wb.createSheet( "sheet1" ); data.wb.createSheet( "sheet2" ); step.recalculateAllWorkbookFormulas(); if ( !data.wb.getForceFormulaRecalculation() ) { int sheets = data.wb.getNumberOfSheets(); for ( int i = 0; i < sheets; i++ ) { Sheet sheet = data.wb.getSheetAt( i ); assertTrue( "Sheet #" + i + ": " + sheet.getSheetName(), sheet.getForceFormulaRecalculation() ); } } } }