diff --git a/packages/api/test/resolvers/labels.test.ts b/packages/api/test/resolvers/labels.test.ts index c895044f4..1c9e9310f 100644 --- a/packages/api/test/resolvers/labels.test.ts +++ b/packages/api/test/resolvers/labels.test.ts @@ -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']) + }) + }) + }) })