diff --git a/packages/api/src/services/save_email.ts b/packages/api/src/services/save_email.ts index 78614a84b..e4ef22628 100644 --- a/packages/api/src/services/save_email.ts +++ b/packages/api/src/services/save_email.ts @@ -79,7 +79,7 @@ export const saveEmail = async ( result = await ctx.models.userArticle.update(matchedUserArticleRecord.id, { savedAt: new Date(), - archivedAt: undefined, + archivedAt: null, }) } else { await ctx.pubsub.pageCreated(saverId, url, input.originalContent) diff --git a/packages/api/src/services/save_file.ts b/packages/api/src/services/save_file.ts index 8ea991233..b6c2505d3 100644 --- a/packages/api/src/services/save_file.ts +++ b/packages/api/src/services/save_file.ts @@ -92,7 +92,7 @@ export const saveFile = async ( matchedUserArticleRecord.id, { savedAt: new Date(), - archivedAt: undefined, + archivedAt: null, }, tx ) diff --git a/packages/api/src/services/save_page.ts b/packages/api/src/services/save_page.ts index 3171e99cd..ae2c5e219 100644 --- a/packages/api/src/services/save_page.ts +++ b/packages/api/src/services/save_page.ts @@ -125,7 +125,7 @@ export const savePage = async ( matchedUserArticleRecord.id, { savedAt: new Date(), - archivedAt: undefined, + archivedAt: null, }, tx ) diff --git a/packages/api/test/resolvers/article.test.ts b/packages/api/test/resolvers/article.test.ts index 3c7f6833b..cd28a2e0a 100644 --- a/packages/api/test/resolvers/article.test.ts +++ b/packages/api/test/resolvers/article.test.ts @@ -4,31 +4,116 @@ import { createTestUser, deleteTestUser, } from '../db' -import { graphqlRequest, request } from '../util' +import { generateFakeUuid, graphqlRequest, request } from '../util' import { expect } from 'chai' import { Page } from '../../src/entity/page' import 'mocha' +import { User } from '../../src/entity/user' +import * as chai from 'chai' +import chaiString from 'chai-string' + +chai.use(chaiString) + +const archiveLink = async (authToken: string, linkId: string) => { + const query = ` + mutation { + setLinkArchived( + input: { + linkId: "${linkId}", + archived: ${true} + } + ) { + ... on ArchiveLinkSuccess { + linkId + } + ... on ArchiveLinkError { + errorCodes + } + } + } + ` + return await graphqlRequest(query, authToken).expect(200) +} + +const articlesQuery = (after = '', order = 'ASCENDING') => { + return ` + query { + articles( + sharedOnly: ${false} + sort: { + order: ${order} + by: UPDATED_TIME + } + after: "${after}" + first: 5 + query: "") { + ... on ArticlesSuccess { + edges { + cursor + node { + id + url + } + } + pageInfo { + hasNextPage + hasPreviousPage + startCursor + endCursor + totalCount + } + } + ... on ArticlesError { + errorCodes + } + } + } + ` +} + +const savePageQuery = (url: string, title: string, originalContent: string) => { + return ` + mutation { + savePage( + input: { + url: "${url}", + source: "test", + clientRequestId: "${generateFakeUuid()}", + title: "${title}", + originalContent: "${originalContent}" + } + ) { + ... on SaveSuccess { + url + } + ... on SaveError { + errorCodes + } + } + } + ` +} describe('Article API', () => { const username = 'fakeUser' - let authToken: string + let user: User let links: Page[] = [] before(async () => { // create test user and login - const user = await createTestUser(username) + user = await createTestUser(username) const res = await request .post('/local/debug/fake-user-login') .send({ fakeEmail: user.email }) - authToken = res.body.authToken - + // Create some test links for (let i = 0; i < 15; i++) { const page = await createTestPage() await createTestLink(user, page) links.push(page) } + authToken = res.body.authToken }) after(async () => { @@ -40,39 +125,8 @@ describe('Article API', () => { let query = '' let after = '' - beforeEach(() => { - query = ` - query { - articles( - sharedOnly: ${false} - sort: { - order: ASCENDING - by: UPDATED_TIME - } - after: "${after}" - first: 5 - query: "") { - ... on ArticlesSuccess { - edges { - cursor - node { - id - } - } - pageInfo { - hasNextPage - hasPreviousPage - startCursor - endCursor - totalCount - } - } - ... on ArticlesError { - errorCodes - } - } - } - ` + beforeEach(async () => { + query = articlesQuery(after) }) context('when we fetch the first page', () => { @@ -140,4 +194,43 @@ describe('Article API', () => { }) }) }) + + describe('SavePage', () => { + let query = '' + let title = 'Example Title' + let url = 'https://example.com' + let originalContent = '