Testing backend and client works!

This commit is contained in:
BinarySandia04 2024-10-09 15:43:58 +02:00
parent 8d722ef550
commit ed2e50c23f
20 changed files with 4355 additions and 58 deletions

36
.gitea/workflows/Test.yml Normal file
View 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

View File

@ -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
View File

@ -0,0 +1,5 @@
module.exports = {
testEnvironment: "node",
coveragePathIgnorePatterns: ["/node_modules/", "/tests/"],
}

4235
backend/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -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"
}
}

View File

@ -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) => {

View File

@ -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) => {

View File

@ -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();

View File

@ -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;

View File

@ -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) => {

View File

@ -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,7 +73,8 @@ app.use('/user', require('./routes/user'));
checkAuth = passport.authenticate('jwt', {session: false});
app.use(checkAuth);
pluginManager.init();
if(process.env.NODE_ENV != 'test')
pluginManager.init();
// ROUTES WITH AUTH
app.use('/campaign', require('./routes/campaign'));
@ -87,3 +90,5 @@ require('./io/campaign')(socket.getIo());
server.listen(PORT, () => {
console.log("Dragonroll backend started");
});
module.exports = { app, server }

View 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
View 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');
});
});
});

View File

@ -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",

View File

@ -1,5 +1,5 @@
describe("HelloWorld", () => {
it("renders properly", () => {
expect("Hello Jest").toContain("Hello Jeot")
expect("Hello Jest").toContain("Hello Jest")
})
})