Пример #1
0
 /**
  * @test
  */
 public function validates_enums()
 {
     $enums = ['filter' => 'assigned', 'state' => 'open'];
     $input = $this->createMock('Symfony\\Component\\Console\\Input\\InputInterface');
     $input->expects($this->any())->method('getOption')->will($this->returnCallback(function ($key) use($enums) {
         return $enums[$key];
     }));
     $res = GitRepoHelper::validateEnums($input, 'issue', ['filter', 'state']);
     $this->assertEquals($enums, $res);
 }
Пример #2
0
 /**
  * {@inheritdoc}
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $tracker = $this->getIssueTracker();
     $params = GitRepoHelper::validateEnums($input, 'issue', ['state', 'sort', 'direction']);
     foreach (['creator', 'assignee', 'mentioned', 'milestone'] as $option) {
         $params[$option] = $input->getOption($option);
     }
     if ($label = $input->getOption('label')) {
         $params['labels'] = implode(',', $label);
     }
     if ($since = $input->getOption('since')) {
         $timeStamp = strtotime($since);
         if (false === $timeStamp) {
             throw new \InvalidArgumentException($since . ' is not a valid date');
         }
         $params['since'] = date('c', $timeStamp);
     }
     $issues = $tracker->getIssues($params);
     // post filter
     foreach ($issues as $i => &$issue) {
         $isPr = $issue['pull_request'];
         $issue['_type'] = $isPr ? 'pr' : 'issue';
         if ($type = $input->getOption('type')) {
             GitRepoHelper::validateEnum('issue', 'type', $type);
             if ('pr' === $type && false === $isPr || 'issue' === $type && true === $isPr) {
                 unset($issues[$i]);
             }
         }
     }
     unset($issue);
     $styleHelper = $this->getHelper('gush_style');
     $styleHelper->title(sprintf('Issues on %s/%s', $input->getOption('issue-org'), $input->getOption('issue-project')));
     $table = $this->getHelper('table');
     $table->setHeaders(['#', 'State', 'PR?', 'Title', 'User', 'Assignee', 'Milestone', 'Labels', 'Created', 'Link']);
     $table->formatRows($issues, function ($issue) {
         return [$issue['number'], $issue['state'], $issue['_type'] === 'pr' ? 'PR' : '', $this->getHelper('text')->truncate($issue['title'], 40), $issue['user'], $issue['assignee'], $this->getHelper('text')->truncate($issue['milestone'], 15), $this->getHelper('text')->truncate(implode(',', $issue['labels']), 30), null !== $issue['created_at'] ? $issue['created_at']->format('Y-m-d H:i') : '', $issue['url']];
     });
     $table->setFooter(sprintf('<info>%s issues</info>', count($issues)));
     $table->render($output, $table);
     return self::COMMAND_SUCCESS;
 }