/* eslint-disable flowtype/require-valid-file-annotation */ import TestServer from 'fetch-test-server'; import subDays from 'date-fns/sub_days'; import app from '../app'; import { Document } from '../models'; import { sequelize } from '../sequelize'; import { flushdb } from '../test/support'; import { buildDocument } from '../test/factories'; const server = new TestServer(app.callback()); beforeEach(flushdb); afterAll(server.close); describe('#utils.gc', async () => { it('should destroy documents deleted more than 30 days ago', async () => { const document = await buildDocument({ publishedAt: new Date(), }); await sequelize.query( `UPDATE documents SET "deletedAt" = '${subDays( new Date(), 60 ).toISOString()}' WHERE id = '${document.id}'` ); const res = await server.post('/api/utils.gc', { body: { token: process.env.UTILS_SECRET, }, }); const reloaded = await Document.scope().findOne({ where: { id: document.id, }, paranoid: false, }); expect(res.status).toEqual(200); expect(reloaded).toBe(null); }); it('should destroy draft documents deleted more than 30 days ago', async () => { const document = await buildDocument({ publishedAt: undefined, }); await sequelize.query( `UPDATE documents SET "deletedAt" = '${subDays( new Date(), 60 ).toISOString()}' WHERE id = '${document.id}'` ); const res = await server.post('/api/utils.gc', { body: { token: process.env.UTILS_SECRET, }, }); const reloaded = await Document.scope().findOne({ where: { id: document.id, }, paranoid: false, }); expect(res.status).toEqual(200); expect(reloaded).toBe(null); }); it('should require authentication', async () => { const res = await server.post('/api/utils.gc'); expect(res.status).toEqual(401); }); });