tap_test_results

Column Type
uniform_resource_id VARCHAR
source_file_uri TEXT
tap_file_created_at TIMESTAMPTZ
tap_file_size_bytes INTEGER
name
total_planned_tests
total_test_lines
failed_tests
passed_tests
overall_status
tap_result_content BLOB

SQL DDL

CREATE VIEW tap_test_results AS
SELECT
    ur.uniform_resource_id,
    ur.uri AS source_file_uri,
    ur.created_at AS tap_file_created_at,
    ur.size_bytes AS tap_file_size_bytes,
    -- Extract filename without path and extension (dynamic extraction using simple string operations)
    CASE
        -- Remove .tap extension if present
        WHEN (
            -- Get filename part after last '/' (or full URI if no '/')
            CASE
                WHEN INSTR(ur.uri, '/') > 0
                THEN REPLACE(ur.uri, RTRIM(ur.uri, REPLACE(ur.uri, '/', '')), '')
                ELSE ur.uri
            END
        ) LIKE '%.tap'
        THEN SUBSTR(
            CASE
                WHEN INSTR(ur.uri, '/') > 0
                THEN REPLACE(ur.uri, RTRIM(ur.uri, REPLACE(ur.uri, '/', '')), '')
                ELSE ur.uri
            END,
            1,
            LENGTH(
                CASE
                    WHEN INSTR(ur.uri, '/') > 0
                    THEN REPLACE(ur.uri, RTRIM(ur.uri, REPLACE(ur.uri, '/', '')), '')
                    ELSE ur.uri
                END
            ) - 4
        )
        ELSE
            CASE
                WHEN INSTR(ur.uri, '/') > 0
                THEN REPLACE(ur.uri, RTRIM(ur.uri, REPLACE(ur.uri, '/', '')), '')
                ELSE ur.uri
            END
    END AS name,
    -- Extract test plan information dynamically (e.g., "1..N" where N can be any number)
    CASE
        WHEN CAST(ur.content AS TEXT) LIKE '%1..%' THEN
            CAST(
                TRIM(
                    SUBSTR(
                        SUBSTR(CAST(ur.content AS TEXT), INSTR(CAST(ur.content AS TEXT), '1..') + 3),
                        1,
                        CASE
                            WHEN INSTR(SUBSTR(CAST(ur.content AS TEXT), INSTR(CAST(ur.content AS TEXT), '1..') + 3), CHAR(10)) > 0
                            THEN INSTR(SUBSTR(CAST(ur.content AS TEXT), INSTR(CAST(ur.content AS TEXT), '1..') + 3), CHAR(10)) - 1
                            WHEN INSTR(SUBSTR(CAST(ur.content AS TEXT), INSTR(CAST(ur.content AS TEXT), '1..') + 3), ' ') > 0
                            THEN INSTR(SUBSTR(CAST(ur.content AS TEXT), INSTR(CAST(ur.content AS TEXT), '1..') + 3), ' ') - 1
                            ELSE 10
                        END
                    )
                ) AS INTEGER
            )
        ELSE NULL
    END AS total_planned_tests,
    -- Count actual test results
    (LENGTH(CAST(ur.content AS TEXT)) - LENGTH(REPLACE(CAST(ur.content AS TEXT), 'ok ', ''))) / 3 AS total_test_lines,
    (LENGTH(CAST(ur.content AS TEXT)) - LENGTH(REPLACE(CAST(ur.content AS TEXT), 'not ok', ''))) / 6 AS failed_tests,
    -- Calculate passed tests
    ((LENGTH(CAST(ur.content AS TEXT)) - LENGTH(REPLACE(CAST(ur.content AS TEXT), 'ok ', ''))) / 3) -
    ((LENGTH(CAST(ur.content AS TEXT)) - LENGTH(REPLACE(CAST(ur.content AS TEXT), 'not ok', ''))) / 6) AS passed_tests,
    -- Overall test status
    CASE
        WHEN (LENGTH(CAST(ur.content AS TEXT)) - LENGTH(REPLACE(CAST(ur.content AS TEXT), 'not ok', ''))) / 6 > 0 THEN 'mixed'
        WHEN (LENGTH(CAST(ur.content AS TEXT)) - LENGTH(REPLACE(CAST(ur.content AS TEXT), 'ok ', ''))) / 3 > 0 THEN 'passed'
        ELSE 'unknown'
    END AS overall_status,
    -- Calculate pass rate
    ur.content AS tap_result_content
FROM uniform_resource ur
WHERE ur.uri LIKE '%.tap'
   OR ur.uri LIKE '%/tap/%'
   OR (ur.content IS NOT NULL AND CAST(ur.content AS TEXT) LIKE '%ok %' AND CAST(ur.content AS TEXT) LIKE '%..%')
;