public function testSSO()
 {
     $pid = Helper::getSomeProject();
     $user = Helper::getSomeUser();
     Helper::getClient()->getProjects()->addUser($pid, $user['uid']);
     $targetUrl = "/#s=/gdc/projects/{$pid}|projectDashboardPage";
     $sso = new SSO(null, null, KBGDC_API_URL);
     $ssoLink = $sso->getUrl(KBGDC_USERNAME, KBGDC_SSO_KEY, KBGDC_SSO_PROVIDER, $targetUrl, $user['email'], 3600, KBGDC_SSO_KEY_PASS);
     $stack = \GuzzleHttp\HandlerStack::create();
     $lastRequest = null;
     $stack->push(\GuzzleHttp\Middleware::mapRequest(function (Request $request) use(&$lastRequest) {
         $lastRequest = $request;
         return $request;
     }));
     $client = new Client(['handler' => $stack, \GuzzleHttp\RequestOptions::ALLOW_REDIRECTS => true, 'verify' => false]);
     try {
         $client->request('GET', $ssoLink, ['headers' => ['Accept' => 'application/json']]);
     } catch (RequestException $e) {
         if ($e->hasResponse()) {
             $response = $e->getResponse()->getBody();
             $this->fail("{$response} on link: {$ssoLink}");
         } else {
             $this->fail($e->getMessage() . " on link: {$ssoLink}");
         }
     }
     /** @var Request $lastRequest */
     $result = $lastRequest->getUri()->__toString();
     $this->assertStringEndsWith($targetUrl, urldecode($result));
 }
 public function testReportsExport()
 {
     $pid = Helper::getSomeProject();
     Helper::initProjectModel($pid);
     // Create few MB csv
     $csvFile = Helper::getTemp()->createTmpFile();
     $fp = fopen($csvFile, 'w');
     fwrite($fp, "id,name" . PHP_EOL);
     for ($i = 1; $i < 200000; $i++) {
         fwrite($fp, "{$i}," . uniqid() . PHP_EOL);
     }
     shell_exec("mv {$csvFile} " . Helper::getTemp()->getTmpFolder() . "/categories.csv");
     fclose($fp);
     $dirName = uniqid();
     $webDav = new WebDav(KBGDC_USERNAME, KBGDC_PASSWORD);
     $webDav->createFolder($dirName);
     $webDav->upload(__DIR__ . '/../../data/products.csv', $dirName);
     $webDav->upload(Helper::getTemp()->getTmpFolder() . "/categories.csv", $dirName);
     $webDav->upload(__DIR__ . '/../../data/upload_info.json', $dirName);
     Helper::getClient()->getDatasets()->loadData($pid, $dirName);
     $uri = Helper::createReport($pid);
     $report = Helper::getClient()->get($uri);
     $reports = new Reports($this->client);
     $resultUri = $reports->export($pid, $report['report']['content']['definitions'][0]);
     $csvFile = Helper::getTemp()->getTmpFolder() . '/' . uniqid() . '.csv';
     $this->client->getToFile($resultUri, $csvFile);
     $this->assertTrue(file_exists($csvFile));
     $this->assertGreaterThan(4800000, filesize($csvFile));
 }
 public function testTimeDimensionLoadData()
 {
     $pid = Helper::getSomeProject();
     Helper::cleanUpProject($pid);
     $name = 't' . uniqid();
     $dir = sys_get_temp_dir() . '/' . uniqid();
     mkdir($dir);
     $timeDimension = new TimeDimension($this->client);
     $timeDimension->create($pid, $name);
     $timeDimension->loadData($pid, $name, $dir);
     $result = $this->client->get("/gdc/md/{$pid}/data/sets");
     $this->assertArrayHasKey('dataSetsInfo', $result);
     $this->assertArrayHasKey('sets', $result['dataSetsInfo']);
     $this->assertCount(1, $result['dataSetsInfo']['sets']);
     $this->assertArrayHasKey('meta', $result['dataSetsInfo']['sets'][0]);
     $this->assertArrayHasKey('identifier', $result['dataSetsInfo']['sets'][0]['meta']);
     $this->assertEquals("dataset.time.{$name}", $result['dataSetsInfo']['sets'][0]['meta']['identifier']);
     $this->assertArrayHasKey('lastUpload', $result['dataSetsInfo']['sets'][0]);
     $this->assertArrayHasKey('dataUploadShort', $result['dataSetsInfo']['sets'][0]['lastUpload']);
     $this->assertArrayHasKey('status', $result['dataSetsInfo']['sets'][0]['lastUpload']['dataUploadShort']);
     $this->assertEquals("OK", $result['dataSetsInfo']['sets'][0]['lastUpload']['dataUploadShort']['status']);
 }
 public function __construct()
 {
     parent::__construct();
     $this->client = new Client(KBGDC_API_URL, Helper::getLogger(), null, ['verify' => false]);
     $this->client->login(KBGDC_USERNAME, KBGDC_PASSWORD);
 }
 public function testProjectsCancelInvitation()
 {
     $pid = Helper::getSomeProject();
     $email = uniqid() . '@' . KBGDC_USERS_DOMAIN;
     $result = $this->client->get("/gdc/projects/{$pid}/roles");
     $this->client->post("/gdc/projects/{$pid}/invitations", ['invitations' => [['invitation' => ['content' => ['email' => $email, 'role' => $result['projectRoles']['roles'][0]]]]]]);
     $projects = new Projects($this->client);
     $projects->cancelInvitation($pid, $email);
     $invitationFound = false;
     $result = $this->client->get("/gdc/projects/{$pid}/invitations");
     foreach ($result['invitations'] as $r) {
         if ($email == $r['invitation']['content']['email']) {
             $invitationFound = true;
             $this->assertEquals('CANCELED', $r['invitation']['content']['status']);
         }
     }
     $this->assertTrue($invitationFound);
 }
 public function testDatasetsLoadData()
 {
     $pid = Helper::getSomeProject();
     Helper::initProjectModel($pid);
     Helper::loadData($pid);
     $timestamp = time();
     $dirName = uniqid();
     $webDav = new WebDav(KBGDC_USERNAME, KBGDC_PASSWORD);
     $webDav->createFolder($dirName);
     $webDav->upload(__DIR__ . '/../../data/categories.csv', $dirName);
     $webDav->upload(__DIR__ . '/../../data/products.csv', $dirName);
     $webDav->upload(__DIR__ . '/../../data/upload_info.json', $dirName);
     $this->client->getDatasets()->loadData($pid, $dirName);
     $result = $this->client->get("/gdc/md/{$pid}/data/sets");
     $categoriesFound = false;
     $productsFound = false;
     foreach ($result['dataSetsInfo']['sets'] as $d) {
         if ($d['meta']['title'] == 'Categories') {
             $categoriesFound = true;
             $this->assertGreaterThan($timestamp, strtotime($d['lastUpload']['dataUploadShort']['date']));
         }
         if ($d['meta']['title'] == 'Products') {
             $productsFound = true;
             $this->assertGreaterThan($timestamp, strtotime($d['lastUpload']['dataUploadShort']['date']));
         }
     }
     $this->assertTrue($categoriesFound);
     $this->assertTrue($productsFound);
 }
 public function testFiltersGetForUser()
 {
     $pid = Helper::getSomeProject();
     Helper::initProjectModel($pid);
     Helper::loadData($pid);
     $user = Helper::getSomeUser();
     $filter1 = uniqid();
     $filter2 = uniqid();
     $attrIdentifier = Identifiers::getAttributeId("categories", "id");
     $attrUri = $this->client->getDatasets()->getUriForIdentifier($pid, $attrIdentifier);
     $attrValueUri = $this->client->getDatasets()->getAttributeValueUri($pid, $attrIdentifier, 'c1');
     $uri1 = $this->client->getFilters()->create($pid, $filter1, $attrUri, '=', $attrValueUri);
     $uri2 = $this->client->getFilters()->create($pid, $filter2, $attrUri, '=', $attrValueUri);
     $this->client->getFilters()->assignToUser($pid, $user['uid'], [$uri1, $uri2]);
     $filters = new Filters($this->client);
     $this->assertEquals([$uri1, $uri2], $filters->getForUser($pid, $user['uid']), '', 0, 10, true);
 }