BEGIN;
    -- Load the TAP functions.
    CREATE EXTENSION pgtap;

    -- Plan the tests.

    SELECT plan(39);

    -- Add data

    \i sql/modules/test/Base.sql

    -- Validate required tables

--    SELECT has_table('business');

    -- Validate required functions

    SELECT has_function('asset_dep__straight_line_base',array['numeric', 'numeric', 'numeric', 'numeric', 'numeric']);
    SELECT has_function('asset_dep__used_months',array['date', 'date', 'numeric']);
    SELECT has_function('asset_dep_get_usable_life_yr',array['numeric', 'date', 'date']);
    SELECT has_function('months_passed',ARRAY['timestamp without time zone','timestamp without time zone']);
    SELECT has_function('asset_dep_straight_line_yr_d',array['integer[]',  'date', 'integer']);
    SELECT has_function('asset_dep_straight_line_yr_m',array['integer[]',  'date', 'integer']);
    SELECT has_function('asset_dep_straight_line_month',array['integer[]',  'date', 'integer']);
    SELECT has_function('asset_report__generate_gl',array['integer', 'integer']);
    SELECT has_function('asset_class__get',array['integer']);
    SELECT has_function('asset_class__search',array['integer', 'integer', 'integer', 'text']);
    SELECT has_function('asset_class__get_dep_methods','{}'::text[]);
    SELECT has_function('asset_class__save',array['integer', 'integer', 'integer', 'integer', 'text', 'text']);
    SELECT has_function('asset__get',array['integer', 'text']);
    SELECT has_function('asset__search',array['integer', 'text', 'text', 'date', 'numeric', 'numeric', 'numeric']);
    SELECT has_function('asset_class__get_asset_accounts','{}'::text[]);
    SELECT has_function('asset_class__get_dep_accounts','{}'::text[]);
    SELECT has_function('asset__save',array['integer', 'integer', 'text', 'text', 'date', 'numeric', 'numeric', 'numeric', 'date', 'integer', 'integer', 'integer', 'integer', 'integer', 'integer']);
    SELECT has_function('asset_item__search',array['integer', 'integer', 'text', 'text', 'date', 'numeric', 'numeric', 'numeric', 'date', 'integer', 'integer', 'integer', 'integer', 'integer']);
    SELECT has_function('asset_class__get_dep_method',array['integer']);
    SELECT has_function('asset_report__save',array['integer', 'date', 'integer', 'integer', 'boolean']);
    SELECT has_function('asset_report__dispose',array['integer', 'integer', 'numeric', 'integer', 'numeric']);
    SELECT has_function('asset_report__get_disposal',array['integer']);
    SELECT has_function('asset_nbv_report','{}'::text[]);
    SELECT has_function('asset_report_partial_disposal_details',array['integer']);
    SELECT has_function('asset_report__approve',array['integer', 'integer', 'integer', 'integer']);
    SELECT has_function('asset_report__disposal_gl',array['integer', 'integer', 'integer']);
    SELECT has_function('asset_item__add_note',array['integer', 'text', 'text']);
    SELECT has_function('asset_report__get_expense_accts','{}'::text[]);
    SELECT has_function('asset_report__get_gain_accts','{}'::text[]);
    SELECT has_function('asset_report__get_loss_accts','{}'::text[]);
    SELECT has_function('asset_report__get',array['integer']);
    SELECT has_function('asset_report__get_lines',array['integer']);
    SELECT has_function('asset_report__search',array['date', 'date', 'integer', 'boolean', 'integer']);
    SELECT has_function('asset_report__generate',array['boolean', 'integer', 'date']);
    SELECT has_function('asset_report__begin_import',array['integer', 'date']);
    SELECT has_function('asset_report__import',array['text', 'text', 'numeric', 'numeric', 'numeric', 'date', 'date', 'integer', 'integer', 'integer', 'integer', 'integer', 'integer', 'integer', 'integer', 'numeric', 'boolean']);
    SELECT has_function('asset_report__begin_disposal',array['integer', 'date', 'integer']);
    SELECT has_function('asset_report__record_approve',array['integer']);
    SELECT has_function('asset__import_from_disposal',array['integer']);

    -- Run tests

--    PREPARE test AS select ...;
--    SELECT results_eq('test',result,'Description');
--    DEALLOCATE test;

    -- Finish the tests and clean up.
    SELECT * FROM finish();

ROLLBACK;
