mirror of
https://github.com/sasjs/server.git
synced 2025-12-11 19:44:35 +00:00
feat: added mocking endpoints
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -6,6 +6,7 @@ node_modules/
|
|||||||
sas/
|
sas/
|
||||||
sasjs_root/
|
sasjs_root/
|
||||||
tmp/
|
tmp/
|
||||||
|
api/mocks/*
|
||||||
build/
|
build/
|
||||||
sasjsbuild/
|
sasjsbuild/
|
||||||
sasjscore/
|
sasjscore/
|
||||||
|
|||||||
@@ -96,6 +96,9 @@ PROTOCOL=
|
|||||||
# default: 5000
|
# default: 5000
|
||||||
PORT=
|
PORT=
|
||||||
|
|
||||||
|
# options: [sas9|sasviya]
|
||||||
|
# If not present, mocking function is disabled
|
||||||
|
MOCK_SERVERTYPE=
|
||||||
|
|
||||||
#
|
#
|
||||||
## Additional SAS Options
|
## Additional SAS Options
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
57
api/src/routes/api/mock-sas9.ts
Normal file
57
api/src/routes/api/mock-sas9.ts
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
import { readFile } from '@sasjs/utils'
|
||||||
|
import express, { Request } from 'express'
|
||||||
|
import path from 'path'
|
||||||
|
|
||||||
|
const mockSas9Router = express.Router()
|
||||||
|
|
||||||
|
const { MOCK_SERVERTYPE } = process.env
|
||||||
|
|
||||||
|
mockSas9Router.post('/SASStoredProcess/do/', async (req, res) => {
|
||||||
|
let program = req.query._program?.toString() || ''
|
||||||
|
program = program.replace('/', '')
|
||||||
|
const filePath = path.join(process.cwd(), 'mocks', program)
|
||||||
|
|
||||||
|
let file
|
||||||
|
|
||||||
|
try {
|
||||||
|
file = await readFile(
|
||||||
|
filePath
|
||||||
|
)
|
||||||
|
} catch (err: any) {
|
||||||
|
console.error(`Mocked file on path: ${filePath} is not found.`)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file) {
|
||||||
|
console.error(`Mocked file on path: ${filePath} is not found.`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let fileContent = ''
|
||||||
|
|
||||||
|
try {
|
||||||
|
fileContent = JSON.parse(file)
|
||||||
|
} catch (err: any) {
|
||||||
|
fileContent = file
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
res.send(fileContent)
|
||||||
|
} catch (err: any) {
|
||||||
|
res.status(403).send(err.toString())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if (MOCK_SERVERTYPE === undefined) {
|
||||||
|
mockSas9Router.post('/SASLogon/login', async (req, res) => {
|
||||||
|
try {
|
||||||
|
res.send({ msg: 'Login' })
|
||||||
|
} catch (err: any) {
|
||||||
|
res.status(403).send(err.toString())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default mockSas9Router
|
||||||
13
api/src/routes/api/mock-viya.ts
Normal file
13
api/src/routes/api/mock-viya.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import express from 'express'
|
||||||
|
|
||||||
|
const mockViyaRouter = express.Router()
|
||||||
|
|
||||||
|
mockViyaRouter.post('/SASJobExecution/', async (req, res) => {
|
||||||
|
try {
|
||||||
|
res.send({ test: 'test' })
|
||||||
|
} catch (err: any) {
|
||||||
|
res.status(403).send(err.toString())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
export default mockViyaRouter
|
||||||
@@ -2,10 +2,13 @@ import express from 'express'
|
|||||||
import { WebController } from '../../controllers/web'
|
import { WebController } from '../../controllers/web'
|
||||||
import { authenticateAccessToken, desktopRestrict } from '../../middlewares'
|
import { authenticateAccessToken, desktopRestrict } from '../../middlewares'
|
||||||
import { authorizeValidation, loginWebValidation } from '../../utils'
|
import { authorizeValidation, loginWebValidation } from '../../utils'
|
||||||
|
import mockSas9Router from '../api/mock-sas9'
|
||||||
|
|
||||||
const webRouter = express.Router()
|
const webRouter = express.Router()
|
||||||
const controller = new WebController()
|
const controller = new WebController()
|
||||||
|
|
||||||
|
const { MOCK_SERVERTYPE } = process.env
|
||||||
|
|
||||||
webRouter.get('/', async (req, res) => {
|
webRouter.get('/', async (req, res) => {
|
||||||
let response
|
let response
|
||||||
try {
|
try {
|
||||||
@@ -23,17 +26,19 @@ webRouter.get('/', async (req, res) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
webRouter.post('/SASLogon/login', desktopRestrict, async (req, res) => {
|
if (MOCK_SERVERTYPE !== undefined) {
|
||||||
const { error, value: body } = loginWebValidation(req.body)
|
webRouter.post('/SASLogon/login', desktopRestrict, async (req, res) => {
|
||||||
if (error) return res.status(400).send(error.details[0].message)
|
const { error, value: body } = loginWebValidation(req.body)
|
||||||
|
if (error) return res.status(400).send(error.details[0].message)
|
||||||
try {
|
|
||||||
const response = await controller.login(req, body)
|
try {
|
||||||
res.send(response)
|
const response = await controller.login(req, body)
|
||||||
} catch (err: any) {
|
res.send(response)
|
||||||
res.status(403).send(err.toString())
|
} catch (err: any) {
|
||||||
}
|
res.status(403).send(err.toString())
|
||||||
})
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
webRouter.post(
|
webRouter.post(
|
||||||
'/SASLogon/authorize',
|
'/SASLogon/authorize',
|
||||||
@@ -61,4 +66,8 @@ webRouter.get('/SASLogon/logout', desktopRestrict, async (req, res) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
webRouter.use('/', mockSas9Router)
|
||||||
|
// disabled for now
|
||||||
|
// webRouter.use('/', mockViyaRouter)
|
||||||
|
|
||||||
export default webRouter
|
export default webRouter
|
||||||
|
|||||||
Reference in New Issue
Block a user