Testing backend and client works!
This commit is contained in:
parent
8d722ef550
commit
ed2e50c23f
36
.gitea/workflows/Test.yml
Normal file
36
.gitea/workflows/Test.yml
Normal file
@ -0,0 +1,36 @@
|
||||
name: test
|
||||
run-name: CI Test
|
||||
on: [push]
|
||||
jobs:
|
||||
run-tests-client:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ./
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '22'
|
||||
- name: "Install dependencies"
|
||||
working-directory: ./client
|
||||
run: npm ci
|
||||
- name: "Test client"
|
||||
working-directory: ./client
|
||||
run: npm run test
|
||||
run-tests-backend:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ./
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '22'
|
||||
- name: "Install dependencies"
|
||||
working-directory: ./server
|
||||
run: npm ci
|
||||
- name: "Test server"
|
||||
working-directory: ./server
|
||||
run: npm run test
|
@ -1,20 +0,0 @@
|
||||
name: ci
|
||||
run-name: CI Test
|
||||
on: [push]
|
||||
jobs:
|
||||
run-tests:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ./
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '22'
|
||||
- name: "Install dependencies"
|
||||
working-directory: ./client
|
||||
run: npm ci
|
||||
- name: "Test client"
|
||||
working-directory: ./client
|
||||
run: npm run test:unit
|
5
backend/jest.config.js
Normal file
5
backend/jest.config.js
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
module.exports = {
|
||||
testEnvironment: "node",
|
||||
coveragePathIgnorePatterns: ["/node_modules/", "/tests/"],
|
||||
}
|
4235
backend/package-lock.json
generated
4235
backend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -4,6 +4,7 @@
|
||||
"description": "Server arandanoso",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "jest",
|
||||
"run": "node server.js",
|
||||
"dev": "DEBUG=true nodemon server.js"
|
||||
},
|
||||
@ -35,6 +36,10 @@
|
||||
"socket.io": "^4.7.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"nodemon": "^2.0.22"
|
||||
"cross-env": "^7.0.3",
|
||||
"jest": "^29.7.0",
|
||||
"mongodb-memory-server": "^10.1.0",
|
||||
"nodemon": "^2.0.22",
|
||||
"supertest": "^7.0.0"
|
||||
}
|
||||
}
|
||||
|
@ -3,9 +3,9 @@ const router = express.Router();
|
||||
|
||||
|
||||
const bcrypt = require('bcryptjs');
|
||||
const rateLimitMiddleware = require("../config/rate-limiter");
|
||||
const rateLimitMiddleware = require("../services/rate-limiter");
|
||||
|
||||
const { isAdmin } = require('../config/middleware');
|
||||
const { isAdmin } = require('../services/middleware');
|
||||
const User = require("../models/User");
|
||||
|
||||
router.post('/register', rateLimitMiddleware, (req, res) => {
|
||||
|
@ -6,7 +6,7 @@ const passport = require('passport');
|
||||
const Campaign = require("../models/Campaign");
|
||||
const CampaignUser = require("../models/CampaignUser");
|
||||
|
||||
const upload = require("../config/storage");
|
||||
const upload = require("../services/storage");
|
||||
|
||||
/*
|
||||
router.post('/register', passport.authenticate('jwt', {session: false}), rateLimitMiddleware, (req, res) => {
|
||||
|
@ -2,7 +2,7 @@ const express = require('express');
|
||||
const router = express.Router();
|
||||
|
||||
const Concept = require('../models/Concept');
|
||||
const { hasCampaign } = require('../config/middleware');
|
||||
const { hasCampaign } = require('../services/middleware');
|
||||
const { getIo } = require('../io/socket');
|
||||
|
||||
const io = getIo();
|
||||
|
@ -2,15 +2,15 @@ const express = require('express');
|
||||
const router = express.Router();
|
||||
|
||||
const passport = require('passport');
|
||||
const rateLimitMiddleware = require("../config/rate-limiter");
|
||||
const rateLimitMiddleware = require("../services/rate-limiter");
|
||||
|
||||
const Campaign = require("../models/Campaign");
|
||||
const CampaignUser = require("../models/CampaignUser");
|
||||
const Map = require("../models/Map");
|
||||
const fs = require('fs');
|
||||
|
||||
const upload = require("../config/storage");
|
||||
const { hasCampaign } = require('../config/middleware');
|
||||
const upload = require("../services/storage");
|
||||
const { hasCampaign } = require('../services/middleware');
|
||||
|
||||
router.post('/create-resource', hasCampaign, upload.single("image"), (req, res) => {
|
||||
const imageName = req.file.filename;
|
||||
|
@ -4,16 +4,16 @@ const router = express.Router();
|
||||
const bcrypt = require('bcryptjs');
|
||||
const jwt = require('jsonwebtoken');
|
||||
const passport = require('passport');
|
||||
const secret = require('../config/keys').secret;
|
||||
const rateLimitMiddleware = require("../config/rate-limiter");
|
||||
const secret = require('../services/keys').secret;
|
||||
const rateLimitMiddleware = require("../services/rate-limiter");
|
||||
const { default: jwtDecode } = require('jwt-decode');
|
||||
const crypto = require("crypto");
|
||||
|
||||
const { isAdmin } = require('../config/middleware');
|
||||
const { isAdmin } = require('../services/middleware');
|
||||
|
||||
const User = require("../models/User");
|
||||
|
||||
const upload = require("../config/storage");
|
||||
const upload = require("../services/storage");
|
||||
|
||||
// Admin registers new user
|
||||
router.post('/register', isAdmin, (req, res) => {
|
||||
|
@ -12,11 +12,15 @@ const cors = require('cors');
|
||||
const passport = require('passport');
|
||||
const server = http.createServer(app);
|
||||
const config = JSON.parse(fs.readFileSync("config.json"));
|
||||
const database = require('./services/database');
|
||||
|
||||
const pluginManager = require('./services/plugins')
|
||||
|
||||
// SET CONSTANTS
|
||||
const PORT = 8081;
|
||||
let PORT = 8081;
|
||||
if(process.env.NODE_ENV == 'test')
|
||||
PORT = 8082;
|
||||
|
||||
global.appRoot = path.resolve(__dirname);
|
||||
let mongo_final_ip = "";
|
||||
console.log("Production? " + !process.env.DEBUG);
|
||||
@ -37,16 +41,14 @@ const io = socketIo(server, {
|
||||
socket.setIo(io);
|
||||
|
||||
// CONNECT TO MONGODB
|
||||
mongoose.connect(mongo_final_ip).then(() => {
|
||||
console.log("Connected to database");
|
||||
}).catch((error) => {
|
||||
console.log(error);
|
||||
});
|
||||
|
||||
if(process.env.NODE_ENV != 'test')
|
||||
database.connectDB();
|
||||
|
||||
// PASSPORT
|
||||
app.use(morgan('tiny'));
|
||||
app.use(passport.initialize());
|
||||
require('./config/passport')(passport);
|
||||
require('./services/passport')(passport);
|
||||
|
||||
// PUBLIC
|
||||
app.use("/public", express.static(__dirname + '/public'));
|
||||
@ -71,6 +73,7 @@ app.use('/user', require('./routes/user'));
|
||||
checkAuth = passport.authenticate('jwt', {session: false});
|
||||
app.use(checkAuth);
|
||||
|
||||
if(process.env.NODE_ENV != 'test')
|
||||
pluginManager.init();
|
||||
|
||||
// ROUTES WITH AUTH
|
||||
@ -87,3 +90,5 @@ require('./io/campaign')(socket.getIo());
|
||||
server.listen(PORT, () => {
|
||||
console.log("Dragonroll backend started");
|
||||
});
|
||||
|
||||
module.exports = { app, server }
|
37
backend/services/database.js
Normal file
37
backend/services/database.js
Normal file
@ -0,0 +1,37 @@
|
||||
const mongoose = require('mongoose');
|
||||
const fs = require('fs')
|
||||
const config = JSON.parse(fs.readFileSync("config.json"));
|
||||
|
||||
const { MongoMemoryServer } = require('mongodb-memory-server');
|
||||
let mongod = null;
|
||||
|
||||
const connectDB = async() => {
|
||||
try {
|
||||
let dbUrl = `mongodb://${process.env.DEBUG ? config.mongo_ip_debug : config.mongo_ip}/dragonroll`;
|
||||
if(process.env.NODE_ENV == 'test'){
|
||||
mongod = await MongoMemoryServer.create();
|
||||
dbUrl = mongod.getUri();
|
||||
}
|
||||
|
||||
const conn = await mongoose.connect(dbUrl);
|
||||
|
||||
console.log(`Connected to MongoDB: ${dbUrl}`);
|
||||
} catch(err) {
|
||||
console.log(err);
|
||||
process.exit(1);
|
||||
}
|
||||
};
|
||||
|
||||
const disconnectDB = async() => {
|
||||
try {
|
||||
await mongoose.connection.close();
|
||||
if(mongod) {
|
||||
await mongod.stop();
|
||||
}
|
||||
} catch(err) {
|
||||
console.log(err);
|
||||
process.exit(1);
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = { connectDB, disconnectDB };
|
26
backend/tests/app.spec.js
Normal file
26
backend/tests/app.spec.js
Normal file
@ -0,0 +1,26 @@
|
||||
const supertest = require('supertest');
|
||||
const { app, server } = require('../server.js');
|
||||
const request = supertest(app);
|
||||
|
||||
const { connectDB, disconnectDB } = require('../services/database');
|
||||
|
||||
describe('API test', () => {
|
||||
beforeAll(() => {
|
||||
connectDB();
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
disconnectDB();
|
||||
server.close();
|
||||
});
|
||||
|
||||
describe('GET /user/has-admin', () => {
|
||||
it('should get if app is configured', async () => {
|
||||
const response = await request.get('/user/has-admin')
|
||||
.set('Accept', 'application/json')
|
||||
.expect('Content-Type', /json/)
|
||||
.expect(200)
|
||||
expect(response.body.status).toEqual('init');
|
||||
});
|
||||
});
|
||||
});
|
@ -3,7 +3,7 @@
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"test:unit": "npx jest",
|
||||
"test": "npx jest",
|
||||
"dev": "vite --port 3000 --host",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview",
|
||||
|
@ -1,5 +1,5 @@
|
||||
describe("HelloWorld", () => {
|
||||
it("renders properly", () => {
|
||||
expect("Hello Jest").toContain("Hello Jeot")
|
||||
expect("Hello Jest").toContain("Hello Jest")
|
||||
})
|
||||
})
|
Loading…
Reference in New Issue
Block a user