Resource database structures
* Added structures for resource definitions, natural resources definitions, resource providers, empire resources and empire mining settings (both empire-wide and planet-specific). * Added a few common utility functions to the SQL test suite. These functions allow test initialisation to be a little shorter. * Added "MINE" production type and an associated building definition. The production will not be added to the XML dump or to the output of the planets summary page, as this is extremely temporary.
This commit is contained in:
parent
631f49fb86
commit
4e1bb91780
20 changed files with 2223 additions and 2 deletions
legacyworlds-server-data/db-structure/tests
|
@ -0,0 +1,225 @@
|
|||
/*
|
||||
* Test constraints and foreign keys on defs.resources
|
||||
*/
|
||||
BEGIN;
|
||||
|
||||
/* We need a few strings to be used when creating resource definitions. */
|
||||
\i utils/strings.sql
|
||||
SELECT _create_test_strings( 6 );
|
||||
|
||||
/****** TESTS BEGIN HERE ******/
|
||||
SELECT plan( 17 );
|
||||
|
||||
|
||||
/* Valid resource definition, no category */
|
||||
SELECT diag_test_name( 'Valid resource definition without category' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , _get_string( 'test2' ) , 1
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM defs.resources;
|
||||
|
||||
/* Resource with valid fields, including a category */
|
||||
SELECT diag_test_name( 'Valid resource definition with category' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id ,
|
||||
resource_category_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , _get_string( 'test2' ) ,
|
||||
_get_string( 'test3' ) , 1
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM defs.resources;
|
||||
|
||||
|
||||
/* Resource definition with an invalid name */
|
||||
SELECT diag_test_name( 'Resource definition with an invalid name' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id , resource_weight
|
||||
) VALUES (
|
||||
_get_bad_string( ) , _get_string( 'test2' ) , 1
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
/* Resource definition with a NULL name */
|
||||
SELECT diag_test_name( 'Resource definition with a NULL name' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id , resource_weight
|
||||
) VALUES (
|
||||
NULL , _get_string( 'test2' ) , 1
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
/* Resource definition with an invalid description */
|
||||
SELECT diag_test_name( 'Resource definition with an invalid description' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , _get_bad_string( ) , 1
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
/* Resource definition with a NULL description */
|
||||
SELECT diag_test_name( 'Resource definition with a NULL description' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , NULL , 1
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
/* Resource definition with an invalid category */
|
||||
SELECT diag_test_name( 'Resource definition with an invalid category' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id ,
|
||||
resource_category_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , _get_string( 'test2' ) ,
|
||||
_get_bad_string( ) , 1
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
/* Resource definition with an invalid weight */
|
||||
SELECT diag_test_name( 'Resource definition with an invalid weight' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , _get_string( 'test2' ) , 0
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
/* Resource definition with a NULL weight */
|
||||
SELECT diag_test_name( 'Resource definition with a NULL weight' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , _get_string( 'test2' ) , NULL
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
/* Resource definitions using the same name */
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , _get_string( 'test2' ) , 1
|
||||
);
|
||||
SELECT diag_test_name( 'Resource definitions using the same name' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , _get_string( 'test3' ) , 1
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23505 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
/* Resource definitions using the same description */
|
||||
SELECT diag_test_name( 'Resource definitions using the same description' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( 'test3' ) , _get_string( 'test2' ) , 1
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23505 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
/* Resources with distinct names and descriptions */
|
||||
SELECT diag_test_name( 'Resources with distinct names and descriptions' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( 'test3' ) , _get_string( 'test4' ) , 1
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM defs.resources;
|
||||
|
||||
|
||||
/* Resources with distinct categories */
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id ,
|
||||
resource_category_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , _get_string( 'test2' ) ,
|
||||
_get_string( 'test3' ) , 1
|
||||
);
|
||||
SELECT diag_test_name( 'Resources with distinct categories' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id ,
|
||||
resource_category_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( 'test4' ) , _get_string( 'test5' ) ,
|
||||
_get_string( 'test6' ) , 1
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM defs.resources WHERE resource_name_id = _get_string( 'test4' );
|
||||
|
||||
/* Resources in the same category */
|
||||
SELECT diag_test_name( 'Resources in the same category' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id ,
|
||||
resource_category_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( 'test4' ) , _get_string( 'test5' ) ,
|
||||
_get_string( 'test3' ) , 1
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
/* Resource definition name deletion impossible */
|
||||
SELECT diag_test_name( 'Resource definition name deletion impossible' );
|
||||
PREPARE _test_this AS
|
||||
DELETE FROM defs.strings WHERE id = _get_string( 'test1' );
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
/* Resource definition description deletion impossible */
|
||||
SELECT diag_test_name( 'Resource definition description deletion impossible' );
|
||||
PREPARE _test_this AS
|
||||
DELETE FROM defs.strings WHERE id = _get_string( 'test2' );
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
/*
|
||||
* 17/ Make sure it is impossible to delete a string definition used as
|
||||
* a resource category
|
||||
*/
|
||||
SELECT diag_test_name( 'Resource definition description deletion impossible' );
|
||||
PREPARE _test_this AS
|
||||
DELETE FROM defs.strings WHERE id = _get_string( 'test3' );
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT * FROM finish( );
|
||||
ROLLBACK;
|
|
@ -0,0 +1,474 @@
|
|||
/*
|
||||
* Test constraints and foreign keys on defs.natural_resources
|
||||
*/
|
||||
BEGIN;
|
||||
|
||||
/* We need a few strings to be used when creating resource definitions. */
|
||||
\i utils/strings.sql
|
||||
SELECT _create_test_strings( 4 );
|
||||
|
||||
/*
|
||||
* We need a a pair of resource definitions to be used when creating
|
||||
* natural resources.
|
||||
*/
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id , resource_weight
|
||||
) VALUES ( _get_string( 'test1' ) , _get_string( 'test2' ) , 1 );
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id , resource_weight
|
||||
) VALUES ( _get_string( 'test3' ) , _get_string( 'test4' ) , 2 );
|
||||
|
||||
|
||||
/****** TESTS BEGIN HERE ******/
|
||||
SELECT plan( 33 );
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Valid natural resource definition' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources (
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0.5 , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
|
||||
SELECT diag_test_name( 'Duplicate natural resource definition' );
|
||||
SELECT throws_ok( '_test_this' , 23505 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Distinct natural resource definitions' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources (
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test3' ) , 0.5 , 100 , 1 , 0.5 , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM defs.natural_resources;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with missing resource definition' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test2' ) , 0.5 , 100 , 1 , 0.5 , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with NULL resource definition' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
NULL , 0.5 , 100 , 1 , 0.5 , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with presence probability <= 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0 , 100 , 1 , 0.5 , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with presence probability >= 1' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 1 , 100 , 1 , 0.5 , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with NULL presence probability' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , NULL , 100 , 1 , 0.5 , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with avg. quantity <= 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 0 , 1 , 0.5 , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with NULL avg. quantity' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , NULL , 1 , 0.5 , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with quantity dev. < 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , -1 , 0.5 , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with NULL quantity dev.' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , NULL , 0.5 , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with quantity dev. = avg. quantity' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 100 , 0.5 , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with quantity dev. = 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 0 , 0.5 , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM defs.natural_resources;
|
||||
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with avg. difficulty = 1' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 1 , 0 , 0.5 , 0.05
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM defs.natural_resources;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with avg. difficulty = 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0 , 0 , 0.5 , 0.05
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM defs.natural_resources;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with avg. difficulty > 1' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 1.0001 , 0 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with avg. difficulty < 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , -0.0001 , 0 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with NULL avg. difficulty' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , NULL , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with difficulty dev. < 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0.5 , -1 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with avg. difficulty - difficulty dev. < 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0.25 , 0.5 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with difficulty dev. + avg. difficulty > 1' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0.75 , 0.5 , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with NULL difficulty dev.' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0.5 , NULL , 0.5 , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with avg. recovery = 1' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0.5 , 0.05 ,
|
||||
1 , 0
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM defs.natural_resources;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with avg. recovery = 0+' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0.5 , 0.05 ,
|
||||
0.0001 , 0
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM defs.natural_resources;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with avg. recovery > 1' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0.5 , 0.05 ,
|
||||
1.1 , 0
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with avg. recovery <= 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0.5 , 0.05 ,
|
||||
0 , 0
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with NULL avg. recovery' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0.5 , 0.05 ,
|
||||
NULL , 0.05
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with recovery dev. < 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0.5 , 0.05 ,
|
||||
0.5 , -1
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with avg.recovery - recovery dev. <= 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0.5 , 0.05 ,
|
||||
0.5 , 0.5
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with avg.recovery - recovery dev. > 1' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0.5 , 0.05 ,
|
||||
0.75 , 0.5
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Natural resource definition with NULL recovery dev.' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0.5 , 0.05 ,
|
||||
0.5 , NULL
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Deletion of the base definition for a natural resource' );
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( 'test1' ) , 0.5 , 100 , 1 , 0.5 , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
PREPARE _test_this AS
|
||||
DELETE FROM defs.resources WHERE resource_name_id = _get_string( 'test1' );
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
|
||||
SELECT * FROM finish( );
|
||||
ROLLBACK;
|
|
@ -0,0 +1,331 @@
|
|||
/*
|
||||
* Test constraints and foreign keys on verse.resource_providers
|
||||
*/
|
||||
BEGIN;
|
||||
|
||||
/* We need a pair of resource definitions and a pair of planets. */
|
||||
\i utils/strings.sql
|
||||
\i utils/resources.sql
|
||||
\i utils/accounts.sql
|
||||
\i utils/naming.sql
|
||||
\i utils/universe.sql
|
||||
SELECT _create_natural_resources( 2 , 'testResource' );
|
||||
SELECT _create_raw_planets( 2 , 'testPlanet' );
|
||||
|
||||
|
||||
/****** TESTS BEGIN HERE ******/
|
||||
SELECT plan( 22 );
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Valid resource provider' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||
100 , 50 ,
|
||||
0.5 , 0.5
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
|
||||
SELECT diag_test_name( 'Duplicate resource provider' );
|
||||
SELECT throws_ok( '_test_this' , 23505 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with same planet but different type' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource2' ) ,
|
||||
100 , 50 ,
|
||||
0.5 , 0.5
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with same type but different planet' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet2' ) , _get_string( 'testResource1' ) ,
|
||||
100 , 50 ,
|
||||
0.5 , 0.5
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM verse.resource_providers;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with NULL planet identifier' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
NULL , _get_string( 'testResource1' ) ,
|
||||
100 , 50 ,
|
||||
0.5 , 0.5
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with invalid planet identifier' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_bad_map_name( ) , _get_string( 'testResource1' ) ,
|
||||
100 , 50 ,
|
||||
0.5 , 0.5
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with NULL resource identifier' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , NULL ,
|
||||
100 , 50 ,
|
||||
0.5 , 0.5
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with invalid resource identifier' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_bad_string( ) ,
|
||||
100 , 50 ,
|
||||
0.5 , 0.5
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with NULL maximal quantity' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||
NULL , 50 ,
|
||||
0.5 , 0.5
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with maximal quantity <= 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||
0 , 0 ,
|
||||
0.5 , 0.5
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with NULL quantity' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||
100 , NULL ,
|
||||
0.5 , 0.5
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with quantity < 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||
100 , -1 ,
|
||||
0.5 , 0.5
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with quantity > max. quantity' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||
100 , 101 ,
|
||||
0.5 , 0.5
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with NULL difficulty' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||
100 , 50 ,
|
||||
NULL , 0.5
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with difficulty < 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||
100 , 50 ,
|
||||
-0.5 , 0.5
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with difficulty > 1' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||
100 , 50 ,
|
||||
1.5 , 0.5
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with difficulty = 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||
100 , 50 ,
|
||||
0 , 0.5
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM verse.resource_providers;
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with difficulty = 1' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||
100 , 50 ,
|
||||
1 , 0.5
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM verse.resource_providers;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with NULL recovery' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||
100 , 50 ,
|
||||
0.5 , NULL
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with recovery = 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||
100 , 50 ,
|
||||
0.5 , 0
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with recovery > 1' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||
100 , 50 ,
|
||||
0.5 , 1.5
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Resource provider with recovery = 1' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( 'testPlanet1' ) , _get_string( 'testResource1' ) ,
|
||||
100 , 50 ,
|
||||
0.5 , 1
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM verse.resource_providers;
|
||||
|
||||
|
||||
SELECT * FROM finish( );
|
||||
ROLLBACK;
|
|
@ -0,0 +1,191 @@
|
|||
/*
|
||||
* Test constraints and foreign keys on emp.resources
|
||||
*/
|
||||
BEGIN;
|
||||
|
||||
/* We need to create a pair of resources and a pair of empires */
|
||||
\i utils/strings.sql
|
||||
\i utils/resources.sql
|
||||
\i utils/accounts.sql
|
||||
\i utils/naming.sql
|
||||
SELECT _create_natural_resources( 2 , 'testResource' );
|
||||
SELECT _create_emp_names( 2 , 'testUser' );
|
||||
INSERT INTO emp.empires ( name_id , cash )
|
||||
SELECT id , 0 FROM naming.empire_names;
|
||||
|
||||
|
||||
|
||||
/****** TESTS BEGIN HERE ******/
|
||||
SELECT plan( 16 );
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Valid empire resources record' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.resources (
|
||||
empire_id , resource_name_id , empres_possessed , empres_owed
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_string( 'testResource1' ) ,
|
||||
1 , 1
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DELETE FROM emp.resources;
|
||||
DEALLOCATE ALL;
|
||||
|
||||
INSERT INTO emp.resources (
|
||||
empire_id , resource_name_id
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_string( 'testResource1' )
|
||||
);
|
||||
SELECT diag_test_name( 'Default possessed value in empire resources record' );
|
||||
SELECT results_eq(
|
||||
$$ SELECT empres_possessed FROM emp.resources $$ ,
|
||||
$$ VALUES ( 0::DOUBLE PRECISION ) $$
|
||||
);
|
||||
SELECT diag_test_name( 'Default owed value in empire resources record' );
|
||||
SELECT results_eq(
|
||||
$$ SELECT empres_owed FROM emp.resources $$ ,
|
||||
$$ VALUES ( 0::DOUBLE PRECISION ) $$
|
||||
);
|
||||
DELETE FROM emp.resources;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'NULL empire identifier in empire resources record' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.resources (
|
||||
empire_id , resource_name_id , empres_possessed , empres_owed
|
||||
) VALUES (
|
||||
NULL , _get_string( 'testResource1' ) ,
|
||||
1 , 1
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Invalid empire identifier in empire resources record' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.resources (
|
||||
empire_id , resource_name_id , empres_possessed , empres_owed
|
||||
) VALUES (
|
||||
_get_bad_emp_name( ) , _get_string( 'testResource1' ) ,
|
||||
1 , 1
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'NULL resource identifier in empire resources record' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.resources (
|
||||
empire_id , resource_name_id , empres_possessed , empres_owed
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , NULL ,
|
||||
1 , 1
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Invalid resource identifier in empire resources record' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.resources (
|
||||
empire_id , resource_name_id , empres_possessed , empres_owed
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_bad_string( ) ,
|
||||
1 , 1
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Duplicate empire resources record' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.resources (
|
||||
empire_id , resource_name_id , empres_possessed , empres_owed
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_string( 'testResource1' ) ,
|
||||
1 , 1
|
||||
);
|
||||
EXECUTE _test_this;
|
||||
SELECT throws_ok( '_test_this' , 23505 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Empire resources record with same empire but different types of resources' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.resources (
|
||||
empire_id , resource_name_id , empres_possessed , empres_owed
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_string( 'testResource2' ) ,
|
||||
1 , 1
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Empire resources record with different empires but same type of resources' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.resources (
|
||||
empire_id , resource_name_id , empres_possessed , empres_owed
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser2' ) , _get_string( 'testResource1' ) ,
|
||||
1 , 1
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM emp.resources;
|
||||
|
||||
|
||||
INSERT INTO emp.resources (
|
||||
empire_id , resource_name_id
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser2' ) , _get_string( 'testResource1' )
|
||||
);
|
||||
SELECT diag_test_name( 'Empire deletion succeeds when empire resources records are present' );
|
||||
PREPARE _test_this AS
|
||||
DELETE FROM emp.empires WHERE name_id = _get_emp_name( 'testUser2' );
|
||||
SELECT lives_ok( '_test_this' );
|
||||
SELECT diag_test_name( 'Empire deletion causes empire resources record deletion' );
|
||||
SELECT is_empty( 'SELECT * FROM emp.resources' );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.resources (
|
||||
empire_id , resource_name_id , empres_possessed
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_string( 'testResource1' ) , NULL
|
||||
);
|
||||
SELECT diag_test_name( 'NULL possessed value in empire resources record' );
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.resources (
|
||||
empire_id , resource_name_id , empres_possessed
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_string( 'testResource1' ) , -1
|
||||
);
|
||||
SELECT diag_test_name( 'Negative possessed value in empire resources record' );
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.resources (
|
||||
empire_id , resource_name_id , empres_owed
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_string( 'testResource1' ) , NULL
|
||||
);
|
||||
SELECT diag_test_name( 'NULL owed value in empire resources record' );
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.resources (
|
||||
empire_id , resource_name_id , empres_owed
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_string( 'testResource1' ) , -1
|
||||
);
|
||||
SELECT diag_test_name( 'Negative owed value in empire resources record' );
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT * FROM finish( );
|
||||
ROLLBACK;
|
|
@ -0,0 +1,119 @@
|
|||
/*
|
||||
* Test constraints and foreign keys on emp.mining_settings
|
||||
*/
|
||||
BEGIN;
|
||||
|
||||
/* We need to create a pair of resources and a pair of empires */
|
||||
\i utils/strings.sql
|
||||
\i utils/resources.sql
|
||||
\i utils/accounts.sql
|
||||
\i utils/naming.sql
|
||||
SELECT _create_natural_resources( 2 , 'testResource' );
|
||||
SELECT _create_emp_names( 2 , 'testUser' );
|
||||
INSERT INTO emp.empires ( name_id , cash )
|
||||
SELECT id , 0 FROM naming.empire_names;
|
||||
|
||||
/****** TESTS BEGIN HERE ******/
|
||||
SELECT plan( 10 );
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Valid empire mining settings record' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.mining_settings(
|
||||
empire_id , resource_name_id , empmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_string( 'testResource1' ) , 0
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
|
||||
SELECT diag_test_name( 'Duplicate empire mining settings record' );
|
||||
SELECT throws_ok( '_test_this' , 23505 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Empire mining settings records with same empire but different types' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.mining_settings(
|
||||
empire_id , resource_name_id , empmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_string( 'testResource2' ) , 0
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Empire mining settings records with same type but different empires' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.mining_settings(
|
||||
empire_id , resource_name_id , empmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser2' ) , _get_string( 'testResource1' ) , 0
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM emp.mining_settings;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Empire mining settings record with NULL empire identifier' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.mining_settings(
|
||||
empire_id , resource_name_id , empmset_weight
|
||||
) VALUES (
|
||||
NULL , _get_string( 'testResource1' ) , 0
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Empire mining settings record with invalid empire identifier' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.mining_settings(
|
||||
empire_id , resource_name_id , empmset_weight
|
||||
) VALUES (
|
||||
_get_bad_emp_name( ) , _get_string( 'testResource1' ) , 0
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Empire mining settings record with NULL resource identifier' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.mining_settings(
|
||||
empire_id , resource_name_id , empmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , NULL , 0
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Empire mining settings record with invalid resource identifier' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.mining_settings(
|
||||
empire_id , resource_name_id , empmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_bad_string( ) , 0
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Empire mining settings record with NULL weight' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.mining_settings(
|
||||
empire_id , resource_name_id , empmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_string( 'testResource1' ) , NULL
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Empire mining settings record with weight < 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.mining_settings(
|
||||
empire_id , resource_name_id , empmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_string( 'testResource1' ) , -1
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT * FROM finish( );
|
||||
ROLLBACK;
|
|
@ -0,0 +1,193 @@
|
|||
/*
|
||||
* Test constraints and foreign keys on emp.mining_settings
|
||||
*/
|
||||
BEGIN;
|
||||
|
||||
/* We need to create a pair of resources, a pair of empires, a pair of planets, 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( 2 , 'testResource' );
|
||||
SELECT _create_emp_names( 2 , 'testUser' );
|
||||
INSERT INTO emp.empires ( name_id , cash )
|
||||
SELECT id , 0 FROM naming.empire_names;
|
||||
SELECT _create_raw_planets( 2 , 'testPlanet' );
|
||||
SELECT _create_resource_provider( 'testPlanet1' , 'testResource1' );
|
||||
SELECT _create_resource_provider( 'testPlanet1' , 'testResource2' );
|
||||
SELECT _create_resource_provider( 'testPlanet2' , 'testResource1' );
|
||||
-- No provider for testResource2 on testPlanet2
|
||||
|
||||
/****** TESTS BEGIN HERE ******/
|
||||
SELECT plan( 14 );
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Valid empire planet mining settings record' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.planet_mining_settings(
|
||||
empire_id , planet_id ,
|
||||
resource_name_id , emppmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_map_name( 'testPlanet1' ) ,
|
||||
_get_string( 'testResource1' ) , 0
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
|
||||
SELECT diag_test_name( 'Duplicate empire planet mining settings record' );
|
||||
SELECT throws_ok( '_test_this' , 23505 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Empire planet mining settings records with different types' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.planet_mining_settings(
|
||||
empire_id , planet_id ,
|
||||
resource_name_id , emppmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_map_name( 'testPlanet1' ) ,
|
||||
_get_string( 'testResource2' ) , 0
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Empire planet mining settings records with different empires' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.planet_mining_settings(
|
||||
empire_id , planet_id ,
|
||||
resource_name_id , emppmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser2' ) , _get_map_name( 'testPlanet1' ) ,
|
||||
_get_string( 'testResource1' ) , 0
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Empire planet mining settings records with different planets' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.planet_mining_settings(
|
||||
empire_id , planet_id ,
|
||||
resource_name_id , emppmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_map_name( 'testPlanet2' ) ,
|
||||
_get_string( 'testResource1' ) , 0
|
||||
);
|
||||
SELECT lives_ok( '_test_this' );
|
||||
DEALLOCATE ALL;
|
||||
DELETE FROM emp.mining_settings;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Empire planet mining setting record with NULL empire identifier' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.planet_mining_settings(
|
||||
empire_id , planet_id ,
|
||||
resource_name_id , emppmset_weight
|
||||
) VALUES (
|
||||
NULL , _get_map_name( 'testPlanet2' ) ,
|
||||
_get_string( 'testResource1' ) , 0
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Empire planet mining setting record with invalid empire identifier' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.planet_mining_settings(
|
||||
empire_id , planet_id ,
|
||||
resource_name_id , emppmset_weight
|
||||
) VALUES (
|
||||
_get_bad_emp_name( ) , _get_map_name( 'testPlanet2' ) ,
|
||||
_get_string( 'testResource1' ) , 0
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Empire planet mining setting record with NULL planet identifier' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.planet_mining_settings(
|
||||
empire_id , planet_id ,
|
||||
resource_name_id , emppmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , NULL ,
|
||||
_get_string( 'testResource1' ) , 0
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Empire planet mining setting record with invalid planet identifier' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.planet_mining_settings(
|
||||
empire_id , planet_id ,
|
||||
resource_name_id , emppmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_bad_map_name( ) ,
|
||||
_get_string( 'testResource1' ) , 0
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Empire planet mining setting record with NULL resource identifier' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.planet_mining_settings(
|
||||
empire_id , planet_id ,
|
||||
resource_name_id , emppmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_map_name( 'testPlanet2' ) ,
|
||||
NULL , 0
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Empire planet mining setting record with invalid resource identifier' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.planet_mining_settings(
|
||||
empire_id , planet_id ,
|
||||
resource_name_id , emppmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_map_name( 'testPlanet2' ) ,
|
||||
_get_bad_string( ) , 0
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Empire planet mining setting record with invalid resource provider identifier' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.planet_mining_settings(
|
||||
empire_id , planet_id ,
|
||||
resource_name_id , emppmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_map_name( 'testPlanet2' ) ,
|
||||
_get_string( 'testResource2' ) , 0
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23503 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT diag_test_name( 'Empire planet mining setting record with NULL weight' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.planet_mining_settings(
|
||||
empire_id , planet_id ,
|
||||
resource_name_id , emppmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_map_name( 'testPlanet1' ) ,
|
||||
_get_string( 'testResource1' ) , NULL
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23502 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
SELECT diag_test_name( 'Empire planet mining setting record with weight < 0' );
|
||||
PREPARE _test_this AS
|
||||
INSERT INTO emp.planet_mining_settings(
|
||||
empire_id , planet_id ,
|
||||
resource_name_id , emppmset_weight
|
||||
) VALUES (
|
||||
_get_emp_name( 'testUser1' ) , _get_map_name( 'testPlanet1' ) ,
|
||||
_get_string( 'testResource1' ) , -1
|
||||
);
|
||||
SELECT throws_ok( '_test_this' , 23514 );
|
||||
DEALLOCATE ALL;
|
||||
|
||||
|
||||
SELECT * FROM finish( );
|
||||
ROLLBACK;
|
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* Utility functions used by unit tests
|
||||
*
|
||||
* User accounts
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Find a test address
|
||||
*/
|
||||
CREATE FUNCTION _find_address( TEXT ) RETURNS INT AS $$
|
||||
SELECT id FROM users.addresses WHERE address = $1 || '@example.org';
|
||||
$$ LANGUAGE SQL;
|
||||
|
||||
|
||||
/*
|
||||
* Create a set of user addresses using some prefix
|
||||
*/
|
||||
CREATE FUNCTION _create_addresses( _quantity INT , _prefix TEXT )
|
||||
RETURNS VOID
|
||||
AS $$
|
||||
DECLARE
|
||||
i INT;
|
||||
BEGIN
|
||||
i := 0;
|
||||
WHILE i < _quantity
|
||||
LOOP
|
||||
i := i + 1;
|
||||
BEGIN
|
||||
INSERT INTO users.addresses ( address )
|
||||
VALUES ( _prefix || i::TEXT || '@example.org' );
|
||||
EXCEPTION
|
||||
WHEN unique_violation THEN
|
||||
-- Address already exists, that's nice
|
||||
END;
|
||||
END LOOP;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
|
||||
/*
|
||||
* Create a set of user accounts
|
||||
*/
|
||||
CREATE FUNCTION _create_accounts( _quantity INT , _prefix TEXT )
|
||||
RETURNS VOID
|
||||
AS $$
|
||||
DECLARE
|
||||
i INT;
|
||||
BEGIN
|
||||
PERFORM _create_test_strings( 0 );
|
||||
PERFORM _create_addresses( _quantity , _prefix );
|
||||
i := 0;
|
||||
WHILE i < _quantity
|
||||
LOOP
|
||||
i := i + 1;
|
||||
BEGIN
|
||||
INSERT INTO users.credentials (
|
||||
address_id , pass_md5 , pass_sha1 , language_id , credits
|
||||
) VALUES (
|
||||
_find_address( _prefix || i::TEXT ) , '' , '' , _get_language( 't' ) , 0
|
||||
);
|
||||
EXCEPTION
|
||||
WHEN unique_violation THEN
|
||||
-- Account already exists
|
||||
END;
|
||||
END LOOP;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
93
legacyworlds-server-data/db-structure/tests/utils/naming.sql
Normal file
93
legacyworlds-server-data/db-structure/tests/utils/naming.sql
Normal file
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* Utility functions used by unit tests
|
||||
*
|
||||
* Naming system
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Obtain a map name identifier
|
||||
*/
|
||||
CREATE FUNCTION _get_map_name( TEXT ) RETURNS INT AS $$
|
||||
SELECT id FROM naming.map_names WHERE name = $1;
|
||||
$$ LANGUAGE SQL;
|
||||
|
||||
|
||||
/*
|
||||
* Obtain a map name identifier that does not exist
|
||||
*/
|
||||
CREATE FUNCTION _get_bad_map_name( ) RETURNS INT AS $$
|
||||
SELECT MAX( id ) + 1 FROM naming.map_names;
|
||||
$$ LANGUAGE SQL;
|
||||
|
||||
|
||||
/*
|
||||
* Create a few map names using a prefix
|
||||
*/
|
||||
CREATE FUNCTION _create_map_names( _quantity INT , _prefix TEXT )
|
||||
RETURNS VOID
|
||||
AS $$
|
||||
DECLARE
|
||||
i INT;
|
||||
BEGIN
|
||||
i := 0;
|
||||
WHILE i < _quantity
|
||||
LOOP
|
||||
i := i + 1;
|
||||
BEGIN
|
||||
INSERT INTO naming.map_names (name) VALUES ( _prefix || i::TEXT );
|
||||
EXCEPTION
|
||||
WHEN unique_violation THEN
|
||||
-- Ignore the error
|
||||
END;
|
||||
END LOOP;
|
||||
END;
|
||||
$$ LANGUAGE PLPGSQL;
|
||||
|
||||
|
||||
/*
|
||||
* Get the empire that belongs to some user, based on that user's email
|
||||
*/
|
||||
CREATE FUNCTION _get_emp_name( TEXT ) RETURNS INT AS $$
|
||||
SELECT id FROM naming.empire_names WHERE owner_id = _find_address( $1 );
|
||||
$$ LANGUAGE SQL;
|
||||
|
||||
|
||||
/*
|
||||
* Obtain a map name identifier that does not exist
|
||||
*/
|
||||
CREATE FUNCTION _get_bad_emp_name( ) RETURNS INT AS $$
|
||||
SELECT MAX( id ) + 1 FROM naming.empire_names;
|
||||
$$ LANGUAGE SQL;
|
||||
|
||||
|
||||
/*
|
||||
* Create a few empire names using a prefix for user accounts.
|
||||
* Empires are named "testX" independently of the user accounts.
|
||||
*/
|
||||
CREATE FUNCTION _create_emp_names( _quantity INT , _prefix TEXT )
|
||||
RETURNS VOID
|
||||
AS $$
|
||||
DECLARE
|
||||
i INT;
|
||||
j INT;
|
||||
BEGIN
|
||||
PERFORM _create_accounts( _quantity , _prefix );
|
||||
i := 0;
|
||||
WHILE i < _quantity
|
||||
LOOP
|
||||
i := i + 1;
|
||||
j := 0;
|
||||
LOOP
|
||||
BEGIN
|
||||
INSERT INTO naming.empire_names ( owner_id , name )
|
||||
VALUES ( _find_address( _prefix || i::TEXT ) , 'test' || j::TEXT );
|
||||
EXIT;
|
||||
EXCEPTION
|
||||
WHEN unique_violation THEN
|
||||
j := j + 1;
|
||||
END;
|
||||
END LOOP;
|
||||
END LOOP;
|
||||
END;
|
||||
$$ LANGUAGE PLPGSQL;
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* Utility functions used by unit tests
|
||||
*
|
||||
* Resources and natural resources
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Function that creates some quantity of resources
|
||||
* All resources are created using the specified prefix for the strings
|
||||
*/
|
||||
CREATE FUNCTION _create_resources( _quantity INT , _prefix TEXT )
|
||||
RETURNS VOID
|
||||
AS $$
|
||||
DECLARE
|
||||
i INT;
|
||||
BEGIN
|
||||
PERFORM _create_test_strings( _quantity , _prefix );
|
||||
PERFORM _create_test_strings( _quantity , _prefix || 'Description' );
|
||||
|
||||
i := 0;
|
||||
WHILE i < _quantity
|
||||
LOOP
|
||||
i := i + 1;
|
||||
INSERT INTO defs.resources (
|
||||
resource_name_id , resource_description_id , resource_weight
|
||||
) VALUES (
|
||||
_get_string( _prefix || i::TEXT ) ,
|
||||
_get_string( _prefix || 'Description' || i::TEXT ) ,
|
||||
i
|
||||
);
|
||||
END LOOP;
|
||||
END;
|
||||
$$ LANGUAGE PLPGSQL;
|
||||
|
||||
|
||||
/*
|
||||
* Function that creates some quantity of /natural/ resources
|
||||
* All resources are created using the specified prefix for the strings
|
||||
*/
|
||||
CREATE FUNCTION _create_natural_resources( _quantity INT , _prefix TEXT )
|
||||
RETURNS VOID
|
||||
AS $$
|
||||
DECLARE
|
||||
i INT;
|
||||
BEGIN
|
||||
PERFORM _create_resources( _quantity , _prefix );
|
||||
|
||||
i := 0;
|
||||
WHILE i < _quantity
|
||||
LOOP
|
||||
i := i + 1;
|
||||
INSERT INTO defs.natural_resources(
|
||||
resource_name_id , natres_p_presence , natres_quantity_avg ,
|
||||
natres_quantity_dev , natres_difficulty_avg ,
|
||||
natres_difficulty_dev , natres_recovery_avg ,
|
||||
natres_recovery_dev
|
||||
) VALUES (
|
||||
_get_string( _prefix || i::TEXT ) , 0.5 , 100 , 1 , 0.5 , 0.05 , 0.5 , 0.05
|
||||
);
|
||||
END LOOP;
|
||||
END;
|
||||
$$ LANGUAGE PLPGSQL;
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* Utility functions used by unit tests
|
||||
*
|
||||
* I18N string creation and access
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Function that returns an invalid string identifier.
|
||||
*/
|
||||
CREATE FUNCTION _get_bad_string( ) RETURNS INT AS $$
|
||||
SELECT MAX( id ) + 1 FROM defs.strings;
|
||||
$$ LANGUAGE SQL;
|
||||
|
||||
|
||||
/*
|
||||
* Function that returns a language's identifier
|
||||
*/
|
||||
CREATE FUNCTION _get_language( TEXT ) RETURNS INT AS $$
|
||||
SELECT id FROM defs.languages WHERE language = $1;
|
||||
$$ LANGUAGE SQL;
|
||||
|
||||
|
||||
/*
|
||||
* Function that returns a string's identifier
|
||||
*/
|
||||
CREATE FUNCTION _get_string( TEXT ) RETURNS INT AS $$
|
||||
SELECT id FROM defs.strings WHERE name = $1;
|
||||
$$ LANGUAGE SQL;
|
||||
|
||||
|
||||
/*
|
||||
* Function that creates some quantity of test strings
|
||||
*/
|
||||
CREATE FUNCTION _create_test_strings( _quantity INT )
|
||||
RETURNS VOID
|
||||
AS $$
|
||||
DECLARE
|
||||
i INT;
|
||||
BEGIN
|
||||
PERFORM _create_test_strings( _quantity , 'test' );
|
||||
END;
|
||||
$$ LANGUAGE PLPGSQL;
|
||||
|
||||
|
||||
/*
|
||||
* Function that creates some quantity of test strings using a specific prefix
|
||||
*/
|
||||
CREATE FUNCTION _create_test_strings( _quantity INT , _prefix TEXT )
|
||||
RETURNS VOID
|
||||
AS $$
|
||||
DECLARE
|
||||
i INT;
|
||||
BEGIN
|
||||
PERFORM defs.uoc_language( 't' , 'Test' );
|
||||
|
||||
i := 0;
|
||||
WHILE i < _quantity
|
||||
LOOP
|
||||
i := i + 1;
|
||||
PERFORM defs.uoc_translation( 't' , _prefix || i::TEXT ,
|
||||
'Test string #' || i::TEXT );
|
||||
END LOOP;
|
||||
END;
|
||||
$$ LANGUAGE PLPGSQL;
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
* Utility functions used by unit tests
|
||||
*
|
||||
* Universe
|
||||
*/
|
||||
|
||||
/*
|
||||
* Create a new system at some coordinates and return its identifier
|
||||
*/
|
||||
CREATE FUNCTION _create_system( INT , INT ) RETURNS INT AS $$
|
||||
INSERT INTO verse.systems ( x , y )
|
||||
VALUES ( $1 , $2 )
|
||||
RETURNING id;
|
||||
$$ LANGUAGE SQL;
|
||||
|
||||
|
||||
/*
|
||||
* Create "raw" planets
|
||||
*/
|
||||
CREATE FUNCTION _create_raw_planets( _quantity INT , _prefix TEXT )
|
||||
RETURNS VOID
|
||||
AS $$
|
||||
DECLARE
|
||||
_system INT;
|
||||
_orbit INT;
|
||||
i INT;
|
||||
BEGIN
|
||||
PERFORM _create_map_names( _quantity , _prefix );
|
||||
|
||||
i := 0;
|
||||
WHILE i < _quantity
|
||||
LOOP
|
||||
i := i + 1;
|
||||
|
||||
IF _system IS NULL
|
||||
THEN
|
||||
_system := _create_system( i , i );
|
||||
_orbit := 1;
|
||||
END IF;
|
||||
|
||||
INSERT INTO verse.planets(
|
||||
name_id , system_id , orbit , picture , population
|
||||
) VALUES (
|
||||
_get_map_name( _prefix || i::TEXT ) , _system , _orbit , 1 , 1
|
||||
);
|
||||
|
||||
IF _orbit = 5
|
||||
THEN
|
||||
_system := NULL;
|
||||
ELSE
|
||||
_orbit := _orbit + 1;
|
||||
END IF;
|
||||
END LOOP;
|
||||
END;
|
||||
$$ LANGUAGE PLPGSQL;
|
||||
|
||||
|
||||
/*
|
||||
* Create a resource provider
|
||||
*/
|
||||
CREATE FUNCTION _create_resource_provider( TEXT , TEXT ) RETURNS VOID AS $$
|
||||
INSERT INTO verse.resource_providers(
|
||||
planet_id , resource_name_id ,
|
||||
resprov_quantity_max , resprov_quantity ,
|
||||
resprov_difficulty , resprov_recovery
|
||||
) VALUES (
|
||||
_get_map_name( $1 ) , _get_string( $2 ) ,
|
||||
100 , 50 ,
|
||||
0.5 , 0.5
|
||||
);
|
||||
$$ LANGUAGE SQL;
|
Reference in a new issue