SELECT 'dynamic' AS component, sqlpage.run_sql('shell/shell.sql') AS properties;
SELECT 'breadcrumb' as component;
WITH RECURSIVE breadcrumbs AS (
SELECT
COALESCE(abbreviated_caption, caption) AS title,
COALESCE(url, path) AS link,
parent_path, 0 AS level,
namespace
FROM sqlpage_aide_navigation
WHERE namespace = 'prime' AND path='qualityfolio/index.sql'
UNION ALL
SELECT
COALESCE(nav.abbreviated_caption, nav.caption) AS title,
COALESCE(nav.url, nav.path) AS link,
nav.parent_path, b.level + 1, nav.namespace
FROM sqlpage_aide_navigation nav
INNER JOIN breadcrumbs b ON nav.namespace = b.namespace AND nav.path = b.parent_path
)
SELECT title ,
sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/'||link as link
FROM breadcrumbs ORDER BY level DESC;
-- not including page title from sqlpage_aide_navigation
SELECT 'text' as component,
(SELECT page_content FROM page_guide WHERE page_identifier = 'qualityfolio/index.sql' AND page_order = 1) as contents;
select
'card' as component,
4 as columns;
SELECT
'## Automation Coverage' AS description_md,
'white' AS background_color,
'## ' || ROUND(100.0 * SUM(CASE WHEN test_type = 'Automation' THEN 1 ELSE 0 END) / COUNT(*), 2) || '%' AS description_md,
'orange' AS color,
'brand-ansible' AS icon
FROM
test_cases;
SELECT
'## Automated Test Cases' AS description_md,
'white' AS background_color,
'## ' || SUM(CASE WHEN test_type = 'Automation' THEN 1 ELSE 0 END) AS description_md,
'green' AS color,
'brand-ansible' AS icon
FROM
test_cases;
SELECT
'## Manual Test Cases' AS description_md,
'white' AS background_color,
'## ' || SUM(CASE WHEN test_type = 'Manual' THEN 1 ELSE 0 END) AS description_md,
'yellow' AS color,
'analyze' AS icon
FROM
test_cases;
select
'## Total Test Cases Count' as description_md,
'white' as background_color,
'## '||count(test_case_id) as description_md,
'12' as width,
'red' as color,
'brand-speedtest' as icon,
sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/test-cases-full-list.sql' as link
FROM test_cases ;
select
'## Total Test Suites Count' as description_md,
'white' as background_color,
'## '||count(id) as description_md,
'12' as width,
'sum' as icon,
sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/test-suites.sql' as link
FROM test_suites ;
select
'## Total Test Plans Count' as description_md,
'white' as background_color,
'## '||count(id) as description_md,
'12' as width,
'pink' as color,
'timeline-event' as icon,
'background-color: #FFFFFF' as style,
sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/test-plan.sql' as link
FROM test_plan ;
select
'## Success Rate' as description_md,
'white' as background_color,
'## '||ROUND(100.0 * SUM(CASE WHEN r.status = 'passed' THEN 1 ELSE 0 END) / COUNT(t.test_case_id), 2)||'%' as description_md,
'12' as width,
'lime' as color,
'circle-dashed-check' as icon,
'background-color: #FFFFFF' as style
FROM
test_cases t
LEFT JOIN
(select * from test_case_run_results group by test_case_id) r
ON
t.test_case_id = r.test_case_id;
select
'## Failed Rate' as description_md,
'white' as background_color,
'## '||ROUND(100.0 * SUM(CASE WHEN r.status = 'failed' THEN 1 ELSE 0 END) / COUNT(t.test_case_id), 2)||'%' as description_md,
'12' as width,
'red' as color,
'details-off' as icon,
'background-color: #FFFFFF' as style
FROM
test_cases t
LEFT JOIN
(select * from test_case_run_results group by test_case_id) r
ON
t.test_case_id = r.test_case_id;
select
'## Total Defects' as description_md,
'white' as background_color,
'## '||count(id) as description_md,
'12' as width,
'red' as color,
'details-off' as icon,
'background-color: #FFFFFF' as style,
sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/bug-list.sql' as link
FROM
bug_report t ;
select
'## Open Defects' as description_md,
'white' as background_color,
'## '||count(id) as description_md,
'12' as width,
'orange' as color,
'details-off' as icon,
'background-color: #FFFFFF' as style,
sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/bug-list.sql?status=open' as link
FROM
bug_report t where lower(status)='open';
select
'## Closed Defects' as description_md,
'white' as background_color,
'## '||count(id) as description_md,
'12' as width,
'purple' as color,
'details-off' as icon,
'background-color: #FFFFFF' as style,
sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/bug-list.sql?status=closed' as link
FROM
bug_report t where lower(status)='closed';
select
'## Rejected Defects' as description_md,
'white' as background_color,
'## '||count(id) as description_md,
'12' as width,
'cyan' as color,
'details-off' as icon,
'background-color: #FFFFFF' as style,
sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/bug-list.sql?status=rejected' as link
FROM
bug_report t where lower(status)='rejected';
SELECT 'html' as component,
'<style>
.apexcharts-legend-seriesd {
color: #ffff; /* Red color */
font-weight: bold; /* Makes the text bold */
}
</style>'
as html;
select
'card' as component,
2 as columns;
select
sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/chart1.sql?_sqlpage_embed' as embed;
select
sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/chart2.sql?_sqlpage_embed' as embed;
SELECT 'title'AS component,
(SELECT page_title FROM page_guide WHERE page_identifier = 'qualityfolio/index.sql' AND page_order = 2) as contents;
SELECT 'text' as component,
(SELECT page_content FROM page_guide WHERE page_identifier = 'qualityfolio/index.sql' AND page_order = 2) as contents;
select
'card' as component,
4 as columns;
select 'dynamic' as component, sqlpage.run_sql('qualityfolio/test-suites-common.sql') as properties;
-- select
-- 'chart' as component,
-- 'Test Suites' as title,
-- -- 'area' as type,
-- -- 'purple' as color,
-- 0 as ymin,
-- 5 as marker,
-- 'Success Test Case' as ytitle,
-- 'Total Test Case' as xtitle;
-- select
-- total_test_case as x,
-- success_count as value,
-- suite_name as series
-- FROM test_suite_success_and_failed_rate;
-- TAP Test Results Section
SELECT 'title'AS component,
(SELECT page_title FROM page_guide WHERE page_identifier = 'qualityfolio/index.sql' AND page_order = 3) as contents;
SELECT 'text' as component,
(SELECT page_content FROM page_guide WHERE page_identifier = 'qualityfolio/index.sql' AND page_order = 3) as contents;
SELECT 'table' as component,
'Total Tests,Passed,Failed,Pass Rate' as align_right,
TRUE as sort,
TRUE as search,
'File Name' as markdown;
SELECT
'['||name||']('||sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/tap-details.sql'||'?file='||REPLACE(REPLACE(name, ' ', '%20'), '&', '%26')||')' as "File Name",
COALESCE(total_planned_tests, total_test_lines, 0) as "Total Tests",
COALESCE(passed_tests, 0) as "Passed",
COALESCE(failed_tests, 0) as "Failed",
CASE
WHEN total_test_lines > 0
THEN ROUND((passed_tests * 100.0) / total_test_lines, 1) || '%'
ELSE '0%'
END as "Pass Rate",
strftime('%d-%m-%Y %H:%M', tap_file_created_at) as "Created",
CASE
WHEN total_test_lines > 0
THEN 'rowClass-'||CAST((passed_tests * 100) / total_test_lines AS INTEGER)
ELSE 'rowClass-0'
END as _sqlpage_css_class
FROM tap_test_results
ORDER BY tap_file_created_at DESC;
-- HTML Test Execution Results Section
SELECT 'title'AS component,
(SELECT page_title FROM page_guide WHERE page_identifier = 'qualityfolio/index.sql' AND page_order = 4) as contents;
SELECT 'text' as component,
(SELECT page_content FROM page_guide WHERE page_identifier = 'qualityfolio/index.sql' AND page_order = 4) as contents;
SELECT 'table' as component,
'Total Tests,Passed,Failed,Pass Rate' as align_right,
'Test Type' as markdown;
WITH html_stats AS (
SELECT
COUNT(*) as total_tests,
SUM(CASE WHEN execution_status LIKE '%pass%' THEN 1 ELSE 0 END) as passed_tests,
SUM(CASE WHEN execution_status LIKE '%fail%' OR execution_status LIKE '%error%' THEN 1 ELSE 0 END) as failed_tests
FROM html_test_execution_results
)
SELECT
'[HTML Test Executions]('||sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/html-test-results.sql'||')' as "Test Type",
total_tests as "Total Tests",
passed_tests as "Passed",
failed_tests as "Failed",
CASE
WHEN total_tests > 0
THEN ROUND((passed_tests * 100.0) / total_tests, 1) || '%'
ELSE '0%'
END as "Pass Rate",
CASE
WHEN total_tests > 0
THEN 'rowClass-'||CAST((passed_tests * 100) / total_tests AS INTEGER)
ELSE 'rowClass-0'
END as _sqlpage_css_class
FROM html_stats;
-- Test cycles
SELECT 'title'AS component,
(SELECT page_title FROM page_guide WHERE page_identifier = 'qualityfolio/index.sql' AND page_order = 5) as contents;
SELECT 'text' as component,
(SELECT page_content FROM page_guide WHERE page_identifier = 'qualityfolio/index.sql' AND page_order = 5) as contents;
-- Add small CSS to color passed/failed cells via row classes (safer than inline HTML in cells)
SELECT 'html' as component,
'<style>tr.has-pass td:nth-child(5){color:#28a745;font-weight:600} tr.has-fail td:nth-child(6){color:#dc3545;font-weight:600}</style>' as html;
SELECT 'table' as component,
'Total Tests,Passed,Failed,Pass Rate' as align_right,
'test cycle' as markdown,
'test case' as markdown,
'passed' as markdown,
'failed' as markdown;
SELECT
'[' || test_cycle || '](' || sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/test_cycle_detail.sql?test_cycle=' || REPLACE(REPLACE(test_cycle, ' ', '%20'), '&', '%26') || ')' AS "test cycle",
suite_id as "suite",
suite_name as "suite name",
-- Make the test case count and passed/failed counts clickable links to the cycle view filtered by status
'[' || COALESCE(test_case_count, 0) || '](' || sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/test_cycle_case.sql?test_cycle=' || REPLACE(REPLACE(test_cycle, ' ', '%20'), '&', '%26') || ')' AS "test case",
'[' || COALESCE(passed_count, 0) || '](' || sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/test_cycle_case.sql?test_cycle=' || REPLACE(REPLACE(test_cycle, ' ', '%20'), '&', '%26') || '&status=passed' || ')' AS "passed",
'[' || COALESCE(failed_count, 0) || '](' || sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/test_cycle_case.sql?test_cycle=' || REPLACE(REPLACE(test_cycle, ' ', '%20'), '&', '%26') || '&status=failed' || ')' AS "failed",
-- add a CSS class to the TR (SQLPage uses _sqlpage_css_class) so we can color specific TDs
(CASE WHEN COALESCE(passed_count,0) > 0 THEN 'has-pass ' ELSE '' END || CASE WHEN COALESCE(failed_count,0) > 0 THEN 'has-fail ' ELSE '' END || 'rowClass-' || CAST(COALESCE(passed_count,0) * 100 / CASE WHEN COALESCE(test_case_count,0)=0 THEN 1 ELSE test_case_count END AS INTEGER)) AS _sqlpage_css_class
FROM test_cycle;
-- Related requirements (dashboard block)
SELECT 'title'AS component,
(SELECT page_title FROM page_guide WHERE page_identifier = 'qualityfolio/index.sql' AND page_order = 6) as contents;
SELECT 'text' as component,
(SELECT page_content FROM page_guide WHERE page_identifier = 'qualityfolio/index.sql' AND page_order = 6) as contents;
SELECT 'html' as component,
'<style>tr.has-pass td:nth-child(5){color:#28a745;font-weight:600} tr.has-fail td:nth-child(6){color:#dc3545;font-weight:600}</style>' as html;
SELECT 'table' as component,
'Total Tests,Passed,Failed,Pass Rate' as align_right,
'requirement' as markdown,
'test case' as markdown,
'passed' as markdown,
'failed' as markdown;
SELECT
'[' || related_requirement || '](' || sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/related_requirement_detail.sql?requirement=' || REPLACE(REPLACE(related_requirement, ' ', '%20'), '&', '%26') || ')' AS "requirement",
suite_id as "suite",
suite_name as "suite name",
'[' || COALESCE(test_case_count, 0) || '](' || sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/test_case_related_requirements.sql?requirement=' || REPLACE(REPLACE(related_requirement, ' ', '%20'), '&', '%26') || ')' AS "test case",
'[' || COALESCE(passed_count, 0) || '](' || sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/test_case_related_requirements.sql?requirement=' || REPLACE(REPLACE(related_requirement, ' ', '%20'), '&', '%26') || '&status=passed' || ')' AS "passed",
'[' || COALESCE(failed_count, 0) || '](' || sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/test_case_related_requirements.sql?requirement=' || REPLACE(REPLACE(related_requirement, ' ', '%20'), '&', '%26') || '&status=failed' || ')' AS "failed",
(CASE WHEN COALESCE(passed_count,0) > 0 THEN 'has-pass ' ELSE '' END || CASE WHEN COALESCE(failed_count,0) > 0 THEN 'has-fail ' ELSE '' END || 'rowClass-' || CAST(COALESCE(passed_count,0) * 100 / CASE WHEN COALESCE(test_case_count,0)=0 THEN 1 ELSE test_case_count END AS INTEGER)) AS _sqlpage_css_class
FROM test_case_related_requirements;