/**
  * 
  * Creates a new Kaltura test Object
  * @param string $name
  * @param array $data
  * @param string $dataName
  */
 public function __construct($name = null, array $data = array(), $dataName = '')
 {
     parent::__construct($name, $data, $dataName);
     $class = get_class($this);
     if ($name) {
         KalturaLog::info("_____________________________________ [{$class}] [{$name}] ___________________________________");
     } else {
         KalturaLog::info("__________________________________________ [{$class}] ______________________________________");
     }
     $testFilePath = KAutoloader::getClassFilePath($class);
     $this->testFolder = dirname($testFilePath);
     $this->inputs = $data;
     KalturaLog::info("Loads config file [{$testFilePath}.ini]");
     $this->config = new KalturaTestConfig("{$testFilePath}.ini");
     $testConfig = $this->config->get('config');
     if (!$testConfig) {
         $testConfig = new Zend_Config(array('source' => KalturaTestSource::XML), true);
         $this->config->config = $testConfig;
         $this->config->saveToIniFile();
     }
     $this->dataSource = $testConfig->source;
     $this->outputFolder = $testConfig->outputFolder;
     if ($this->outputFolder && !is_dir($this->outputFolder)) {
         KalturaLog::info("Creating folder output [{$this->outputFolder}]");
         mkdir($this->outputFolder, 777, true);
     }
 }
 /**
  * Test the addition of a mediaEntry with proeprty "categories" set.
  * @param string $categories
  * @dataProvider provideData
  */
 public function testAddWithCategories($categories)
 {
     $mediaEntry = new KalturaMediaEntry();
     $mediaEntry->name = uniqid();
     $mediaEntry->mediaType = KalturaMediaType::VIDEO;
     $mediaEntry->categories = $categories;
     $mediaEntry = $this->client->media->add($mediaEntry);
     var_dump(KAutoloader::getClassFilePath(get_class($this->client)));
     $categoryNames = explode(",", $categories);
     foreach ($categoryNames as $categoryName) {
         $filter = new KalturaCategoryFilter();
         $filter->fullNameEqual = $categoryName;
         $results = $this->client->category->listAction($filter);
         $this->assertEquals(1, $results->totalCount, "Unexpected number of categories with fullname {$categoryName}.");
         $catId = $results->objects[0]->id;
         // Assert that the entry's "categoriesIds" property was updated properly.
         $entryCatIds = explode(',', $mediaEntry->categoriesIds);
         $this->assertTrue(in_array($catId, $entryCatIds), "Entry's categoriesIds property should containt category Id [{$catId}] for category [{$categoryName}]");
         //Assert that a KalturaCategoryEntry object was created for the entry and each category it was associated with.
         $catEntryFilter = new KalturaCategoryEntryFilter();
         $catEntryFilter->categoryIdEqual = $catId;
         $catEntryFilter->entryIdEqual = $mediaEntry->id;
         try {
             $res = $this->client->categoryEntry->listAction($catEntryFilter);
             $this->assertGreaterThan(0, $res->totalCount > 0);
         } catch (Exception $e) {
             $this->assertEquals(0, 1, "Unexpected exception thrown - expected categoryEntry object for entry Id" . $mediaEntry->id . " and category Id {$catId}");
         }
     }
 }
 /**
  * 
  * The test data provider (gets the data for the different tests)
  * @param string $className - The class name
  * @param string $procedureName - The current method (test) name
  * @return array<array>();
  */
 public function provider($className, $procedureName)
 {
     //print("In provider for $className, $procedureName \n");
     //Gets from the given class the class data file
     $class = get_class($this);
     $classFilePath = KAutoloader::getClassFilePath($class);
     $testClassDir = dirname($classFilePath);
     $dataFilePath = $testClassDir . DIRECTORY_SEPARATOR . "testsData/{$className}.data";
     KalturaLog::debug("The data file path [" . $dataFilePath . "]");
     if (file_exists($dataFilePath)) {
         $simpleXML = kXml::openXmlFile($dataFilePath);
     } else {
         //TODO: Give notice or create the file don't throw an exception
         throw new Exception("Data file [{$dataFilePath}] not found");
     }
     $inputsForTestProcedure = array();
     foreach ($simpleXML->TestProcedureData as $xmlTestProcedureData) {
         if ($xmlTestProcedureData["testProcedureName"] != $procedureName) {
             continue;
         }
         foreach ($xmlTestProcedureData->TestCaseData as $xmlTestCaseData) {
             $testCaseInstanceInputs = array();
             foreach ($xmlTestCaseData->Input as $input) {
                 $object = KalturaTestDataObject::generatefromXml($input);
                 //Add the new input to the test case instance data
                 $testCaseInstanceInputs[] = $object;
             }
             foreach ($xmlTestCaseData->OutputReference as $output) {
                 $object = KalturaTestDataObject::generatefromXml($output);
                 //Add the new output reference to the test case instance data
                 $testCaseInstanceInputs[] = $object;
             }
             //Add the test case into the test procedure data
             $inputsForTestProcedure[] = $testCaseInstanceInputs;
         }
     }
     KalturaLog::info("Tests data provided Before transformation to objects: \n[" . print_r($inputsForTestProcedure, true) . "]");
     $inputsForTestProcedure = $this->transformToObjects($inputsForTestProcedure);
     KalturaLog::info("Tests data provided [" . print_r($inputsForTestProcedure, true) . "]");
     return $inputsForTestProcedure;
 }
 protected function writeAfterService(KalturaServiceReflector $serviceReflector)
 {
     $this->writeTest("\t/**");
     $this->writeTest("\t * Called when all tests are done");
     $this->writeTest("\t * @param int \$id");
     $this->writeTest("\t * @return int");
     $this->writeTest("\t * @depends {$this->lastDependencyTest} - TODO: replace {$this->lastDependencyTest} with last test function that uses that id");
     $this->writeTest("\t */");
     $this->writeTest("\tpublic function testFinished(\$id)");
     $this->writeTest("\t{");
     $this->writeTest("\t\treturn \$id;");
     $this->writeTest("\t}");
     $this->writeTest("");
     $this->writeTest("}");
     $this->writeBase("\t/**");
     $this->writeBase("\t * Called when all tests are done");
     $this->writeBase("\t * @param int \$id");
     $this->writeBase("\t * @return int");
     $this->writeBase("\t */");
     $this->writeBase("\tabstract public function testFinished(\$id);");
     $this->writeBase("");
     $this->writeBase("}");
     $serviceName = $serviceReflector->getServiceName();
     $serviceClass = $serviceReflector->getServiceClass();
     $testPath = realpath(dirname(__FILE__) . '/../') . "/tests/api/{$serviceName}";
     if ($serviceReflector->isFromPlugin()) {
         $servicePath = KAutoloader::getClassFilePath($serviceClass);
         $testPath = realpath(dirname($servicePath) . '/../') . "/tests/services/{$serviceName}";
     }
     $this->writeToFile("{$testPath}/{$serviceClass}BaseTest.php", $this->_txtBase);
     $this->writeToFile("{$testPath}/{$serviceClass}Test.php", $this->_txtTest, false);
     $this->writeToFile("{$testPath}/{$serviceClass}Test.php.ini", $this->_txtIni, false);
 }
 /**
  * 
  * Inits the global data file
  * @return true - If global exists or was created, null other wise 
  */
 private static function initDataFile()
 {
     if (is_null(KalturaGlobalData::$dataFilePath)) {
         $classFilePath = KAutoloader::getClassFilePath("KalturaGlobalData");
         $dir = dirname($classFilePath);
         KalturaGlobalData::setDataFilePath($dir . "/" . KalturaGlobalData::DEFAULT_DATA_PATH);
     }
     if (file_exists(KalturaGlobalData::$dataFilePath)) {
         KalturaGlobalData::$dataFile = new KalturaTestConfig(KalturaGlobalData::$dataFilePath);
     } else {
         print "Global file no found at: " . KalturaGlobalData::$dataFilePath . "\n";
         return null;
     }
     return true;
 }
 public function startTestSuite(PHPUnit_Framework_TestSuite $suite)
 {
     //		print("In startTestSuite - for suite = {$suite->getName()}\n");
     KalturaLog::debug("In startTestSuite - for suite = {$suite->getName()}");
     if ($suite instanceof PHPUnit_Framework_TestSuite_DataProvider) {
         //Get the test procedure name from the suite name which is (testCase::testProcedure)
         $testNames = explode("::", $suite->getName());
         $testName = $testNames[0];
         if (isset($testNames[1])) {
             $testName = $testNames[1];
         }
         $testCase = $testNames[0];
         if (is_null(KalturaTestListener::$testCaseFailures)) {
             KalturaLog::debug("KalturaTestCaseFailures is null creating empty test case failures for {$testCase}\n");
             KalturaTestListener::$testCaseFailures = new KalturaTestCaseFailures($testName);
         }
         $testProcedure = KalturaTestListener::$testCaseFailures->getTestProcedureFailure($testName);
         //if the test procedure exists
         if (!$testProcedure) {
             KalturaTestListener::$testCaseFailures->addTestProcedureFailure(new KalturaTestProcedureFailure($testName));
         } else {
             KalturaLog::alert("Test procedure [{$testName}] already added");
         }
     } else {
         //Check if the test belongs to the same test case failures (by the first test of the suite)
         $test = $suite->testAt(0);
         if ($test instanceof PHPUnit_Framework_TestSuite_DataProvider) {
             $test = $test->testAt(0);
         }
         $class = get_class($test);
         //if the new test comes from a new file (testCase)
         if (KalturaTestListener::$currentTestCase != $class) {
             //Gets the class path for the failure file
             $classPath = KAutoloader::getClassFilePath($class);
             KalturaTestListener::$failureFilePath = dirname($classPath) . "/testsData/{$class}.failures";
             KalturaTestListener::$dataFilePath = dirname($classPath) . "/testsData/{$class}.data";
             $this->writeFailuresToFile();
             //Opens the new failure file for the new test
             KalturaTestListener::$failuresFile = fopen(KalturaTestListener::$failureFilePath, "w+");
             //Change the current test case
             KalturaTestListener::$currentTestCase = $class;
             //Create new test case failures for the new test case
             KalturaTestListener::$testCaseFailures = new KalturaTestCaseFailures(KalturaTestListener::$currentTestCase);
             //TODO: get the test procedure name from the suite
             KalturaTestListener::$testCaseFailures->setTestProceduresFailures(array(new KalturaTestProcedureFailure("Unknown")));
         } else {
         }
     }
 }