diff --git a/src/topics/thumbs.js b/src/topics/thumbs.js index df94024e08..375f04732f 100644 --- a/src/topics/thumbs.js +++ b/src/topics/thumbs.js @@ -62,7 +62,7 @@ async function getThumbs(set) { if (cached !== undefined) { return cached.slice(); } - const thumbs = await db.getSortedSetRange(set, 0, -1); + const thumbs = await db.getSortedSetRangeByScore(set, 0, -1, '-inf', '+inf'); cache.set(set, thumbs); return thumbs.slice(); } @@ -79,7 +79,7 @@ Thumbs.associate = async function ({ id, path, score }) { path = path.replace(nconf.get('upload_path'), ''); } const topics = require('.'); - await db.sortedSetAdd(set, score || numThumbs, path); + await db.sortedSetAdd(set, isFinite(score) ? score : numThumbs, path); if (!isDraft) { const numThumbs = await db.sortedSetCard(set); await topics.setTopicField(id, 'numThumbs', numThumbs); @@ -97,6 +97,7 @@ Thumbs.migrate = async function (uuid, id) { // Converts the draft thumb zset to the topic zset (combines thumbs if applicable) const set = `draft:${uuid}:thumbs`; const thumbs = await db.getSortedSetRangeWithScores(set, 0, -1); + console.log(thumbs); await Promise.all(thumbs.map(async thumb => await Thumbs.associate({ id, path: thumb.value, diff --git a/test/topicThumbs.js b/test/topicThumbs.js index d23c225e04..4277e0726a 100644 --- a/test/topicThumbs.js +++ b/test/topicThumbs.js @@ -167,6 +167,31 @@ describe('Topic thumbs', () => { assert.strictEqual(parseInt(numThumbs, 10), 2); }); + it('should successfully associate a thumb with a topic even if it already contains that thumbnail (updates score)', async () => { + await topics.thumbs.associate({ + id: tid, + path: relativeThumbPaths[0], + }); + + const score = await db.sortedSetScore(`topic:2:thumbs`, relativeThumbPaths[0]); + + assert(isFinite(score)); // exists in set + assert.strictEqual(score, 2); + }); + + it('should update the score to be passed in as the third argument', async () => { + await topics.thumbs.associate({ + id: tid, + path: relativeThumbPaths[0], + score: 0, + }); + + const score = await db.sortedSetScore(`topic:2:thumbs`, relativeThumbPaths[0]); + + assert(isFinite(score)); // exists in set + assert.strictEqual(score, 0); + }); + it('should associate the thumbnail with that topic\'s main pid\'s uploads', async () => { const uploads = await posts.uploads.list(mainPid); assert(uploads.includes(path.basename(relativeThumbPaths[0]))); @@ -193,13 +218,13 @@ describe('Topic thumbs', () => { }, { id: 2, - name: 'example.org', - url: 'https://example.org', + name: 'test2.png', + url: `${nconf.get('relative_path')}${nconf.get('upload_url')}${relativeThumbPaths[1]}`, }, { id: 2, - name: 'test2.png', - url: `${nconf.get('relative_path')}${nconf.get('upload_url')}${relativeThumbPaths[1]}`, + name: 'example.org', + url: 'https://example.org', }, ]); });