125 lines
4.3 KiB
MySQL
125 lines
4.3 KiB
MySQL
|
/*
|
||
|
* Unit tests for emp.technologies_v2_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_v2 (
|
||
|
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_v2_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_v2_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_v2_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_v2_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_v2_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_v2_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;
|