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/040-functions/045-empire-research/090-technologies-view.sql
Emmanuel BENOîT 071257786c Renamed technology tables and views
* Removed the _v2 suffix from some tables and views.
2012-04-09 15:01:04 +02:00

125 lines
4.3 KiB
PL/PgSQL

/*
* Unit tests for emp.technologies_view
*/
BEGIN;
\i utils/strings.sql
\i utils/accounts.sql
\i utils/naming.sql
/* Create three empires (easier to use as keys) */
SELECT _create_emp_names( 3 , 'emp' );
INSERT INTO emp.empires ( name_id , cash )
SELECT id , 200.0 FROM naming.empire_names;
/* Create a technology after disabling unused fields */
ALTER TABLE defs.technologies
ALTER technology_discovery_id DROP NOT NULL;
SELECT _create_test_strings( 1 , 'tech' );
SELECT _create_test_strings( 1 , 'techCategory' );
SELECT _create_test_strings( 1 , 'techDescription' );
INSERT INTO defs.technologies (
technology_name_id , technology_category_id , technology_description_id ,
technology_price , technology_points
) VALUES (
_get_string( 'tech1' ) , _get_string( 'techCategory1' ) , _get_string( 'techDescription1' ) ,
123 , 456
);
/* Replace identifier function with something easier to check */
CREATE OR REPLACE FUNCTION emp.technology_make_identifier(
_empire INT , _technology TEXT , _visible BOOLEAN )
RETURNS TEXT
LANGUAGE SQL
STRICT IMMUTABLE
SECURITY DEFINER
AS $technology_make_identifier$
SELECT $1::TEXT || ',' || $2 || ',' || $3::TEXT;
$technology_make_identifier$;
/* Replace both the visibility and dependencies views with plain SELECT's
* from tables.
*/
CREATE TABLE _fake_visibility(
empire_id INT ,
technology_name_id INT ,
emptech_visible BOOLEAN
);
CREATE OR REPLACE VIEW emp.technology_visibility_view
AS SELECT * FROM _fake_visibility;
CREATE TABLE _fake_deps(
technology_name_id INT ,
technology_dependencies TEXT
);
CREATE OR REPLACE VIEW defs.technology_dependencies_view
AS SELECT * FROM _fake_deps;
/* Insert empire states and data for fake views */
INSERT INTO emp.technologies (
empire_id , technology_name_id ,
emptech_state , emptech_points , emptech_priority
) VALUES (
_get_emp_name( 'emp1' ) , _get_string( 'tech1' ) ,
'KNOWN' , NULL , NULL
) , (
_get_emp_name( 'emp2' ) , _get_string( 'tech1' ) ,
'RESEARCH' , 228.9 , 0
) , (
_get_emp_name( 'emp3' ) , _get_string( 'tech1' ) ,
'RESEARCH' , 114 , 1
);
INSERT INTO _fake_visibility VALUES(
_get_emp_name( 'emp1' ) , _get_string( 'tech1' ) , TRUE
) , (
_get_emp_name( 'emp2' ) , _get_string( 'tech1' ) , TRUE
) , (
_get_emp_name( 'emp3' ) , _get_string( 'tech1' ) , FALSE
);
INSERT INTO _fake_deps VALUES( _get_string( 'tech1' ) , 'deps are here' );
-- ***** TESTS BEGIN HERE *****
SELECT plan( 3 );
SELECT diag_test_name( 'emp.technologies_view - Known technology' );
SELECT set_eq( $$
SELECT emptech_id , emptech_state::TEXT , emptech_visible ,
technology_category , technology_name , technology_description ,
emptech_points , emptech_priority IS NULL AS ep_null ,
emptech_ratio IS NULL AS er_null ,
technology_price , technology_dependencies
FROM emp.technologies_view
WHERE empire_id = _get_emp_name( 'emp1' )
$$ , $$ VALUES(
_get_emp_name( 'emp1' ) || ',tech1,true' , 'KNOWN' , TRUE ,
'techCategory1' , 'tech1' , 'techDescription1' ,
456 , TRUE , TRUE , 123 , 'deps are here'
) $$ );
SELECT diag_test_name( 'emp.technologies_view - In-progress, visible technology' );
SELECT set_eq( $$
SELECT emptech_id , emptech_state::TEXT , emptech_visible ,
technology_category , technology_name , technology_description ,
emptech_points , emptech_priority , emptech_ratio ,
technology_price , technology_dependencies
FROM emp.technologies_view
WHERE empire_id = _get_emp_name( 'emp2' )
$$ , $$ VALUES(
_get_emp_name( 'emp2' ) || ',tech1,true' , 'RESEARCH' , TRUE ,
'techCategory1' , 'tech1' , 'techDescription1' ,
228 , 0 , 50 , 123 , 'deps are here'
) $$ );
SELECT diag_test_name( 'emp.technologies_view - In-progress, unknown technology' );
SELECT set_eq( $$
SELECT emptech_id , emptech_state::TEXT , emptech_visible ,
technology_category , technology_name IS NULL AS n1 , technology_description IS NULL AS n2 ,
emptech_points IS NULL AS n3 , emptech_priority , emptech_ratio ,
technology_price IS NULL AS n4, technology_dependencies
FROM emp.technologies_view
WHERE empire_id = _get_emp_name( 'emp3' )
$$ , $$ VALUES(
_get_emp_name( 'emp3' ) || ',tech1,false' , 'RESEARCH' , FALSE ,
'techCategory1' , TRUE, TRUE ,
TRUE , 1 , 25 , TRUE , 'deps are here'
) $$ );
SELECT * FROM finish( );
ROLLBACK;