170 lines
4.0 KiB
TypeScript
170 lines
4.0 KiB
TypeScript
import { expect } from 'chai'
|
|
import 'mocha'
|
|
import { Rule, RuleAction, RuleActionType } from '../../src/entity/rule'
|
|
import { User } from '../../src/entity/user'
|
|
import { createRule, deleteRules } from '../../src/services/rules'
|
|
import { deleteUser } from '../../src/services/user'
|
|
import { createTestUser } from '../db'
|
|
import { graphqlRequest, request } from '../util'
|
|
|
|
describe('Rules Resolver', () => {
|
|
const username = 'fakeUser'
|
|
|
|
let user: User
|
|
let authToken: string
|
|
|
|
before(async () => {
|
|
// create test user and login
|
|
user = await createTestUser(username)
|
|
const res = await request
|
|
.post('/local/debug/fake-user-login')
|
|
.send({ fakeEmail: user.email })
|
|
|
|
authToken = res.body.authToken
|
|
})
|
|
|
|
after(async () => {
|
|
// clean up
|
|
await deleteUser(user.id)
|
|
})
|
|
|
|
describe('set rules', () => {
|
|
const setRulesQuery = (
|
|
name: string,
|
|
filter: string,
|
|
actions: RuleAction[],
|
|
enabled: boolean,
|
|
id?: string
|
|
) => `
|
|
mutation {
|
|
setRule(input: {
|
|
${id ? `id: "${id}",` : ''}
|
|
name: "${name}",
|
|
filter: "${filter}",
|
|
actions: [${actions.map(
|
|
(action) => `{
|
|
type: ${action.type}, params: [${action.params.map(
|
|
(param) => `"${param}"`
|
|
)}]
|
|
}`
|
|
)}],
|
|
enabled: ${enabled}
|
|
eventTypes: [PAGE_CREATED, PAGE_UPDATED]
|
|
}) {
|
|
... on SetRuleSuccess {
|
|
rule {
|
|
id
|
|
filter
|
|
actions {
|
|
type
|
|
params
|
|
}
|
|
enabled
|
|
createdAt
|
|
updatedAt
|
|
}
|
|
}
|
|
... on SetRuleError {
|
|
errorCodes
|
|
}
|
|
}
|
|
}
|
|
`
|
|
|
|
after(async () => {
|
|
await deleteRules(user.id)
|
|
})
|
|
|
|
it('should set rules', async () => {
|
|
const query = setRulesQuery(
|
|
'test rule',
|
|
'test filter',
|
|
[{ type: RuleActionType.SendNotification, params: [] }],
|
|
true
|
|
)
|
|
|
|
const res = await graphqlRequest(query, authToken).expect(200)
|
|
expect(res.body.data.setRule.rule.filter).to.equal('test filter')
|
|
})
|
|
})
|
|
|
|
describe('get rules', () => {
|
|
before(async () => {
|
|
await createRule(user.id, {
|
|
name: 'test rule 2',
|
|
filter: 'test filter 2',
|
|
actions: [{ type: RuleActionType.SendNotification, params: [] }],
|
|
})
|
|
})
|
|
|
|
after(async () => {
|
|
await deleteRules(user.id)
|
|
})
|
|
|
|
const getRulesQuery = (enabled: boolean | null = null) => `
|
|
query {
|
|
rules (enabled: ${enabled}) {
|
|
... on RulesSuccess {
|
|
rules {
|
|
id
|
|
name
|
|
filter
|
|
actions {
|
|
type
|
|
params
|
|
}
|
|
enabled
|
|
createdAt
|
|
updatedAt
|
|
eventTypes
|
|
}
|
|
}
|
|
... on RulesError {
|
|
errorCodes
|
|
}
|
|
}
|
|
}
|
|
`
|
|
|
|
it('should get rules', async () => {
|
|
const res = await graphqlRequest(getRulesQuery(), authToken).expect(200)
|
|
expect(res.body.data.rules.rules.length).to.equal(1)
|
|
})
|
|
})
|
|
|
|
describe('delete rules', () => {
|
|
let rule: Rule
|
|
|
|
before(async () => {
|
|
rule = await createRule(user.id, {
|
|
name: 'test rule 3',
|
|
filter: 'test filter 3',
|
|
actions: [{ type: RuleActionType.SendNotification, params: [] }],
|
|
})
|
|
})
|
|
|
|
const deleteRulesQuery = (id: string) => `
|
|
mutation {
|
|
deleteRule(id: "${id}") {
|
|
... on DeleteRuleSuccess {
|
|
rule {
|
|
id
|
|
}
|
|
}
|
|
... on DeleteRuleError {
|
|
errorCodes
|
|
}
|
|
}
|
|
}
|
|
`
|
|
|
|
it('should delete rules', async () => {
|
|
const res = await graphqlRequest(
|
|
deleteRulesQuery(rule.id),
|
|
authToken
|
|
).expect(200)
|
|
expect(res.body.data.deleteRule.rule.id).to.equal(rule.id)
|
|
})
|
|
})
|
|
})
|