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",
|
"description": "Server arandanoso",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"test": "jest",
|
||||||
"run": "node server.js",
|
"run": "node server.js",
|
||||||
"dev": "DEBUG=true nodemon server.js"
|
"dev": "DEBUG=true nodemon server.js"
|
||||||
},
|
},
|
||||||
@ -35,6 +36,10 @@
|
|||||||
"socket.io": "^4.7.5"
|
"socket.io": "^4.7.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"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 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");
|
const User = require("../models/User");
|
||||||
|
|
||||||
router.post('/register', rateLimitMiddleware, (req, res) => {
|
router.post('/register', rateLimitMiddleware, (req, res) => {
|
||||||
|
@ -6,7 +6,7 @@ const passport = require('passport');
|
|||||||
const Campaign = require("../models/Campaign");
|
const Campaign = require("../models/Campaign");
|
||||||
const CampaignUser = require("../models/CampaignUser");
|
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) => {
|
router.post('/register', passport.authenticate('jwt', {session: false}), rateLimitMiddleware, (req, res) => {
|
||||||
|
@ -2,7 +2,7 @@ const express = require('express');
|
|||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
const Concept = require('../models/Concept');
|
const Concept = require('../models/Concept');
|
||||||
const { hasCampaign } = require('../config/middleware');
|
const { hasCampaign } = require('../services/middleware');
|
||||||
const { getIo } = require('../io/socket');
|
const { getIo } = require('../io/socket');
|
||||||
|
|
||||||
const io = getIo();
|
const io = getIo();
|
||||||
|
@ -2,15 +2,15 @@ const express = require('express');
|
|||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
const passport = require('passport');
|
const passport = require('passport');
|
||||||
const rateLimitMiddleware = require("../config/rate-limiter");
|
const rateLimitMiddleware = require("../services/rate-limiter");
|
||||||
|
|
||||||
const Campaign = require("../models/Campaign");
|
const Campaign = require("../models/Campaign");
|
||||||
const CampaignUser = require("../models/CampaignUser");
|
const CampaignUser = require("../models/CampaignUser");
|
||||||
const Map = require("../models/Map");
|
const Map = require("../models/Map");
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
const upload = require("../config/storage");
|
const upload = require("../services/storage");
|
||||||
const { hasCampaign } = require('../config/middleware');
|
const { hasCampaign } = require('../services/middleware');
|
||||||
|
|
||||||
router.post('/create-resource', hasCampaign, upload.single("image"), (req, res) => {
|
router.post('/create-resource', hasCampaign, upload.single("image"), (req, res) => {
|
||||||
const imageName = req.file.filename;
|
const imageName = req.file.filename;
|
||||||
|
@ -4,16 +4,16 @@ const router = express.Router();
|
|||||||
const bcrypt = require('bcryptjs');
|
const bcrypt = require('bcryptjs');
|
||||||
const jwt = require('jsonwebtoken');
|
const jwt = require('jsonwebtoken');
|
||||||
const passport = require('passport');
|
const passport = require('passport');
|
||||||
const secret = require('../config/keys').secret;
|
const secret = require('../services/keys').secret;
|
||||||
const rateLimitMiddleware = require("../config/rate-limiter");
|
const rateLimitMiddleware = require("../services/rate-limiter");
|
||||||
const { default: jwtDecode } = require('jwt-decode');
|
const { default: jwtDecode } = require('jwt-decode');
|
||||||
const crypto = require("crypto");
|
const crypto = require("crypto");
|
||||||
|
|
||||||
const { isAdmin } = require('../config/middleware');
|
const { isAdmin } = require('../services/middleware');
|
||||||
|
|
||||||
const User = require("../models/User");
|
const User = require("../models/User");
|
||||||
|
|
||||||
const upload = require("../config/storage");
|
const upload = require("../services/storage");
|
||||||
|
|
||||||
// Admin registers new user
|
// Admin registers new user
|
||||||
router.post('/register', isAdmin, (req, res) => {
|
router.post('/register', isAdmin, (req, res) => {
|
||||||
|
@ -12,11 +12,15 @@ const cors = require('cors');
|
|||||||
const passport = require('passport');
|
const passport = require('passport');
|
||||||
const server = http.createServer(app);
|
const server = http.createServer(app);
|
||||||
const config = JSON.parse(fs.readFileSync("config.json"));
|
const config = JSON.parse(fs.readFileSync("config.json"));
|
||||||
|
const database = require('./services/database');
|
||||||
|
|
||||||
const pluginManager = require('./services/plugins')
|
const pluginManager = require('./services/plugins')
|
||||||
|
|
||||||
// SET CONSTANTS
|
// SET CONSTANTS
|
||||||
const PORT = 8081;
|
let PORT = 8081;
|
||||||
|
if(process.env.NODE_ENV == 'test')
|
||||||
|
PORT = 8082;
|
||||||
|
|
||||||
global.appRoot = path.resolve(__dirname);
|
global.appRoot = path.resolve(__dirname);
|
||||||
let mongo_final_ip = "";
|
let mongo_final_ip = "";
|
||||||
console.log("Production? " + !process.env.DEBUG);
|
console.log("Production? " + !process.env.DEBUG);
|
||||||
@ -37,16 +41,14 @@ const io = socketIo(server, {
|
|||||||
socket.setIo(io);
|
socket.setIo(io);
|
||||||
|
|
||||||
// CONNECT TO MONGODB
|
// CONNECT TO MONGODB
|
||||||
mongoose.connect(mongo_final_ip).then(() => {
|
|
||||||
console.log("Connected to database");
|
if(process.env.NODE_ENV != 'test')
|
||||||
}).catch((error) => {
|
database.connectDB();
|
||||||
console.log(error);
|
|
||||||
});
|
|
||||||
|
|
||||||
// PASSPORT
|
// PASSPORT
|
||||||
app.use(morgan('tiny'));
|
app.use(morgan('tiny'));
|
||||||
app.use(passport.initialize());
|
app.use(passport.initialize());
|
||||||
require('./config/passport')(passport);
|
require('./services/passport')(passport);
|
||||||
|
|
||||||
// PUBLIC
|
// PUBLIC
|
||||||
app.use("/public", express.static(__dirname + '/public'));
|
app.use("/public", express.static(__dirname + '/public'));
|
||||||
@ -71,6 +73,7 @@ app.use('/user', require('./routes/user'));
|
|||||||
checkAuth = passport.authenticate('jwt', {session: false});
|
checkAuth = passport.authenticate('jwt', {session: false});
|
||||||
app.use(checkAuth);
|
app.use(checkAuth);
|
||||||
|
|
||||||
|
if(process.env.NODE_ENV != 'test')
|
||||||
pluginManager.init();
|
pluginManager.init();
|
||||||
|
|
||||||
// ROUTES WITH AUTH
|
// ROUTES WITH AUTH
|
||||||
@ -87,3 +90,5 @@ require('./io/campaign')(socket.getIo());
|
|||||||
server.listen(PORT, () => {
|
server.listen(PORT, () => {
|
||||||
console.log("Dragonroll backend started");
|
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",
|
"version": "0.0.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test:unit": "npx jest",
|
"test": "npx jest",
|
||||||
"dev": "vite --port 3000 --host",
|
"dev": "vite --port 3000 --host",
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"preview": "vite preview",
|
"preview": "vite preview",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
describe("HelloWorld", () => {
|
describe("HelloWorld", () => {
|
||||||
it("renders properly", () => {
|
it("renders properly", () => {
|
||||||
expect("Hello Jest").toContain("Hello Jeot")
|
expect("Hello Jest").toContain("Hello Jest")
|
||||||
})
|
})
|
||||||
})
|
})
|
Loading…
Reference in New Issue
Block a user