Skip to content

Commit

Permalink
inventory view cache: moving tests to its own file
Browse files Browse the repository at this point in the history
  • Loading branch information
jum-s committed Sep 2, 2020
1 parent 7acb166 commit 0528ff4
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 89 deletions.
91 changes: 2 additions & 89 deletions tests/api/items/inventory_view.test.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
const CONFIG = require('config')
const __ = CONFIG.universalPath
const should = require('should')
const { wait } = __.require('lib', 'promises')
const { customAuthReq, nonAuthReq, undesiredRes, getReservedUser } = __.require('apiTests', 'utils/utils')
const { nonAuthReq, undesiredRes, getReservedUser } = __.require('apiTests', 'utils/utils')
const { groupPromise, createGroup, addMember } = require('../fixtures/groups')
const { createEdition } = require('../fixtures/entities')
const { createUserWithItems } = require('../fixtures/populate')
const { createItem } = require('../fixtures/items')
const { createUser } = require('../fixtures/users')
const { addClaim } = require('../utils/entities')
const editionUriPromise = createEdition().then(({ uri }) => uri)
const userPromise = createUserWithItems()

const endpoint = '/api/items?action=inventory-view'
const dryReq = `${endpoint}&dry=true`

const refreshUserPublicCache = userId => { return nonAuthReq('get', `${endpoint}&user=${userId}`) }
const getUserPublicCache = userId => { return nonAuthReq('get', `${dryReq}&user=${userId}`) }

