• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

suculent / thinx-device-api / #252646960

14 Mar 2026 04:35PM UTC coverage: 52.052% (-10.0%) from 62.077%
#252646960

push

suculent
Revert test bootstrap experiments to baseline

1399 of 3653 branches covered (38.3%)

Branch coverage included in aggregate %.

27 of 40 new or added lines in 3 files covered. (67.5%)

1153 existing lines in 32 files now uncovered.

5996 of 10554 relevant lines covered (56.81%)

10.32 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

41.1
/spec/jasmine/ZZ-RouterRSAKeySpec.js
1
/* Router integration test only; does not have to cover full unit functionality. */
2

3
const THiNX = require("../../thinx-core.js");
1✔
4

5
let chai = require('chai');
1✔
6
var expect = require('chai').expect;
1✔
7
let chaiHttp = require('chai-http');
1✔
8
chai.use(chaiHttp);
1✔
9

10
let thx;
11

12
describe("RSA Keys (noauth)", function () {
1✔
13

14
    beforeAll((done) => {
1✔
15
        thx = new THiNX();
1✔
16
        thx.init(() => {
1✔
17
            done();
×
18
        });
19
    });
20

21
    it("GET /api/user/rsakey/create", function (done) {
1✔
22
        chai.request(thx.app)
×
23
            .get('/api/user/rsakey/create')
24
            .end((err, res) => {
25
                expect(res.status).to.equal(401);
×
26
                done();
×
27
            });
28
    }, 30000);
29

30
    it("GET /api/user/rsakey/list", function (done) {
1✔
31
        chai.request(thx.app)
×
32
            .get('/api/user/rsakey/list')
33
            .end((err, res) => {
34
                expect(res.status).to.equal(401);
×
35
                done();
×
36
            });
37
    }, 30000);
38

39
    it("POST /api/user/rsakey/revoke (noauth, invalid)", function (done) {
1✔
40
        chai.request(thx.app)
×
41
            .post('/api/user/rsakey/revoke')
42
            .send()
43
            .end((err, res) => {
44
                expect(res.status).to.equal(401);
×
45
                done();
×
46
            });
47
    }, 30000);
48

49
});
50

51
describe("RSA Keys (JWT)", function () {
1✔
52

53
    let agent;
54
    let jwt;
55
  
56
    beforeAll((done) => {
1✔
57
        agent = chai.request.agent(thx.app);
1✔
58
        agent
1✔
59
            .post('/api/login')
60
            .send({ username: 'dynamic', password: 'dynamic', remember: false })
61
            .then(function (res) {
62
                expect(res).to.have.cookie('x-thx-core');
1✔
UNCOV
63
                let body = JSON.parse(res.text);
×
UNCOV
64
                jwt = 'Bearer ' + body.access_token;
×
UNCOV
65
                done();
×
66
            })
67
            .catch((e) => { console.log(e); });
1✔
68
    });
69
  
70
    afterAll((done) => {
1✔
71
        agent.close();
1✔
72
        if (thx && thx.server) thx.server.close();
1!
73
        done();
1✔
74
    });
75

76
    let key_id = null;
1✔
77

78
    it("GET /api/user/rsakey/create", function (done) {
1✔
UNCOV
79
        chai.request(thx.app)
×
80
            .get('/api/user/rsakey/create')
81
            .set('Authorization', jwt)
82
            .end((err, res) => {
UNCOV
83
                expect(res.status).to.equal(200);
×
UNCOV
84
                let j = JSON.parse(res.text);
×
UNCOV
85
                expect(j.success).to.equal(true);
×
UNCOV
86
                let k = j.response;
×
UNCOV
87
                expect(k).to.be.an('object');
×
UNCOV
88
                expect(k.name).to.be.a('number');
×
UNCOV
89
                expect(k.pubkey).to.be.a('string');
×
90
                
UNCOV
91
                done();
×
92
            });
93
    }, 30000);
94

95
    it("GET /api/user/rsakey/list", function (done) {
1✔
UNCOV
96
        chai.request(thx.app)
×
97
            .get('/api/user/rsakey/list')
98
            .set('Authorization', jwt)
99
            .end((err, res) => {
UNCOV
100
                console.log("🚸 [chai] GET /api/user/rsakey/list response:", res.text, res.status);
×
UNCOV
101
                let r = JSON.parse(res.text);
×
UNCOV
102
                key_id = r.response[0].filename;
×
UNCOV
103
                expect(res.status).to.equal(200);
×
UNCOV
104
                expect(res.text).to.be.a('string');
×
UNCOV
105
                done();
×
106
            });
107
    }, 30000);
108

109
    it("POST /api/user/rsakey/revoke (jwt, undefined)", function (done) {
1✔
UNCOV
110
        chai.request(thx.app)
×
111
            .post('/api/user/rsakey/revoke')
112
            .set('Authorization', jwt)
113
            .send()
114
            .end((err, res) => {
UNCOV
115
                expect(res.status).to.equal(400);
×
UNCOV
116
                expect(res.text).to.be.a('string');
×
UNCOV
117
                expect(res.text).to.equal('{"success":false,"response":"invalid_body"}');
×
UNCOV
118
                done();
×
119
            });
120
    }, 30000);
121

122
    it("POST /api/user/rsakey/revoke (valid)", function (done) {
1✔
UNCOV
123
        console.log("🚸 [chai] POST /api/user/rsakey/revoke (valid)");
×
UNCOV
124
        chai.request(thx.app)
×
125
            .post('/api/user/rsakey/revoke')
126
            .set('Authorization', jwt)
127
            .send({ filenames: [key_id]})
128
            .end((err, res) => {
UNCOV
129
                console.log("🚸 [chai] POST /api/user/rsakey/revoke (valid) response:", res.text, res.status);
×
UNCOV
130
                expect(res.status).to.equal(200);
×
UNCOV
131
                let j = JSON.parse(res.text);
×
UNCOV
132
                expect(j.success).to.equal(true);
×
UNCOV
133
                expect(j.response).to.be.an('array');
×
UNCOV
134
                done();
×
135
            });
136
    }, 30000);
137
});
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc