Files
omnivore/packages/api/test/resolvers/article_saving_request.test.ts
Hongbo Wu 2b70d480d2 Remove article saving request (#493)
* Add state and taskName in elastic page mappings

* Add state and taskName in elastic page interface

* Create page with PROCESSING state before scrapping

* Update createArticleRequest API

* Fix tests

* Add default state for pages

* Update createArticle API

* Update save page

* Update save file

* Update saving item description

* Show unable to parse content for failed page

* Fix date parsing

* Search for not failed pages

* Fix tests

* Add test for saveUrl

* Update get article saving request api

* Update get article test

* Add test for articleSavingRequest API

* Add test for failure

* Return new page id if clientRequestId empty

* Update clientRequestId in savePage

* Update clientRequestId in saveFile

* Replace article with slug in articleSavingRequest

* Add slug in articleSavingRequest response

* Depreciate article

* Use slug in web

* Remove article and highlight fragments

* Query article.slug on Prod

* Show unable to parse description for failed page

* Fix a bug having duplicate pages when saving the same url multiple times

* Add state in response

* Rename variables in removeArticle API

* Rename state

* Add state in response in web

* Make state an enum

* Open temporary page by link id

* Use an empty reader view as the background for loading pages

* Progressively load the article page as content is loaded

* Add includePending flag in getArticles API

* Set includePending = true in web

* Add elastic update mappings in migration script

* Add elastic mappings in docker image

* Move index_settings.json to migrate package

* Remove elastic index creation in api

* Move elastic migrations to a separate directory

* Remove index_settings from api docker image

Co-authored-by: Jackson Harper <jacksonh@gmail.com>
2022-04-29 13:41:06 +08:00

150 lines
3.9 KiB
TypeScript

import { User } from '../../src/entity/user'
import {
ArticleSavingRequestStatus,
PageContext,
} from '../../src/elastic/types'
import { createTestUser, deleteTestUser } from '../db'
import { graphqlRequest, request } from '../util'
import { createPubSubClient } from '../../src/datalayer/pubsub'
import { expect } from 'chai'
import { describe } from 'mocha'
import { getPageById } from '../../src/elastic/pages'
import {
ArticleSavingRequestErrorCode,
CreateArticleSavingRequestErrorCode,
} from '../../src/generated/graphql'
const articleSavingRequestQuery = (id: string) => `
query {
articleSavingRequest(id: "${id}") {
... on ArticleSavingRequestSuccess {
articleSavingRequest {
id
status
}
}
... on ArticleSavingRequestError {
errorCodes
}
}
}
`
const createArticleSavingRequestMutation = (url: string) => `
mutation {
createArticleSavingRequest(input: {
url: "${url}"
}) {
... on CreateArticleSavingRequestSuccess {
articleSavingRequest {
id
status
}
}
... on CreateArticleSavingRequestError {
errorCodes
}
}
}
`
describe('ArticleSavingRequest API', () => {
const username = 'fakeUser'
let authToken: string
let user: User
let ctx: PageContext
before(async () => {
// create test user and login
user = await createTestUser(username)
const res = await request
.post('/local/debug/fake-user-login')
.send({ fakeEmail: user.email })
authToken = res.body.authToken
ctx = {
pubsub: createPubSubClient(),
refresh: true,
uid: user.id,
}
})
after(async () => {
// clean up
await deleteTestUser(username)
})
describe('createArticleSavingRequest', () => {
it('returns the article saving request', async () => {
const res = await graphqlRequest(
createArticleSavingRequestMutation('https://example.com'),
authToken
).expect(200)
expect(
res.body.data.createArticleSavingRequest.articleSavingRequest.status
).to.eql(ArticleSavingRequestStatus.Processing)
})
it('creates a page in elastic', async () => {
const res = await graphqlRequest(
createArticleSavingRequestMutation('https://example.com/1'),
authToken
).expect(200)
const page = await getPageById(
res.body.data.createArticleSavingRequest.articleSavingRequest.id
)
expect(page?.description).to.eq('Your link is being saved...')
})
it('returns an error if the url is invalid', async () => {
const res = await graphqlRequest(
createArticleSavingRequestMutation('invalid url'),
authToken
).expect(200)
expect(res.body.data.createArticleSavingRequest.errorCodes).to.eql([
CreateArticleSavingRequestErrorCode.BadData,
])
})
})
describe('articleSavingRequest', () => {
let articleSavingRequestId: string
before(async () => {
// create article saving request
const res = await graphqlRequest(
createArticleSavingRequestMutation('https://example.com/2'),
authToken
).expect(200)
articleSavingRequestId =
res.body.data.createArticleSavingRequest.articleSavingRequest.id
})
it('returns the article saving request if exists', async () => {
const res = await graphqlRequest(
articleSavingRequestQuery(articleSavingRequestId),
authToken
).expect(200)
expect(res.body.data.articleSavingRequest.articleSavingRequest.id).to.eql(
articleSavingRequestId
)
})
it('returns not_found if not exists', async () => {
const res = await graphqlRequest(
articleSavingRequestQuery('invalid-id'),
authToken
).expect(200)
expect(res.body.data.articleSavingRequest.errorCodes).to.eql([
ArticleSavingRequestErrorCode.NotFound,
])
})
})
})