In-game resources views
* Added session records to carry resource information over to the clients * Added SQL support code for the various views * Added interface and implementation of the resource information access component * Hooked resources information queries into both the empire and planet management component * Added resources display to planet and overview pages
This commit is contained in:
parent
56eddcc4f0
commit
597429fadf
45 changed files with 3211 additions and 52 deletions
legacyworlds-server-data/db-structure/tests/admin/040-functions/040-empire
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Tests for emp.planet_resources_view
|
||||
*/
|
||||
BEGIN;
|
||||
/*
|
||||
* Create two empires, one with 2 planets, the other without. Add 2 planet
|
||||
* resources records.
|
||||
*
|
||||
* Disable all foreign keys to avoid a lot of work.
|
||||
*/
|
||||
|
||||
ALTER TABLE emp.planets
|
||||
DROP CONSTRAINT fk_eplanets_empire ,
|
||||
DROP CONSTRAINT fk_eplanets_planet;
|
||||
ALTER TABLE verse.planet_resources
|
||||
DROP CONSTRAINT fk_pres_planet ,
|
||||
DROP CONSTRAINT fk_pres_resource;
|
||||
|
||||
INSERT INTO verse.planet_resources (
|
||||
planet_id , resource_name_id , pres_income , pres_upkeep
|
||||
) VALUES
|
||||
( 1 , 1 , 1 , 2 ) , ( 1 , 2 , 3 , 4 ) ,
|
||||
( 2 , 1 , 3 , 4 ) , ( 2 , 2 , 5 , 6 ) ,
|
||||
( 3 , 1 , 0.1 / 720 , 0.4 / 720 ) ,
|
||||
( 3 , 2 , 0.9 / 720, 0.9 / 720 );
|
||||
INSERT INTO emp.planets( empire_id , planet_id )
|
||||
VALUES ( 1 , 1 ) , ( 1 , 2 ) , ( 2 , 3 );
|
||||
|
||||
|
||||
/***** TESTS BEGIN HERE *****/
|
||||
SELECT plan( 3 );
|
||||
|
||||
SELECT diag_test_name( 'emp.planet_resources_view - Sums' );
|
||||
SELECT set_eq(
|
||||
$$ SELECT * FROM emp.planet_resources_view WHERE empire_id = 1 $$ ,
|
||||
$$ VALUES ( 1 , 1 , 4 * 720 , 6 * 720 ) , ( 1 , 2 , 8 * 720 , 10 * 720 ) $$
|
||||
);
|
||||
|
||||
SELECT diag_test_name( 'emp.planet_resources_view - Incomes are rounded down' );
|
||||
SELECT set_eq(
|
||||
$$ SELECT resource_name_id , planets_income
|
||||
FROM emp.planet_resources_view
|
||||
WHERE empire_id = 2 $$ ,
|
||||
$$ VALUES ( 1 , 0 ) , ( 2 , 0 ) $$
|
||||
);
|
||||
|
||||
SELECT diag_test_name( 'emp.planet_resources_view - Upkeeps are rounded up' );
|
||||
SELECT set_eq(
|
||||
$$ SELECT resource_name_id , planets_upkeep
|
||||
FROM emp.planet_resources_view
|
||||
WHERE empire_id = 2 $$ ,
|
||||
$$ VALUES ( 1 , 1 ) , ( 2 , 1 ) $$
|
||||
);
|
||||
|
||||
SELECT * FROM finish( );
|
||||
ROLLBACK;
|
|
@ -0,0 +1,169 @@
|
|||
/*
|
||||
* Tests for emp.resources_view
|
||||
*/
|
||||
BEGIN;
|
||||
|
||||
/*
|
||||
* We will use a fake emp.planet_resources_view to avoid having to set
|
||||
* planet resources.
|
||||
*
|
||||
* In terms of data, we need two resources (one with a category, the other
|
||||
* without, and two empires (one with "planet resources", the other
|
||||
* without). Both empires will have mining settings for one of the resource
|
||||
* types.
|
||||
*/
|
||||
|
||||
\i utils/strings.sql
|
||||
SELECT _create_test_strings( 2 , 'resource' , 'Resource name ' );
|
||||
SELECT _create_test_strings( 2 , 'rDesc' , 'Resource description ' );
|
||||
SELECT _create_test_strings( 1 , 'rCat' , 'Resource category ' );
|
||||
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id ,
|
||||
resource_category_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( 'resource1' ) , _get_string( 'rDesc1' ) ,
|
||||
_get_string( 'rCat1' ) , 2
|
||||
) , (
|
||||
_get_string( 'resource2' ) , _get_string( 'rDesc2' ) ,
|
||||
NULL , 1
|
||||
);
|
||||
|
||||
\i utils/accounts.sql
|
||||
\i utils/naming.sql
|
||||
SELECT _create_emp_names( 2 , 'emp' );
|
||||
INSERT INTO emp.empires( name_id , cash )
|
||||
SELECT id , 0 FROM naming.empire_names;
|
||||
|
||||
ALTER TABLE emp.mining_settings DROP CONSTRAINT fk_empmset_resource;
|
||||
INSERT INTO emp.mining_settings ( empire_id , resource_name_id , empmset_weight )
|
||||
SELECT id , _get_string( 'resource1' ) , row_number( ) OVER ()
|
||||
FROM naming.empire_names
|
||||
ORDER BY id;
|
||||
|
||||
INSERT INTO emp.resources ( empire_id , resource_name_id , empres_possessed )
|
||||
SELECT name_id , resource_name_id , 0.4 * row_number( ) OVER ()
|
||||
FROM emp.empires
|
||||
CROSS JOIN defs.resources
|
||||
ORDER BY name_id , resource_name_id;
|
||||
|
||||
|
||||
CREATE TABLE fake_planet_resources_view (
|
||||
empire_id INT ,
|
||||
resource_name_id INT ,
|
||||
planets_income BIGINT ,
|
||||
planets_upkeep BIGINT
|
||||
);
|
||||
|
||||
CREATE OR REPLACE VIEW emp.planet_resources_view
|
||||
AS SELECT * FROM fake_planet_resources_view;
|
||||
|
||||
INSERT INTO fake_planet_resources_view
|
||||
VALUES (
|
||||
_get_emp_name( 'emp1' ) , _get_string( 'resource1' ) , 1 , 2
|
||||
) , (
|
||||
_get_emp_name( 'emp1' ) , _get_string( 'resource2' ) , 3 , 4
|
||||
);
|
||||
|
||||
|
||||
/***** TESTS BEGIN HERE *****/
|
||||
SELECT plan( 13 );
|
||||
|
||||
SELECT diag_test_name( 'emp.resources_view - One row per empire/resource combination' );
|
||||
SELECT is( COUNT(*)::INT , 4 ) FROM emp.resources_view;
|
||||
|
||||
SELECT diag_test_name( 'emp.resources_view - Resource ordering' );
|
||||
SELECT set_eq(
|
||||
$$ SELECT resource_identifier , row_number( ) OVER ( )
|
||||
FROM emp.resources_view
|
||||
WHERE empire_id = _get_emp_name( 'emp1' ) $$ ,
|
||||
$$ VALUES ( 'resource2' , 1 ) , ( 'resource1' , 2 ) $$
|
||||
);
|
||||
|
||||
SELECT diag_test_name( 'emp.resources_view - Name translation' );
|
||||
SELECT is_empty( $$
|
||||
SELECT *
|
||||
FROM emp.resources_view
|
||||
WHERE resource_name NOT LIKE 'Resource name %'
|
||||
$$ );
|
||||
|
||||
SELECT diag_test_name( 'emp.resources_view - Description translation' );
|
||||
SELECT is_empty( $$
|
||||
SELECT *
|
||||
FROM emp.resources_view
|
||||
WHERE resource_description NOT LIKE 'Resource description %'
|
||||
$$ );
|
||||
|
||||
SELECT diag_test_name( 'emp.resources_view - Category translation' );
|
||||
SELECT is_empty( $$
|
||||
SELECT *
|
||||
FROM emp.resources_view
|
||||
WHERE resource_identifier = 'resource1'
|
||||
AND resource_category NOT LIKE 'Resource category %'
|
||||
$$ );
|
||||
|
||||
SELECT diag_test_name( 'emp.resources_view - NULL category -> NULL translation' );
|
||||
SELECT is_empty( $$
|
||||
SELECT *
|
||||
FROM emp.resources_view
|
||||
WHERE resource_identifier <> 'resource1'
|
||||
AND resource_category IS NOT NULL
|
||||
$$ );
|
||||
|
||||
SELECT diag_test_name( 'emp.resources_view - Possessed quantities are rounded down' );
|
||||
SELECT set_eq(
|
||||
$$ SELECT empire_id , resource_identifier , empres_possessed
|
||||
FROM emp.resources_view $$ ,
|
||||
$$ VALUES (
|
||||
_get_emp_name( 'emp1' ) , 'resource1' , 0
|
||||
) , (
|
||||
_get_emp_name( 'emp1' ) , 'resource2' , 0
|
||||
) , (
|
||||
_get_emp_name( 'emp2' ) , 'resource1' , 1
|
||||
) , (
|
||||
_get_emp_name( 'emp2' ) , 'resource2' , 1
|
||||
) $$
|
||||
);
|
||||
|
||||
SELECT diag_test_name( 'emp.resources_view - Basic resources have NULL mining settings' );
|
||||
SELECT is( COUNT(*)::INT , 2 )
|
||||
FROM emp.resources_view
|
||||
WHERE resource_identifier = 'resource2'
|
||||
AND empmset_weight IS NULL;
|
||||
|
||||
SELECT diag_test_name( 'emp.resources_view - Mining settings for natural resources' );
|
||||
SELECT set_eq(
|
||||
$$ SELECT empire_id , empmset_weight
|
||||
FROM emp.resources_view
|
||||
WHERE resource_identifier = 'resource1' $$ ,
|
||||
$$ VALUES ( _get_emp_name( 'emp1' ) , 1 ) ,
|
||||
( _get_emp_name( 'emp2' ) , 2 ) $$
|
||||
);
|
||||
SELECT is( COUNT(*)::INT , 2 )
|
||||
FROM emp.resources_view
|
||||
WHERE resource_identifier = 'resource1'
|
||||
AND empmset_weight IS NOT NULL;
|
||||
|
||||
SELECT diag_test_name( 'emp.resources_view - Planet upkeep/income is zero when there are no planets' );
|
||||
SELECT is( COUNT(*)::INT , 2 )
|
||||
FROM emp.resources_view
|
||||
WHERE empire_id = _get_emp_name( 'emp2' )
|
||||
AND planets_upkeep = 0
|
||||
AND planets_income = 0;
|
||||
|
||||
SELECT diag_test_name( 'emp.resources_view - Planet upkeep/income from planet resources view' );
|
||||
SELECT set_eq(
|
||||
$$ SELECT resource_identifier , planets_upkeep , planets_income
|
||||
FROM emp.resources_view
|
||||
WHERE empire_id = _get_emp_name( 'emp1' ) $$ ,
|
||||
$$ VALUES ( 'resource1' , 2 , 1 ) , ( 'resource2' , 4 , 3 ) $$
|
||||
);
|
||||
|
||||
SELECT diag_test_name( 'emp.resources_view - FIXME - Fleets upkeep set to zero' );
|
||||
SELECT is_empty(
|
||||
$$ SELECT * FROM emp.resources_view
|
||||
WHERE fleets_upkeep <> 0 $$
|
||||
);
|
||||
|
||||
SELECT * FROM finish( );
|
||||
ROLLBACK;
|
Reference in a new issue