/* * Test the emp.mset_update_apply() function */ BEGIN; /* * Create a pair of strings */ INSERT INTO defs.strings (name) VALUES ( 'a' ) , ( 'b' ); /* * Remove foreign keys from the empire mining settings table, insert some * data into it. */ ALTER TABLE emp.mining_settings DROP CONSTRAINT fk_empmset_empire , DROP CONSTRAINT fk_empmset_resource; INSERT INTO emp.mining_settings ( empire_id , resource_name_id ) SELECT 1 , id FROM defs.strings WHERE name IN ( 'a' , 'b' ); /* Create the temporary table */ CREATE TEMPORARY TABLE mset_update( empire_id INT , resource_name TEXT , empmset_weight INT ) ON COMMIT DROP; INSERT INTO mset_update VALUES ( 1 , 'a' , 0 ) , ( 1 , 'b' , 4 ); /***** TESTS BEGIN HERE *****/ SELECT plan( 8 ); SELECT diag_test_name( 'emp.mset_update_apply() - Applying valid empire update' ); SELECT ok( emp.mset_update_apply( ) ); SELECT diag_test_name( 'emp.mset_update_apply() - Empire update results' ); SELECT set_eq( $$ SELECT name , empmset_weight FROM emp.mining_settings INNER JOIN defs.strings ON resource_name_id = id $$ , $$ VALUES ( 'a' , 0 ) , ( 'b' , 4 ) $$ ); /* Reset temporary table and settings */ DELETE FROM mset_update; DELETE FROM emp.mining_settings; INSERT INTO emp.mining_settings ( empire_id , resource_name_id ) SELECT 1 , id FROM defs.strings WHERE name IN ( 'a' , 'b' ); INSERT INTO mset_update VALUES ( 1 , 'a' , -1 ) , ( 1 , 'b' , 4 ); SELECT diag_test_name( 'emp.mset_update_apply() - Applying invalid empire update' ); SELECT ok( NOT emp.mset_update_apply( ) ); SELECT diag_test_name( 'emp.mset_update_apply() - Invalid empire update results' ); SELECT set_eq( $$ SELECT name , empmset_weight FROM emp.mining_settings INNER JOIN defs.strings ON resource_name_id = id $$ , $$ VALUES ( 'a' , 2 ) , ( 'b' , 2 ) $$ ); /* Re-create the temporary table to store planet mining settings, remove * constraints from the planet mining settings table, insert data into * both. */ ALTER TABLE emp.planet_mining_settings DROP CONSTRAINT fk_emppmset_empire , DROP CONSTRAINT fk_emppmset_resource; INSERT INTO emp.planet_mining_settings ( empire_id , planet_id , resource_name_id ) SELECT 1 , 1 , id FROM defs.strings WHERE name IN ( 'a' , 'b' ); DROP TABLE mset_update; CREATE TEMPORARY TABLE mset_update( empire_id INT , planet_id INT , resource_name TEXT , empmset_weight INT ) ON COMMIT DROP; INSERT INTO mset_update VALUES ( 1 , 1 , 'a' , 0 ) , ( 1 , 1 , 'b' , 4 ); SELECT diag_test_name( 'emp.mset_update_apply() - Applying valid planet update' ); SELECT ok( emp.mset_update_apply( ) ); SELECT diag_test_name( 'emp.mset_update_apply() - Planet update results' ); SELECT set_eq( $$ SELECT name , emppmset_weight FROM emp.planet_mining_settings INNER JOIN defs.strings ON resource_name_id = id $$ , $$ VALUES ( 'a' , 0 ) , ( 'b' , 4 ) $$ ); /* Reset temporary table and settings */ DELETE FROM mset_update; DELETE FROM emp.planet_mining_settings; INSERT INTO emp.planet_mining_settings ( empire_id , planet_id , resource_name_id ) SELECT 1 , 1 , id FROM defs.strings WHERE name IN ( 'a' , 'b' ); INSERT INTO mset_update VALUES ( 1 , 1 , 'a' , -1 ) , ( 1 , 1 , 'b' , 4 ); SELECT diag_test_name( 'emp.mset_update_apply() - Applying invalid planet update' ); SELECT ok( NOT emp.mset_update_apply( ) ); SELECT diag_test_name( 'emp.mset_update_apply() - Invalid planet update results' ); SELECT set_eq( $$ SELECT name , emppmset_weight FROM emp.planet_mining_settings INNER JOIN defs.strings ON resource_name_id = id $$ , $$ VALUES ( 'a' , 2 ) , ( 'b' , 2 ) $$ ); SELECT * FROM finish( ); ROLLBACK;