nc.noumea.mairie.appock.util.StockSpreadsheetExporterImporterTest.java Source code

Java tutorial

Introduction

Here is the source code for nc.noumea.mairie.appock.util.StockSpreadsheetExporterImporterTest.java

Source

package nc.noumea.mairie.appock.util;

/*-
 * #%L
 * Logiciel de Gestion des approvisionnements et des stocks des fournitures administratives de la Mairie de
 *         Nouma
 * %%
 * Copyright (C) 2017 - 2018 Mairie de Nouma, Nouvelle-Caldonie
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public
 * License along with this program.  If not, see
 * <http://www.gnu.org/licenses/gpl-3.0.html>.
 * #L%
 */

import nc.noumea.mairie.appock.core.security.AppUser;
import nc.noumea.mairie.appock.entity.ArticleCatalogue;
import nc.noumea.mairie.appock.entity.ArticleStock;
import nc.noumea.mairie.appock.entity.Service;
import nc.noumea.mairie.appock.entity.Stock;
import nc.noumea.mairie.appock.service.impl.AppockBaseTest;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Assert;
import org.junit.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

public class StockSpreadsheetExporterImporterTest extends AppockBaseTest {

    @Test
    public void test() throws Exception {
        AppUser appUser = authHelper.getCurrentUser();
        Service service = ajouterServiceToAppUser(appUser);
        List<ArticleStock> listeArticleStock = genererListeArticleStock(service);

        File exportFile = File.createTempFile("stock_test_export-", ".xlsx");
        logger.info("Export pour inventaire : " + exportFile);

        // Export
        StockSpreadsheetExporter.exportToXls(service, listeArticleStock, catalogueService,
                new FileOutputStream(exportFile));
        XSSFWorkbook workbookExport = new XSSFWorkbook(exportFile);
        XSSFSheet worksheet = workbookExport.getSheet("Inventaire");
        Assert.assertNotNull(worksheet);
        // Verif
        for (int i = 0; i < worksheet.getLastRowNum(); i++) {
            XSSFRow row = worksheet.getRow(i);
            int col = 0;
            if (i == 0) {
                Assert.assertEquals("Photo", row.getCell(col++).getStringCellValue());
                Assert.assertEquals("Rfrence", row.getCell(col++).getStringCellValue());
                Assert.assertEquals("Libell", row.getCell(col++).getStringCellValue());
                Assert.assertEquals("Stock\n Appock", row.getCell(col++).getStringCellValue());
                Assert.assertEquals("Stock\n rel", row.getCell(col++).getStringCellValue());
            } else {
                col++;
                Assert.assertEquals("REF_" + (i - 1), row.getCell(col++).getStringCellValue());
                Assert.assertEquals("ARTICLE CATALOGUE " + (i - 1), row.getCell(col++).getStringCellValue());
                Assert.assertEquals(i, (long) row.getCell(col++).getNumericCellValue());
            }
        }

        // Import : toutes les quantits ont t augments de 1
        File importFile1 = File.createTempFile("stock_test_import1-", ".xlsx");
        logger.info("Import de l'inventaire : " + importFile1);
        OutputStream outputStream1 = new FileOutputStream(importFile1);
        XSSFWorkbook workbookImport = new XSSFWorkbook(exportFile);
        XSSFSheet worksheetImport = workbookImport.getSheet("Inventaire");
        for (int i = 1; i < worksheetImport.getLastRowNum() + 1; i++) {
            XSSFRow row = worksheetImport.getRow(i);
            if (i == 5) {
                // Cellule en erreur
                row.getCell(4).setCellValue(" 05 ");
            } else {
                row.getCell(4).setCellValue(row.getCell(3).getNumericCellValue() + 1);
            }
        }
        workbookImport.write(outputStream1);
        outputStream1.flush();
        outputStream1.close();
        List<String> warnings = StockSpreadsheetImporter.importFromXls(service, stockService,
                new FileInputStream(importFile1));
        // Verif
        Stock stock = stockService.findOne(service.getStock().getId());
        Assert.assertEquals(10, stock.getListeArticleStock().size());
        Assert.assertEquals(1, warnings.size());
        logger.info("Warning message : " + warnings.get(0));
        for (int i = 0; i < stock.getListeArticleStock().size(); i++) {
            ArticleStock articleStock = stock.getListeArticleStock().get(i);
            int oldQunatite = i + 1;
            if (i == 4) {
                // Quantit inchange
                Assert.assertEquals(oldQunatite, (int) articleStock.getQuantiteStock());
            } else {
                Assert.assertEquals(oldQunatite + 1, (int) articleStock.getQuantiteStock());
            }
        }
    }

    private List<ArticleStock> genererListeArticleStock(Service service) {
        Stock stock = createStock(service);
        List<ArticleStock> listeArticleStock = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            ArticleCatalogue articleCatalogue = createArticleCatalogue("Article catalogue " + i, "REF_" + i);
            ArticleStock articleStock = createArticleStock(stock, articleCatalogue, i + 1);
            listeArticleStock.add(articleStock);
        }
        return listeArticleStock;
    }
}