diff --git a/__tests__/__outputs__/lcov-report-results.md b/__tests__/__outputs__/lcov-report-results.md new file mode 100644 index 0000000..744fdfa --- /dev/null +++ b/__tests__/__outputs__/lcov-report-results.md @@ -0,0 +1,45 @@ +![Tests failed](https://img.shields.io/badge/tests-7%20passed%2C%208%20failed-critical) +## ❌ fixtures/lcov.json +**15** tests were completed in **0ms** with **7** passed, **8** failed and **0** skipped. +|Test suite|Passed|Failed|Skipped|Time| +|:---|---:|---:|---:|---:| +|[src/core/dao.service.ts](#r0s0)|3✅|||0ms| +|[src/domains/auth/auth.controller.ts](#r0s1)|2✅|1❌||0ms| +|[src/shared/notif/providers/fcm/fcm.service.spec.ts](#r0s2)||3❌||0ms| +|[src/shared/notif/providers/fcm/fcm.service.ts](#r0s3)|1✅|2❌||0ms| +|[src/shared/notif/providers/mail/mail-service.ts](#r0s4)|1✅|2❌||0ms| +### ✅ src/core/dao.service.ts +``` +src/core/dao.service.ts + ✅ statement + ✅ fonction + ✅ branche +``` +### ❌ src/domains/auth/auth.controller.ts +``` +src/domains/auth/auth.controller.ts + ✅ statement + ❌ fonction + ✅ branche +``` +### ❌ src/shared/notif/providers/fcm/fcm.service.spec.ts +``` +src/shared/notif/providers/fcm/fcm.service.spec.ts + ❌ statement + ❌ fonction + ❌ branche +``` +### ❌ src/shared/notif/providers/fcm/fcm.service.ts +``` +src/shared/notif/providers/fcm/fcm.service.ts + ❌ statement + ❌ fonction + ✅ branche +``` +### ❌ src/shared/notif/providers/mail/mail-service.ts +``` +src/shared/notif/providers/mail/mail-service.ts + ❌ statement + ❌ fonction + ✅ branche +``` \ No newline at end of file diff --git a/__tests__/__snapshots__/lcov.test.ts.snap b/__tests__/__snapshots__/lcov.test.ts.snap new file mode 100644 index 0000000..3fa6990 --- /dev/null +++ b/__tests__/__snapshots__/lcov.test.ts.snap @@ -0,0 +1,140 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`lcov report coverage report from facebook/jest test results matches snapshot 1`] = ` +TestRunResult { + "path": "fixtures/lcov.json", + "suites": Array [ + TestSuiteResult { + "groups": Array [ + TestGroupResult { + "name": "src/core/dao.service.ts", + "tests": Array [ + Object { + "name": "statement", + "result": "success", + "time": 0, + }, + Object { + "name": "fonction", + "result": "success", + "time": 0, + }, + Object { + "name": "branche", + "result": "success", + "time": 0, + }, + ], + }, + ], + "name": "src/core/dao.service.ts", + "totalTime": undefined, + }, + TestSuiteResult { + "groups": Array [ + TestGroupResult { + "name": "src/domains/auth/auth.controller.ts", + "tests": Array [ + Object { + "name": "statement", + "result": "success", + "time": 0, + }, + Object { + "name": "fonction", + "result": "failed", + "time": 0, + }, + Object { + "name": "branche", + "result": "success", + "time": 0, + }, + ], + }, + ], + "name": "src/domains/auth/auth.controller.ts", + "totalTime": undefined, + }, + TestSuiteResult { + "groups": Array [ + TestGroupResult { + "name": "src/shared/notif/providers/fcm/fcm.service.spec.ts", + "tests": Array [ + Object { + "name": "statement", + "result": "failed", + "time": 0, + }, + Object { + "name": "fonction", + "result": "failed", + "time": 0, + }, + Object { + "name": "branche", + "result": "failed", + "time": 0, + }, + ], + }, + ], + "name": "src/shared/notif/providers/fcm/fcm.service.spec.ts", + "totalTime": undefined, + }, + TestSuiteResult { + "groups": Array [ + TestGroupResult { + "name": "src/shared/notif/providers/fcm/fcm.service.ts", + "tests": Array [ + Object { + "name": "statement", + "result": "failed", + "time": 0, + }, + Object { + "name": "fonction", + "result": "failed", + "time": 0, + }, + Object { + "name": "branche", + "result": "success", + "time": 0, + }, + ], + }, + ], + "name": "src/shared/notif/providers/fcm/fcm.service.ts", + "totalTime": undefined, + }, + TestSuiteResult { + "groups": Array [ + TestGroupResult { + "name": "src/shared/notif/providers/mail/mail-service.ts", + "tests": Array [ + Object { + "name": "statement", + "result": "failed", + "time": 0, + }, + Object { + "name": "fonction", + "result": "failed", + "time": 0, + }, + Object { + "name": "branche", + "result": "success", + "time": 0, + }, + ], + }, + ], + "name": "src/shared/notif/providers/mail/mail-service.ts", + "totalTime": undefined, + }, + ], + "totalTime": undefined, +} +`; diff --git a/__tests__/fixtures/lcov.json b/__tests__/fixtures/lcov.json new file mode 100644 index 0000000..82be37e --- /dev/null +++ b/__tests__/fixtures/lcov.json @@ -0,0 +1,6 @@ +{"src/core/dao.service.ts": {"path":"src/core/dao.service.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":51}},"1":{"start":{"line":8,"column":4},"end":{"line":8,"column":23}},"2":{"start":{"line":12,"column":24},"end":{"line":12,"column":53}},"3":{"start":{"line":15,"column":4},"end":{"line":15,"column":30}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":55}},"5":{"start":{"line":27,"column":20},"end":{"line":27,"column":77}},"6":{"start":{"line":28,"column":4},"end":{"line":30,"column":null}},"7":{"start":{"line":29,"column":6},"end":{"line":29,"column":36}},"8":{"start":{"line":31,"column":4},"end":{"line":31,"column":19}},"9":{"start":{"line":35,"column":27},"end":{"line":40,"column":null}},"10":{"start":{"line":42,"column":4},"end":{"line":44,"column":null}},"11":{"start":{"line":43,"column":6},"end":{"line":43,"column":36}},"12":{"start":{"line":45,"column":4},"end":{"line":45,"column":26}},"13":{"start":{"line":49,"column":23},"end":{"line":49,"column":69}},"14":{"start":{"line":50,"column":4},"end":{"line":52,"column":null}},"15":{"start":{"line":51,"column":6},"end":{"line":51,"column":36}},"16":{"start":{"line":53,"column":4},"end":{"line":53,"column":22}},"17":{"start":{"line":57,"column":4},"end":{"line":57,"column":48}},"18":{"start":{"line":4,"column":0},"end":{"line":4,"column":13}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":7,"column":2},"end":{"line":7,"column":14}},"loc":{"start":{"line":7,"column":36},"end":{"line":9,"column":3}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":8}},"loc":{"start":{"line":11,"column":33},"end":{"line":16,"column":3}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":2},"end":{"line":18,"column":7}},"loc":{"start":{"line":18,"column":28},"end":{"line":22,"column":3}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":24,"column":2},"end":{"line":24,"column":7}},"loc":{"start":{"line":24,"column":26},"end":{"line":32,"column":3}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":34,"column":2},"end":{"line":34,"column":7}},"loc":{"start":{"line":34,"column":51},"end":{"line":46,"column":3}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":48,"column":2},"end":{"line":48,"column":7}},"loc":{"start":{"line":48,"column":25},"end":{"line":54,"column":3}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":56,"column":2},"end":{"line":56,"column":11}},"loc":{"start":{"line":56,"column":23},"end":{"line":58,"column":3}}}},"branchMap":{"0":{"loc":{"start":{"line":28,"column":4},"end":{"line":30,"column":null}},"type":"if","locations":[{"start":{"line":28,"column":4},"end":{"line":30,"column":null}}]},"1":{"loc":{"start":{"line":42,"column":4},"end":{"line":44,"column":null}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":44,"column":null}}]},"2":{"loc":{"start":{"line":50,"column":4},"end":{"line":52,"column":null}},"type":"if","locations":[{"start":{"line":50,"column":4},"end":{"line":52,"column":null}}]}},"s":{"0":34,"1":93,"2":9,"3":9,"4":16,"5":15,"6":15,"7":5,"8":10,"9":14,"10":14,"11":5,"12":9,"13":18,"14":18,"15":1,"16":17,"17":1,"18":34},"f":{"0":93,"1":9,"2":16,"3":15,"4":14,"5":18,"6":1},"b":{"0":[5],"1":[5],"2":[1]}} +,"src/domains/auth/auth.controller.ts": {"path":"src/domains/auth/auth.controller.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":9,"column":0},"end":{"line":9,"column":null}},"2":{"start":{"line":15,"column":0},"end":{"line":15,"column":59}},"3":{"start":{"line":16,"column":0},"end":{"line":16,"column":38}},"4":{"start":{"line":17,"column":0},"end":{"line":17,"column":54}},"5":{"start":{"line":18,"column":0},"end":{"line":18,"column":45}},"6":{"start":{"line":19,"column":0},"end":{"line":19,"column":59}},"7":{"start":{"line":20,"column":0},"end":{"line":20,"column":41}},"8":{"start":{"line":21,"column":0},"end":{"line":21,"column":43}},"9":{"start":{"line":22,"column":0},"end":{"line":22,"column":51}},"10":{"start":{"line":23,"column":0},"end":{"line":23,"column":47}},"11":{"start":{"line":24,"column":0},"end":{"line":24,"column":44}},"12":{"start":{"line":25,"column":0},"end":{"line":25,"column":40}},"13":{"start":{"line":29,"column":7},"end":{"line":91,"column":null}},"14":{"start":{"line":31,"column":12},"end":{"line":31,"column":25}},"15":{"start":{"line":32,"column":12},"end":{"line":32,"column":26}},"16":{"start":{"line":33,"column":39},"end":{"line":33,"column":48}},"17":{"start":{"line":47,"column":4},"end":{"line":51,"column":7}},"18":{"start":{"line":48,"column":6},"end":{"line":48,"column":25}},"19":{"start":{"line":49,"column":6},"end":{"line":49,"column":78}},"20":{"start":{"line":50,"column":6},"end":{"line":50,"column":19}},"21":{"start":{"line":62,"column":16},"end":{"line":62,"column":57}},"22":{"start":{"line":63,"column":4},"end":{"line":65,"column":null}},"23":{"start":{"line":64,"column":6},"end":{"line":64,"column":66}},"24":{"start":{"line":66,"column":4},"end":{"line":66,"column":23}},"25":{"start":{"line":77,"column":4},"end":{"line":77,"column":71}},"26":{"start":{"line":89,"column":4},"end":{"line":89,"column":56}},"27":{"start":{"line":46,"column":8},"end":{"line":52,"column":null}},"28":{"start":{"line":61,"column":8},"end":{"line":67,"column":null}},"29":{"start":{"line":76,"column":8},"end":{"line":78,"column":null}},"30":{"start":{"line":80,"column":2},"end":{"line":90,"column":null}},"31":{"start":{"line":29,"column":13},"end":{"line":91,"column":null}},"32":{"start":{"line":29,"column":13},"end":{"line":29,"column":27}}},"fnMap":{"0":{"name":"(anonymous_4)","decl":{"start":{"line":30,"column":2},"end":{"line":30,"column":null}},"loc":{"start":{"line":33,"column":63},"end":{"line":34,"column":6}}},"1":{"name":"(anonymous_5)","decl":{"start":{"line":46,"column":2},"end":{"line":46,"column":7}},"loc":{"start":{"line":46,"column":28},"end":{"line":52,"column":3}}},"2":{"name":"(anonymous_6)","decl":{"start":{"line":47,"column":49},"end":{"line":47,"column":50}},"loc":{"start":{"line":47,"column":59},"end":{"line":51,"column":5}}},"3":{"name":"(anonymous_7)","decl":{"start":{"line":61,"column":2},"end":{"line":61,"column":7}},"loc":{"start":{"line":61,"column":30},"end":{"line":67,"column":3}}},"4":{"name":"(anonymous_8)","decl":{"start":{"line":76,"column":2},"end":{"line":76,"column":7}},"loc":{"start":{"line":76,"column":29},"end":{"line":78,"column":3}}},"5":{"name":"(anonymous_9)","decl":{"start":{"line":88,"column":2},"end":{"line":88,"column":16}},"loc":{"start":{"line":88,"column":31},"end":{"line":90,"column":3}}}},"branchMap":{"0":{"loc":{"start":{"line":63,"column":4},"end":{"line":65,"column":null}},"type":"if","locations":[{"start":{"line":63,"column":4},"end":{"line":65,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":3,"15":3,"16":3,"17":0,"18":0,"19":0,"20":0,"21":2,"22":2,"23":1,"24":1,"25":0,"26":0,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1},"f":{"0":3,"1":0,"2":0,"3":2,"4":0,"5":0},"b":{"0":[1]}} +,"src/shared/notif/providers/fcm/fcm.service.spec.ts": {"path":"src/shared/notif/providers/fcm/fcm.service.spec.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":54}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":43}},"2":{"start":{"line":4,"column":0},"end":{"line":48,"column":3}},"3":{"start":{"line":7,"column":2},"end":{"line":13,"column":5}},"4":{"start":{"line":8,"column":34},"end":{"line":10,"column":16}},"5":{"start":{"line":12,"column":4},"end":{"line":12,"column":49}},"6":{"start":{"line":15,"column":2},"end":{"line":17,"column":5}},"7":{"start":{"line":16,"column":4},"end":{"line":16,"column":34}},"8":{"start":{"line":19,"column":2},"end":{"line":21,"column":5}},"9":{"start":{"line":20,"column":4},"end":{"line":20,"column":62}},"10":{"start":{"line":22,"column":2},"end":{"line":38,"column":5}},"11":{"start":{"line":23,"column":16},"end":{"line":26,"column":null}},"12":{"start":{"line":28,"column":16},"end":{"line":32,"column":null}},"13":{"start":{"line":34,"column":4},"end":{"line":34,"column":30}},"14":{"start":{"line":35,"column":4},"end":{"line":35,"column":30}},"15":{"start":{"line":36,"column":4},"end":{"line":36,"column":21}},"16":{"start":{"line":37,"column":4},"end":{"line":37,"column":21}},"17":{"start":{"line":40,"column":2},"end":{"line":47,"column":5}},"18":{"start":{"line":41,"column":15},"end":{"line":43,"column":6}},"19":{"start":{"line":44,"column":4},"end":{"line":44,"column":29}},"20":{"start":{"line":45,"column":4},"end":{"line":45,"column":36}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":23},"end":{"line":4,"column":26}},"loc":{"start":{"line":4,"column":28},"end":{"line":48,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":7,"column":13},"end":{"line":7,"column":18}},"loc":{"start":{"line":7,"column":24},"end":{"line":13,"column":3}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":15,"column":26},"end":{"line":15,"column":29}},"loc":{"start":{"line":15,"column":31},"end":{"line":17,"column":3}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":19,"column":41},"end":{"line":19,"column":44}},"loc":{"start":{"line":19,"column":46},"end":{"line":21,"column":3}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":22,"column":42},"end":{"line":22,"column":47}},"loc":{"start":{"line":22,"column":53},"end":{"line":38,"column":3}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":40,"column":43},"end":{"line":40,"column":48}},"loc":{"start":{"line":40,"column":54},"end":{"line":47,"column":3}}}},"branchMap":{},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},"b":{}} +,"src/shared/notif/providers/fcm/fcm.service.ts": {"path":"src/shared/notif/providers/fcm/fcm.service.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":44}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":43}},"2":{"start":{"line":8,"column":0},"end":{"line":8,"column":43}},"3":{"start":{"line":11,"column":7},"end":{"line":60,"column":null}},"4":{"start":{"line":13,"column":4},"end":{"line":17,"column":7}},"5":{"start":{"line":21,"column":4},"end":{"line":21,"column":77}},"6":{"start":{"line":25,"column":4},"end":{"line":27,"column":56}},"7":{"start":{"line":36,"column":38},"end":{"line":38,"column":6}},"8":{"start":{"line":39,"column":4},"end":{"line":41,"column":null}},"9":{"start":{"line":40,"column":6},"end":{"line":40,"column":26}},"10":{"start":{"line":42,"column":4},"end":{"line":42,"column":73}},"11":{"start":{"line":51,"column":38},"end":{"line":54,"column":6}},"12":{"start":{"line":55,"column":4},"end":{"line":57,"column":null}},"13":{"start":{"line":56,"column":6},"end":{"line":56,"column":26}},"14":{"start":{"line":58,"column":4},"end":{"line":58,"column":55}},"15":{"start":{"line":11,"column":13},"end":{"line":60,"column":null}},"16":{"start":{"line":11,"column":13},"end":{"line":11,"column":23}}},"fnMap":{"0":{"name":"(anonymous_2)","decl":{"start":{"line":12,"column":2},"end":{"line":12,"column":null}},"loc":{"start":{"line":12,"column":2},"end":{"line":18,"column":3}}},"1":{"name":"(anonymous_3)","decl":{"start":{"line":20,"column":2},"end":{"line":20,"column":17}},"loc":{"start":{"line":20,"column":58},"end":{"line":22,"column":3}}},"2":{"name":"(anonymous_4)","decl":{"start":{"line":24,"column":2},"end":{"line":24,"column":20}},"loc":{"start":{"line":24,"column":61},"end":{"line":28,"column":3}}},"3":{"name":"(anonymous_5)","decl":{"start":{"line":30,"column":2},"end":{"line":30,"column":19}},"loc":{"start":{"line":34,"column":29},"end":{"line":43,"column":3}}},"4":{"name":"(anonymous_6)","decl":{"start":{"line":45,"column":2},"end":{"line":45,"column":19}},"loc":{"start":{"line":49,"column":29},"end":{"line":59,"column":3}}}},"branchMap":{"0":{"loc":{"start":{"line":39,"column":4},"end":{"line":41,"column":null}},"type":"if","locations":[{"start":{"line":39,"column":4},"end":{"line":41,"column":null}}]},"1":{"loc":{"start":{"line":55,"column":4},"end":{"line":57,"column":null}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":57,"column":null}}]}},"s":{"0":13,"1":13,"2":13,"3":13,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":13,"16":13},"f":{"0":1,"1":0,"2":0,"3":0,"4":0},"b":{"0":[0],"1":[0]}} +,"src/shared/notif/providers/mail/mail-service.ts": {"path":"src/shared/notif/providers/mail/mail-service.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":44}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":41}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":47}},"3":{"start":{"line":9,"column":7},"end":{"line":877,"column":null}},"4":{"start":{"line":10,"column":22},"end":{"line":10,"column":37}},"5":{"start":{"line":12,"column":10},"end":{"line":26,"column":5}},"6":{"start":{"line":81,"column":10},"end":{"line":116,"column":70}},"7":{"start":{"line":81,"column":54},"end":{"line":116,"column":70}},"8":{"start":{"line":118,"column":10},"end":{"line":127,"column":6}},"9":{"start":{"line":129,"column":10},"end":{"line":137,"column":6}},"10":{"start":{"line":139,"column":10},"end":{"line":141,"column":6}},"11":{"start":{"line":143,"column":10},"end":{"line":149,"column":6}},"12":{"start":{"line":151,"column":10},"end":{"line":151,"column":154}},"13":{"start":{"line":153,"column":10},"end":{"line":153,"column":160}},"14":{"start":{"line":155,"column":10},"end":{"line":155,"column":124}},"15":{"start":{"line":157,"column":10},"end":{"line":157,"column":133}},"16":{"start":{"line":159,"column":10},"end":{"line":165,"column":6}},"17":{"start":{"line":29,"column":4},"end":{"line":78,"column":6}},"18":{"start":{"line":168,"column":4},"end":{"line":709,"column":9}},"19":{"start":{"line":713,"column":4},"end":{"line":729,"column":7}},"20":{"start":{"line":739,"column":4},"end":{"line":754,"column":7}},"21":{"start":{"line":758,"column":4},"end":{"line":770,"column":6}},"22":{"start":{"line":774,"column":4},"end":{"line":779,"column":6}},"23":{"start":{"line":783,"column":4},"end":{"line":788,"column":6}},"24":{"start":{"line":792,"column":4},"end":{"line":807,"column":6}},"25":{"start":{"line":811,"column":4},"end":{"line":817,"column":6}},"26":{"start":{"line":821,"column":4},"end":{"line":827,"column":6}},"27":{"start":{"line":831,"column":4},"end":{"line":837,"column":6}},"28":{"start":{"line":841,"column":4},"end":{"line":847,"column":6}},"29":{"start":{"line":851,"column":4},"end":{"line":857,"column":6}},"30":{"start":{"line":861,"column":4},"end":{"line":866,"column":6}},"31":{"start":{"line":870,"column":4},"end":{"line":875,"column":6}},"32":{"start":{"line":9,"column":13},"end":{"line":877,"column":null}},"33":{"start":{"line":9,"column":13},"end":{"line":9,"column":24}}},"fnMap":{"0":{"name":"(anonymous_2)","decl":{"start":{"line":10,"column":2},"end":{"line":10,"column":22}},"loc":{"start":{"line":10,"column":50},"end":{"line":10,"column":54}}},"1":{"name":"(anonymous_3)","decl":{"start":{"line":81,"column":36},"end":{"line":81,"column":37}},"loc":{"start":{"line":81,"column":54},"end":{"line":116,"column":70}}},"2":{"name":"(anonymous_4)","decl":{"start":{"line":28,"column":10},"end":{"line":28,"column":18}},"loc":{"start":{"line":28,"column":34},"end":{"line":79,"column":3}}},"3":{"name":"(anonymous_5)","decl":{"start":{"line":167,"column":10},"end":{"line":167,"column":27}},"loc":{"start":{"line":167,"column":40},"end":{"line":710,"column":3}}},"4":{"name":"(anonymous_6)","decl":{"start":{"line":712,"column":10},"end":{"line":712,"column":18}},"loc":{"start":{"line":712,"column":70},"end":{"line":730,"column":3}}},"5":{"name":"(anonymous_7)","decl":{"start":{"line":732,"column":10},"end":{"line":732,"column":27}},"loc":{"start":{"line":737,"column":30},"end":{"line":755,"column":3}}},"6":{"name":"(anonymous_8)","decl":{"start":{"line":757,"column":9},"end":{"line":757,"column":24}},"loc":{"start":{"line":757,"column":49},"end":{"line":771,"column":3}}},"7":{"name":"(anonymous_9)","decl":{"start":{"line":773,"column":9},"end":{"line":773,"column":20}},"loc":{"start":{"line":773,"column":52},"end":{"line":780,"column":3}}},"8":{"name":"(anonymous_10)","decl":{"start":{"line":782,"column":9},"end":{"line":782,"column":26}},"loc":{"start":{"line":782,"column":58},"end":{"line":789,"column":3}}},"9":{"name":"(anonymous_11)","decl":{"start":{"line":791,"column":9},"end":{"line":791,"column":22}},"loc":{"start":{"line":791,"column":66},"end":{"line":808,"column":3}}},"10":{"name":"(anonymous_12)","decl":{"start":{"line":810,"column":9},"end":{"line":810,"column":23}},"loc":{"start":{"line":810,"column":66},"end":{"line":818,"column":3}}},"11":{"name":"(anonymous_13)","decl":{"start":{"line":820,"column":9},"end":{"line":820,"column":26}},"loc":{"start":{"line":820,"column":69},"end":{"line":828,"column":3}}},"12":{"name":"(anonymous_14)","decl":{"start":{"line":830,"column":9},"end":{"line":830,"column":27}},"loc":{"start":{"line":830,"column":70},"end":{"line":838,"column":3}}},"13":{"name":"(anonymous_15)","decl":{"start":{"line":840,"column":9},"end":{"line":840,"column":25}},"loc":{"start":{"line":840,"column":69},"end":{"line":848,"column":3}}},"14":{"name":"(anonymous_16)","decl":{"start":{"line":850,"column":9},"end":{"line":850,"column":28}},"loc":{"start":{"line":850,"column":72},"end":{"line":858,"column":3}}},"15":{"name":"(anonymous_17)","decl":{"start":{"line":860,"column":9},"end":{"line":860,"column":26}},"loc":{"start":{"line":860,"column":51},"end":{"line":867,"column":3}}},"16":{"name":"(anonymous_18)","decl":{"start":{"line":869,"column":9},"end":{"line":869,"column":28}},"loc":{"start":{"line":869,"column":41},"end":{"line":876,"column":3}}}},"branchMap":{"0":{"loc":{"start":{"line":85,"column":2},"end":{"line":93,"column":null}},"type":"cond-expr","locations":[{"start":{"line":86,"column":6},"end":{"line":92,"column":null}},{"start":{"line":93,"column":6},"end":{"line":93,"column":null}}]},"1":{"loc":{"start":{"line":96,"column":2},"end":{"line":103,"column":null}},"type":"cond-expr","locations":[{"start":{"line":97,"column":6},"end":{"line":102,"column":null}},{"start":{"line":103,"column":6},"end":{"line":103,"column":null}}]},"2":{"loc":{"start":{"line":557,"column":38},"end":{"line":575,"column":null}},"type":"cond-expr","locations":[{"start":{"line":558,"column":42},"end":{"line":574,"column":null}},{"start":{"line":575,"column":42},"end":{"line":575,"column":null}}]},"3":{"loc":{"start":{"line":578,"column":38},"end":{"line":585,"column":null}},"type":"cond-expr","locations":[{"start":{"line":579,"column":42},"end":{"line":584,"column":null}},{"start":{"line":585,"column":42},"end":{"line":585,"column":null}}]},"4":{"loc":{"start":{"line":727,"column":12},"end":{"line":727,"column":29}},"type":"cond-expr","locations":[{"start":{"line":727,"column":12},"end":{"line":727,"column":23}},{"start":{"line":727,"column":27},"end":{"line":727,"column":29}}]},"5":{"loc":{"start":{"line":727,"column":12},"end":{"line":727,"column":27}},"type":"binary-expr","locations":[{"start":{"line":727,"column":12},"end":{"line":727,"column":27}},{"start":{"line":727,"column":12},"end":{"line":727,"column":27}}]},"6":{"loc":{"start":{"line":752,"column":12},"end":{"line":752,"column":29}},"type":"cond-expr","locations":[{"start":{"line":752,"column":12},"end":{"line":752,"column":23}},{"start":{"line":752,"column":27},"end":{"line":752,"column":29}}]},"7":{"loc":{"start":{"line":752,"column":12},"end":{"line":752,"column":27}},"type":"binary-expr","locations":[{"start":{"line":752,"column":12},"end":{"line":752,"column":27}},{"start":{"line":752,"column":12},"end":{"line":752,"column":27}}]},"8":{"loc":{"start":{"line":800,"column":8},"end":{"line":801,"column":null}},"type":"cond-expr","locations":[{"start":{"line":800,"column":50},"end":{"line":800,"column":null}},{"start":{"line":801,"column":9},"end":{"line":801,"column":null}}]},"9":{"loc":{"start":{"line":800,"column":8},"end":{"line":800,"column":null}},"type":"binary-expr","locations":[{"start":{"line":800,"column":8},"end":{"line":800,"column":null}},{"start":{"line":800,"column":50},"end":{"line":800,"column":null}}]}},"s":{"0":14,"1":14,"2":14,"3":14,"4":4,"5":4,"6":4,"7":0,"8":4,"9":4,"10":4,"11":4,"12":4,"13":4,"14":4,"15":4,"16":4,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":14,"33":14},"f":{"0":4,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0]}} +} diff --git a/__tests__/lcov.test.ts b/__tests__/lcov.test.ts new file mode 100644 index 0000000..44fe385 --- /dev/null +++ b/__tests__/lcov.test.ts @@ -0,0 +1,25 @@ +import * as fs from 'fs' +import * as path from 'path' + +import {getReport} from '../src/report/get-report' +import {normalizeFilePath} from '../src/utils/path-utils' +import { LcovParser } from "../src/parsers/lcov-json/lcov-parser"; + +describe('lcov report coverage', () => { + + it('report from facebook/jest test results matches snapshot', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'lcov.json') + const outputPath = path.join(__dirname, '__outputs__', 'lcov-report-results.md') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + + const parser = new LcovParser() + const result = await parser.parse(filePath, fileContent) + expect(result).toMatchSnapshot() + + const report = getReport([result]) + fs.mkdirSync(path.dirname(outputPath), {recursive: true}) + fs.writeFileSync(outputPath, report) + }) +}) diff --git a/src/parsers/lcov-json/lcov-parser.ts b/src/parsers/lcov-json/lcov-parser.ts new file mode 100644 index 0000000..48b6d25 --- /dev/null +++ b/src/parsers/lcov-json/lcov-parser.ts @@ -0,0 +1,64 @@ +import {ParseOptions, TestParser} from '../../test-parser' + +import {TestCaseResult, TestGroupResult, TestRunResult, TestSuiteResult} from '../../test-results' +import {CovParsedStat, CovStats, LcovReport} from './lcov-types' + +export class LcovParser implements TestParser { + async parse(path: string, content: string): Promise { + const report = this.parseFile(path, content) + return this.getTestRunResult(path, report) + } + + private parseFile(path: string, content: string): LcovReport { + try { + return JSON.parse(content) as LcovReport + } catch (e) { + throw new Error(`Invalid JSON at ${path}\n\n${e}`) + } + } + private async getTestRunResult(path: string, report: LcovReport): Promise { + const suites: TestSuiteResult[] = [] + + for (const key of Object.keys(report)) { + const s: CovParsedStat = this.getParsedStat(report[key].s) + const f: CovParsedStat = this.getParsedStat(report[key].f) + const b: CovParsedStat = this.getParsedStat(report[key].b) + + const statementCaseResult: TestCaseResult = { + name: 'statement', + time: 0, + result: s.percentage >= 80 ? 'success' : 'failed' + } + const fonctionCaseResult: TestCaseResult = { + name: 'fonction', + time: 0, + result: f.percentage >= 80 ? 'success' : 'failed' + } + const brancheCaseResult: TestCaseResult = { + name: 'branche', + time: 0, + result: b.percentage >= 80 ? 'success' : 'failed' + } + + const testCases: TestCaseResult[] = [statementCaseResult, fonctionCaseResult, brancheCaseResult] + const goups: TestGroupResult[] = [new TestGroupResult(key, testCases)] + const suite: TestSuiteResult = new TestSuiteResult(key, goups) + + suites.push(suite) + console.log({key, s, f, b}) + } + + return new TestRunResult(path, suites) + } + + private getParsedStat(stat: CovStats): CovParsedStat { + const max = Object.keys(stat).length + const nonCovered = this.zeroLength(stat) + const percentage = ((max - nonCovered) / max) * 100 + + return {max, nonCovered, percentage} + } + private zeroLength(report: CovStats): number { + return Object.keys(report).filter(key => report[key] === 0).length + } +} diff --git a/src/parsers/lcov-json/lcov-types.ts b/src/parsers/lcov-json/lcov-types.ts new file mode 100644 index 0000000..9fbe2ce --- /dev/null +++ b/src/parsers/lcov-json/lcov-types.ts @@ -0,0 +1,21 @@ +export interface LcovReport { + [str: string]: { + path: string + statementMap: unknown + fnMap: unknown + branchMap: unknown + s: CovStats + f: CovStats + b: CovStats + } +} + +export interface CovStats { + [str: string]: number +} + +export interface CovParsedStat { + max: number + nonCovered: number + percentage: number +}