describe('items:inventory-view', () => {
it('should reject requests without a user or a group', done => {
Expand All @@ -30,88 +21,10 @@ describe('items:inventory-view', () => {
.catch(done)
})

describe('cache update', () => {
it('should add an item uri to cache on item creation', async () => {
const { _id: userId } = await userPromise
const { itemsByDate: oldItemsByDate } = await refreshUserPublicCache(userId)
const editionUri = await editionUriPromise

await createItem(userPromise, { entity: editionUri, listing: 'public' })
await wait(100)
const { itemsByDate: refreshedItemsByDate } = await getUserPublicCache(userId)
refreshedItemsByDate.length.should.equal(oldItemsByDate.length + 1)
})

it('should refresh on private item creation', async () => {
const { _id: userId } = await userPromise
const { itemsByDate: oldItemsByDate } = await refreshUserPublicCache(userId)
const editionUri = await editionUriPromise

await createItem(userPromise, { entity: editionUri, listing: 'private' })
await wait(100)
const { itemsByDate: ownerViewFreshItems } = await customAuthReq(userPromise, 'get', `${dryReq}&user=${userId}`)
ownerViewFreshItems.length.should.equal(oldItemsByDate.length + 1)
})

it('should refresh on private to public item update', async () => {
const userPromise = createUser()
const { _id: userId } = await userPromise
const item = await createItem(userPromise, { listing: 'private' })
const { itemsByDate: privateItemsByDate } = await customAuthReq(userPromise, 'get', `${endpoint}&user=${userId}`)
const { itemsByDate: publicItemsByDate } = await refreshUserPublicCache(userId)
publicItemsByDate.length.should.equal(privateItemsByDate.length - 1)

item.listing = 'public'
await customAuthReq(userPromise, 'put', '/api/items', item)
await wait(100)
const { itemsByDate: refreshedPublicItemsByDate } = await getUserPublicCache(userId)
refreshedPublicItemsByDate.length.should.equal(privateItemsByDate.length)
})

it('should refresh on item deletion', async () => {
const { _id: userId } = await userPromise
const editionUri = await editionUriPromise
const { _id: itemId } = await createItem(userPromise, { entity: editionUri, listing: 'public' })
await customAuthReq(userPromise, 'post', '/api/items?action=delete-by-ids', { ids: [ itemId ] })

const { itemsByDate: refreshedItemsByDate } = await getUserPublicCache(userId)
refreshedItemsByDate.should.not.containEql(itemId)
})

it('should refresh on updating work claims', async () => {
const { _id: userId } = await userPromise
const edition = await createEdition()
const workUri = await edition.claims['wdt:P629'][0]
await createItem(userPromise, { entity: edition.uri, listing: 'public' })
const res = await refreshUserPublicCache(userId)
const subjectValue = 'wd:Q35760'
should(res.worksTree.subject[subjectValue]).not.be.ok()

await addClaim(workUri, 'wdt:P921', subjectValue)
await wait(200)
const res2 = await getUserPublicCache(userId)
res2.worksTree.subject[subjectValue].should.be.an.Array()
})

it('should refresh on updating edition claims', async () => {
const { _id: userId } = await userPromise
const edition = await createEdition()
await createItem(userPromise, { entity: edition.uri, listing: 'public' })
const res = await refreshUserPublicCache(userId)
const workValue = 'wd:Q6911'
should(res.worksTree.subject[workValue]).not.be.ok()

await addClaim(edition.uri, 'wdt:P629', workValue)
await wait(200)
const res2 = await getUserPublicCache(userId)
res2.worksTree.subject.unknown.should.containEql(workValue)
})
})

describe('user', () => {
it('should return a user inventory-view', async () => {
const { _id: userId } = await createUserWithItems()
const { worksTree, workUriItemsMap, itemsByDate } = await refreshUserPublicCache(userId)
const { worksTree, workUriItemsMap, itemsByDate } = await nonAuthReq('get', `${endpoint}&user=${userId}`)
worksTree.should.be.an.Object()
worksTree.author.should.be.an.Object()
worksTree.genre.should.be.an.Object()
Expand Down
96 changes: 96 additions & 0 deletions tests/api/items/inventory_view_cache.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
const CONFIG = require('config')
const __ = CONFIG.universalPath
const should = require('should')
const { wait } = __.require('lib', 'promises')
const { customAuthReq, nonAuthReq } = __.require('apiTests', 'utils/utils')
const { createEdition } = require('../fixtures/entities')
const { createUserWithItems } = require('../fixtures/populate')
const { createItem } = require('../fixtures/items')
const { createUser } = require('../fixtures/users')
const { addClaim } = require('../utils/entities')
const editionUriPromise = createEdition().then(({ uri }) => uri)
const userPromise = createUserWithItems()

const endpoint = '/api/items?action=inventory-view'
const dryReq = `${endpoint}&dry=true`

const refreshUserPublicCache = userId => { return nonAuthReq('get', `${endpoint}&user=${userId}`) }
const getUserPublicCache = userId => { return nonAuthReq('get', `${dryReq}&user=${userId}`) }

describe('inventory-view:cache', () => {
it('should add an item uri to cache on item creation', async () => {
const { _id: userId } = await userPromise
const { itemsByDate: oldItemsByDate } = await refreshUserPublicCache(userId)
const editionUri = await editionUriPromise

await createItem(userPromise, { entity: editionUri, listing: 'public' })
await wait(100)
const { itemsByDate: refreshedItemsByDate } = await getUserPublicCache(userId)
refreshedItemsByDate.length.should.equal(oldItemsByDate.length + 1)
})

it('should refresh on private item creation', async () => {
const { _id: userId } = await userPromise
const { itemsByDate: oldItemsByDate } = await refreshUserPublicCache(userId)
const editionUri = await editionUriPromise

await createItem(userPromise, { entity: editionUri, listing: 'private' })
await wait(100)
const { itemsByDate: ownerViewFreshItems } = await customAuthReq(userPromise, 'get', `${dryReq}&user=${userId}`)
ownerViewFreshItems.length.should.equal(oldItemsByDate.length + 1)
})

it('should refresh on private to public item update', async () => {
const userPromise = createUser()
const { _id: userId } = await userPromise
const item = await createItem(userPromise, { listing: 'private' })
const { itemsByDate: privateItemsByDate } = await customAuthReq(userPromise, 'get', `${endpoint}&user=${userId}`)
const { itemsByDate: publicItemsByDate } = await refreshUserPublicCache(userId)
publicItemsByDate.length.should.equal(privateItemsByDate.length - 1)

item.listing = 'public'
await customAuthReq(userPromise, 'put', '/api/items', item)
await wait(100)
const { itemsByDate: refreshedPublicItemsByDate } = await getUserPublicCache(userId)
refreshedPublicItemsByDate.length.should.equal(privateItemsByDate.length)
})

it('should refresh on item deletion', async () => {
const { _id: userId } = await userPromise
const editionUri = await editionUriPromise
const { _id: itemId } = await createItem(userPromise, { entity: editionUri, listing: 'public' })
await customAuthReq(userPromise, 'post', '/api/items?action=delete-by-ids', { ids: [ itemId ] })

const { itemsByDate: refreshedItemsByDate } = await getUserPublicCache(userId)
refreshedItemsByDate.should.not.containEql(itemId)
})

it('should refresh on updating work claims', async () => {
const { _id: userId } = await userPromise
const edition = await createEdition()
const workUri = await edition.claims['wdt:P629'][0]
await createItem(userPromise, { entity: edition.uri, listing: 'public' })
const res = await refreshUserPublicCache(userId)
const subjectValue = 'wd:Q35760'
should(res.worksTree.subject[subjectValue]).not.be.ok()

await addClaim(workUri, 'wdt:P921', subjectValue)
await wait(200)
const res2 = await getUserPublicCache(userId)
res2.worksTree.subject[subjectValue].should.be.an.Array()
})

it('should refresh on updating edition claims', async () => {
const { _id: userId } = await userPromise
const edition = await createEdition()
await createItem(userPromise, { entity: edition.uri, listing: 'public' })
const res = await refreshUserPublicCache(userId)
const workValue = 'wd:Q6911'
should(res.worksTree.subject[workValue]).not.be.ok()

await addClaim(edition.uri, 'wdt:P629', workValue)
await wait(200)
const res2 = await getUserPublicCache(userId)
res2.worksTree.subject.unknown.should.containEql(workValue)
})
})

0 comments on commit 0528ff4

Please sign in to comment.