check to ensure that row counts in most tables are unchanged from the start and end of the tests. Refactor some code.
317 lines
9.6 KiB
PHP
317 lines
9.6 KiB
PHP
<?php
|
|
|
|
/* unit tests to make sure objects we want to use with the object manager are valid */
|
|
|
|
require_once("path.php");
|
|
require_once("test_common.php");
|
|
require_once(BASE.'include/objectManager.php');
|
|
require_once(BASE.'include/application.php');
|
|
require_once(BASE.'include/maintainer.php');
|
|
require_once(BASE.'include/testData_queue.php');
|
|
require_once(BASE.'include/version_queue.php');
|
|
require_once(BASE.'include/application_queue.php');
|
|
require_once(BASE.'include/browse_newest_apps.php');
|
|
|
|
/* internal function */
|
|
function test_class($sClassName, $aTestMethods)
|
|
{
|
|
$oObject = new ObjectManager("");
|
|
$oObject->sClass = $sClassName;
|
|
|
|
/* Check whether the required methods are present */
|
|
if(!$oObject->checkMethods($aTestMethods, false))
|
|
{
|
|
echo "FAILED\t\t".$oObject->sClass." does not have valid methods for use with".
|
|
" the object manager\n";
|
|
return false;
|
|
}
|
|
|
|
// TODO: work around for 'browse_newest_apps' class
|
|
// since we can't create a new database object of browse_newest_apps
|
|
if($sClassName == "browse_newest_apps")
|
|
return true;
|
|
|
|
/* Set up test user */
|
|
$sTestEmail = __FUNCTION__."@localhost.com";
|
|
$sTestPassword = "password";
|
|
if(!$oUser = create_and_login_user($sTestEmail, $sTestPassword))
|
|
{
|
|
error("Failed to create and log in user.");
|
|
return FALSE;
|
|
} else
|
|
{
|
|
// assign the session variable that makes this user the current user
|
|
$_SESSION['current'] = $oUser;
|
|
}
|
|
|
|
/* Test the class constructor */
|
|
if(!$oTestObject = create_object($sClassName, $oUser))
|
|
return FALSE;
|
|
|
|
/* Should return 1 or more, since there may be entries present already */
|
|
$hResult = $oTestObject->objectGetEntries(false, false);
|
|
|
|
if(!$hResult)
|
|
{
|
|
error("Got '$hResult' instead of a valid MySQL handle");
|
|
error("FAILED\t\t$sClassName::$sClassName");
|
|
$oTestObject->delete();
|
|
return FALSE;
|
|
}
|
|
|
|
if(!($oRow = mysql_fetch_object($hResult)))
|
|
{
|
|
error("Failed to fetch MySQL object");
|
|
error("FAILED\t\t$sClassName::$sClassName");
|
|
$oTestObject->delete();
|
|
return FALSE;
|
|
}
|
|
|
|
$oNewTestObject = new $sClassName(null, $oRow);
|
|
switch($sClassName)
|
|
{
|
|
case "application":
|
|
$iReceived = $oNewTestObject->iAppId;
|
|
break;
|
|
case "application_queue":
|
|
$iReceived = $oNewTestObject->oApp->iAppId;
|
|
break;
|
|
case "distribution":
|
|
$iReceived = $oNewTestObject->iDistributionId;
|
|
break;
|
|
case "downloadurl":
|
|
$iReceived = $oNewTestObject->iId;
|
|
break;
|
|
case "maintainer":
|
|
$iReceived = $oNewTestObject->iMaintainerId;
|
|
break;
|
|
case "testData":
|
|
$iReceived = $oNewTestObject->iTestingId;
|
|
break;
|
|
case "testData_queue":
|
|
$iReceived = $oNewTestObject->oTestData->iTestingId;
|
|
break;
|
|
case "vendor":
|
|
$iReceived = $oNewTestObject->iVendorId;
|
|
break;
|
|
case "version":
|
|
$iReceived = $oNewTestObject->iVersionId;
|
|
break;
|
|
case "version_queue":
|
|
$iReceived = $oNewTestObject->oVersion->iVersionId;
|
|
break;
|
|
case "screenshot":
|
|
$iReceived = $oNewTestObject->iScreenshotId;
|
|
break;
|
|
}
|
|
|
|
if(!$iReceived || !is_numeric($iReceived))
|
|
{
|
|
error("Got '$iReceived' instead of a valid id");
|
|
error("FAILED\t\t$sClassName::$sClassName()");
|
|
$oTestObject->delete();
|
|
return FALSE;
|
|
}
|
|
|
|
echo "PASSED\t\t$sClassName::$sClassName\n";
|
|
|
|
//////////////////////////
|
|
// cleanup after the test
|
|
cleanup($oTestObject);
|
|
|
|
if(!$oUser->addPriv("admin"))
|
|
error("oUser->addPriv('admin') failed");
|
|
|
|
if(!$oTestObject->delete())
|
|
{
|
|
error("sClassName of $sClassName oTestObject->delete() failed!");
|
|
$oUser->delete();
|
|
return false;
|
|
}
|
|
|
|
////////////////////////////////
|
|
|
|
/* Test the methods' functionality */
|
|
foreach($aTestMethods as $sMethod)
|
|
{
|
|
switch($sMethod)
|
|
{
|
|
/* Should also test for queued entries, but vendor does not support
|
|
queueing yet */
|
|
case "objectGetEntries":
|
|
if(!$oTestObject = create_object($sClassName, $oUser))
|
|
return FALSE;
|
|
|
|
/* Should return 1 or more, since there may be entries present already */
|
|
$iExpected = 1;
|
|
$hResult = $oTestObject->objectGetEntries(false, false);
|
|
$iReceived = mysql_num_rows($hResult);
|
|
if($iExpected > $iReceived)
|
|
{
|
|
error("Got $iReceived instead of >= $iExpected");
|
|
error("FAILED\t\t$sClassName::$sMethod");
|
|
$oTestObject->delete();
|
|
return FALSE;
|
|
}
|
|
|
|
/* Class specific clean-up */
|
|
cleanup($oTestObject);
|
|
$oTestObject->delete();
|
|
|
|
echo "PASSED\t\t$sClassName::$sMethod\n";
|
|
break;
|
|
}
|
|
}
|
|
|
|
$oUser->delete();
|
|
|
|
echo "PASSED\t\t".$oObject->sClass."\n";
|
|
return TRUE;
|
|
}
|
|
|
|
function cleanup($oObject)
|
|
{
|
|
switch(get_class($oObject))
|
|
{
|
|
case "downloadurl":
|
|
case "maintainer":
|
|
case "screenshot":
|
|
case "testData":
|
|
delete_version_and_parent_app($oObject->iVersionId);
|
|
break;
|
|
case "testData_queue":
|
|
delete_version_and_parent_app($oObject->oTestData->iVersionId);
|
|
break;
|
|
case "version":
|
|
$oApp = new application($oObject->iAppId);
|
|
$oApp->delete();
|
|
break;
|
|
case "version_queue":
|
|
$oApp = new application($oObject->oVersion->iAppId);
|
|
$oApp->delete();
|
|
break;
|
|
}
|
|
}
|
|
|
|
function create_object($sClassName, $oUser)
|
|
{
|
|
$oUser->addPriv("admin");
|
|
$oTestObject = new $sClassName();
|
|
/* Set up one test entry, depending on class */
|
|
switch($sClassName)
|
|
{
|
|
case "distribution":
|
|
$oTestObject->sName = "Silly test distribution";
|
|
$oTestObject->sUrl = "http://appdb.winehq.org/";
|
|
break;
|
|
case "downloadurl":
|
|
$oTestObject->sUrl = "http://appdb.winehq.org/";
|
|
$oTestObject->sDescription = "DANGER";
|
|
$oTestObject->iVersionId = create_version_and_parent_app();
|
|
break;
|
|
case "maintainer":
|
|
$oVersion = new version(create_version_and_parent_app());
|
|
$oTestObject->iUserId = $oUser->iUserId;
|
|
$oTestObject->iAppId = $oVersion->iAppId;
|
|
$oTestObject->iVersionId = $oVersion->iVersionId;
|
|
$oTestObject->sMaintainReason = "I need it";
|
|
break;
|
|
case "screenshot":
|
|
case "testData":
|
|
$oTestObject->iVersionId = create_version_and_parent_app();
|
|
break;
|
|
case "testData_queue":
|
|
$oTestObject->oTestData->iVersionId = create_version_and_parent_app();
|
|
break;
|
|
case "version":
|
|
$oApp = new application();
|
|
$oApp->create();
|
|
$oTestObject->iAppId = $oApp->iAppId;
|
|
$oTestObject->sName = "OM Version";
|
|
break;
|
|
case "version_queue":
|
|
$oApp = new application();
|
|
$oApp->create();
|
|
$oTestObject->oVersion->iAppId = $oApp->iAppId;
|
|
$oTestObject->oVersion->sName = "OM Version";
|
|
break;
|
|
}
|
|
|
|
/* We cannot use screenshot::create() because it requires an image */
|
|
if($sClassName != "screenshot")
|
|
{
|
|
if(!$oTestObject->create())
|
|
{
|
|
error("FAILED\t\t$sClassName::create()");
|
|
return FALSE;
|
|
}
|
|
} else
|
|
{
|
|
$sQuery = "INSERT INTO appData
|
|
(versionId, type, description, queued, submitterId)
|
|
VALUES('?','?','?','?','?')";
|
|
$hResult = query_parameters($sQuery, $oTestObject->iVersionId, "screenshot", "", "false",
|
|
$oUser->iUserId);
|
|
if(!$hResult)
|
|
{
|
|
error("FAILED\t\t$sClassName to create screenshot entry");
|
|
return FALSE;
|
|
}
|
|
$oTestObject->iScreenshotId = mysql_insert_id();
|
|
}
|
|
|
|
return $oTestObject;
|
|
}
|
|
|
|
function test_object_methods()
|
|
{
|
|
test_start(__FUNCTION__);
|
|
|
|
$aTestMethods = array("allowAnonymousSubmissions",
|
|
"canEdit",
|
|
"display",
|
|
"getOutputEditorValues",
|
|
"objectGetEntries",
|
|
"objectGetHeader",
|
|
"objectGetId",
|
|
"objectGetTableRow",
|
|
"objectMakeLink",
|
|
"objectMakeUrl",
|
|
"outputEditor",
|
|
"mustBeQueued"
|
|
);
|
|
|
|
$aTestClasses = array("application",
|
|
"application_queue",
|
|
"browse_newest_apps",
|
|
"distribution",
|
|
"downloadurl",
|
|
"maintainer",
|
|
"screenshot",
|
|
"testData",
|
|
"testData_queue",
|
|
"vendor",
|
|
"version",
|
|
"version_queue"
|
|
);
|
|
|
|
foreach($aTestClasses as $sTestClass)
|
|
{
|
|
if(!test_class($sTestClass, $aTestMethods))
|
|
return FALSE;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
if(!test_object_methods())
|
|
{
|
|
echo "test_object_methods() failed!\n";
|
|
$bTestSuccess = false;
|
|
} else
|
|
{
|
|
echo "test_object_methods() passed\n";
|
|
}
|
|
|
|
?>
|