This repository has been archived on 2025-01-04. You can view files and clone it, but cannot push or open issues or pull requests.
lwb6/legacyworlds-server-data/db-structure/tests/admin/050-updates/120-planet-mining/020-process-planet-mining-updates.sql

90 lines
3.1 KiB
MySQL
Raw Permalink Normal View History

/*
* Test the sys.process_planet_mining_updates() function
*/
BEGIN;
/* Disable other update types */
DELETE FROM sys.update_types
WHERE updtype_name <> 'PlanetMining';
/* We need two planets with identicals resource records and resource providers. */
\i utils/strings.sql
\i utils/resources.sql
\i utils/accounts.sql
\i utils/naming.sql
\i utils/universe.sql
SELECT _create_natural_resources( 1 , 'resource' );
SELECT _create_raw_planets( 2 , 'planet' );
INSERT INTO verse.resource_providers (
planet_id , resource_name_id , resprov_quantity_max ,
resprov_quantity , resprov_difficulty , resprov_recovery
) VALUES (
_get_map_name( 'planet1' ) , _get_string( 'resource1' ) , 100 ,
100 , 0.2 , 0.5
) , (
_get_map_name( 'planet2' ) , _get_string( 'resource1' ) , 100 ,
100 , 0.2 , 0.5
);
INSERT INTO verse.planet_resources ( planet_id , resource_name_id , pres_income , pres_upkeep )
SELECT p.name_id , r.resource_name_id , 50 , 0
FROM verse.planets p CROSS JOIN defs.resources r;
/* First planet will be updated, second will not */
UPDATE sys.updates su
SET update_state = 'PROCESSING' , update_last = 0
FROM verse.planets_updates vu
WHERE vu.update_id = su.update_id
AND vu.name_id = _get_map_name( 'planet1' );
UPDATE sys.updates su
SET update_state = 'PROCESSED' , update_last = 0
FROM verse.planets_updates vu
WHERE vu.update_id = su.update_id
AND vu.name_id = _get_map_name( 'planet2' );
/* Replace sys.gu_pmc_get_data() and emp.mining_compute_extraction(); both
* functions will write to temporary tables.
*/
CREATE TABLE _get_data_calls( tick BIGINT );
CREATE OR REPLACE FUNCTION sys.gu_pmc_get_data( _tick BIGINT )
RETURNS SETOF emp.planet_mining_type LANGUAGE SQL
AS $$
INSERT INTO _get_data_calls VALUES ( $1 );
SELECT _get_map_name( 'planet1' ) AS planet ,
_get_string( 'resource1' ) AS resource ,
NULL::DOUBLE PRECISION AS quantity , NULL::DOUBLE PRECISION AS quantity_max ,
NULL::DOUBLE PRECISION AS difficulty , NULL::INT AS empire ,
NULL::REAL AS happiness , NULL::DOUBLE PRECISION AS weight ,
NULL::DOUBLE PRECISION AS total_weight;
$$;
CREATE OR REPLACE FUNCTION emp.mining_compute_extraction( _input emp.planet_mining_type )
RETURNS DOUBLE PRECISION LANGUAGE SQL
AS $$
SELECT 42::DOUBLE PRECISION;
$$;
/***** TESTS BEGIN HERE *****/
SELECT plan( 3 );
SELECT sys.process_planet_mining_updates( 0 );
SELECT diag_test_name( 'sys.process_planet_mining_updates() - Resource providers updated' );
SELECT set_eq(
$$ SELECT planet_id , resprov_quantity FROM verse.resource_providers $$ ,
$$ VALUES ( _get_map_name( 'planet1' ) , 50 ) , ( _get_map_name( 'planet2' ) , 100 ) $$
);
SELECT diag_test_name( 'sys.process_planet_mining_updates() - Planet resources updated' );
SELECT set_eq(
$$ SELECT planet_id , pres_income FROM verse.planet_resources $$ ,
$$ VALUES ( _get_map_name( 'planet1' ) , 42 ) , ( _get_map_name( 'planet2' ) , 50 ) $$
);
SELECT diag_test_name( 'sys.process_planet_mining_updates() - Two calls to gu_pmc_get_data()' );
SELECT is( COUNT(*)::INT , 2 ) FROM _get_data_calls;
SELECT * FROM finish( );
ROLLBACK;