From 946d195431a9836b662983fa8e49abc42c9b9456 Mon Sep 17 00:00:00 2001 From: "Juan Picado @jotadeveloper" Date: Sat, 30 Jun 2018 18:10:05 +0200 Subject: [PATCH] refactor: pkg.access unit test migrate more constants --- src/lib/config-utils.js | 7 +++++-- src/lib/config.js | 2 +- src/lib/constants.js | 3 ++- src/lib/storage-utils.js | 2 +- src/lib/up-storage.js | 4 ++-- test/unit/api/api.pkg.access.spec.js | 14 +++++++++++++- test/unit/api/up-storage.spec.js | 10 +++++----- .../config/{access.js => config_access.js} | 3 +-- 8 files changed, 30 insertions(+), 15 deletions(-) rename test/unit/partials/config/{access.js => config_access.js} (82%) diff --git a/src/lib/config-utils.js b/src/lib/config-utils.js index 5fda25ef2..409a5169c 100644 --- a/src/lib/config-utils.js +++ b/src/lib/config-utils.js @@ -3,13 +3,14 @@ import _ from 'lodash'; import minimatch from 'minimatch'; import assert from 'assert'; +import {ErrorCode} from './utils'; /** * Normalise user list. * @return {Array} */ export function normalizeUserlist(oldFormat: any, newFormat: any) { - let result = []; + const result = []; /* eslint prefer-rest-params: "off" */ for (let i=0; i < arguments.length; i++) { @@ -23,7 +24,7 @@ export function normalizeUserlist(oldFormat: any, newFormat: any) { } else if (Array.isArray(arguments[i])) { result.push(arguments[i]); } else { - throw Error('CONFIG: bad package acl (array or string expected): ' + JSON.stringify(arguments[i])); + throw ErrorCode.getInternalError('CONFIG: bad package acl (array or string expected): ' + JSON.stringify(arguments[i])); } } return _.flatten(result); @@ -36,6 +37,7 @@ export function getMatchedPackagesSpec(packages: any, pkg: any) { return packages[i]; } } + return {}; } @@ -61,3 +63,4 @@ export function normalisePackageAccess(packages: any): any { return normalizedPkgs; } + diff --git a/src/lib/config.js b/src/lib/config.js index ab546e170..77fcbad82 100644 --- a/src/lib/config.js +++ b/src/lib/config.js @@ -3,7 +3,6 @@ import {normalisePackageAccess} from './config-utils'; const assert = require('assert'); const _ = require('lodash'); -// const Error = require('http-errors'); const minimatch = require('minimatch'); const Utils = require('./utils'); @@ -43,6 +42,7 @@ class Config { self[configProp] = config[configProp]; } } + if (!self.user_agent) { self.user_agent = `${pkgName}/${pkgVersion}`; } diff --git a/src/lib/constants.js b/src/lib/constants.js index f7e892dca..138ac0a5e 100644 --- a/src/lib/constants.js +++ b/src/lib/constants.js @@ -71,7 +71,8 @@ export const API_ERROR = { INTERNAL_SERVER_ERROR: 'internal server error', UNKNOWN_ERROR: 'unknown error', NOT_PACKAGE_UPLINK: 'package does not exist on uplink', - UPLINK_OFFLINE: 'one of the uplinks is down, refuse to publish', + UPLINK_OFFLINE_PUBLISH: 'one of the uplinks is down, refuse to publish', + UPLINK_OFFLINE: 'uplink is offline', CONTENT_MISMATCH: 'content length mismatch', NOT_FILE_UPLINK: 'file doesn\'t exist on uplink', MAX_USERS_REACHED: 'maximum amount of users reached', diff --git a/src/lib/storage-utils.js b/src/lib/storage-utils.js index b84ce60f1..4d20a3a65 100644 --- a/src/lib/storage-utils.js +++ b/src/lib/storage-utils.js @@ -171,7 +171,7 @@ export function checkPackageRemote(name: string, isAllowPublishOffline: boolean, return resolve(); } - return reject(ErrorCode.getServiceUnavailable(API_ERROR.UPLINK_OFFLINE)); + return reject(ErrorCode.getServiceUnavailable(API_ERROR.UPLINK_OFFLINE_PUBLISH)); } } } diff --git a/src/lib/up-storage.js b/src/lib/up-storage.js index 520486a4c..a789deb54 100644 --- a/src/lib/up-storage.js +++ b/src/lib/up-storage.js @@ -105,10 +105,10 @@ class ProxyStorage implements IProxy { process.nextTick(function() { if (cb) { - cb(ErrorCode.getInternalError('uplink is offline')); + cb(ErrorCode.getInternalError(API_ERROR.UPLINK_OFFLINE)); } // $FlowFixMe - streamRead.emit('error', ErrorCode.getInternalError('uplink is offline')); + streamRead.emit('error', ErrorCode.getInternalError(API_ERROR.UPLINK_OFFLINE)); }); // $FlowFixMe streamRead._read = function() {}; diff --git a/test/unit/api/api.pkg.access.spec.js b/test/unit/api/api.pkg.access.spec.js index 60f630265..6ddcad22b 100644 --- a/test/unit/api/api.pkg.access.spec.js +++ b/test/unit/api/api.pkg.access.spec.js @@ -4,17 +4,21 @@ import path from 'path'; import rimraf from 'rimraf'; import {HEADERS} from '../../../src/lib/constants'; -import configDefault from '../partials/config/access'; +import configDefault from '../partials/config/config_access'; import Config from '../../../src/lib/config'; import endPointAPI from '../../../src/api/index'; +import {mockServer} from './mock'; +import {DOMAIN_SERVERS} from '../../functional/config.functional'; require('../../../src/lib/logger').setup([]); describe('api with no limited access configuration', () => { let config; let app; + let mockRegistry; beforeAll(function(done) { + const mockServerPort = 55530; const store = path.join(__dirname, './partials/store/access-storage'); rimraf(store, async () => { const configForTest = _.clone(configDefault); @@ -24,8 +28,14 @@ describe('api with no limited access configuration', () => { } }; configForTest.self_path = store; + configForTest.uplinks = { + npmjs: { + url: `http://${DOMAIN_SERVERS}:${mockServerPort}` + } + }; config = new Config(configForTest); app = await endPointAPI(config); + mockRegistry = await mockServer(mockServerPort).init(); done(); }); }); @@ -34,9 +44,11 @@ describe('api with no limited access configuration', () => { const store = path.join(__dirname, './partials/store/access-storage'); rimraf(store, (err) => { if (err) { + mockRegistry[0].stop(); return done(err); } + mockRegistry[0].stop(); return done(); }); }); diff --git a/test/unit/api/up-storage.spec.js b/test/unit/api/up-storage.spec.js index 56cdc99c7..66d6231a8 100644 --- a/test/unit/api/up-storage.spec.js +++ b/test/unit/api/up-storage.spec.js @@ -8,7 +8,7 @@ import {setup} from '../../../src/lib/logger'; import type {Config, UpLinkConf} from '@verdaccio/types'; import type {IProxy} from '../../../types/index'; -import {API_ERROR} from "../../../src/lib/constants"; +import {API_ERROR, HTTP_STATUS} from "../../../src/lib/constants"; import {mockServer} from './mock'; import {DOMAIN_SERVERS} from '../../functional/config.functional'; @@ -102,8 +102,8 @@ describe('UpStorge', () => { stream.on('error', function(err) { expect(err).not.toBeNull(); - expect(err.statusCode).toBe(404); - expect(err.message).toMatch(/file doesn't exist on uplink/); + expect(err.statusCode).toBe(HTTP_STATUS.NOT_FOUND); + expect(err.message).toMatch(API_ERROR.NOT_FILE_UPLINK); done(); }); @@ -141,9 +141,9 @@ describe('UpStorge', () => { const streamThirdTry = proxy.fetchTarball(tarball); streamThirdTry.on('error', function(err) { expect(err).not.toBeNull(); - expect(err.statusCode).toBe(500); + expect(err.statusCode).toBe(HTTP_STATUS.INTERNAL_ERROR); expect(proxy.failed_requests).toBe(2); - expect(err.message).toMatch(/uplink is offline/); + expect(err.message).toMatch(API_ERROR.UPLINK_OFFLINE); done(); }); }); diff --git a/test/unit/partials/config/access.js b/test/unit/partials/config/config_access.js similarity index 82% rename from test/unit/partials/config/access.js rename to test/unit/partials/config/config_access.js index 480e5bdb2..d9a863465 100644 --- a/test/unit/partials/config/access.js +++ b/test/unit/partials/config/config_access.js @@ -1,11 +1,10 @@ import path from 'path'; -import {DEFAULT_REGISTRY} from '../../../../src/lib/constants'; const config = { storage: path.join(__dirname, '../store/access-storage'), uplinks: { 'npmjs': { - 'url': DEFAULT_REGISTRY + 'url': 'http://never_use:0000/' } }, packages: {