/* * Test the defs.uoc_natres_internal() function */ BEGIN; /* We need a few strings to be used when creating resource definitions, and a basic resource. */ \i utils/strings.sql \i utils/resources.sql SELECT _create_test_strings( 7 ); SELECT _create_resources( 1 , 'basicRes' ); /****** TESTS BEGIN HERE ******/ SELECT plan( 39 ); SELECT diag_test_name( 'defs.uoc_natres_internal() - creation without category' ); SELECT is( defs.uoc_natres_internal( 'test3' , 'test4' , NULL , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0.5 , 0.05 ) , 'CREATED' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - creation results without category - basic' ); SELECT results_eq( $$ SELECT resource_name_id , resource_description_id , resource_weight FROM defs.resources WHERE resource_name_id = _get_string( 'test3' ) AND resource_category_id IS NULL $$ , $$ VALUES ( _get_string( 'test3' ) , _get_string( 'test4' ) , 1 ) $$ ); SELECT diag_test_name( 'defs.uoc_natres_internal() - creation results without category - nat. res.' ); SELECT results_eq( $$ SELECT * FROM defs.natural_resources WHERE resource_name_id = _get_string( 'test3' ) $$ , $$ VALUES ( _get_string( 'test3' ) , 0.5::DOUBLE PRECISION , 100::DOUBLE PRECISION , 50::DOUBLE PRECISION , 0.5::DOUBLE PRECISION , 0.05::DOUBLE PRECISION , 0.5::DOUBLE PRECISION , 0.05::DOUBLE PRECISION ) $$ ); SELECT diag_test_name( 'defs.uoc_natres_internal() - creation with category' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test6' , 'test7' , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0.5 , 0.05 ) , 'CREATED' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - creation results with category - basic' ); SELECT results_eq( $$ SELECT * FROM defs.resources WHERE resource_name_id = _get_string( 'test5' ) $$ , $$ VALUES ( _get_string( 'test5' ) , _get_string( 'test6' ) , _get_string( 'test7' ) , 1 ) $$ ); SELECT diag_test_name( 'defs.uoc_natres_internal() - creation results with category - nat. res.' ); SELECT results_eq( $$ SELECT * FROM defs.natural_resources WHERE resource_name_id = _get_string( 'test5' ) $$ , $$ VALUES ( _get_string( 'test5' ) , 0.5::DOUBLE PRECISION , 100::DOUBLE PRECISION , 50::DOUBLE PRECISION , 0.5::DOUBLE PRECISION , 0.05::DOUBLE PRECISION , 0.5::DOUBLE PRECISION , 0.05::DOUBLE PRECISION ) $$ ); SELECT diag_test_name( 'defs.uoc_natres_internal() - update without category' ); SELECT is( defs.uoc_natres_internal( 'test3' , 'test7' , NULL , 2 , 0.3 , 300 , 30 , 0.3 , 0.03 , 0.3 , 0.03 ) , 'UPDATED' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - update results without category - basic' ); SELECT results_eq( $$ SELECT resource_name_id , resource_description_id , resource_weight FROM defs.resources WHERE resource_name_id = _get_string( 'test3' ) AND resource_category_id IS NULL $$ , $$ VALUES ( _get_string( 'test3' ) , _get_string( 'test7' ) , 2 ) $$ ); SELECT diag_test_name( 'defs.uoc_natres_internal() - update results without category - nat. res.' ); SELECT results_eq( $$ SELECT * FROM defs.natural_resources WHERE resource_name_id = _get_string( 'test3' ) $$ , $$ VALUES ( _get_string( 'test3' ) , 0.3::DOUBLE PRECISION , 300::DOUBLE PRECISION , 30::DOUBLE PRECISION , 0.3::DOUBLE PRECISION , 0.03::DOUBLE PRECISION , 0.3::DOUBLE PRECISION , 0.03::DOUBLE PRECISION ) $$ ); SELECT diag_test_name( 'defs.uoc_natres_internal() - update with category' ); SELECT is( defs.uoc_natres_internal( 'test3' , 'test4' , 'test7' , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0.5 , 0.05 ) , 'UPDATED' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - update results with category' ); SELECT results_eq( $$ SELECT * FROM defs.resources WHERE resource_name_id = _get_string( 'test3' ) $$ , $$ VALUES ( _get_string( 'test3' ) , _get_string( 'test4' ) , _get_string( 'test7' ) , 1 ) $$ ); SELECT diag_test_name( 'defs.uoc_natres_internal() - update results with category - nat. res.' ); SELECT results_eq( $$ SELECT * FROM defs.natural_resources WHERE resource_name_id = _get_string( 'test3' ) $$ , $$ VALUES ( _get_string( 'test3' ) , 0.5::DOUBLE PRECISION , 100::DOUBLE PRECISION , 50::DOUBLE PRECISION , 0.5::DOUBLE PRECISION , 0.05::DOUBLE PRECISION , 0.5::DOUBLE PRECISION , 0.05::DOUBLE PRECISION ) $$ ); SELECT diag_test_name( 'defs.uoc_natres_internal() - incorrect name string' ); SELECT is( defs.uoc_natres_internal( 'does-not-exist' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0.5 , 0.05 ) , 'BAD_STRINGS' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - incorrect description string' ); SELECT is( defs.uoc_natres_internal( 'test1' , 'does-not-exist' , NULL , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0.5 , 0.05 ) , 'BAD_STRINGS' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - incorrect category string' ); SELECT is( defs.uoc_natres_internal( 'test1' , 'test2' , 'does-not-exist' , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0.5 , 0.05 ) , 'BAD_STRINGS' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - duplicate description on new resource' ); SELECT is( defs.uoc_natres_internal( 'test1' , 'test4' , NULL , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0.5 , 0.05 ) , 'DUP_DESCR' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - duplicate description on existing resource' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test4' , NULL , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0.5 , 0.05 ) , 'DUP_DESCR' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - update on basic resource' ); SELECT is( defs.uoc_natres_internal( 'basicRes1' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0.5 , 0.05 ) , 'BAD_TYPE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - weight <= 0' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 0 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0.5 , 0.05 ) , 'BAD_VALUE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - P(presence) <= 0' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0 , 100 , 50 , 0.5 , 0.05 , 0.5 , 0.05 ) , 'BAD_VALUE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - P(presence) >= 1' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0 , 100 , 50 , 0.5 , 0.05 , 0.5 , 0.05 ) , 'BAD_VALUE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - max. quantity <= 0' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 0 , 50 , 0.5 , 0.05 , 0.5 , 0.05 ) , 'BAD_VALUE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - quantity dev. < 0' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 100 , -1 , 0.5 , 0.05 , 0.5 , 0.05 ) , 'BAD_VALUE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - quantity max. - dev. <= 0' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 100 , 100 , 0.5 , 0.05 , 0.5 , 0.05 ) , 'BAD_VALUE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - difficulty max. = 0' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , 0 , 0 , 0.5 , 0.05 ) , 'UPDATED' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - difficulty max. < 0' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , -0.00001 , 0 , 0.5 , 0.05 ) , 'BAD_VALUE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - difficulty max. = 1' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , 1 , 0 , 0.5 , 0.05 ) , 'UPDATED' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - difficulty max. > 1' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , 1.00001 , 0 , 0.5 , 0.05 ) , 'BAD_VALUE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - difficulty dev. < 0' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , 0.5 , -1 , 0.5 , 0.05 ) , 'BAD_VALUE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - difficulty max. - dev. < 0' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , 0.25 , 0.5 , 0.5 , 0.05 ) , 'BAD_VALUE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - difficulty max. + dev. > 1' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , 0.75 , 0.5 , 0.5 , 0.05 ) , 'BAD_VALUE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - recovery max. <= 0' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0 , 0 ) , 'BAD_VALUE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - recovery max. = 1' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 1 , 0 ) , 'UPDATED' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - recovery max. > 1' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 1.0001 , 0 ) , 'BAD_VALUE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - recovery dev. < 0' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0.5 , -0.25 ) , 'BAD_VALUE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - recovery max. - dev. <= 0' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0.25 , 0.25 ) , 'BAD_VALUE' ); SELECT diag_test_name( 'defs.uoc_natres_internal() - recovery max. + dev. > 1' ); SELECT is( defs.uoc_natres_internal( 'test5' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0.75 , 0.5 ) , 'BAD_VALUE' ); /* Reset resources, create temporary table, replace * defs.add_resource_records() to make sure it's called when needed (and * only then) */ DELETE FROM defs.natural_resources; DELETE FROM defs.resources; CREATE TEMPORARY TABLE arr_called( on_id INT ) ON COMMIT DROP; CREATE OR REPLACE FUNCTION defs.add_resource_records( _resource INT ) RETURNS VOID STRICT VOLATILE SECURITY INVOKER AS $$ INSERT INTO arr_called VALUES( $1 ); $$ LANGUAGE SQL; ALTER TABLE emp.empires DROP CONSTRAINT fk_empires_name; INSERT INTO emp.empires ( name_id , cash ) VALUES ( 1 , 0 ); SELECT diag_test_name( 'defs.uoc_natres_internal() - defs.add_resource_record() called on new resource' ); SELECT defs.uoc_natres_internal( 'test1' , 'test2' , NULL , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0.5 , 0.05 ); SELECT is( COUNT(*)::INT , 1 ) FROM arr_called WHERE on_id = _get_string( 'test1' ); DELETE FROM arr_called; SELECT diag_test_name( 'defs.uoc_natres_internal() - defs.add_resource_record() not called on resource update' ); SELECT defs.uoc_natres_internal( 'test1' , 'test3' , NULL , 1 , 0.5 , 100 , 50 , 0.5 , 0.05 , 0.5 , 0.05 ); SELECT is( COUNT(*)::INT , 0 ) FROM arr_called WHERE on_id = _get_string( 'test1' ); SELECT * FROM finish( ); ROLLBACK;