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]
@ -12,5 +12,5 @@ jobs:
run: docker build -t retropilot-server:latest .
- name: Run linter
run: docker run --rm retropilot-server:latest npm run lint
# - name: Run tests
# run: docker run --rm -v $(pwd)/config.sample.js:/app/config.js retropilot-server:latest npm test
- name: Run tests
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 dummyGenerator from './../dummyGenerator';
import dummyGenerator from '../dummyGenerator';
export default (app) => {
describe('/v2/pilotauth/ - Testing device registration', function () {
it('Returns dongle ID on valid registration', function (done) {
request(app)
let server;
before(async () => {
server = await app;
});
describe('/v2/pilotauth/ - Testing device registration', () => {
it('Returns dongle ID on valid registration', (done) => {
request(server)
.post('/v2/pilotauth/')
.query({
imei: dummyGenerator.getImei(),
@ -24,8 +30,8 @@ export default (app) => {
.end(done);
});
it('Returns 400 when incorrect public key given', function (done) {
request(app)
it('Returns 400 when incorrect public key given', (done) => {
request(server)
.post('/v2/pilotauth/')
.query({
imei: dummyGenerator.getImei(),
@ -40,8 +46,8 @@ export default (app) => {
.end(done);
});
it('Returns 400 when missing register_token', function (done) {
request(app)
it('Returns 400 when missing register_token', (done) => {
request(server)
.post('/v2/pilotauth/')
.query({
imei: dummyGenerator.getImei(),
@ -56,8 +62,8 @@ export default (app) => {
.end(done);
});
it('Returns 400 when missing query', function (done) {
request(app)
it('Returns 400 when missing query', (done) => {
request(server)
.post('/v2/pilotauth/')
.set('Accept', 'application/x-www-form-urlencoded')

View File

@ -1,29 +1,39 @@
import request from 'supertest';
export default (app) => {
describe('/api', function () {
it('Load general app stats', function (done) {
request(app)
let server;
before(async () => {
server = await app;
});
describe('/api', () => {
it('Load general app stats', (done) => {
request(server)
.get('/retropilot/0/useradmin')
.expect('Content-Type', /json/)
.expect(200)
.expect((req) => {
const body = req.body;
const { body } = req;
try {
if (
body.hasOwnProperty('success') && body.success === true &&
body.hasOwnProperty('data') &&
body.data.hasOwnProperty('appStats') &&
body.data.appStats.hasOwnProperty('config') &&
typeof body.data.appStats.config.registerAllowed === 'boolean' &&
typeof body.data.appStats.process.env.WELCOME_MESSAGE === 'string' &&
typeof body.data.appStats['accounts'] === 'number' &&
typeof body.data.appStats['devices'] === 'number' &&
typeof body.data.appStats['drives'] === 'number' &&
(typeof body.data.appStats['storageUsed'] === 'number' || body.data.appStats['storageUsed'] === 'Unsupported Platform')) {
body.hasOwnProperty('success')
&& body.success === true
&& body.hasOwnProperty('data')
&& body.data.hasOwnProperty('appStats')
&& body.data.appStats.hasOwnProperty('config')
&& typeof body.data.appStats.config.registerAllowed === 'boolean'
&& typeof body.data.appStats.process.env.WELCOME_MESSAGE === 'string'
&& typeof body.data.appStats.accounts === 'number'
&& typeof body.data.appStats.devices === 'number'
&& typeof body.data.appStats.drives === 'number'
&& (typeof body.data.appStats.storageUsed === 'number'
|| body.data.appStats.storageUsed === 'Unsupported Platform')
) {
return true;
}
// eslint-disable-next-line no-empty
} catch (ignored) {
}
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';
export default (app) => {
let server;
before(async () => {
server = await app;
});
describe('/useradmin', () => {
it('Page load', (done) => {
request(app)
request(server)
.get('/useradmin')
.expect('Content-Type', /html/)
.expect(200)
@ -12,7 +18,7 @@ export default (app) => {
});
it('Redirect on existing session', (done) => {
request(app)
request(server)
.get('/useradmin')
// 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;'])
@ -24,7 +30,7 @@ export default (app) => {
describe('/useradmin/register/token', () => {
it('No duplicate emails', (done) => {
request(app)
request(server)
.post('/useradmin/register/token')
// TODO add dedicated DB/user account for tests to run on
.send(`email=${dummyGenerator.alreadyRegisteredEmail}`)
@ -34,7 +40,7 @@ export default (app) => {
});
it('Accepts new accounts', (done) => {
request(app)
request(server)
.post('/useradmin/register/token')
// TODO add dedicated DB/user account for tests to run on
.send(`email=${dummyGenerator.newUserEmail}`)

View File

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