Skip to content
Snippets Groups Projects
Commit 9beada0a authored by Jure's avatar Jure
Browse files

test(base-model): add test for extending input

parent 585881b3
No related branches found
No related tags found
No related merge requests found
const Manuscript = require('../manuscript')
const {
helpers: { filterAll, can, canKnowAbout },
} = require('pubsweet-server')
const resolvers = {
Query: {
......@@ -10,12 +7,20 @@ const resolvers = {
},
async publishedManuscripts(_, __, ctx) {
const {
helpers: { filterAll },
} = require('pubsweet-server')
const manuscripts = await Manuscript.findByField('published', true)
return filterAll(ctx.user, manuscripts)
},
},
Mutation: {
async publishManuscript(_, { id, input }, ctx) {
const {
helpers: { can, canKnowAbout },
} = require('pubsweet-server')
const manuscript = await Manuscript.find(id)
const outputFilter = await canKnowAbout(ctx.user, manuscript)
......
......@@ -14,28 +14,26 @@ global.NODE_CONFIG = null
delete require.cache[require.resolve('config')]
const { model: Manuscript } = require('./extended-data-model-component')
const { model: User } = require('@pubsweet/model-user')
const fixtures = require('pubsweet-server/test/fixtures/fixtures')
const { fixtures } = require('@pubsweet/model-user/test')
const authentication = require('pubsweet-server/src/authentication')
const { dbCleaner, api } = require('pubsweet-server/test')
describe('Extended Manuscript queries', () => {
describe('Extended Manuscript GraphQL queries', () => {
let token
let user
let admin
let adminToken
let otherUser
let otherUserToken
beforeEach(async () => {
await dbCleaner()
user = await new User(fixtures.user).save()
token = authentication.token.create(user)
admin = await new User(fixtures.adminUser).save()
adminToken = authentication.token.create(admin)
otherUser = await new User(fixtures.otherUser).save()
otherUserToken = authentication.token.create(otherUser)
})
// Skipped because extended inputs are being worked on upstream:
// https://github.com/apollographql/graphql-tools/pull/948
it.skip('can create a manuscript with more properties', async () => {
it('can create a manuscript with more properties', async () => {
const { body } = await api.graphql.query(
`mutation($input: ManuscriptInput) {
createManuscript(input: $input) {
......@@ -55,7 +53,7 @@ describe('Extended Manuscript queries', () => {
expect(body).toEqual({
data: {
createManuscript: {
title: 'My manuscript',
title: 'My doiscript',
doi: 'some-doi',
},
},
......@@ -99,7 +97,7 @@ describe('Extended Manuscript queries', () => {
it('can work with authsome to authorize things in custom resolvers', async () => {
await new Manuscript({
title: 'Only admins can see this one',
title: 'Only user with username otherUser can see this one',
published: true,
}).save()
......@@ -117,7 +115,7 @@ describe('Extended Manuscript queries', () => {
publishedManuscripts { title, doi }
}`,
{},
adminToken,
otherUserToken,
)
expect(body2.data.publishedManuscripts).toHaveLength(1)
})
......@@ -163,7 +161,7 @@ describe('Extended Manuscript queries', () => {
approvedByAuthor: false,
},
},
adminToken,
otherUserToken,
)
expect(body1.data.publishManuscript).toEqual({
......
module.exports = async (userId, operation, object, context) => {
const user = await context.models.User.find(userId)
if (
!user.admin &&
!(user.username === 'anotheruser') &&
object.type === 'manuscript' &&
object.title.match(/admins can see/)
object.title.match(/otherUser can see/)
) {
return false
}
......@@ -14,13 +14,13 @@ module.exports = async (userId, operation, object, context) => {
const manuscript = await context.models.Manuscript.find(object.current.id)
const isAuthor = manuscript.owners.includes(user.id)
if (isAuthor && user.admin) {
if (isAuthor && user.username === 'anotheruser') {
return true
} else if (isAuthor) {
return {
filter: update => ({ approvedByAuthor: update.approvedByAuthor }),
}
} else if (user.admin) {
} else if (user.username === 'anotheruser') {
return {
filter: update => ({ published: update.published }),
}
......
......@@ -12,12 +12,12 @@ process.env.NODE_CONFIG = `{"pubsweet":{
const { model: User } = require('@pubsweet/model-user')
const { dbCleaner, api } = require('pubsweet-server/test')
const fixtures = require('pubsweet-server/test/fixtures/fixtures')
const authentication = require('@pubsweet/model-user/src/authentication')
const { fixtures } = require('@pubsweet/model-user/test')
const authentication = require('pubsweet-server/src/authentication')
const { model: Manuscript } = require('./data-model-component')
describe('Manuscript queries', () => {
describe('Manuscript GraphQL', () => {
let token
let user
......
module.exports = {
fixtures: require('./fixtures'),
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment