mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-11-04 05:15:39 +00:00 
			
		
		
		
	Implement test of import command.
This commit is contained in:
		@@ -22,16 +22,14 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Console\Commands;
 | 
			
		||||
 | 
			
		||||
use Artisan;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Import\Logging\CommandHandler;
 | 
			
		||||
use FireflyIII\Import\Routine\RoutineInterface;
 | 
			
		||||
use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface;
 | 
			
		||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
 | 
			
		||||
use FireflyIII\Services\Internal\File\EncryptService;
 | 
			
		||||
use Illuminate\Console\Command;
 | 
			
		||||
use Illuminate\Support\MessageBag;
 | 
			
		||||
use Log;
 | 
			
		||||
use Monolog\Formatter\LineFormatter;
 | 
			
		||||
use Preferences;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -61,46 +59,39 @@ class CreateImport extends Command
 | 
			
		||||
                            {--token= : The user\'s access token.}
 | 
			
		||||
                            {--start : Starts the job immediately.}';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new command instance.
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct()
 | 
			
		||||
    {
 | 
			
		||||
        parent::__construct();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Run the command.
 | 
			
		||||
     *
 | 
			
		||||
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength) // cannot be helped
 | 
			
		||||
     * @SuppressWarnings(PHPMD.CyclomaticComplexity) // it's five exactly.
 | 
			
		||||
     * @noinspection MultipleReturnStatementsInspection
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function handle()
 | 
			
		||||
    public function handle(): int
 | 
			
		||||
    {
 | 
			
		||||
        if (!$this->verifyAccessToken()) {
 | 
			
		||||
            $this->errorLine('Invalid access token.');
 | 
			
		||||
 | 
			
		||||
            return;
 | 
			
		||||
            return 1;
 | 
			
		||||
        }
 | 
			
		||||
        /** @var UserRepositoryInterface $userRepository */
 | 
			
		||||
        $userRepository = app(UserRepositoryInterface::class);
 | 
			
		||||
        $file           = $this->argument('file');
 | 
			
		||||
        $configuration  = $this->argument('configuration');
 | 
			
		||||
        $user           = $userRepository->find(intval($this->option('user')));
 | 
			
		||||
        $user           = $userRepository->findNull((int)$this->option('user'));
 | 
			
		||||
        $cwd            = getcwd();
 | 
			
		||||
        $type           = strtolower($this->option('type'));
 | 
			
		||||
 | 
			
		||||
        if (!$this->validArguments()) {
 | 
			
		||||
            return;
 | 
			
		||||
            $this->errorLine('Invalid arguments.');
 | 
			
		||||
 | 
			
		||||
            return 1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $configurationData = json_decode(file_get_contents($configuration), true);
 | 
			
		||||
        if (null === $configurationData) {
 | 
			
		||||
            $this->errorLine(sprintf('Firefly III cannot read the contents of configuration file "%s" (working directory: "%s").', $configuration, $cwd));
 | 
			
		||||
 | 
			
		||||
            return;
 | 
			
		||||
            return 1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->infoLine(sprintf('Going to create a job to import file: %s', $file));
 | 
			
		||||
@@ -114,7 +105,10 @@ class CreateImport extends Command
 | 
			
		||||
        $job = $jobRepository->create($type);
 | 
			
		||||
        $this->infoLine(sprintf('Created job "%s"', $job->key));
 | 
			
		||||
 | 
			
		||||
        Artisan::call('firefly:encrypt-file', ['file' => $file, 'key' => $job->key]);
 | 
			
		||||
        /** @var EncryptService $service */
 | 
			
		||||
        $service = app(EncryptService::class);
 | 
			
		||||
        $service->encrypt($file, $job->key);
 | 
			
		||||
 | 
			
		||||
        $this->infoLine('Stored import data...');
 | 
			
		||||
 | 
			
		||||
        $jobRepository->setConfiguration($job, $configurationData);
 | 
			
		||||
@@ -154,32 +148,45 @@ class CreateImport extends Command
 | 
			
		||||
        // clear cache for user:
 | 
			
		||||
        Preferences::setForUser($user, 'lastActivity', microtime());
 | 
			
		||||
 | 
			
		||||
        return;
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string     $message
 | 
			
		||||
     * @param array|null $data
 | 
			
		||||
     */
 | 
			
		||||
    private function errorLine(string $message, array $data = null): void
 | 
			
		||||
    {
 | 
			
		||||
        Log::error($message, $data ?? []);
 | 
			
		||||
        $this->error($message);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $message
 | 
			
		||||
     * @param array  $data
 | 
			
		||||
     */
 | 
			
		||||
    private function infoLine(string $message, array $data = null): void
 | 
			
		||||
    {
 | 
			
		||||
        Log::info($message, $data ?? []);
 | 
			
		||||
        $this->line($message);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Verify user inserts correct arguments.
 | 
			
		||||
     *
 | 
			
		||||
     * @noinspection MultipleReturnStatementsInspection
 | 
			
		||||
     * @return bool
 | 
			
		||||
     * @SuppressWarnings(PHPMD.CyclomaticComplexity) // it's five exactly.
 | 
			
		||||
     */
 | 
			
		||||
    private function validArguments(): bool
 | 
			
		||||
    {
 | 
			
		||||
        /** @var UserRepositoryInterface $userRepository */
 | 
			
		||||
        $userRepository = app(UserRepositoryInterface::class);
 | 
			
		||||
        $file           = $this->argument('file');
 | 
			
		||||
        $configuration  = $this->argument('configuration');
 | 
			
		||||
        $user           = $userRepository->find(intval($this->option('user')));
 | 
			
		||||
        $cwd            = getcwd();
 | 
			
		||||
        $validTypes     = config('import.options.file.import_formats');
 | 
			
		||||
        $type           = strtolower($this->option('type'));
 | 
			
		||||
        if (null === $user) {
 | 
			
		||||
            $this->errorLine(sprintf('There is no user with ID %d.', $this->option('user')));
 | 
			
		||||
        $file          = $this->argument('file');
 | 
			
		||||
        $configuration = $this->argument('configuration');
 | 
			
		||||
        $cwd           = getcwd();
 | 
			
		||||
        $validTypes    = config('import.options.file.import_formats');
 | 
			
		||||
        $type          = strtolower($this->option('type'));
 | 
			
		||||
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!in_array($type, $validTypes)) {
 | 
			
		||||
        if (!\in_array($type, $validTypes, true)) {
 | 
			
		||||
            $this->errorLine(sprintf('Cannot import file of type "%s"', $type));
 | 
			
		||||
 | 
			
		||||
            return false;
 | 
			
		||||
@@ -199,25 +206,4 @@ class CreateImport extends Command
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string     $message
 | 
			
		||||
     * @param array|null $data
 | 
			
		||||
     */
 | 
			
		||||
    private function errorLine(string $message, array $data = null): void
 | 
			
		||||
    {
 | 
			
		||||
        Log::error($message, $data?? []);
 | 
			
		||||
        $this->error($message);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $message
 | 
			
		||||
     * @param array  $data
 | 
			
		||||
     */
 | 
			
		||||
    private function infoLine(string $message, array $data = null): void
 | 
			
		||||
    {
 | 
			
		||||
        Log::info($message, $data?? []);
 | 
			
		||||
        $this->line($message);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user