HEX
Server: Apache
System: Linux s198.coreserver.jp 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC 2025 x86_64
User: nagasaki (10062)
PHP: 7.1.33
Disabled: NONE
Upload Files
File: /virtual/nagasaki/public_html/ec/tests/Eccube/Tests/Service/CsvExportServiceTest.php
<?php

namespace Eccube\Tests\Service;

use Eccube\Common\Constant;
use Eccube\Entity\Master\CsvType;
use Eccube\Service\CsvExportService;
use org\bovigo\vfs\vfsStream;

class CsvExportServiceTest extends AbstractServiceTestCase
{

    protected $url;

    public function setUp()
    {
        parent::setUp();
        $root = vfsStream::setup('rootDir');
        $this->url = vfsStream::url('rootDir/test.csv');

        // CsvExportService のファイルポインタを Vfs のファイルポインタにしておく
        $objReflect = new \ReflectionClass($this->app['eccube.service.csv.export']);
        $Property = $objReflect->getProperty('fp');
        $Property->setAccessible(true);
        $Property->setValue($this->app['eccube.service.csv.export'], fopen($this->url, 'w'));

        $Csv = $this->app['eccube.repository.csv']->find(1);
        $Csv->setRank(1);
        $Csv->setEnableFlg(Constant::DISABLED);
        $this->app['orm.em']->flush();
    }

    public function testExportHeader()
    {
        $this->app['eccube.service.csv.export']->initCsvType(CsvType::CSV_TYPE_PRODUCT);
        $this->app['eccube.service.csv.export']->exportHeader();

        $Csv = $this->app['eccube.repository.csv']->findBy(
            array('CsvType' => CsvType::CSV_TYPE_PRODUCT,
                  'enable_flg' => Constant::ENABLED
            )
        );
        $arrHeader = explode(',', file_get_contents($this->url));
        // Vfs に出力すると日本語が化けてしまうようなので, カウントのみ比較
        $this->expected = count($Csv);
        $this->actual = count($arrHeader);
        $this->verify();
    }

    public function testExportData()
    {
        $Customer = $this->createCustomer();
        $Order = $this->createOrder($Customer);
        $Order->setMessage("aaaa".PHP_EOL."bbbb");
        $Order->setNote("bbb".PHP_EOL."bbb");
        $this->createOrder($Customer);
        $this->createOrder($Customer);
        $this->app['orm.em']->flush();

        $qb = $this->app['eccube.repository.order']->createQueryBuilder('o')
            // FIXME https://github.com/EC-CUBE/ec-cube/issues/1236
            // jeftJoin した QueryBuilder で iterate() を実行すると QueryException が発生してしまう
            // ->select(array('o','d'))
            // ->leftJoin('o.OrderDetails', 'd')
            // ->addOrderBy('o.update_date', 'DESC')
;

        $this->app['eccube.service.csv.export']->initCsvType(CsvType::CSV_TYPE_ORDER);
        $this->app['eccube.service.csv.export']->setExportQueryBuilder($qb);

        $this->app['eccube.service.csv.export']->exportData(function ($entity, $csvService) {

            $Csvs = $csvService->getCsvs();

            /** @var $Order \Eccube\Entity\Order */
            $Order = $entity;
            $row = array();
            // CSV出力項目と合致するデータを取得.
            foreach ($Csvs as $Csv) {
                $row[] = $csvService->getData($Csv, $Order);
            }
            // 出力.
            $csvService->fputcsv($row);
        });

        $Result = $qb->getQuery()->getResult();
        $fp = fopen($this->url, 'r');
        $File = array();
        if ($fp !== false) {
            while (($data = fgetcsv($fp)) !== false) {
                $File[] = $data;
            }
            fclose($fp);
        }
        // Vfs に出力すると日本語が化けてしまうようなので, カウントのみ比較
        $this->expected = count($Result);
        $this->actual = count($File);
        $this->verify();
    }
}