mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
Add integration test
This commit is contained in:
parent
a95f532e44
commit
ace5628c11
1 changed files with 169 additions and 27 deletions
|
|
@ -19,14 +19,13 @@ import {
|
|||
getHighlightById,
|
||||
} from '../../src/elastic/highlights'
|
||||
import { refreshIndex } from '../../src/elastic'
|
||||
import { after } from 'mocha'
|
||||
|
||||
describe('Labels API', () => {
|
||||
const username = 'fakeUser'
|
||||
|
||||
let user: User
|
||||
let authToken: string
|
||||
let page: Page
|
||||
let labels: Label[]
|
||||
let ctx: PageContext
|
||||
|
||||
before(async () => {
|
||||
|
|
@ -35,28 +34,7 @@ describe('Labels API', () => {
|
|||
const res = await request
|
||||
.post('/local/debug/fake-user-login')
|
||||
.send({ fakeEmail: user.email })
|
||||
|
||||
authToken = res.body.authToken
|
||||
|
||||
// create testing labels
|
||||
const label1 = await createTestLabel(user, 'label_1', '#ffffff')
|
||||
const label2 = await createTestLabel(user, 'label_2', '#eeeeee')
|
||||
labels = [label1, label2]
|
||||
|
||||
// create a page with label
|
||||
const existingLabelOfLink = await createTestLabel(
|
||||
user,
|
||||
'different_label',
|
||||
'#dddddd'
|
||||
)
|
||||
page = await createTestElasticPage(user, [
|
||||
{
|
||||
id: existingLabelOfLink.id,
|
||||
name: existingLabelOfLink.name,
|
||||
color: existingLabelOfLink.color,
|
||||
},
|
||||
])
|
||||
|
||||
ctx = {
|
||||
pubsub: createPubSubClient(),
|
||||
refresh: true,
|
||||
|
|
@ -71,8 +49,23 @@ describe('Labels API', () => {
|
|||
})
|
||||
|
||||
describe('GET labels', () => {
|
||||
let labels: Label[]
|
||||
let query: string
|
||||
|
||||
before(async () => {
|
||||
// create testing labels
|
||||
const label1 = await createTestLabel(user, 'label_1', '#ffffff')
|
||||
const label2 = await createTestLabel(user, 'label_2', '#eeeeee')
|
||||
labels = [label1, label2]
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
// clean up
|
||||
for (const label of labels) {
|
||||
await getRepository(Label).delete(label.id)
|
||||
}
|
||||
})
|
||||
|
||||
beforeEach(() => {
|
||||
query = `
|
||||
query {
|
||||
|
|
@ -158,6 +151,11 @@ describe('Labels API', () => {
|
|||
name = 'label3'
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await getRepository(Label).delete({ name })
|
||||
})
|
||||
|
||||
it('should create label', async () => {
|
||||
const res = await graphqlRequest(query, authToken).expect(200)
|
||||
const label = await getRepository(Label).findOneBy({
|
||||
|
|
@ -168,8 +166,15 @@ describe('Labels API', () => {
|
|||
})
|
||||
|
||||
context('when name exists', () => {
|
||||
before(() => {
|
||||
name = labels[0].name
|
||||
let existingLabel: Label
|
||||
|
||||
before(async () => {
|
||||
existingLabel = await createTestLabel(user, 'label3', '#ffffff')
|
||||
name = existingLabel.name
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
await getRepository(Label).delete(existingLabel.id)
|
||||
})
|
||||
|
||||
it('should return error code LABEL_ALREADY_EXISTS', async () => {
|
||||
|
|
@ -239,10 +244,16 @@ describe('Labels API', () => {
|
|||
})
|
||||
|
||||
context('when a page has this label', () => {
|
||||
let page: Page
|
||||
|
||||
before(async () => {
|
||||
toDeleteLabel = await createTestLabel(user, 'page label', '#ffffff')
|
||||
labelId = toDeleteLabel.id
|
||||
await addLabelInPage(page.id, toDeleteLabel, ctx)
|
||||
page = await createTestElasticPage(user, [toDeleteLabel])
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
await deletePage(page.id, ctx)
|
||||
})
|
||||
|
||||
it('should update page', async () => {
|
||||
|
|
@ -256,8 +267,10 @@ describe('Labels API', () => {
|
|||
|
||||
context('when a highlight has this label', () => {
|
||||
const highlightId = generateFakeUuid()
|
||||
let page: Page
|
||||
|
||||
before(async () => {
|
||||
page = await createTestElasticPage(user)
|
||||
toDeleteLabel = await createTestLabel(
|
||||
user,
|
||||
'highlight label',
|
||||
|
|
@ -277,6 +290,10 @@ describe('Labels API', () => {
|
|||
await addHighlightToPage(page.id, highlight, ctx)
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
await deletePage(page.id, ctx)
|
||||
})
|
||||
|
||||
it('should update highlight', async () => {
|
||||
await graphqlRequest(query, authToken).expect(200)
|
||||
await refreshIndex()
|
||||
|
|
@ -318,6 +335,24 @@ describe('Labels API', () => {
|
|||
let query: string
|
||||
let pageId: string
|
||||
let labelIds: string[] = []
|
||||
let labels: Label[]
|
||||
let page: Page
|
||||
|
||||
before(async () => {
|
||||
// create testing labels
|
||||
const label1 = await createTestLabel(user, 'label_1', '#ffffff')
|
||||
const label2 = await createTestLabel(user, 'label_2', '#eeeeee')
|
||||
labels = [label1, label2]
|
||||
page = await createTestElasticPage(user)
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
// clean up
|
||||
for (const label of labels) {
|
||||
await getRepository(Label).delete(label.id)
|
||||
}
|
||||
await deletePage(page.id, ctx)
|
||||
})
|
||||
|
||||
beforeEach(() => {
|
||||
query = `
|
||||
|
|
@ -438,6 +473,10 @@ describe('Labels API', () => {
|
|||
color = '#aabbcc'
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
await getRepository(Label).delete(toUpdateLabel.id)
|
||||
})
|
||||
|
||||
it('should return the updated label', async () => {
|
||||
const res = await graphqlRequest(query, authToken).expect(200)
|
||||
expect(res.body.data.updateLabel.label).to.eql({
|
||||
|
|
@ -458,8 +497,14 @@ describe('Labels API', () => {
|
|||
})
|
||||
|
||||
context('when a page has the label', () => {
|
||||
let page: Page
|
||||
|
||||
before(async () => {
|
||||
await addLabelInPage(page.id, toUpdateLabel, ctx)
|
||||
page = await createTestElasticPage(user, [toUpdateLabel])
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
await deletePage(page.id, ctx)
|
||||
})
|
||||
|
||||
it('should update the page with the label', async () => {
|
||||
|
|
@ -492,6 +537,24 @@ describe('Labels API', () => {
|
|||
let query: string
|
||||
let highlightId: string
|
||||
let labelIds: string[] = []
|
||||
let labels: Label[]
|
||||
let page: Page
|
||||
|
||||
before(async () => {
|
||||
// create testing labels
|
||||
const label1 = await createTestLabel(user, 'label_1', '#ffffff')
|
||||
const label2 = await createTestLabel(user, 'label_2', '#eeeeee')
|
||||
labels = [label1, label2]
|
||||
page = await createTestElasticPage(user)
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
// clean up
|
||||
for (const label of labels) {
|
||||
await getRepository(Label).delete(label.id)
|
||||
}
|
||||
await deletePage(page.id, ctx)
|
||||
})
|
||||
|
||||
beforeEach(() => {
|
||||
query = `
|
||||
|
|
@ -581,4 +644,83 @@ describe('Labels API', () => {
|
|||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('Move label', () => {
|
||||
const query = (labelId: string, afterLabelId?: string): string => `
|
||||
mutation {
|
||||
moveLabel(
|
||||
input: {
|
||||
labelId: "${labelId}",
|
||||
afterLabelId: "${afterLabelId}"
|
||||
}
|
||||
) {
|
||||
... on MoveLabelSuccess {
|
||||
label {
|
||||
id
|
||||
position
|
||||
}
|
||||
}
|
||||
... on MoveLabelError {
|
||||
errorCodes
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
let labelId: string
|
||||
let afterLabelId: string
|
||||
let labels: Label[] = []
|
||||
|
||||
before(async () => {
|
||||
// create testing labels
|
||||
for (let i = 0; i < 5; i++) {
|
||||
const label = await createTestLabel(user, `label_${i}`, '#ffffff')
|
||||
labels.push(label)
|
||||
}
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
// clean up
|
||||
for (const label of labels) {
|
||||
await getRepository(Label).delete(label.id)
|
||||
}
|
||||
})
|
||||
|
||||
context('when label exists', () => {
|
||||
before(async () => {
|
||||
labelId = labels[1].id
|
||||
afterLabelId = labels[4].id
|
||||
})
|
||||
|
||||
it('moves label after the pointed label', async () => {
|
||||
const res = await graphqlRequest(
|
||||
query(labelId, afterLabelId),
|
||||
authToken
|
||||
).expect(200)
|
||||
expect(res.body.data.moveLabel.label.position).to.eql(
|
||||
labels[4].position
|
||||
)
|
||||
const reorderedLabels = await getRepository(Label).findBy({
|
||||
user: { id: user.id },
|
||||
})
|
||||
expect(reorderedLabels.map((l) => l.id)).to.eql([
|
||||
labels[0].id,
|
||||
labels[2].id,
|
||||
labels[3].id,
|
||||
labels[4].id,
|
||||
labels[1].id,
|
||||
])
|
||||
})
|
||||
})
|
||||
|
||||
context('when label not exist', () => {
|
||||
before(() => {
|
||||
labelId = generateFakeUuid()
|
||||
})
|
||||
|
||||
it('returns error code NOT_FOUND', async () => {
|
||||
const res = await graphqlRequest(query(labelId), authToken).expect(200)
|
||||
expect(res.body.data.moveLabel.errorCodes).to.eql(['NOT_FOUND'])
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in a new issue