Skip to content

Commit 4c848d8

Browse files
aivuss0ph1e
authored andcommitted
Fix ignoring different string cases in extensions (#193)
1 parent eac14a7 commit 4c848d8

File tree

4 files changed

+45
-14
lines changed

4 files changed

+45
-14
lines changed

lib/scraper.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ function Scraper (options) {
2222
self.options.request = _.extend({}, defaults.request, options.request);
2323
self.options.urls = _.isArray(self.options.urls) ? self.options.urls : [self.options.urls];
2424

25+
if (self.options.subdirectories) {
26+
self.options.subdirectories.forEach((element) => {
27+
element.extensions = element.extensions.map((ext) => ext.toLowerCase());
28+
});
29+
}
30+
2531
if (self.options.recursive) {
2632
self.options.sources = _.union(self.options.sources, recursiveSources);
2733
}

lib/utils/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ function getHashFromUrl (u) {
7878
* @returns {string|null} - extension
7979
*/
8080
function getFilenameExtension (filepath) {
81-
return (typeof filepath === 'string') ? path.extname(filepath) : null;
81+
return (typeof filepath === 'string') ? path.extname(filepath).toLowerCase() : null;
8282
}
8383

8484
function shortenFilename (filename) {

test/unit/filename-generator/by-type-test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,18 @@ describe('FilenameGenerator: byType', function() {
5757
filename.should.equalFileSystemPath('img/a.png');
5858
});
5959

60+
it('should return filename with correct subdirectory when string cases are different', function() {
61+
var options = {
62+
subdirectories: [
63+
{ directory: 'img', extensions: ['.png'] }
64+
]
65+
};
66+
67+
var r = new Resource('http://example.com/a.PNG');
68+
var f = byTypeFilenameGenerator(r, options, []);
69+
f.should.equalFileSystemPath('img/a.PNG');
70+
});
71+
6072
it('should return different filename if desired filename is occupied', function() {
6173
var r = new Resource('http://second-example.com/a.png');
6274
var filename = byTypeFilenameGenerator(r, {}, [ 'a.png' ]);

test/unit/scraper-init-test.js

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
var should = require('should');
2-
var proxyquire = require('proxyquire');
2+
var proxyquire = require('proxyquire').noCallThru();
33
var sinon = require('sinon');
44
var path = require('path');
55
var Scraper = require('../../lib/scraper');
@@ -10,10 +10,10 @@ var urls = [ 'http://example.com' ];
1010

1111
describe('Scraper initialization', function () {
1212
describe('defaultFilename', function() {
13-
var defaultsMock, Scraper;
13+
var Scraper;
1414

1515
before(function() {
16-
defaultsMock = { defaultFilename: 'dummyFilename.txt' };
16+
var defaultsMock = { defaultFilename: 'dummyFilename.txt' };
1717
Scraper = proxyquire('../../lib/scraper', {
1818
'./config/defaults': defaultsMock
1919
});
@@ -25,7 +25,7 @@ describe('Scraper initialization', function () {
2525
directory: testDirname
2626
});
2727

28-
s.options.defaultFilename.should.equalFileSystemPath(defaultsMock.defaultFilename);
28+
s.options.defaultFilename.should.equalFileSystemPath('dummyFilename.txt');
2929
});
3030

3131
it('should use defaultFilename sources if defaultFilename were passed', function () {
@@ -40,10 +40,10 @@ describe('Scraper initialization', function () {
4040
});
4141

4242
describe('sources', function() {
43-
var defaultsMock, Scraper;
43+
var Scraper;
4444

4545
before(function() {
46-
defaultsMock = { sources: ['1', '2', '3'] };
46+
var defaultsMock = { sources: ['1', '2', '3'] };
4747
Scraper = proxyquire('../../lib/scraper', {
4848
'./config/defaults': defaultsMock
4949
});
@@ -55,7 +55,7 @@ describe('Scraper initialization', function () {
5555
directory: testDirname
5656
});
5757

58-
s.options.sources.should.eql(defaultsMock.sources);
58+
s.options.sources.should.eql(['1', '2', '3']);
5959
});
6060

6161
it('should use passed sources if sources were passed', function () {
@@ -85,10 +85,10 @@ describe('Scraper initialization', function () {
8585
});
8686

8787
describe('subdirectories', function () {
88-
var defaultsMock, Scraper;
88+
var Scraper;
8989

9090
before(function() {
91-
defaultsMock = { directories: { directory: 'dir', extensions: ['.txt'] }, };
91+
var defaultsMock = { subdirectories: [{ directory: 'dir', extensions: ['.txt'] }] };
9292
Scraper = proxyquire('../../lib/scraper', {
9393
'./config/defaults': defaultsMock
9494
});
@@ -100,7 +100,20 @@ describe('Scraper initialization', function () {
100100
directory: testDirname
101101
});
102102

103-
s.options.subdirectories.should.eql(defaultsMock.subdirectories);
103+
s.options.subdirectories.should.eql([{ directory: 'dir', extensions: ['.txt'] }]);
104+
});
105+
106+
it('should convert extensions to lower case', function () {
107+
108+
var s = new Scraper({
109+
urls: urls,
110+
directory: testDirname,
111+
subdirectories: [
112+
{ directory: 'dir', extensions: ['.TXT'] }
113+
]
114+
});
115+
116+
s.options.subdirectories[0].extensions.should.eql(['.txt']);
104117
});
105118

106119
it('should use passed subdirectories if subdirectories were passed', function () {
@@ -125,10 +138,10 @@ describe('Scraper initialization', function () {
125138
});
126139

127140
describe('request', function () {
128-
var defaultsMock, Scraper;
141+
var Scraper;
129142

130143
before(function() {
131-
defaultsMock = { request: { a: 1, b: 2 } };
144+
var defaultsMock = { request: { a: 1, b: 2 } };
132145
Scraper = proxyquire('../../lib/scraper', {
133146
'./config/defaults': defaultsMock
134147
});
@@ -140,7 +153,7 @@ describe('Scraper initialization', function () {
140153
directory: testDirname
141154
});
142155

143-
s.options.request.should.eql(defaultsMock.request);
156+
s.options.request.should.eql({ a: 1, b: 2 });
144157
});
145158

146159
it('should merge default and passed objects if request were passed', function () {

0 commit comments

Comments
 (0)