• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

CMU-17313Q / fall23-nodebb-inshallah-a / 6239420468

19 Sep 2023 06:18PM UTC coverage: 77.199% (+0.01%) from 77.188%
6239420468

push

github

web-flow
Merge pull request #59 from CMU-17313Q/Adding-isAnonymous-if-conditions

Adding is anonymous if conditions

9091 of 13356 branches covered (0.0%)

Branch coverage included in aggregate %.

20876 of 25462 relevant lines covered (81.99%)

2463.76 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

8.82
/src/categories/search.js
1
'use strict';
2

3
const _ = require('lodash');
20✔
4

5
const privileges = require('../privileges');
20✔
6
const plugins = require('../plugins');
20✔
7
const db = require('../database');
20✔
8

9
module.exports = function (Categories) {
20✔
10
    Categories.search = async function (data) {
20✔
11
        const query = data.query || '';
×
12
        const page = data.page || 1;
×
13
        const uid = data.uid || 0;
×
14
        const paginate = data.hasOwnProperty('paginate') ? data.paginate : true;
×
15

16
        const startTime = process.hrtime();
×
17

18
        let cids = await findCids(query, data.hardCap);
×
19

20
        const result = await plugins.hooks.fire('filter:categories.search', {
×
21
            data: data,
22
            cids: cids,
23
            uid: uid,
24
        });
25
        cids = await privileges.categories.filterCids('find', result.cids, uid);
×
26

27
        const searchResult = {
×
28
            matchCount: cids.length,
29
        };
30

31
        if (paginate) {
×
32
            const resultsPerPage = data.resultsPerPage || 50;
×
33
            const start = Math.max(0, page - 1) * resultsPerPage;
×
34
            const stop = start + resultsPerPage;
×
35
            searchResult.pageCount = Math.ceil(cids.length / resultsPerPage);
×
36
            cids = cids.slice(start, stop);
×
37
        }
38

39
        const childrenCids = await getChildrenCids(cids, uid);
×
40
        const uniqCids = _.uniq(cids.concat(childrenCids));
×
41
        const categoryData = await Categories.getCategories(uniqCids, uid);
×
42

43
        Categories.getTree(categoryData, 0);
×
44
        await Categories.getRecentTopicReplies(categoryData, uid, data.qs);
×
45
        categoryData.forEach((category) => {
×
46
            if (category && Array.isArray(category.children)) {
×
47
                category.children = category.children.slice(0, category.subCategoriesPerPage);
×
48
                category.children.forEach((child) => {
×
49
                    child.children = undefined;
×
50
                });
51
            }
52
        });
53

54
        categoryData.sort((c1, c2) => {
×
55
            if (c1.parentCid !== c2.parentCid) {
×
56
                return c1.parentCid - c2.parentCid;
×
57
            }
58
            return c1.order - c2.order;
×
59
        });
60
        searchResult.timing = (process.elapsedTimeSince(startTime) / 1000).toFixed(2);
×
61
        searchResult.categories = categoryData.filter(c => cids.includes(c.cid));
×
62
        return searchResult;
×
63
    };
64

65
    async function findCids(query, hardCap) {
66
        if (!query || String(query).length < 2) {
×
67
            return [];
×
68
        }
69
        const data = await db.getSortedSetScan({
×
70
            key: 'categories:name',
71
            match: `*${String(query).toLowerCase()}*`,
72
            limit: hardCap || 500,
×
73
        });
74
        return data.map(data => parseInt(data.split(':').pop(), 10));
×
75
    }
76

77
    async function getChildrenCids(cids, uid) {
78
        const childrenCids = await Promise.all(cids.map(cid => Categories.getChildrenCids(cid)));
×
79
        return await privileges.categories.filterCids('find', _.flatten(childrenCids), uid);
×
80
    }
81
};
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc