Add integration test

This commit is contained in:
Hongbo Wu 2022-07-28 21:52:36 +08:00
parent a95f532e44
commit ace5628c11

View file

@ -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'])
})
})
})
})