mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-14 21:27:23 +01:00
* remove some unused dependencies * update mongoose version * make common tests pass * Make unit tests pass * make api v3 integration tests pass * fix lint issues * fix issue with package-lock * fix(lint): we don't need no .js * fix(lint): update to latest config-habitrpg * chore(npm): update package locks * fix(test): replace deprecated fn * chore(package): update eslint-habitrpg again * fix(lint): server linting * fix(lint): client linting * fix(client): correct mangled common imports * chore(npm): update package-locks * fix(lint): punctuation, module --------- Co-authored-by: SabreCat <sabrecat@gmail.com> Co-authored-by: SabreCat <sabe@habitica.com>
139 lines
4.2 KiB
JavaScript
139 lines
4.2 KiB
JavaScript
import { v4 } from 'uuid';
|
|
import { model as NewsPost, refreshNewsPost } from '../../../../website/server/models/newsPost';
|
|
import { sleep } from '../../../helpers/api-unit.helper';
|
|
|
|
describe('NewsPost Model', () => {
|
|
const publishDate = Number(new Date());
|
|
|
|
// NOTE publishDate is manually increased by +500 for each test
|
|
// to make sure it's always in the future from the previous one
|
|
// bevause NewsPost.lastNewsPost() is not reset between tests.
|
|
// And without a more recent publishDate it wouldn't update
|
|
|
|
it('#lastNewsPost', () => {
|
|
const lastPost = { _id: v4(), publishDate, published: true };
|
|
NewsPost.updateLastNewsPost(lastPost);
|
|
expect(NewsPost.lastNewsPost()).to.equal(lastPost);
|
|
});
|
|
|
|
it('#getLastPostFromDatabase', async () => {
|
|
const expectedId = v4();
|
|
|
|
await NewsPost.create([
|
|
// more recent but not published
|
|
{
|
|
_id: v4(),
|
|
publishDate: new Date(publishDate + 50),
|
|
author: v4(),
|
|
published: false,
|
|
title: 'Title',
|
|
credits: 'credits',
|
|
text: 'text',
|
|
},
|
|
// expected
|
|
{
|
|
_id: expectedId,
|
|
publishDate,
|
|
author: v4(),
|
|
published: true,
|
|
title: 'Title',
|
|
credits: 'credits',
|
|
text: 'text',
|
|
},
|
|
// published but less recent
|
|
{
|
|
_id: v4(),
|
|
publishDate: new Date(Number(publishDate) - 50),
|
|
author: v4(),
|
|
published: true,
|
|
title: 'Title',
|
|
credits: 'credits',
|
|
text: 'text',
|
|
},
|
|
]);
|
|
|
|
const fetched = await NewsPost.getLastPostFromDatabase();
|
|
expect(fetched._id).to.equal(expectedId);
|
|
});
|
|
|
|
context('#updateLastNewsPost', () => {
|
|
it('updates the post if new one is more recent and published', () => {
|
|
const previousPost = {
|
|
_id: v4(),
|
|
publishDate: new Date(publishDate + 100),
|
|
published: true,
|
|
};
|
|
NewsPost.updateLastNewsPost(previousPost);
|
|
const newPost = {
|
|
_id: v4(),
|
|
publishDate: new Date(publishDate + 150),
|
|
published: true,
|
|
};
|
|
NewsPost.updateLastNewsPost(newPost);
|
|
expect(NewsPost.lastNewsPost()._id).to.equal(newPost._id);
|
|
});
|
|
|
|
it('does not update the post if new one is from the past', () => {
|
|
const previousPost = new NewsPost({
|
|
_id: v4(), publishDate: new Date(publishDate + 200), published: true,
|
|
});
|
|
NewsPost.updateLastNewsPost(previousPost);
|
|
const newPost = new NewsPost({
|
|
_id: v4(), publishDate: new Date(publishDate + 175), published: true,
|
|
});
|
|
NewsPost.updateLastNewsPost(newPost);
|
|
expect(NewsPost.lastNewsPost()._id).to.equal(previousPost._id);
|
|
});
|
|
|
|
it('does not update the post if new one is not published', () => {
|
|
const previousPost = new NewsPost({
|
|
_id: v4(), publishDate: new Date(publishDate + 250), published: true,
|
|
});
|
|
NewsPost.updateLastNewsPost(previousPost);
|
|
const newPost = new NewsPost({
|
|
_id: v4(), publishDate: new Date(publishDate + 300), published: false,
|
|
});
|
|
NewsPost.updateLastNewsPost(newPost);
|
|
expect(NewsPost.lastNewsPost()._id).to.equal(previousPost._id);
|
|
});
|
|
});
|
|
|
|
context('refreshes NewsPost', () => {
|
|
let intervalId;
|
|
|
|
beforeEach(async () => {
|
|
// Delete all existing posts from the database
|
|
await NewsPost.deleteMany();
|
|
});
|
|
|
|
afterEach(() => {
|
|
if (intervalId) clearInterval(intervalId);
|
|
});
|
|
|
|
it('refreshes the last post at a specific interval', async () => {
|
|
await sleep(0.1); // wait 100ms to make sure all previous posts are in the past
|
|
const previousPost = {
|
|
_id: v4(), publishDate: new Date(), published: true,
|
|
};
|
|
NewsPost.updateLastNewsPost(previousPost);
|
|
intervalId = refreshNewsPost(100); // refreshes every 100ms
|
|
|
|
await sleep(0.1); // wait 100ms to make sure the new post has a more recent publishDate
|
|
const newPost = await NewsPost.create({
|
|
_id: v4(),
|
|
publishDate: new Date(),
|
|
author: v4(),
|
|
published: true,
|
|
title: 'Title',
|
|
credits: 'credits',
|
|
text: 'text',
|
|
});
|
|
|
|
expect(NewsPost.lastNewsPost()._id).to.equal(previousPost._id);
|
|
await sleep(0.15); // wait 150ms
|
|
|
|
expect(NewsPost.lastNewsPost()._id).to.equal(newPost._id);
|
|
});
|
|
});
|
|
});
|