ci: fix testing

pull/4/head
Cameron Clough 2022-03-21 20:11:47 +00:00
parent 1c1b8f66c8
commit 3ef44a5ce5
No known key found for this signature in database
GPG Key ID: BFB3B74B026ED43F
5 changed files with 64 additions and 36 deletions

View File

@ -1,4 +1,4 @@
name: CI name: Build and test
on: [push, pull_request] on: [push, pull_request]
@ -12,5 +12,5 @@ jobs:
run: docker build -t retropilot-server:latest . run: docker build -t retropilot-server:latest .
- name: Run linter - name: Run linter
run: docker run --rm retropilot-server:latest npm run lint run: docker run --rm retropilot-server:latest npm run lint
# - name: Run tests - name: Run tests
# run: docker run --rm -v $(pwd)/config.sample.js:/app/config.js retropilot-server:latest npm test run: docker run --rm --env-file .env.sample -v /tmp/realdata:/app/realdata retropilot-server:latest npm test

View File

@ -1,10 +1,16 @@
import request from 'supertest'; import request from 'supertest';
import dummyGenerator from './../dummyGenerator'; import dummyGenerator from '../dummyGenerator';
export default (app) => { export default (app) => {
describe('/v2/pilotauth/ - Testing device registration', function () { let server;
it('Returns dongle ID on valid registration', function (done) {
request(app) before(async () => {
server = await app;
});
describe('/v2/pilotauth/ - Testing device registration', () => {
it('Returns dongle ID on valid registration', (done) => {
request(server)
.post('/v2/pilotauth/') .post('/v2/pilotauth/')
.query({ .query({
imei: dummyGenerator.getImei(), imei: dummyGenerator.getImei(),
@ -24,8 +30,8 @@ export default (app) => {
.end(done); .end(done);
}); });
it('Returns 400 when incorrect public key given', function (done) { it('Returns 400 when incorrect public key given', (done) => {
request(app) request(server)
.post('/v2/pilotauth/') .post('/v2/pilotauth/')
.query({ .query({
imei: dummyGenerator.getImei(), imei: dummyGenerator.getImei(),
@ -40,8 +46,8 @@ export default (app) => {
.end(done); .end(done);
}); });
it('Returns 400 when missing register_token', function (done) { it('Returns 400 when missing register_token', (done) => {
request(app) request(server)
.post('/v2/pilotauth/') .post('/v2/pilotauth/')
.query({ .query({
imei: dummyGenerator.getImei(), imei: dummyGenerator.getImei(),
@ -56,8 +62,8 @@ export default (app) => {
.end(done); .end(done);
}); });
it('Returns 400 when missing query', function (done) { it('Returns 400 when missing query', (done) => {
request(app) request(server)
.post('/v2/pilotauth/') .post('/v2/pilotauth/')
.set('Accept', 'application/x-www-form-urlencoded') .set('Accept', 'application/x-www-form-urlencoded')

View File

@ -1,29 +1,39 @@
import request from 'supertest'; import request from 'supertest';
export default (app) => { export default (app) => {
describe('/api', function () { let server;
it('Load general app stats', function (done) {
request(app) before(async () => {
server = await app;
});
describe('/api', () => {
it('Load general app stats', (done) => {
request(server)
.get('/retropilot/0/useradmin') .get('/retropilot/0/useradmin')
.expect('Content-Type', /json/) .expect('Content-Type', /json/)
.expect(200) .expect(200)
.expect((req) => { .expect((req) => {
const body = req.body; const { body } = req;
try { try {
if ( if (
body.hasOwnProperty('success') && body.success === true && body.hasOwnProperty('success')
body.hasOwnProperty('data') && && body.success === true
body.data.hasOwnProperty('appStats') && && body.hasOwnProperty('data')
body.data.appStats.hasOwnProperty('config') && && body.data.hasOwnProperty('appStats')
typeof body.data.appStats.config.registerAllowed === 'boolean' && && body.data.appStats.hasOwnProperty('config')
typeof body.data.appStats.process.env.WELCOME_MESSAGE === 'string' && && typeof body.data.appStats.config.registerAllowed === 'boolean'
typeof body.data.appStats['accounts'] === 'number' && && typeof body.data.appStats.process.env.WELCOME_MESSAGE === 'string'
typeof body.data.appStats['devices'] === 'number' && && typeof body.data.appStats.accounts === 'number'
typeof body.data.appStats['drives'] === 'number' && && typeof body.data.appStats.devices === 'number'
(typeof body.data.appStats['storageUsed'] === 'number' || body.data.appStats['storageUsed'] === 'Unsupported Platform')) { && typeof body.data.appStats.drives === 'number'
&& (typeof body.data.appStats.storageUsed === 'number'
|| body.data.appStats.storageUsed === 'Unsupported Platform')
) {
return true; return true;
} }
// eslint-disable-next-line no-empty
} catch (ignored) { } catch (ignored) {
} }
throw new Error('Invalid returned parameters in GET /retropilot/0/useradmin '); throw new Error('Invalid returned parameters in GET /retropilot/0/useradmin ');

View File

@ -2,9 +2,15 @@ import request from 'supertest';
import dummyGenerator from '../dummyGenerator'; import dummyGenerator from '../dummyGenerator';
export default (app) => { export default (app) => {
let server;
before(async () => {
server = await app;
});
describe('/useradmin', () => { describe('/useradmin', () => {
it('Page load', (done) => { it('Page load', (done) => {
request(app) request(server)
.get('/useradmin') .get('/useradmin')
.expect('Content-Type', /html/) .expect('Content-Type', /html/)
.expect(200) .expect(200)
@ -12,7 +18,7 @@ export default (app) => {
}); });
it('Redirect on existing session', (done) => { it('Redirect on existing session', (done) => {
request(app) request(server)
.get('/useradmin') .get('/useradmin')
// pull sessions from a store // pull sessions from a store
.set('Cookie', ['session=s%3Aj%3A%7B%22account%22%3A%22adam%40adamblack.us%22%2C%22expires%22%3A1653171350726%7D.cRX19pNfx6mCGZ9ZYHcUIyy5CAQVMDgKrp%2F%2Bf7NFVYA;']) .set('Cookie', ['session=s%3Aj%3A%7B%22account%22%3A%22adam%40adamblack.us%22%2C%22expires%22%3A1653171350726%7D.cRX19pNfx6mCGZ9ZYHcUIyy5CAQVMDgKrp%2F%2Bf7NFVYA;'])
@ -24,7 +30,7 @@ export default (app) => {
describe('/useradmin/register/token', () => { describe('/useradmin/register/token', () => {
it('No duplicate emails', (done) => { it('No duplicate emails', (done) => {
request(app) request(server)
.post('/useradmin/register/token') .post('/useradmin/register/token')
// TODO add dedicated DB/user account for tests to run on // TODO add dedicated DB/user account for tests to run on
.send(`email=${dummyGenerator.alreadyRegisteredEmail}`) .send(`email=${dummyGenerator.alreadyRegisteredEmail}`)
@ -34,7 +40,7 @@ export default (app) => {
}); });
it('Accepts new accounts', (done) => { it('Accepts new accounts', (done) => {
request(app) request(server)
.post('/useradmin/register/token') .post('/useradmin/register/token')
// TODO add dedicated DB/user account for tests to run on // TODO add dedicated DB/user account for tests to run on
.send(`email=${dummyGenerator.newUserEmail}`) .send(`email=${dummyGenerator.newUserEmail}`)

View File

@ -3,20 +3,26 @@ import request from 'supertest';
import app from '../src/server/app'; import app from '../src/server/app';
let server;
before(async () => {
server = await app;
});
// TODO better way to only run tests once server is up // TODO better way to only run tests once server is up
describe('loading express', () => { describe('loading express', () => {
it('responds to /', (done) => { it('responds to /', (done) => {
request(app) request(server)
.get('/') .get('/')
.expect(200, done); .expect(200, done);
}); });
it('404 everything else', (done) => { it('404 everything else', (done) => {
request(app) request(server)
.get('/foo/bar') .get('/foo/bar')
.expect(404, done); .expect(404, done);
}); });
}); });
require('./routes/api.test')(app); require('./routes/api.test').default(app);
require('./routes/useradmin.test')(app); require('./routes/useradmin.test').default(app);
if (process.env.USE_USER_ADMIN_API) require('./routes/userAdminApi.test')(app); if (process.env.USE_USER_ADMIN_API) require('./routes/userAdminApi.test').default(app);