Example #1
0
 /**
  * @todo A monster method to refactor!!!
  *
  * @param  SpecRest $restSpec
  * @param  string   $useCaseFilter
  * @return ValidationReport
  */
 public function validate(Spec\Rest $restSpec, $apiFilter, $useCaseFilter = null)
 {
     $validationReport = new ValidationReport();
     $apiSpecs = $restSpec->getApiSpecs();
     foreach ($apiSpecs as $apiSpec) {
         if ($apiFilter && $apiSpec->getName() !== $apiFilter) {
             $this->log[] = sprintf("API %s omitted due to filter '%'", $apiSpec->getName(), $apiFilter);
             continue;
         }
         $this->log[] = sprintf("Testing %s API at %s ", $apiSpec->getName(), $apiSpec->getBaseUrl());
         $apiValidationReport = new ApiValidationReport($apiSpec);
         $validationReport->addApiReport($apiValidationReport);
         $client = new \GuzzleHttp\Client(['base_url' => $apiSpec->getBaseUrl()]);
         $responseValidator = new Response();
         foreach ($apiSpec->getUrlSpecs() as $urlSpec) {
             $this->log[] = sprintf("\tTesting URL %s", $urlSpec->getUrl());
             $urlReport = new UrlValidationReport($urlSpec);
             $apiValidationReport->addUrlReport($urlReport);
             $useCases = $urlSpec->getUseCases();
             foreach ($useCases as $urlUseCaseSpec) {
                 if ($useCaseFilter && strpos(strtolower($urlUseCaseSpec->getDescription()), strtolower($useCaseFilter)) === false) {
                     continue;
                 }
                 $useCaseValidationReport = new UseCaseValidationReport($urlUseCaseSpec, $urlUseCaseSpec->getExpectedResponseSpec());
                 $urlReport->addUseCaseReport($useCaseValidationReport);
                 if ($beforeCallback = $urlUseCaseSpec->getBeforeCallback()) {
                     call_user_func($beforeCallback, $urlUseCaseSpec);
                 }
                 $request = $urlUseCaseSpec->getRequest();
                 $res = $client->send($request);
                 $responseValidator->validate($res, $urlUseCaseSpec->getExpectedResponseSpec(), $useCaseValidationReport);
                 $useCaseValidationReport->setResponse($res);
                 if ($responseValidator->isValid()) {
                     $validationReport->incrementPassedCount();
                 } else {
                     $validationReport->incrementFailedCount();
                 }
                 $responseValidator->reset();
                 if ($doneCallback = $urlUseCaseSpec->getDoneCallback()) {
                     call_user_func($doneCallback, $res);
                 }
                 if ($this->onProgress) {
                     call_user_func($this->onProgress, $validationReport->getTotalUseCases());
                 }
             }
         }
     }
     return $validationReport;
 }
Example #2
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $constraintDescriber = new \RestSpec\Output\ConstraintDescriber();
     $consoleOutput = new \RestSpec\Output\ConsoleOutput($output, $constraintDescriber);
     $validator = new \RestSpec\Validator\Rest();
     $loader = new \RestSpec\Loader();
     $loader->run();
     try {
         $useCaseFilter = $input->getArgument('filter');
         $api = $input->getOption('api');
         $restSpec = Spec\Rest::getInstance();
         $restSpecValidator = new \RestSpec\Spec\Validator();
         $restSpecValidator->validate($restSpec);
         $progressBar = new ProgressBar($output);
         $progressBar->setFormat('Testing your API specs. Already tested: %current% use cases [%bar%]');
         $progressBar->start();
         $validator->progress(function ($useCases) use($output, $progressBar) {
             $progressBar->advance();
         });
         $report = $validator->validate($restSpec, $api, $useCaseFilter);
         $progressBar->finish();
         $output->write($report->dumpAsConsoleText($api, $useCaseFilter));
         if ($report->getTotalUseCases() === 0 || $report->getUseCasesFailedCount() > 0) {
             exit(1);
         } else {
             exit(0);
         }
     } catch (\Exception $e) {
         $log = join("\n", $validator->getLog());
         $consoleOutput->getOutput()->writeln(sprintf("\n<error>Whoops! Some unexpected error occured. Validation log dump:\n\n%s\n\nThe exception type is: %s, and a message is following:</error>", $log, get_class($e)));
         $consoleOutput->errorHandler($e, 2);
     }
 }
Example #3
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $constraintDescriber = new \RestSpec\Output\ConstraintDescriber();
     $consoleOutput = new \RestSpec\Output\ConsoleOutput($output, $constraintDescriber);
     $loader = new \RestSpec\Loader();
     $loader->run();
     $restSpec = Spec\Rest::getInstance();
     $restSpecValidator = new \RestSpec\Spec\Validator();
     $restSpecValidator->validate($restSpec);
     $apiSpec = $restSpec->getApiSpecs();
     foreach ($apiSpec as $apiSpec) {
         $output->writeln(sprintf("\nAPI base URL: <info>%s</info>\n", $apiSpec->getBaseUrl()));
         foreach ($apiSpec->getUrlSpecs() as $urlSpec) {
             $output->writeln(sprintf("<comment>%s</comment>\n\n<info>%s</info>\n", $urlSpec->getDescription(), $urlSpec->getUrl()));
             $useCases = $urlSpec->getUseCases();
             $useCaseView = new UseCaseView();
             foreach ($useCases as $useCase) {
                 $output->write($useCaseView->view($useCase, $output));
             }
         }
     }
 }