vipex/node-tuleap-api

View on GitHub
lib/Models/trackers.js

Summary

Maintainability
D
1 day
Test Coverage
/**
 * Trackers module
 * @module Tuleap/Models/trackers
 */

'use strict';

/**
 * Standard request cb
 * @callback requestCallback
 * @param {Error} Error
 * @param {object} Data
 */

var Utils = require('../utils.js');

var Debug = require('debug')('Tuleap:Trackers');

/**
 * @class
 * @param {object} client - API client
 * @constructor
 */
var Trackers = function (client) {
    if (!client) {
        throw new Error('No client object.');
    }
    this.client = client;
    this.path = '/trackers/';
};

/**
 * Endpoint: GET /trackers/{id}
 * https://tuleap.net/api/explorer/#!/trackers/retrieveId
 * Get the definition of the given tracker.
 *
 * @param {object} query - Query parameters
 * @param {number} query.id - Tracker id
 * @param {requestCallback} cb - The callback function
 * @returns {object} - Request object
 */
Trackers.prototype.tracker = function (query, cb) {
    Debug('Tracker query:' + query);

    return this.client
        .get(
            this.path + query.id,
            {},
            function (err, res, data) {
                cb.apply(null, Utils.resParse(err, res, data));
            }
        );
};

/**
 * Endpoint: GET /trackers/{id}/artifacts
 * https://tuleap.net/api/explorer/#!/trackers/retrieveArtifacts
 * Get all artifacts of a given tracker the user can view.
 *
 * @param {object} query - Query parameters
 * @param {number} query.id - Tracker id
 * @param {number} [query.limit=100] - Results limit
 * @param {number} [query.offset=0] - Results offset
 * @param {object} [query.query={}] - Search query
 * @param {string} [query.order=asc] - Results order by id ('asc'||'desc')
 * @param {requestCallback} cb - The callback function
 * @returns {object} - Request object
 */
Trackers.prototype.artifacts = function (query, cb) {
    Debug('Artifacts query:', query);

    var qr = {
        values: 'all',
        limit: query.limit || 1000,
        offset: query.offset || 0,
        query: query.query || null,
        order: query.order || 'asc'
    };

    return this.client
        .get(
            this.path + query.id + '/artifacts',
            {query: qr},
            function (err, res, data) {
                cb.apply(null, Utils.resParse(err, res, data));
            }
        );
};

/**
 * Endpoint: GET /trackers/{id}/parent_artifacts
 * https://tuleap.net/api/explorer/#!/trackers/retrieveParentArtifacts
 * Given a tracker, get all open artifacts of its parent tracker ordered by their artifact id in decreasing order.
 * If the given tracker doesn't have a parent, it returns an error (404).
 *
 * @param {object} query - Query parameters
 * @param {number} query.id - Tracker id
 * @param {number} [query.limit=100] - Results limit
 * @param {number} [query.offset=0] - Results offset
 * @param {requestCallback} cb - The callback function
 * @returns {object} - Request object
 */
Trackers.prototype.parentArtifacts = function (query, cb) {
    Debug('ParentArtifacts query:', query);

    var qr = {
        limit: query.limit || 100,
        offset: query.offset || 0
    };

    return this.client
        .get(
            this.path + query.id + '/parent_artifacts',
            {query: qr},
            function (err, res, data) {
                cb.apply(null, Utils.resParse(err, res, data));
            }
        );
};

/**
 * Endpoint: GET /trackers/{id}/tracker_reports
 * https://tuleap.net/api/explorer/#!/trackers/retrieveReports
 * All reports the user can see
 *
 * @param {object} query - Query parameters
 * @param {number} query.id - Tracker id
 * @param {number} [query.limit=100] - Results limit
 * @param {number} [query.offset=0] - Results offset
 * @param {requestCallback} cb - The callback function
 * @returns {object} - Request object
 */
Trackers.prototype.trackerReports = function (query, cb) {
    Debug('TrackerReports query:', query);

    var qr = {
        limit: query.limit || 100,
        offset: query.offset || 0
    };

    return this.client
        .get(
            this.path + query.id + '/tracker_reports',
            {query: qr},
            function (err, res, data) {
                cb.apply(null, Utils.resParse(err, res, data));
            }
        );
};

/**
 * Trackers module exported
 *
 * @type {Trackers}
 */
module.exports = Trackers;