/*
 * 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;
