Adding testing to worker, still WIP.
This commit is contained in:
parent
61ed6cf2bc
commit
46c9df6245
|
@ -36,6 +36,7 @@ module.exports = {
|
|||
buildAuthMiddleware: authenticated,
|
||||
passport,
|
||||
google,
|
||||
jwt,
|
||||
},
|
||||
StaticDatabases,
|
||||
constants: require("./constants"),
|
||||
|
|
|
@ -103,7 +103,6 @@
|
|||
"jimp": "0.16.1",
|
||||
"joi": "17.2.1",
|
||||
"jsonschema": "1.4.0",
|
||||
"jsonwebtoken": "8.5.1",
|
||||
"koa": "2.7.0",
|
||||
"koa-body": "4.2.0",
|
||||
"koa-compress": "4.0.1",
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
const { BUILTIN_ROLE_IDS } = require("../../utilities/security/roles")
|
||||
const jwt = require("jsonwebtoken")
|
||||
const env = require("../../environment")
|
||||
const {
|
||||
basicTable,
|
||||
|
@ -16,6 +15,7 @@ const controllers = require("./controllers")
|
|||
const supertest = require("supertest")
|
||||
const { cleanup } = require("../../utilities/fileSystem")
|
||||
const { Cookies } = require("@budibase/auth").constants
|
||||
const { jwt } = require("@budibase/auth").auth
|
||||
|
||||
const EMAIL = "babs@babs.com"
|
||||
const PASSWORD = "babs_password"
|
||||
|
|
|
@ -46,7 +46,9 @@
|
|||
"server-destroy": "^1.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"jest": "^26.6.3",
|
||||
"nodemon": "^2.0.7",
|
||||
"pouchdb-adapter-memory": "^7.2.2"
|
||||
"pouchdb-adapter-memory": "^7.2.2",
|
||||
"supertest": "^6.1.3"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,12 +12,14 @@ const GLOBAL_DB = StaticDatabases.GLOBAL.name
|
|||
|
||||
exports.save = async function(ctx) {
|
||||
const db = new CouchDB(GLOBAL_DB)
|
||||
const configDoc = ctx.request.body
|
||||
const { type, group, user } = configDoc
|
||||
const { type, config } = ctx.request.body
|
||||
const { group, user } = config
|
||||
// insert the type into the doc
|
||||
config.type = type
|
||||
|
||||
// Config does not exist yet
|
||||
if (!configDoc._id) {
|
||||
configDoc._id = generateConfigID({
|
||||
if (!config._id) {
|
||||
config._id = generateConfigID({
|
||||
type,
|
||||
group,
|
||||
user,
|
||||
|
@ -27,12 +29,12 @@ exports.save = async function(ctx) {
|
|||
// verify the configuration
|
||||
switch (type) {
|
||||
case Configs.SMTP:
|
||||
await email.verifyConfig(configDoc)
|
||||
await email.verifyConfig(config)
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await db.post(configDoc)
|
||||
const response = await db.post(config)
|
||||
ctx.body = {
|
||||
type,
|
||||
_id: response.id,
|
||||
|
|
|
@ -7,12 +7,11 @@ const { Configs } = require("../../../constants")
|
|||
const router = Router()
|
||||
|
||||
function smtpValidation() {
|
||||
// prettier-ignore
|
||||
return Joi.object({
|
||||
port: Joi.number().required(),
|
||||
host: Joi.string().required(),
|
||||
from: Joi.string()
|
||||
.email()
|
||||
.required(),
|
||||
from: Joi.string().email().required(),
|
||||
secure: Joi.boolean().optional(),
|
||||
selfSigned: Joi.boolean().optional(),
|
||||
auth: Joi.object({
|
||||
|
@ -24,6 +23,7 @@ function smtpValidation() {
|
|||
}
|
||||
|
||||
function settingValidation() {
|
||||
// prettier-ignore
|
||||
return Joi.object({
|
||||
url: Joi.string().valid("", null),
|
||||
logoUrl: Joi.string().valid("", null),
|
||||
|
@ -32,6 +32,7 @@ function settingValidation() {
|
|||
}
|
||||
|
||||
function googleValidation() {
|
||||
// prettier-ignore
|
||||
return Joi.object({
|
||||
clientID: Joi.string().required(),
|
||||
clientSecret: Joi.string().required(),
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
const setup = require("./utilities")
|
||||
const { EmailTemplatePurpose } = require("../../../constants")
|
||||
|
||||
// mock the email system
|
||||
const sendMailMock = jest.fn()
|
||||
jest.mock("nodemailer")
|
||||
const nodemailer = require("nodemailer")
|
||||
nodemailer.createTransport.mockReturnValue({"sendMail": sendMailMock});
|
||||
|
||||
describe("/api/admin/email", () => {
|
||||
let request = setup.getRequest()
|
||||
let config = setup.getConfig()
|
||||
|
||||
afterAll(setup.afterAll)
|
||||
|
||||
it("should be able to send an email (with mocking)", async () => {
|
||||
// initially configure settings
|
||||
await config.saveSmtpConfig()
|
||||
await config.saveSettingsConfig()
|
||||
const res = await request
|
||||
.post(`/api/admin/email/send`)
|
||||
.send({
|
||||
email: "test@test.com",
|
||||
purpose: EmailTemplatePurpose.INVITATION,
|
||||
})
|
||||
.set(config.defaultHeaders())
|
||||
.expect("Content-Type", /json/)
|
||||
.expect(200)
|
||||
expect(res.body._rev).toBeDefined()
|
||||
})
|
||||
})
|
|
@ -0,0 +1,78 @@
|
|||
const env = require("../../environment")
|
||||
const controllers = require("./controllers")
|
||||
const supertest = require("supertest")
|
||||
const { jwt } = require("@budibase/auth").auth
|
||||
const { Cookies } = require("@budibase/auth").constants
|
||||
const { Configs } = require("../../../../constants")
|
||||
|
||||
class TestConfiguration {
|
||||
constructor(openServer = true) {
|
||||
if (openServer) {
|
||||
env.PORT = 4003
|
||||
this.server = require("../../../../index")
|
||||
// we need the request for logging in, involves cookies, hard to fake
|
||||
this.request = supertest(this.server)
|
||||
}
|
||||
}
|
||||
|
||||
getRequest() {
|
||||
return this.request
|
||||
}
|
||||
|
||||
async _req(config, params, controlFunc) {
|
||||
const request = {}
|
||||
// fake cookies, we don't need them
|
||||
request.cookies = { set: () => {}, get: () => {} }
|
||||
request.config = { jwtSecret: env.JWT_SECRET }
|
||||
request.appId = this.appId
|
||||
request.user = { appId: this.appId }
|
||||
request.request = {
|
||||
body: config,
|
||||
}
|
||||
if (params) {
|
||||
request.params = params
|
||||
}
|
||||
await controlFunc(request)
|
||||
return request.body
|
||||
}
|
||||
|
||||
defaultHeaders() {
|
||||
const user = {
|
||||
userId: "us_uuid1",
|
||||
builder: {
|
||||
global: true,
|
||||
},
|
||||
}
|
||||
const authToken = jwt.sign(user, env.JWT_SECRET)
|
||||
return {
|
||||
Accept: "application/json",
|
||||
Cookie: [
|
||||
`${Cookies.Auth}=${authToken}`,
|
||||
],
|
||||
}
|
||||
}
|
||||
|
||||
async saveSettingsConfig() {
|
||||
await this._req({
|
||||
type: Configs.SETTINGS,
|
||||
config: {
|
||||
url: "http://localhost:10000",
|
||||
logoUrl: "http://localhost:10000/logo",
|
||||
company: "TestCompany",
|
||||
}
|
||||
}, null, controllers.config.save)
|
||||
}
|
||||
|
||||
async saveSmtpConfig() {
|
||||
await this._req({
|
||||
type: Configs.SMTP,
|
||||
config: {
|
||||
url: "http://localhost:10000",
|
||||
logoUrl: "http://localhost:10000/logo",
|
||||
company: "TestCompany",
|
||||
}
|
||||
}, null, controllers.config.save)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = TestConfiguration
|
|
@ -0,0 +1,7 @@
|
|||
module.exports = {
|
||||
email: require("../../../controllers/admin/email"),
|
||||
groups: require("../../../controllers/admin/groups"),
|
||||
config: require("../../../controllers/admin/groups"),
|
||||
templates: require("../../../controllers/admin/groups"),
|
||||
users: require("../../../controllers/admin/groups"),
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
const TestConfig = require("./TestConfiguration")
|
||||
|
||||
let request, config
|
||||
|
||||
exports.beforeAll = () => {
|
||||
config = new TestConfig()
|
||||
request = config.getRequest()
|
||||
}
|
||||
|
||||
exports.afterAll = () => {
|
||||
if (config) {
|
||||
config.end()
|
||||
}
|
||||
request = null
|
||||
config = null
|
||||
}
|
||||
|
||||
exports.getRequest = () => {
|
||||
if (!request) {
|
||||
exports.beforeAll()
|
||||
}
|
||||
return request
|
||||
}
|
||||
|
||||
exports.getConfig = () => {
|
||||
if (!config) {
|
||||
exports.beforeAll()
|
||||
}
|
||||
return config
|
||||
}
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue