Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chnaged scenes from array to object, then could get the filename #2

Merged
merged 2 commits into from Mar 20, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
24 changes: 12 additions & 12 deletions index.js
Expand Up @@ -50,6 +50,7 @@ function mapping(datadir, url) {
var pathname = info.pathname.replace(/^\/+/g, '');
var scene = (info.query && info.query.__scene || '').trim();
scene = scene || 'default';
scene = scene.replace(/\.(js|json)$/, '');
var m = / \(([^\)]+)\.(?:js|json)\)$/.exec(scene);
if (m) {
scene = m[1];
Expand Down Expand Up @@ -115,7 +116,7 @@ function load(filepath, ctx) {
}

function findAllScenes(datadir, url) {
var scenes = [];
var scenes = {};
var info = urlparse(url, true);
var pathname = info.pathname.replace(/^\/+/g, '');
var dir = path.join(datadir, pathname);
Expand Down Expand Up @@ -145,20 +146,19 @@ function findAllScenes(datadir, url) {
return false;
});

scenes = filepaths.map(function (filepath) {
filepaths.map(function (filepath) {
var filename = path.basename(filepath);
var defaultName = filename.substring(0, filename.lastIndexOf('.'));
var data;
// use filename as default name
var name = filename.substring(0, filename.lastIndexOf('.'));

try {
data = require(filepath);
} catch (_) {
return defaultName;
}
var data = require(filepath);
if (data && data.__name) {
name = data.__name;
}
} catch (_) {}

if (!data.__name) {
return defaultName;
}
return data.__name + ' (' + filename + ')';
scenes[filename] = name;
});
}
return scenes;
Expand Down
42 changes: 35 additions & 7 deletions test/index.test.js
Expand Up @@ -72,6 +72,12 @@ describe('urlmock', function () {
path.join(datadir, 'foo', 'default.json'),
]);

var paths = urlmock.mapping(datadir, '/foo?__scene=default.js');
assert.deepEqual(paths, [
path.join(datadir, 'foo', 'default.js'),
path.join(datadir, 'foo', 'default.json'),
]);

var paths = urlmock.mapping(datadir, '/foo?__scene=%20%20%20');
assert.deepEqual(paths, [
path.join(datadir, 'foo', 'default.js'),
Expand Down Expand Up @@ -331,27 +337,49 @@ describe('urlmock', function () {
describe('findAllScenes()', function () {
it('should find out all exists scenes', function () {
var data = urlmock.findAllScenes(datadir, '/');
assert.deepEqual(data, [ 'admin', 'array', 'data_with_ctx', 'default', 'fail', 'jsarray', 'logined' ]);
assert.deepEqual(data, {
'admin.js': 'admin',
'array.json': 'array',
'data_with_ctx.js': 'data_with_ctx',
'default.js': 'default',
'fail.js': 'fail',
'jsarray.js': 'jsarray',
'logined.js': 'logined'
});

var data = urlmock.findAllScenes(datadir, '/users');
assert.deepEqual(data, [ 'other', 'second' ]);
assert.deepEqual(data, {
'other.js': 'other',
'second.js': 'second'
});

var data = urlmock.findAllScenes(datadir, '/users.');
assert.deepEqual(data, []);
assert.deepEqual(data, {});

var data = urlmock.findAllScenes(datadir, '/users.html');
assert.deepEqual(data, [ 'other', 'second' ]);
assert.deepEqual(data, {
'other.js': 'other',
'second.js': 'second'
});

var data = urlmock.findAllScenes(datadir, '/users/123');
assert.deepEqual(data, [ 'one' ]);
assert.deepEqual(data, {
'one.js': 'one'
});

var data = urlmock.findAllScenes(datadir, '/users/123.html');
assert.deepEqual(data, [ 'default' ]);
assert.deepEqual(data, {
'default.js': 'default'
});
});

it('should support `__name` in mock data file', function () {
var data = urlmock.findAllScenes(datadir, '/profile');
assert.deepEqual(data, ['normal user (default.js)', 'lucy', '马 yun yun (ma.js)']);
assert.deepEqual(data, {
'default.js': 'normal user',
'lucy.js': 'lucy',
'ma.js': '马 yun yun'
});
});
});
});