Git Product home page Git Product logo

test-reporting's People

Contributors

anthonybarbier avatar ianmoroney avatar jackie-linz avatar jake-ufurnish avatar jaketowers avatar jcdickinson avatar mbartoszek-lawlogix avatar mpdreamz avatar riqq avatar siegfriedpammer avatar turing85 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

test-reporting's Issues

Public repository separation and matrix jobs

Your suggestion on having separate workflows for the test and the results posting is interesting.

Do you have any suggestions how that second job (.github/workflows/test-report.yml) can be aware of the matrix intersections that uploaded artifacts in a matrix job?

Obviously I could replicate the matrix configuration from the PR head branch (.github/workflows/ci.yml) job, but I wonder if you have implemented anything similar and more simple than that matrix configuration replication.

Failed parse xunit xml format: suite.testcase is not iterable

Did you change any break changes? The xunit format is working with jest-junit before: https://github.com/DTeam-Top/st2/runs/8390250789#r0

But now it's break down:
image

Here is the sample generated by tap-xunit

<?xml version="1.0"?>
<testsuites>
  <testsuite tests="65" failures="0" errors="0" name="Default">
    <testcase name="#1 _core › services › jwtService › empty rule set should filter nothing"/>
    <testcase name="#2 _core › services › jwtService › only limited methods should be filered: GET"/>
    <testcase name="#3 _core › services › jwtService › only target url should be filtered: GET"/>
    <testcase name="#4 _core › services › jwtService › both patterns and methods in rules: GET"/>
    <testcase name="#5 _core › services › jwtService › only limited methods should be filered: POST"/>
    <testcase name="#6 _core › services › jwtService › only target url should be filtered: POST"/>
    <testcase name="#7 _core › services › jwtService › both patterns and methods in rules: POST"/>
    <testcase name="#8 _core › services › jwtService › only limited methods should be filered: PUT"/>
    <testcase name="#9 _core › services › jwtService › only target url should be filtered: PUT"/>
    <testcase name="#10 _core › services › jwtService › both patterns and methods in rules: PUT"/>
    <testcase name="#11 _core › services › jwtService › only limited methods should be filered: DELETE"/>
    <testcase name="#12 _core › services › jwtService › only target url should be filtered: DELETE"/>
    <testcase name="#13 _core › services › jwtService › both patterns and methods in rules: DELETE"/>
    <testcase name="#14 _core › services › jwtService › only limited methods should be filered: OPTIONS"/>
    <testcase name="#15 _core › services › jwtService › only target url should be filtered: OPTIONS"/>
    <testcase name="#16 _core › services › jwtService › both patterns and methods in rules: OPTIONS"/>
    <testcase name="#17 _core › services › jwtService › only limited methods should be filered: HEAD"/>
    <testcase name="#18 _core › services › jwtService › only target url should be filtered: HEAD"/>
    <testcase name="#19 _core › services › jwtService › both patterns and methods in rules: HEAD"/>
    <testcase name="#20 _core › services › jwtService › only limited methods should be filered: TRACE"/>
    <testcase name="#21 _core › services › jwtService › only target url should be filtered: TRACE"/>
    <testcase name="#22 _core › services › jwtService › both patterns and methods in rules: TRACE"/>
    <testcase name="#23 _core › services › jwtService › only limited methods should be filered: PATCH"/>
    <testcase name="#24 _core › services › jwtService › only target url should be filtered: PATCH"/>
    <testcase name="#25 _core › services › jwtService › both patterns and methods in rules: PATCH"/>
    <testcase name="#26 _core › services › jwtService › only limited methods should be filered: get"/>
    <testcase name="#27 _core › services › jwtService › only target url should be filtered: get"/>
    <testcase name="#28 _core › services › jwtService › both patterns and methods in rules: get"/>
    <testcase name="#29 _core › services › jwtService › only limited methods should be filered: post"/>
    <testcase name="#30 _core › services › jwtService › only target url should be filtered: post"/>
    <testcase name="#31 _core › services › jwtService › both patterns and methods in rules: post"/>
    <testcase name="#32 _core › services › jwtService › only limited methods should be filered: put"/>
    <testcase name="#33 _core › services › jwtService › only target url should be filtered: put"/>
    <testcase name="#34 _core › services › jwtService › both patterns and methods in rules: put"/>
    <testcase name="#35 _core › services › jwtService › only limited methods should be filered: delete"/>
    <testcase name="#36 _core › services › jwtService › only target url should be filtered: delete"/>
    <testcase name="#37 _core › services › jwtService › both patterns and methods in rules: delete"/>
    <testcase name="#38 _core › services › jwtService › only limited methods should be filered: options"/>
    <testcase name="#39 _core › services › jwtService › only target url should be filtered: options"/>
    <testcase name="#40 _core › services › jwtService › both patterns and methods in rules: options"/>
    <testcase name="#41 _core › services › jwtService › only limited methods should be filered: head"/>
    <testcase name="#42 _core › services › jwtService › only target url should be filtered: head"/>
    <testcase name="#43 _core › services › jwtService › both patterns and methods in rules: head"/>
    <testcase name="#44 _core › services › jwtService › only limited methods should be filered: trace"/>
    <testcase name="#45 _core › services › jwtService › only target url should be filtered: trace"/>
    <testcase name="#46 _core › services › jwtService › both patterns and methods in rules: trace"/>
    <testcase name="#47 _core › services › jwtService › only limited methods should be filered: patch"/>
    <testcase name="#48 _core › services › jwtService › only target url should be filtered: patch"/>
    <testcase name="#49 _core › services › jwtService › both patterns and methods in rules: patch"/>
    <testcase name="#50 _core › utils › common › unifyAddresses(0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D"/>
    <testcase name="#51 _core › utils › common › unifyAddresses(0X3F1ECC900564B03C79716FEF5FD62A676FD9E61D) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D"/>
    <testcase name="#52 _core › utils › common › unifyAddresses(0x3f1ecc900564b03c79716fef5fd62a676fd9e61d) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D"/>
    <testcase name="#53 _core › utils › common › unifyAddresses(0x3f1ECC900564b03c79716FEF5fd62a676fd9e61d) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D"/>
    <testcase name="#54 _core › utils › common › toHttpUrl should not change http based urls"/>
    <testcase name="#55 _core › utils › common › toHttpUrl should change ipfs based urls"/>
    <testcase name="#56 _core › utils › common › toHttpUrl should throw exception for non ipfs or http urls"/>
    <testcase name="#57 _core › utils › common › sameAddresses should work"/>
    <testcase name="#58 _core › utils › common › sameAddresses should not work for non-address strings"/>
    <testcase name="#59 _core › utils › common › parseUnits / unitsOf should work"/>
    <testcase name="#60 _core › utils › common › truncateNumber should work"/>
    <testcase name="#61 _core › utils › common › truncate should not work for non-number strings"/>
    <testcase name="#62 _core › utils › common › truncate should not work for invalid precision."/>
    <testcase name="#63 _core › controller › route › route should work"/>
    <testcase name="#64 _core › controller › route › jwtVerifier should work"/>
    <testcase name="#65 controller › actions › /health should work">
      <system-out>{"level":30,"time":1669120617874,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-1","req":{"method":"GET","url":"/test","hostname":"localhost:80","remoteAddress":"127.0.0.1"},"msg":"incoming request"}
</system-out>
      <system-out>{"level":30,"time":1669120617876,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-2","req":{"method":"GET","url":"/protected/test","hostname":"localhost:80","remoteAddress":"127.0.0.1"},"msg":"incoming request"}
</system-out>
      <system-out>{"level":30,"time":1669120617876,"pid":44781,"hostname":"fengyu-laptop-mj","msg":"Server successfully booted!"}
</system-out>
      <system-out>{"level":30,"time":1669120617879,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-1","res":{"statusCode":200},"responseTime":3.396286003291607,"msg":"request completed"}
</system-out>
      <system-out>{"level":30,"time":1669120617879,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-2","res":{"statusCode":200},"responseTime":3.0541130006313324,"msg":"request completed"}
</system-out>
      <system-out>{"level":30,"time":1669120617879,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-3","req":{"method":"POST","url":"/sub/test","hostname":"localhost:80","remoteAddress":"127.0.0.1"},"msg":"incoming request"}
</system-out>
      <system-out>{"level":30,"time":1669120617880,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-4","req":{"method":"POST","url":"/protected/test","hostname":"localhost:80","remoteAddress":"127.0.0.1"},"msg":"incoming request"}
</system-out>
      <system-out>{"level":30,"time":1669120617880,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-4","res":{"statusCode":401},"err":{"type":"FastifyError","message":"No Authorization was found in request.headers","stack":"FastifyError: No Authorization was found in request.headers\n    at lookupToken (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:241:13)\n    at _Request.requestVerify [as jwtVerify] (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:446:15)\n    at /home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:438:31\n    at new Promise (&lt;anonymous&gt;)\n    at _Request.requestVerify [as jwtVerify] (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:437:14)\n    at Object.&lt;anonymous&gt; (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/src/_core/controller/route.ts:35:44)\n    at hookIterator (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/fastify/lib/hooks.js:246:10)\n    at next (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/fastify/lib/hooks.js:174:16)\n    at Object.&lt;anonymous&gt; (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/awilix/lib/fastifyAwilixPlugin.js:17:5)\n    at hookIterator (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/fastify/lib/hooks.js:246:10)","name":"FastifyError","code":"FST_JWT_NO_AUTHORIZATION_IN_HEADER","statusCode":401},"msg":"No Authorization was found in request.headers"}
</system-out>
      <system-out>{"level":30,"time":1669120617884,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-3","res":{"statusCode":201},"responseTime":0.7220579981803894,"msg":"request completed"}
</system-out>
      <system-out>{"level":30,"time":1669120617884,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-4","res":{"statusCode":401},"responseTime":4.603818003088236,"msg":"request completed"}
</system-out>
      <system-out>{"level":30,"time":1669120617885,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-5","req":{"method":"POST","url":"/protected/test","hostname":"localhost:80","remoteAddress":"127.0.0.1"},"msg":"incoming request"}
</system-out>
      <system-out>{"level":30,"time":1669120617886,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-5","res":{"statusCode":401},"err":{"type":"FastifyError","message":"Authorization token is invalid: The token signature is invalid.","stack":"FastifyError: Authorization token is invalid: The token signature is invalid.\n    at verify (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:481:17)\n    at work (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/fastfall/fall.js:105:23)\n    at /home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:22:12\n    at getSecret (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:455:30)\n    at Holder.work (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/fastfall/fall.js:103:23)\n    at Function.fall [as waterfall] (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/fastfall/fall.js:30:13)\n    at _Request.requestVerify [as jwtVerify] (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:453:11)\n    at /home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:438:31\n    at new Promise (&lt;anonymous&gt;)\n    at _Request.requestVerify [as jwtVerify] (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:437:14)","name":"FastifyError","code":"FST_JWT_AUTHORIZATION_TOKEN_INVALID","statusCode":401},"msg":"Authorization token is invalid: The token signature is invalid."}
</system-out>
      <system-out>{"level":30,"time":1669120617887,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-5","res":{"statusCode":401},"responseTime":2.082396000623703,"msg":"request completed"}
</system-out>
      <system-out>{"level":30,"time":1669120617887,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-6","req":{"method":"POST","url":"/protected/test","hostname":"localhost:80","remoteAddress":"127.0.0.1"},"msg":"incoming request"}
</system-out>
      <system-out>{"level":30,"time":1669120617887,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-6","res":{"statusCode":201},"responseTime":0.3499779999256134,"msg":"request completed"}
</system-out>
      <system-out>{"level":30,"time":1669120617888,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-7","req":{"method":"GET","url":"/banned-all/test","hostname":"localhost:80","remoteAddress":"127.0.0.1"},"msg":"incoming request"}
</system-out>
      <system-out>{"level":30,"time":1669120617888,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-8","req":{"method":"POST","url":"/banned-all/test","hostname":"localhost:80","remoteAddress":"127.0.0.1"},"msg":"incoming request"}
</system-out>
      <system-out>{"level":30,"time":1669120617888,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-9","req":{"method":"DELETE","url":"/banned-all/test","hostname":"localhost:80","remoteAddress":"127.0.0.1"},"msg":"incoming request"}
</system-out>
      <system-out>{"level":30,"time":1669120617888,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-a","req":{"method":"GET","url":"/banned-all/test","hostname":"localhost:80","remoteAddress":"127.0.0.1"},"msg":"incoming request"}
</system-out>
      <system-out>{"level":30,"time":1669120617888,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-b","req":{"method":"POST","url":"/banned-all/test","hostname":"localhost:80","remoteAddress":"127.0.0.1"},"msg":"incoming request"}
</system-out>
      <system-out>{"level":30,"time":1669120617888,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-c","req":{"method":"DELETE","url":"/banned-all/test","hostname":"localhost:80","remoteAddress":"127.0.0.1"},"msg":"incoming request"}
</system-out>
      <system-out>{"level":30,"time":1669120617888,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-7","res":{"statusCode":401},"err":{"type":"FastifyError","message":"No Authorization was found in request.headers","stack":"FastifyError: No Authorization was found in request.headers\n    at lookupToken (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:241:13)\n    at _Request.requestVerify [as jwtVerify] (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:446:15)\n    at /home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:438:31\n    at new Promise (&lt;anonymous&gt;)\n    at _Request.requestVerify [as jwtVerify] (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:437:14)\n    at Object.&lt;anonymous&gt; (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/src/_core/controller/route.ts:35:44)\n    at hookIterator (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/fastify/lib/hooks.js:246:10)\n    at next (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/fastify/lib/hooks.js:174:16)\n    at Object.&lt;anonymous&gt; (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/awilix/lib/fastifyAwilixPlugin.js:17:5)\n    at hookIterator (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/fastify/lib/hooks.js:246:10)","name":"FastifyError","code":"FST_JWT_NO_AUTHORIZATION_IN_HEADER","statusCode":401},"msg":"No Authorization was found in request.headers"}
</system-out>
      <system-out>{"level":30,"time":1669120617889,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-8","res":{"statusCode":401},"err":{"type":"FastifyError","message":"No Authorization was found in request.headers","stack":"FastifyError: No Authorization was found in request.headers\n    at lookupToken (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:241:13)\n    at _Request.requestVerify [as jwtVerify] (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:446:15)\n    at /home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:438:31\n    at new Promise (&lt;anonymous&gt;)\n    at _Request.requestVerify [as jwtVerify] (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:437:14)\n    at Object.&lt;anonymous&gt; (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/src/_core/controller/route.ts:35:44)\n    at hookIterator (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/fastify/lib/hooks.js:246:10)\n    at next (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/fastify/lib/hooks.js:174:16)\n    at Object.&lt;anonymous&gt; (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/awilix/lib/fastifyAwilixPlugin.js:17:5)\n    at hookIterator (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/fastify/lib/hooks.js:246:10)","name":"FastifyError","code":"FST_JWT_NO_AUTHORIZATION_IN_HEADER","statusCode":401},"msg":"No Authorization was found in request.headers"}
</system-out>
      <system-out>{"level":30,"time":1669120617889,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-9","res":{"statusCode":401},"err":{"type":"FastifyError","message":"No Authorization was found in request.headers","stack":"FastifyError: No Authorization was found in request.headers\n    at lookupToken (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:241:13)\n    at _Request.requestVerify [as jwtVerify] (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:446:15)\n    at /home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:438:31\n    at new Promise (&lt;anonymous&gt;)\n    at _Request.requestVerify [as jwtVerify] (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/jwt/jwt.js:437:14)\n    at Object.&lt;anonymous&gt; (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/src/_core/controller/route.ts:35:44)\n    at hookIterator (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/fastify/lib/hooks.js:246:10)\n    at next (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/fastify/lib/hooks.js:174:16)\n    at Object.&lt;anonymous&gt; (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/@fastify/awilix/lib/fastifyAwilixPlugin.js:17:5)\n    at hookIterator (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/fastify/lib/hooks.js:246:10)","name":"FastifyError","code":"FST_JWT_NO_AUTHORIZATION_IN_HEADER","statusCode":401},"msg":"No Authorization was found in request.headers"}
</system-out>
      <system-out>{"level":30,"time":1669120617890,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-7","res":{"statusCode":401},"responseTime":1.2324169985949993,"msg":"request completed"}
</system-out>
      <system-out>{"level":30,"time":1669120617890,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-8","res":{"statusCode":401},"responseTime":1.4230160005390644,"msg":"request completed"}
</system-out>
      <system-out>{"level":30,"time":1669120617890,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-9","res":{"statusCode":401},"responseTime":1.6336320005357265,"msg":"request completed"}
</system-out>
      <system-out>{"level":30,"time":1669120617890,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-a","res":{"statusCode":200},"responseTime":1.6284230016171932,"msg":"request completed"}
</system-out>
      <system-out>{"level":30,"time":1669120617890,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-b","res":{"statusCode":200},"responseTime":1.4986380003392696,"msg":"request completed"}
</system-out>
      <system-out>{"level":30,"time":1669120617890,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-c","res":{"statusCode":200},"responseTime":1.3942120000720024,"msg":"request completed"}
</system-out>
      <system-out>{"level":30,"time":1669120617892,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-1","req":{"method":"GET","url":"/health","hostname":"localhost:80","remoteAddress":"127.0.0.1"},"msg":"incoming request"}
</system-out>
      <system-out>{"level":30,"time":1669120617896,"pid":44781,"hostname":"fengyu-laptop-mj","msg":"Server successfully booted!"}
</system-out>
      <system-out>{"level":30,"time":1669120617896,"pid":44781,"hostname":"fengyu-laptop-mj","reqId":"req-1","res":{"statusCode":200},"responseTime":3.0050409995019436,"msg":"request completed"}
</system-out>
      <system-out>{"level":50,"time":1669120623733,"pid":44781,"hostname":"fengyu-laptop-mj","from":"DbService","err":{"type":"DatabaseError","message":"syntax error at or near \")\"","stack":"error: syntax error at or near \")\"\n    at Parser.parseErrorMessage (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/parser.ts:369:69)\n    at Parser.handlePacket (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/parser.ts:188:21)\n    at Parser.parse (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/parser.ts:103:30)\n    at Socket.&lt;anonymous&gt; (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/index.ts:7:48)\n    at Socket.emit (node:events:513:28)\n    at Socket.emit (node:domain:489:12)\n    at addChunk (node:internal/streams/readable:324:12)\n    at readableAddChunk (node:internal/streams/readable:297:9)\n    at Socket.Readable.push (node:internal/streams/readable:234:10)\n    at TCP.onStreamRead (node:internal/stream_base_commons:190:23)","length":90,"name":"error","severity":"ERROR","code":"42601","position":"69","file":"scan.l","line":"1176","routine":"scanner_yyerror"},"msg":"executing sql: \n    CREATE TABLE table1 (\n        id    serial,\n        name  \n    )\n    , args: [], caused: syntax error at or near \")\""}
</system-out>
      <system-out>{"level":50,"time":1669120623744,"pid":44781,"hostname":"fengyu-laptop-mj","from":"DbService","err":{"type":"DatabaseError","message":"relation \"table2\" does not exist","stack":"error: relation \"table2\" does not exist\n    at Parser.parseErrorMessage (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/parser.ts:369:69)\n    at Parser.handlePacket (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/parser.ts:188:21)\n    at Parser.parse (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/parser.ts:103:30)\n    at Socket.&lt;anonymous&gt; (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/index.ts:7:48)\n    at Socket.emit (node:events:513:28)\n    at Socket.emit (node:domain:489:12)\n    at addChunk (node:internal/streams/readable:324:12)\n    at readableAddChunk (node:internal/streams/readable:297:9)\n    at Socket.Readable.push (node:internal/streams/readable:234:10)\n    at TCP.onStreamRead (node:internal/stream_base_commons:190:23)","length":105,"name":"error","severity":"ERROR","code":"42P01","position":"22","file":"parse_relation.c","line":"1373","routine":"parserOpenTable"},"msg":"executing sql: select count(*) from table2, args: [], caused: relation \"table2\" does not exist"}
</system-out>
    </testcase>
  </testsuite>
  <testsuite tests="2" failures="0" errors="0" name="_core › services › dbService › before hook">
    <testcase name="#66 _core › services › dbService › DbService should work: positive cases."/>
    <testcase name="#67 _core › services › dbService › DbService should work: negative cases.">
      <system-out>{"level":50,"time":1669120623747,"pid":44781,"hostname":"fengyu-laptop-mj","from":"DbService","err":{"type":"DatabaseError","message":"relation \"table2\" does not exist","stack":"error: relation \"table2\" does not exist\n    at Parser.parseErrorMessage (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/parser.ts:369:69)\n    at Parser.handlePacket (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/parser.ts:188:21)\n    at Parser.parse (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/parser.ts:103:30)\n    at Socket.&lt;anonymous&gt; (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/index.ts:7:48)\n    at Socket.emit (node:events:513:28)\n    at Socket.emit (node:domain:489:12)\n    at addChunk (node:internal/streams/readable:324:12)\n    at readableAddChunk (node:internal/streams/readable:297:9)\n    at Socket.Readable.push (node:internal/streams/readable:234:10)\n    at TCP.onStreamRead (node:internal/stream_base_commons:190:23)","length":105,"name":"error","severity":"ERROR","code":"42P01","position":"22","file":"parse_relation.c","line":"1373","routine":"parserOpenTable"},"msg":"executing sql: select count(*) from table2, args: [], caused: relation \"table2\" does not exist"}
</system-out>
      <system-out>{"level":50,"time":1669120623749,"pid":44781,"hostname":"fengyu-laptop-mj","from":"DbService","err":{"type":"DatabaseError","message":"null value in column \"name\" of relation \"table2\" violates not-null constraint","stack":"error: null value in column \"name\" of relation \"table2\" violates not-null constraint\n    at Parser.parseErrorMessage (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/parser.ts:369:69)\n    at Parser.handlePacket (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/parser.ts:188:21)\n    at Parser.parse (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/parser.ts:103:30)\n    at Socket.&lt;anonymous&gt; (/home/fengyu/projects/AlphaWallet/quick-eth/apps/api/node_modules/pg-protocol/src/index.ts:7:48)\n    at Socket.emit (node:events:513:28)\n    at Socket.emit (node:domain:489:12)\n    at addChunk (node:internal/streams/readable:324:12)\n    at readableAddChunk (node:internal/streams/readable:297:9)\n    at Socket.Readable.push (node:internal/streams/readable:234:10)\n    at TCP.onStreamRead (node:internal/stream_base_commons:190:23)","length":195,"name":"error","severity":"ERROR","code":"23502","detail":"Failing row contains (2, null).","schema":"public","table":"table2","column":"name","file":"execMain.c","line":"1947","routine":"ExecConstraints"},"msg":"executing transactions error. queries: [{\"sql\":\"\\n    insert into table2 (name) values ($1)\\n  \",\"params\":[\"name1\"]},{\"sql\":\"\\n    insert into table2 (name) values ($1)\\n  \",\"params\":[null]}], caused: null value in column \"name\" of relation \"table2\" violates not-null constraint"}
</system-out>
    </testcase>
  </testsuite>
  <testsuite tests="0" failures="0" errors="0" name="_core › services › dbService › after hook"/>
</testsuites>

Wrong number of tests reported in Flutter

Hello,

I am using your test-report tool to showcase the test results regarding my flutter app, and i have discovered some discrepancies between counting of total tests and the actual file tests.

by using a simple json file generated by

flutter test --file-reporter json:"test-report.json"

and getting the following json file:

{"protocolVersion":"0.1.1","runnerVersion":"1.24.9","pid":9500,"type":"start","time":0}
{"suite":{"id":0,"platform":"vm","path":""},"type":"suite","time":0}
{"test":{"id":1,"name":"loading repo","suiteID":0,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":0}
{"count":1,"time":4,"type":"allSuites"}
{"testID":1,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":108779}
{"group":{"id":2,"suiteID":0,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":12,"line":null,"column":null,"url":null},"type":"group","time":108781}
{"test":{"id":3,"name":"(setUpAll)","suiteID":0,"groupIDs":[2],"hidden": true, "metadata":{"skip":false,"skipReason":null},"line":56,"column":3,"url":""},"type":"testStart","time":108781}
{"testID":3,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":108805}
{"group":{"id":4,"suiteID":0,"parentID":2,"name":"[NFC Workflow] Multiple screen sizes","metadata":{"skip":false,"skipReason":null},"testCount":6,"line":119,"column":3,"url":""},"type":"group","time":108805}
{"test":{"id":5,"name":"Sample success test","suiteID":0,"groupIDs":[2,4],"metadata":{"skip":false,"skipReason":null},"line":165,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":120,"root_column":5,"root_url":""},"type":"testStart","time":108806}
{"testID":5,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":120992}
{"test":{"id":6,"name":"(tearDownAll)","suiteID":0,"groupIDs":[2],"metadata":{"skip":false,"skipReason":null},"line":42,"column":5,"url":"package:integration_test/integration_test.dart"},"type":"testStart","time":210072}
{"testID":6,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":210074}
{"success":true,"type":"done","time":210081}

It is expected to see one of two scenarios:

  1. if the tool doesn't take into consideration the "hidden":true for the (setupAll) and (tearDownAll) the test reporting counts the tests as 3 tests were completed in 10s, 3 passed, 0 failed and 0 skipped

  2. if the tool doe take into consideration the "hidden":true for the (setupAll) and (tearDownAll) the test reporting counts the tests as 1 tests were completed in 10s, 1 passed, 0 failed and 0 skipped

The actual result is this one
Screenshot 2024-04-10 at 13 35 35

So the counting is confusing

Cannot read properties of undefined (reading 'split')

Hi,

I'm trying to parse junit xml reports which were prepared by gtest framework using java-junit format and it's working well for report files which contains successful tests only.
While reporter is trying to parse xml with failed tests - I'm facing Error: Cannot read properties of undefined (reading 'split')

Sometimes our tests are not handling exceptions correctly (because this tests are coming from upstream project) and test case can miss failure message.

  <testsuite name="SpellingMenuObserverTest" tests="1" failures="1" disabled="0" errors="0" time="34.336" timestamp="2022-05-24T09:57:08">
    <testcase name="InitMenuWithCorrectWord" status="run" time="34.336" timestamp="2022-05-24T09:56:34" classname="SpellingMenuObserverTest">
      <failure message="" type=""></failure>
    </testcase>
  </testsuite>

May I ask you to change current behaviour of parsing such messages if it's missing details. I've tried multiple command line parsers and they are working this way, just to check an assumption that gtest junit xml reports are really compatible with junit parsers.
Thanks in advance!

mocha-json Cannot read properties of undefined (reading 'startsWith')

Here is the report.json which generated by tap-mocha-reporter:

{
  "stats": {
    "suites": 0,
    "tests": 67,
    "passes": 67,
    "pending": 0,
    "failures": 0,
    "start": "2022-11-22T12:23:06.109Z",
    "end": "2022-11-22T12:23:14.723Z",
    "duration": 8614
  },
  "tests": [
    {
      "title": "_core › services › jwtService › empty rule set should filter nothing",
      "fullTitle": "_core › services › jwtService › empty rule set should filter nothing",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: GET",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: GET",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: GET",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: GET",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: GET",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: GET",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: POST",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: POST",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: POST",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: POST",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: POST",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: POST",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: PUT",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: PUT",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: PUT",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: PUT",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: PUT",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: PUT",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: DELETE",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: DELETE",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: DELETE",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: DELETE",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: DELETE",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: DELETE",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: OPTIONS",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: OPTIONS",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: OPTIONS",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: OPTIONS",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: OPTIONS",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: OPTIONS",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: HEAD",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: HEAD",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: HEAD",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: HEAD",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: HEAD",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: HEAD",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: TRACE",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: TRACE",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: TRACE",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: TRACE",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: TRACE",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: TRACE",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: PATCH",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: PATCH",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: PATCH",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: PATCH",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: PATCH",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: PATCH",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: get",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: get",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: get",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: get",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: get",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: get",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: post",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: post",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: post",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: post",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: post",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: post",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: put",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: put",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: put",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: put",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: put",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: put",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: delete",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: delete",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: delete",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: delete",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: delete",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: delete",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: options",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: options",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: options",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: options",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: options",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: options",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: head",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: head",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: head",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: head",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: head",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: head",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: trace",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: trace",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: trace",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: trace",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: trace",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: trace",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: patch",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: patch",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: patch",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: patch",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: patch",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: patch",
      "err": {}
    },
    {
      "title": "_core › utils › common › unifyAddresses(0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "fullTitle": "_core › utils › common › unifyAddresses(0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "err": {}
    },
    {
      "title": "_core › utils › common › unifyAddresses(0X3F1ECC900564B03C79716FEF5FD62A676FD9E61D) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "fullTitle": "_core › utils › common › unifyAddresses(0X3F1ECC900564B03C79716FEF5FD62A676FD9E61D) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "err": {}
    },
    {
      "title": "_core › utils › common › unifyAddresses(0x3f1ecc900564b03c79716fef5fd62a676fd9e61d) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "fullTitle": "_core › utils › common › unifyAddresses(0x3f1ecc900564b03c79716fef5fd62a676fd9e61d) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "err": {}
    },
    {
      "title": "_core › utils › common › unifyAddresses(0x3f1ECC900564b03c79716FEF5fd62a676fd9e61d) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "fullTitle": "_core › utils › common › unifyAddresses(0x3f1ECC900564b03c79716FEF5fd62a676fd9e61d) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "err": {}
    },
    {
      "title": "_core › utils › common › toHttpUrl should not change http based urls",
      "fullTitle": "_core › utils › common › toHttpUrl should not change http based urls",
      "err": {}
    },
    {
      "title": "_core › utils › common › toHttpUrl should change ipfs based urls",
      "fullTitle": "_core › utils › common › toHttpUrl should change ipfs based urls",
      "err": {}
    },
    {
      "title": "_core › utils › common › toHttpUrl should throw exception for non ipfs or http urls",
      "fullTitle": "_core › utils › common › toHttpUrl should throw exception for non ipfs or http urls",
      "err": {}
    },
    {
      "title": "_core › utils › common › sameAddresses should work",
      "fullTitle": "_core › utils › common › sameAddresses should work",
      "err": {}
    },
    {
      "title": "_core › utils › common › sameAddresses should not work for non-address strings",
      "fullTitle": "_core › utils › common › sameAddresses should not work for non-address strings",
      "err": {}
    },
    {
      "title": "_core › utils › common › parseUnits / unitsOf should work",
      "fullTitle": "_core › utils › common › parseUnits / unitsOf should work",
      "err": {}
    },
    {
      "title": "_core › utils › common › truncateNumber should work",
      "fullTitle": "_core › utils › common › truncateNumber should work",
      "err": {}
    },
    {
      "title": "_core › utils › common › truncate should not work for non-number strings",
      "fullTitle": "_core › utils › common › truncate should not work for non-number strings",
      "err": {}
    },
    {
      "title": "_core › utils › common › truncate should not work for invalid precision.",
      "fullTitle": "_core › utils › common › truncate should not work for invalid precision.",
      "err": {}
    },
    {
      "title": "controller › actions › /health should work",
      "fullTitle": "controller › actions › /health should work",
      "err": {}
    },
    {
      "title": "_core › controller › route › route should work",
      "fullTitle": "_core › controller › route › route should work",
      "err": {}
    },
    {
      "title": "_core › controller › route › jwtVerifier should work",
      "fullTitle": "_core › controller › route › jwtVerifier should work",
      "err": {}
    },
    {
      "title": "_core › services › dbService › DbService should work: positive cases.",
      "fullTitle": "_core › services › dbService › DbService should work: positive cases.",
      "err": {}
    },
    {
      "title": "_core › services › dbService › DbService should work: negative cases.",
      "fullTitle": "_core › services › dbService › DbService should work: negative cases.",
      "err": {}
    }
  ],
  "pending": [],
  "failures": [],
  "passes": [
    {
      "title": "_core › services › jwtService › empty rule set should filter nothing",
      "fullTitle": "_core › services › jwtService › empty rule set should filter nothing",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: GET",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: GET",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: GET",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: GET",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: GET",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: GET",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: POST",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: POST",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: POST",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: POST",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: POST",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: POST",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: PUT",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: PUT",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: PUT",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: PUT",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: PUT",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: PUT",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: DELETE",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: DELETE",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: DELETE",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: DELETE",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: DELETE",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: DELETE",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: OPTIONS",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: OPTIONS",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: OPTIONS",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: OPTIONS",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: OPTIONS",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: OPTIONS",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: HEAD",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: HEAD",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: HEAD",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: HEAD",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: HEAD",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: HEAD",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: TRACE",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: TRACE",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: TRACE",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: TRACE",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: TRACE",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: TRACE",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: PATCH",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: PATCH",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: PATCH",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: PATCH",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: PATCH",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: PATCH",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: get",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: get",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: get",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: get",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: get",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: get",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: post",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: post",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: post",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: post",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: post",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: post",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: put",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: put",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: put",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: put",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: put",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: put",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: delete",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: delete",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: delete",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: delete",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: delete",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: delete",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: options",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: options",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: options",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: options",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: options",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: options",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: head",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: head",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: head",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: head",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: head",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: head",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: trace",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: trace",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: trace",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: trace",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: trace",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: trace",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only limited methods should be filered: patch",
      "fullTitle": "_core › services › jwtService › only limited methods should be filered: patch",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › only target url should be filtered: patch",
      "fullTitle": "_core › services › jwtService › only target url should be filtered: patch",
      "err": {}
    },
    {
      "title": "_core › services › jwtService › both patterns and methods in rules: patch",
      "fullTitle": "_core › services › jwtService › both patterns and methods in rules: patch",
      "err": {}
    },
    {
      "title": "_core › utils › common › unifyAddresses(0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "fullTitle": "_core › utils › common › unifyAddresses(0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "err": {}
    },
    {
      "title": "_core › utils › common › unifyAddresses(0X3F1ECC900564B03C79716FEF5FD62A676FD9E61D) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "fullTitle": "_core › utils › common › unifyAddresses(0X3F1ECC900564B03C79716FEF5FD62A676FD9E61D) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "err": {}
    },
    {
      "title": "_core › utils › common › unifyAddresses(0x3f1ecc900564b03c79716fef5fd62a676fd9e61d) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "fullTitle": "_core › utils › common › unifyAddresses(0x3f1ecc900564b03c79716fef5fd62a676fd9e61d) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "err": {}
    },
    {
      "title": "_core › utils › common › unifyAddresses(0x3f1ECC900564b03c79716FEF5fd62a676fd9e61d) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "fullTitle": "_core › utils › common › unifyAddresses(0x3f1ECC900564b03c79716FEF5fd62a676fd9e61d) === 0x3F1EcC900564b03C79716fef5FD62a676Fd9e61D",
      "err": {}
    },
    {
      "title": "_core › utils › common › toHttpUrl should not change http based urls",
      "fullTitle": "_core › utils › common › toHttpUrl should not change http based urls",
      "err": {}
    },
    {
      "title": "_core › utils › common › toHttpUrl should change ipfs based urls",
      "fullTitle": "_core › utils › common › toHttpUrl should change ipfs based urls",
      "err": {}
    },
    {
      "title": "_core › utils › common › toHttpUrl should throw exception for non ipfs or http urls",
      "fullTitle": "_core › utils › common › toHttpUrl should throw exception for non ipfs or http urls",
      "err": {}
    },
    {
      "title": "_core › utils › common › sameAddresses should work",
      "fullTitle": "_core › utils › common › sameAddresses should work",
      "err": {}
    },
    {
      "title": "_core › utils › common › sameAddresses should not work for non-address strings",
      "fullTitle": "_core › utils › common › sameAddresses should not work for non-address strings",
      "err": {}
    },
    {
      "title": "_core › utils › common › parseUnits / unitsOf should work",
      "fullTitle": "_core › utils › common › parseUnits / unitsOf should work",
      "err": {}
    },
    {
      "title": "_core › utils › common › truncateNumber should work",
      "fullTitle": "_core › utils › common › truncateNumber should work",
      "err": {}
    },
    {
      "title": "_core › utils › common › truncate should not work for non-number strings",
      "fullTitle": "_core › utils › common › truncate should not work for non-number strings",
      "err": {}
    },
    {
      "title": "_core › utils › common › truncate should not work for invalid precision.",
      "fullTitle": "_core › utils › common › truncate should not work for invalid precision.",
      "err": {}
    },
    {
      "title": "controller › actions › /health should work",
      "fullTitle": "controller › actions › /health should work",
      "err": {}
    },
    {
      "title": "_core › controller › route › route should work",
      "fullTitle": "_core › controller › route › route should work",
      "err": {}
    },
    {
      "title": "_core › controller › route › jwtVerifier should work",
      "fullTitle": "_core › controller › route › jwtVerifier should work",
      "err": {}
    },
    {
      "title": "_core › services › dbService › DbService should work: positive cases.",
      "fullTitle": "_core › services › dbService › DbService should work: positive cases.",
      "err": {}
    },
    {
      "title": "_core › services › dbService › DbService should work: negative cases.",
      "fullTitle": "_core › services › dbService › DbService should work: negative cases.",
      "err": {}
    }
  ]
}

But I got this error:

image

Why isn't this a fork?

Curious why this fork was created without the original history of https://github.com/dorny/test-reporter? (If it's for issues, they should be able to be enabled afterwards.)

It'd be useful to be linked to the original project still and anyone who forked the original would have an easier time contributing here if the history and commits were linked/maintained.

It looks like the intent is to carry the project forward as the original repo hasn't had an update, but that's not clear based on the readme info.

Would be great to have some more background on the goals here as this does seem like a useful project. Thanks!

Error: Cannot read properties of undefined (reading 'split')

Error: Cannot read properties of undefined (reading 'split')

Hitting this with the following test results XML

    - name: Test Report
      uses: phoenix-actions/test-reporting@v8
      with:
        name: Terratest Tests
        path: report.xml
        reporter: java-junit

report.xml

<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
	<testsuite tests="1" failures="1" time="0.000" name="Elvis">
		<properties>
			<property name="go.version" value="go1.17"></property>
		</properties>
		<testcase classname="Elvis" name="[build failed]" time="0.000">
			<failure message="Failed" type=""></failure>
		</testcase>
	</testsuite>
</testsuites>

It's a Junit XML file created by Terratest

stackTrace.split is not a function using v11

phoenix-actions/test-reporting@v11

Here is the full debug log:

Run phoenix-actions/test-reporting@v11
  with:
    name: E[2](https://github.com/MyProject/admin-client/actions/runs/4652843554/jobs/8233307625#step:10:2)E Tests
    path: e2e/junit-results.xml
    reporter: jest-junit
    path-replace-backslashes: false
    list-suites: all
    list-tests: all
    max-annotations: 10
    fail-on-error: true
    only-summary: false
    output-to: checks
    token: ***
  env:
    TESTGROUP: e2e
    BASE_URL: https://fxxxxx.azurewebsites.net
/usr/bin/docker exec  5a4f[3](https://github.com/MyProject/admin-client/actions/runs/4652843554/jobs/8233307625#step:10:3)a7b753d9a5fdca6370c80ba33dbd[4](https://github.com/MyProject/admin-client/actions/runs/4652843554/jobs/8233307625#step:10:4)9a399007daadcfed0e98b073ec1174 sh -c "cat /etc/*release | grep ^ID"
Action was triggered by pull_request: using SHA from head of source branch
Check runs will be created with SHA=7042884dca[5](https://github.com/MyProject/admin-client/actions/runs/4652843554/jobs/8233307625#step:10:5)f305b521da4df425c[7](https://github.com/MyProject/admin-client/actions/runs/4652843554/jobs/8233307625#step:10:7)fe2174fe1[8](https://github.com/MyProject/admin-client/actions/runs/4652843554/jobs/8233307625#step:10:8)1
Listing all files tracked by git
Found 13[9](https://github.com/MyProject/admin-client/actions/runs/4652843554/jobs/8233307625#step:10:9)9 files tracked by GitHub
Using test report parser 'jest-junit'
Creating test report E2E Tests
  Processing test results from e2e/junit-results.xml
Error: stackTrace.split is not a function

Applying for GitHub publisher verification for "Test Reporting" Action.

I’m writing regarding the GH Action Test Reporting

Our project is starting to migrate the CI/CD to GH Actions and we are interested to use your Actions.
Providing some context, our Security team requires the "Creator Verified by GitHub" badge to start the internal GHA verification process, due to this we are blocked to use unverified Actions.

We would be grateful if you could start the GH Action verification process, as it would help us greatly.

I believe it must improve your impact in the whole GitHub community as a partner organization and also, you are letting us use your actions.

You can find more helpful information in the following articles from GitHub Docs as a good starting point on the process.

Applying for publisher verification for your organization
About marketplace badges

action fails to generate report from xml generated by OWASP scanner that contains vulnerabilities

The action fails to generate a report of an XML file, generated by the owasp dependecy check plugin for gradle, that contains a security vulnerability.

Logs of failed step (debug logging was enabled):

Run phoenix-actions/test-reporting@v10
  with:
    fail-on-error: true
    list-suites: all
    list-tests: all
    name: OWASP Report
    only-summary: false
    path: **/build/reports/owasp/*-junit.xml
    reporter: java-junit
    token: ***
    path-replace-backslashes: false
    max-annotations: 10
    output-to: checks
  env:
    JAVA_HOME: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.6-10/x64
    JAVA_HOME_17_X64: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.6-10/x64
Action was triggered by pull_request: using SHA from head of source branch
Check runs will be created with SHA=f4f66bc9b4c2f44316fe2af2a7b3caba29dcfb5f
::group::Listing all files tracked by git
Listing all files tracked by git
Found 116 files tracked by GitHub
Using test report parser 'java-junit'
::group::Creating test report OWASP Report
Creating test report OWASP Report
  Processing test results from build/reports/owasp/dependency-check-junit.xml
  Creating check run OWASP Report
  Creating report summary
  Generating check run summary
  ::endgroup::
Error: Cannot read properties of undefined (reading 'split')

The artifact containing the XML report that was processed is attached.

owasp-report.zip

mochawesome reporter: Error: mocha.passes is not iterable

Hello,

I tried to run the example ./reports/mochawesome/
but the GH action test-reporting fails with the error: Error: mocha.passes is not iterable

Here is the log of the error:
in Run phoenix-actions/test-reporting@v8
Check runs will be created with SHA=2e3f46489bc63dabde89e4c218c27e5dda1961b9
Listing all files tracked by git
Found 66 files tracked by GitHub
Using test report parser 'mocha-json'
Creating test report Report Tests
Processing test results from integ-tests2/mochawesome-json.json
Error: mocha.passes is not iterable

My workflow is quite simple:
- name: Checkout Tests
uses: actions/checkout@v3
- name: Install Dependencies
run: npm ci
working-directory: ./integ-tests2/
- name: Run Test
run: npm run test
working-directory: ./integ-tests2/
- uses: phoenix-actions/test-reporting@v8
if: success() || failure()
id: test-report # Set ID reference for step
with:
name: Report Tests # Name of the check run which will be created
path: 'integ-tests2/*.json' # Path to test results (inside artifact .zip)
reporter: mocha-json

Any help would be appreciated since I try to get nice reports inside GitHub Actions (i'm working with cypress and mochawesome seems the right reporter)

No report available

This is an issue from the original repo

dorny/test-reporter#167

The same happens in this fork.
It can be duplicated if a report job either run manually via worfkflow disparch or run be a scheduler.

Basically if there were no new commit the report link is not appear at the left, only can be found in logs.

Support very large test results

My project produces millions of test executions over a 2 hour build. I was hoping to use this action for a summary of the results, which would be a lightweight as just the counts. Unfortunately the action failed with an out of memory error on a 2gb heap. Can the results be processed in a streaming fashion rather than read fully into memory, which avoids having a limit?

Unclear documentation

I see in the documentation there is a mention of NUnit as the supported framwork.

image

Since it is on the same line as .NET, I assume it is for dotnet. But why is it that the only dotnet reporter is dotnet-trx? I looked at the code and there is no mention of dotnet-nunit.

I really need to have this nunit support. Can you clarify how to enable it? (If not, why is it even mentioned in the documentation)

Test report randomly appears under different workflow

With v8 of the action, we've noticed that sometimes the test reports will appear not under the workflow they were created from, but another workflow that runs in parallel on the same trigger.

The two workflows:

  • build-and-test: This runs test-reporting for .NET builds. Two jobs run two builds (matrix builds, under Ubuntu and Windows) in parallel. The workflow utilizes an external reusable workflow, and where in the end test-reporting is called is here.
  • validate-pull-request: This doesn't use test-reporting.

What we see:

This seems to be a bug to me. Note that the two workflows are unrelated apart from having an overlap of triggers.

Before we had the validate-pull-request workflow, we noticed test reports randomly missing, which is perhaps the same issue.

Testing .github/workflows/test-report.yml in public repos

Hello.

Per your description for Recommended setup for public repositories how does the artifact: option know which triggering run to go fetch the artifacts from?

More to the point however, is do you have any advise on how one can test/debug their implementation of .github/workflows/test-report.yml in a PR -- without having to iterate on landing updates to make it work to the master branch?

I have tried adding on: -> workflow_dispatch to my .github/workflows/test-report.yml and then running the workflow manually with:

image

But that manual run doesn't find artifacts to report on:

image

likely because it has no linkage back to a .github/workflows/ci.yml that uploaded artifacts?

Error: Cannot read properties of undefined (reading 'split')

I have a "junit" type test report produced by Behat. When all the tests pass everything parses fine, however when the tests fail I get this error

Error: Cannot read properties of undefined (reading 'split')

I am using the java-junit as the test file type

I'm happy to send you the test output file privately

TypeError: stackTrace.split is not a function

Happens with PlayWrite test fails, where it can produce a CDATA body inside failure.

Minimal test result that can reproduce the error:

<testsuites name="jest tests" tests="1" failures="1" skipped="0" errors="0" time="0.849">
<testsuite name="libs/foo.spec.ts" timestamp="1679511632462" hostname="LRS:Chromium" tests="1" failures="1" skipped="0" time="144.328" errors="0">
<testcase name="Test suite failure" classname="libs/foo.spec.ts" time="19.34">
<failure message="libs/foo.spec.ts:38:5 Test suite failure" type="FAILURE">
<![CDATA[  [LRS:Chromium] › libs/foo.spec.ts:38:5 › Test suite failure 

    locator.click: Error: strict mode violation: locator('button:text("Email")') resolved to 2 elements:
        1) <button data-testid="first">Email</button> aka getByTestId('first')
        2) <button data-testid="second">Anoher Email</button> aka getByTestId('second')
]]>
</failure>
</testcase>
</testsuite>
</testsuites>

Failure seems to be caused by https://github.com/phoenix-actions/test-reporting/blob/main/src/utils/node-utils.ts#L8

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.