Empire resources update

* Added a new update that computes the amount of resources possessed and
owed by empires. At the moment this computation ignores fleets, as their
upkeep does not use the resource system.
This commit is contained in:
Emmanuel BENOîT 2012-01-10 13:29:56 +01:00
parent b49bc1a44f
commit 04e550709a
4 changed files with 186 additions and 2 deletions
legacyworlds-server-data/db-structure/tests
admin/050-updates/015-empire-resources
user/050-updates/015-empire-resources

View file

@ -0,0 +1,101 @@
/*
* Test the sys.process_empire_resources_updates() function
*/
BEGIN;
/* We need:
* - three types of resources,
* - two empire with resources records, and the corresponding update
* record,
* - two planets, set to belong to the aforementioned empires, with
* resources records attached.
*/
\i utils/strings.sql
\i utils/resources.sql
\i utils/accounts.sql
\i utils/naming.sql
\i utils/universe.sql
SELECT _create_resources( 3 , 'testResource' );
SELECT _create_raw_planets( 2 , 'testPlanet' );
SELECT _create_emp_names( 2 , 'testEmp' );
SELECT emp.create_empire( _get_emp_name( 'testEmp1' ) , _get_map_name( 'testPlanet1' ) , 1 );
INSERT INTO verse.planet_resources ( planet_id , resource_name_id )
SELECT _get_map_name( 'testPlanet1' ) , resource_name_id FROM defs.resources;
INSERT INTO verse.planet_resources ( planet_id , resource_name_id )
SELECT _get_map_name( 'testPlanet2' ) , resource_name_id FROM defs.resources;
/* Set up the planets' resource records so that:
* - income > upkeep for testResource1 ,
* - income < upkeep for testResource2 ,
* - income = upkeep = 0 for testResource3 ,
*/
UPDATE verse.planet_resources SET pres_income = 12
WHERE resource_name_id = _get_string( 'testResource1' );
UPDATE verse.planet_resources SET pres_upkeep = 34
WHERE resource_name_id = _get_string( 'testResource2' );
/* Make sure update 0 is set to be processed for testEmp1 */
UPDATE sys.updates
SET status = 'PROCESSING' , last_tick = 0;
/* Create testEmp2 empire, make sure it will not be processed */
SELECT emp.create_empire( _get_emp_name( 'testEmp2' ) , _get_map_name( 'testPlanet2' ) , 1 );
UPDATE sys.updates _su
SET status = 'PROCESSED' , last_tick = 0
FROM emp.updates _eu
WHERE _eu.update_id = _su.id AND _eu.empire_id = _get_emp_name( 'testEmp2' );
/****** TESTS BEGIN HERE ******/
SELECT plan( 19 );
SELECT sys.process_empire_resources_updates( 10 );
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Wrong update identifier (1/6)' );
SELECT is( empres_possessed , 0::DOUBLE PRECISION ) FROM emp.resources
WHERE resource_name_id = _get_string( 'testResource1' );
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Wrong update identifier (2/6)' );
SELECT is( empres_owed , 0::DOUBLE PRECISION ) FROM emp.resources
WHERE resource_name_id = _get_string( 'testResource1' );
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Wrong update identifier (3/6)' );
SELECT is( empres_possessed , 0::DOUBLE PRECISION ) FROM emp.resources
WHERE resource_name_id = _get_string( 'testResource2' );
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Wrong update identifier (4/6)' );
SELECT is( empres_owed , 0::DOUBLE PRECISION ) FROM emp.resources
WHERE resource_name_id = _get_string( 'testResource2' );
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Wrong update identifier (5/6)' );
SELECT is( empres_possessed , 0::DOUBLE PRECISION ) FROM emp.resources
WHERE resource_name_id = _get_string( 'testResource3' );
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Wrong update identifier (6/6)' );
SELECT is( empres_owed , 0::DOUBLE PRECISION ) FROM emp.resources
WHERE resource_name_id = _get_string( 'testResource3' );
SELECT sys.process_empire_resources_updates( 0 );
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Resource 1 - Possessed quantity increased' );
SELECT is( empres_possessed , 12::DOUBLE PRECISION ) FROM emp.resources
WHERE resource_name_id = _get_string( 'testResource1' )
AND empire_id = _get_emp_name( 'testEmp1' );
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Resource 1 - Owed quantity unchanged' );
SELECT is( empres_owed , 0::DOUBLE PRECISION ) FROM emp.resources
WHERE resource_name_id = _get_string( 'testResource1' )
AND empire_id = _get_emp_name( 'testEmp1' );
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Resource 2 - Possessed quantity unchanged' );
SELECT is( empres_possessed , 0::DOUBLE PRECISION ) FROM emp.resources
WHERE resource_name_id = _get_string( 'testResource2' )
AND empire_id = _get_emp_name( 'testEmp1' );
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Resource 2 - Owed quantity increased' );
SELECT is( empres_owed , 34::DOUBLE PRECISION ) FROM emp.resources
WHERE resource_name_id = _get_string( 'testResource2' )
AND empire_id = _get_emp_name( 'testEmp1' );
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Resource 3 - Possessed quantity unchanged' );
SELECT is( empres_possessed , 0::DOUBLE PRECISION ) FROM emp.resources
WHERE resource_name_id = _get_string( 'testResource3' )
AND empire_id = _get_emp_name( 'testEmp1' );
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Resource 3 - Owed quantity unchanged' );
SELECT is( empres_owed , 0::DOUBLE PRECISION ) FROM emp.resources
WHERE resource_name_id = _get_string( 'testResource3' )
AND empire_id = _get_emp_name( 'testEmp1' );
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Resources unchanged for already processed empire' );
SELECT is( SUM( empres_owed + empres_possessed ) , 0::DOUBLE PRECISION )
FROM emp.resources
WHERE empire_id = _get_emp_name( 'testEmp2' );
SELECT * FROM finish( );
ROLLBACK;

View file

@ -0,0 +1,11 @@
/*
* Test privileges on sys.process_empire_resources_updates()
*/
BEGIN;
SELECT plan( 1 );
SELECT diag_test_name( 'sys.process_empire_resources_updates() - Privileges' );
SELECT throws_ok( 'SELECT sys.process_empire_resources_updates( 1 )' , 42501 );
SELECT * FROM finish( );
ROLLBACK;