Empire resources and vacation mode
* Modified the empire resources update to check for vacation mode and apply the modifier from vacation.cashDivider if necessary. * Some parts of the database need to be reloaded: -> 050-updates/015-empire-resources.sql
This commit is contained in:
parent
96670d45be
commit
cb65a6e643
3 changed files with 83 additions and 26 deletions
|
@ -29,30 +29,46 @@ AS $process_empire_resources_updates$
|
|||
UPDATE emp.resources _emp_resources
|
||||
|
||||
SET empres_possessed = CASE
|
||||
WHEN _emp_resources.empres_possessed + _pl_resources.pres_income - _pl_resources.pres_upkeep > 0 THEN
|
||||
_emp_resources.empres_possessed + _pl_resources.pres_income - _pl_resources.pres_upkeep
|
||||
WHEN _emp_resources.empres_possessed + _raw.res_delta > 0 THEN
|
||||
_emp_resources.empres_possessed + _raw.res_delta
|
||||
ELSE
|
||||
0
|
||||
END ,
|
||||
empres_owed = CASE
|
||||
WHEN _emp_resources.empres_possessed + _pl_resources.pres_income - _pl_resources.pres_upkeep < 0 THEN
|
||||
_pl_resources.pres_upkeep - _emp_resources.empres_possessed - _pl_resources.pres_income
|
||||
WHEN _emp_resources.empres_possessed + _raw.res_delta < 0 THEN
|
||||
-( _emp_resources.empres_possessed + _raw.res_delta )
|
||||
ELSE
|
||||
0
|
||||
END
|
||||
|
||||
FROM sys.updates _upd_sys
|
||||
INNER JOIN emp.empires_updates _upd_emp
|
||||
USING ( updtgt_id , updtype_id , update_id )
|
||||
INNER JOIN emp.planets _emp_planets
|
||||
ON empire_id = name_id
|
||||
INNER JOIN verse.planet_resources _pl_resources
|
||||
USING ( planet_id )
|
||||
FROM (
|
||||
SELECT _upd_emp.name_id AS empire_id , _pl_resources.resource_name_id ,
|
||||
( _pl_resources.pres_income - _pl_resources.pres_upkeep ) / ( CASE
|
||||
WHEN _vacation.account_id IS NULL THEN
|
||||
1
|
||||
ELSE
|
||||
sys.get_constant( 'vacation.cashDivider' )
|
||||
END ) AS res_delta
|
||||
|
||||
WHERE _upd_sys.update_last = $1
|
||||
AND _upd_sys.update_state = 'PROCESSING'
|
||||
AND _emp_resources.empire_id = _upd_emp.name_id
|
||||
AND _emp_resources.resource_name_id = _pl_resources.resource_name_id;
|
||||
FROM sys.updates _upd_sys
|
||||
INNER JOIN emp.empires_updates _upd_emp
|
||||
USING ( updtgt_id , updtype_id , update_id )
|
||||
INNER JOIN emp.planets _emp_planets
|
||||
ON empire_id = name_id
|
||||
INNER JOIN verse.planet_resources _pl_resources
|
||||
USING ( planet_id )
|
||||
INNER JOIN naming.empire_names _emp_name
|
||||
ON _emp_name.id = _upd_emp.name_id
|
||||
LEFT OUTER JOIN users.vacations _vacation
|
||||
ON _vacation.account_id = _emp_name.owner_id
|
||||
AND _vacation.status = 'PROCESSED'
|
||||
|
||||
WHERE _upd_sys.update_last = $1
|
||||
AND _upd_sys.update_state = 'PROCESSING'
|
||||
) _raw
|
||||
|
||||
WHERE _emp_resources.empire_id = _raw.empire_id
|
||||
AND _emp_resources.resource_name_id = _raw.resource_name_id;
|
||||
|
||||
$process_empire_resources_updates$ LANGUAGE SQL;
|
||||
|
||||
|
|
|
@ -10,9 +10,9 @@ BEGIN;
|
|||
|
||||
/* We need:
|
||||
* - three types of resources,
|
||||
* - two empire with resources records, and the corresponding update
|
||||
* - three empires with resources records, and the corresponding update
|
||||
* record,
|
||||
* - two planets, set to belong to the aforementioned empires, with
|
||||
* - three planets, set to belong to the aforementioned empires, with
|
||||
* resources records attached.
|
||||
*/
|
||||
\i utils/strings.sql
|
||||
|
@ -21,13 +21,14 @@ BEGIN;
|
|||
\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 );
|
||||
SELECT _create_raw_planets( 3 , 'testPlanet' );
|
||||
SELECT _create_emp_names( 3 , 'testEmp' );
|
||||
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;
|
||||
INSERT INTO verse.planet_resources ( planet_id , resource_name_id )
|
||||
SELECT _get_map_name( 'testPlanet3' ) , resource_name_id FROM defs.resources;
|
||||
|
||||
/* Set up the planets' resource records so that:
|
||||
* - income > upkeep for testResource1 ,
|
||||
|
@ -39,20 +40,33 @@ BEGIN;
|
|||
UPDATE verse.planet_resources SET pres_upkeep = 34
|
||||
WHERE resource_name_id = _get_string( 'testResource2' );
|
||||
|
||||
/* Create testEmp1 empire */
|
||||
SELECT emp.create_empire( _get_emp_name( 'testEmp1' ) , _get_map_name( 'testPlanet1' ) , 1 );
|
||||
|
||||
/* Create testEmp2 empire and add a vacation mode entry; also set the vacation.cashDivider constant */
|
||||
SELECT emp.create_empire( _get_emp_name( 'testEmp2' ) , _get_map_name( 'testPlanet2' ) , 1 );
|
||||
ALTER TABLE users.vacations
|
||||
DROP CONSTRAINT fk_vacations_accounts;
|
||||
INSERT INTO users.vacations ( account_id , since , status )
|
||||
SELECT owner_id , now( ) , 'PROCESSED'
|
||||
FROM naming.empire_names
|
||||
WHERE id = _get_emp_name( 'testEmp2' );
|
||||
SELECT sys.uoc_constant( 'vacation.cashDivider' , '(test)' , 'Resources' , 2 );
|
||||
|
||||
/* Make sure update 0 is set to be processed for testEmp1 */
|
||||
UPDATE sys.updates
|
||||
SET update_state = 'PROCESSING' , update_last = 0;
|
||||
|
||||
/* Create testEmp2 empire, make sure it will not be processed */
|
||||
SELECT emp.create_empire( _get_emp_name( 'testEmp2' ) , _get_map_name( 'testPlanet2' ) , 1 );
|
||||
/* Create testEmp3 empire, make sure it will not be processed */
|
||||
SELECT emp.create_empire( _get_emp_name( 'testEmp3' ) , _get_map_name( 'testPlanet3' ) , 1 );
|
||||
UPDATE sys.updates _su
|
||||
SET update_state = 'PROCESSED' , update_last = 0
|
||||
FROM emp.empires_updates _eu
|
||||
WHERE _eu.update_id = _su.update_id
|
||||
AND _eu.name_id = _get_emp_name( 'testEmp2' );
|
||||
AND _eu.name_id = _get_emp_name( 'testEmp3' );
|
||||
|
||||
/****** TESTS BEGIN HERE ******/
|
||||
SELECT plan( 19 );
|
||||
SELECT plan( 31 );
|
||||
|
||||
SELECT sys.process_empire_resources_updates( 10 );
|
||||
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Wrong update identifier (1/6)' );
|
||||
|
@ -75,6 +89,7 @@ BEGIN;
|
|||
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' )
|
||||
|
@ -99,10 +114,36 @@ BEGIN;
|
|||
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 - Resource 1 / Vacation - Possessed quantity increased' );
|
||||
SELECT is( empres_possessed , 6::DOUBLE PRECISION ) FROM emp.resources
|
||||
WHERE resource_name_id = _get_string( 'testResource1' )
|
||||
AND empire_id = _get_emp_name( 'testEmp2' );
|
||||
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Resource 1 / Vacation - 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( 'testEmp2' );
|
||||
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Resource 2 / Vacation - 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( 'testEmp2' );
|
||||
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Resource 2 / Vacation - Owed quantity increased' );
|
||||
SELECT is( empres_owed , 17::DOUBLE PRECISION ) FROM emp.resources
|
||||
WHERE resource_name_id = _get_string( 'testResource2' )
|
||||
AND empire_id = _get_emp_name( 'testEmp2' );
|
||||
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Resource 3 / Vacation - 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( 'testEmp2' );
|
||||
SELECT diag_test_name( 'EMPIRE_RESOURCES update - Resource 3 / Vacation - 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( 'testEmp2' );
|
||||
|
||||
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' );
|
||||
WHERE empire_id = _get_emp_name( 'testEmp3' );
|
||||
|
||||
SELECT * FROM finish( );
|
||||
ROLLBACK;
|
|
@ -4,7 +4,7 @@
|
|||
BEGIN;
|
||||
SELECT plan( 1 );
|
||||
|
||||
SELECT diag_test_name( 'sys.process_empire_resources_updates() - Privileges' );
|
||||
SELECT diag_test_name( 'sys.process_empire_resources_updates() - No EXECUTE privilege' );
|
||||
SELECT throws_ok( 'SELECT sys.process_empire_resources_updates( 1 )' , 42501 );
|
||||
|
||||
SELECT * FROM finish( );
|
||||
|
|
Reference in a new issue