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:
@ -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,
|
||||
})
|
||||
|
||||
@ -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
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@ -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)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user