Fix/newsletter label not add (#256)

* default sort by savedAt to avoid recent read page to appear on top of the list

* revert lint on generated code

* fix elastic update script syntax error
This commit is contained in:
Hongbo Wu
2022-03-17 13:22:38 +08:00
committed by GitHub
parent a2ce98229e
commit 563131ea23
3 changed files with 76 additions and 10 deletions

View File

@ -3,7 +3,13 @@
/* eslint-disable @typescript-eslint/no-unsafe-call */
import { env } from '../env'
import { Client } from '@elastic/elasticsearch'
import { PageType, SortBy, SortOrder, SortParams } from '../generated/graphql'
import {
Label,
PageType,
SortBy,
SortOrder,
SortParams,
} from '../generated/graphql'
import {
InFilter,
LabelFilter,
@ -19,7 +25,6 @@ import {
} from './types'
import { readFileSync } from 'fs'
import { join } from 'path'
import { Label } from '../entity/label'
const INDEX_NAME = 'pages'
const INDEX_ALIAS = 'pages_alias'
@ -220,16 +225,16 @@ export const addLabelInPage = async (
id,
body: {
script: {
source:
'if (!ctx._source.labels.contains(params.label)) { ctx._source.labels.add(label) }',
source: `if (ctx._source.labels == null) {
ctx._source.labels = [params.label]
} else if (!ctx._source.labels.any(label -> label.name == params.label.name)) {
ctx._source.labels.add(params.label)
} else { ctx.op = 'none' }`,
lang: 'painless',
params: {
label: label,
},
},
doc: {
updatedAt: new Date(),
},
},
refresh: ctx.refresh,
})

View File

@ -1,5 +1,6 @@
import 'mocha'
import {
addLabelInPage,
createPage,
deletePage,
getPageById,
@ -145,4 +146,36 @@ describe('elastic api', () => {
expect(searchResults).not.undefined
})
})
describe('addLabelInPage', () => {
context('when the label not exist in the page', () => {
it('adds the label to the page', async () => {
const newLabel = {
id: 'new label id',
name: 'new label',
color: '#07D2D1',
}
const result = await addLabelInPage(page.id, newLabel, ctx)
expect(result).to.be.true
const updatedPage = await getPageById(page.id)
expect(updatedPage?.labels).to.deep.include(newLabel)
})
})
context('when the label exists in the page', () => {
it('does not add the label to the page', async () => {
const newLabel = {
id: 'Test label id',
name: 'test label',
color: '#07D2D1',
}
const result = await addLabelInPage(page.id, newLabel, ctx)
expect(result).to.be.false
})
})
})
})

View File

@ -5,17 +5,25 @@ import { createTestUser, deleteTestUser } from '../db'
import { createNewsletterEmail } from '../../src/services/newsletters'
import { saveNewsletterEmail } from '../../src/services/save_newsletter_email'
import { getPageByParam } from '../../src/elastic'
import { User } from '../../src/entity/user'
import { NewsletterEmail } from '../../src/entity/newsletter_email'
describe('saveNewsletterEmail', () => {
const username = 'fakeUser'
let user: User
let email: NewsletterEmail
before(async () => {
user = await createTestUser(username)
email = await createNewsletterEmail(user.id)
})
after(async () => {
await deleteTestUser(username)
})
it('adds the newsletter to the library', async () => {
const user = await createTestUser(username)
const email = await createNewsletterEmail(user.id)
await saveNewsletterEmail({
email: email.address,
content: 'fake content',
@ -35,4 +43,24 @@ describe('saveNewsletterEmail', () => {
expect(page.content).to.contain('fake content')
})
})
it('should adds a Newsletter label to that page', async () => {
const newLabel = {
name: 'Newsletter',
color: '#07D2D1',
}
await saveNewsletterEmail({
email: email.address,
content: 'fake content 2',
url: 'https://example.com/2',
title: 'fake title',
author: 'fake author',
})
setTimeout(async () => {
const page = await getPageByParam({ userId: user.id })
expect(page?.labels).to.deep.include(newLabel)
})
})
})