feat: add testing setup in backend

This commit is contained in:
Lin, Hung-Shin committed 2023-11-17 10:59:47 +08:00
1 parent cb376caff0
commit 1f77328362
15 files changed
+92 -100

No files matched your search

+3 -7
View File
@@ -1,6 +1,7 @@
import { matchedData } from 'express-validator'
import { User } from '@linux-odyssey/models'
import { genJWT, hashPassword } from '../../utils/auth.js'
import { genJWT } from '../../utils/auth.js'
import { createUser } from '../../models/userManager.js'
import { asyncHandler } from '../../middleware/error.js'
export const issueToken = asyncHandler(async (req, res) => {
@@ -16,12 +17,7 @@ export const issueToken = asyncHandler(async (req, res) => {
export const register = asyncHandler(async (req, res, next) => {
const { username, password, email } = matchedData(req)
const user = new User({
username,
email,
})
user.hashedPassword = await hashPassword(password)
await user.save()
const user = await createUser(username, email, password)
req.login(user, (err) => {
if (err) {
next(err)
@@ -2,7 +2,7 @@ import { Command, Session } from '@linux-odyssey/models'
import { matchedData } from 'express-validator'
import CommandHandler from '../../game/commandHandler.js'
import { pushToSession } from '../socket.js'
import { finishSession } from '../../game/sessionManager.js'
import { finishSession } from '../../models/sessionManager.js'
import { asyncHandler } from '../../middleware/error.js'
const commandCompleteCallbacks = new Map()
@@ -4,7 +4,7 @@ import {
createNewSession,
getOrCreateActiveSession,
isQuestUnlocked,
} from '../../game/sessionManager.js'
} from '../../models/sessionManager.js'
import { asyncHandler } from '../../middleware/error.js'
function sessionSummary(session) {
+5
View File
@@ -40,6 +40,11 @@ const config = {
trustedProxies: getTrustProxies('TRUSTED_PROXIES'),
surveyUrl: getUrl('SURVEY_URL', ''),
bugReportUrl: getUrl('BUG_REPORT_URL', ''),
testing: {
enabled: process.env.TESTING === 'true',
username: get('TESTING_USERNAME', ''),
password: get('TESTING_PASSWORD', ''),
},
}
config.baseUrl = get('BASE_URL', `http://${config.host}:${config.port}`)
+5
View File
@@ -15,6 +15,7 @@ import errorHandler from './middleware/error.js'
import { globalRateLimit } from './middleware/rateLimiter.js'
import sessionMiddleware from './middleware/session.js'
import expiryRemovalScheduler from './containers/expiryChecker.js'
import setupTest from './utils/test.js'
async function main() {
if (!config.secret) {
@@ -33,6 +34,10 @@ async function main() {
process.exit(1)
}
if (config.testing.enabled) {
await setupTest()
}
await loadAndUpdateQuests()
expiryRemovalScheduler()
@@ -1,6 +1,6 @@
import { Session, Quest, UserProfile } from '@linux-odyssey/models'
import { createContainer, deleteContainer } from '../containers/docker.js'
import SessionHandler from './sessionHandler.js'
import SessionHandler from '../game/sessionHandler.js'
async function deactivateSessions(user, quest) {
const sessions = await Session.find({
+16
View File
@@ -0,0 +1,16 @@
import { User, UserProfile } from '@linux-odyssey/models'
import { hashPassword } from '../utils/auth.js'
export async function createUser(username, email, password) {
const user = new User({
username,
email,
})
user.hashedPassword = await hashPassword(password)
await user.save()
const userProfile = new UserProfile({
user,
})
await userProfile.save()
}
+22
View File
@@ -0,0 +1,22 @@
import { User } from '@linux-odyssey/models'
import config from '../config.js'
import { createUser } from '../models/userManager.js'
export default async function setupTest() {
console.log('Setting up test account')
if (!(config.testing.username && config.testing.password)) {
throw new Error(
'No testing account found! Please set TESTING_USERNAME and TESTING_PASSWORD in .env'
)
}
const { username, password } = config.testing
const email = `${username}@example.com`
if (await User.exists({ username })) {
console.log('Testing account already exists')
return
}
await createUser(username, email, password)
console.log('Created testing account')
}