Skip to content

Commit d6f8a91

Browse files
stage88acinader
authored andcommitted
Winston 3 upgrade (parse-community#5496)
* ⚡ Release 3.1.3 (parse-community#5267) * ⚡ Release 3.1.3 * Update CHANGELOG.md * ⬆️ Bump winston and winston-daily-rotate-file Bumps [winston](https://github.com/winstonjs/winston) and [winston-daily-rotate-file](https://github.com/winstonjs/winston-daily-rotate-file). These dependencies needed to be updated together. Updates `winston` from 2.4.4 to 3.1.0 - [Release notes](https://github.com/winstonjs/winston/releases) - [Changelog](https://github.com/winstonjs/winston/blob/master/CHANGELOG.md) - [Commits](winstonjs/winston@2.4.4...3.1.0) Updates `winston-daily-rotate-file` from 1.7.2 to 3.5.1 - [Release notes](https://github.com/winstonjs/winston-daily-rotate-file/releases) - [Commits](winstonjs/winston-daily-rotate-file@v1.7.2...v3.5.1) Signed-off-by: dependabot[bot] <[email protected]> * Rewrote WinstonLogger to work with winston 3.x api * Changed winston logger test to use winston-transport * Added winston-transport dependency * Close and remove transports before adding them again * Changed to strict equal * Override adapter name * Updated and added getLogs tests * Bump winston and winston-daily-rotate-file Bumps [winston](https://github.com/winstonjs/winston) and [winston-daily-rotate-file](https://github.com/winstonjs/winston-daily-rotate-file). These dependencies needed to be updated together. Updates `winston` from 2.4.4 to 3.2.0 - [Release notes](https://github.com/winstonjs/winston/releases) - [Changelog](https://github.com/winstonjs/winston/blob/master/CHANGELOG.md) - [Commits](winstonjs/winston@2.4.4...3.2.0) Updates `winston-daily-rotate-file` from 1.7.2 to 3.6.0 - [Release notes](https://github.com/winstonjs/winston-daily-rotate-file/releases) - [Commits](winstonjs/winston-daily-rotate-file@v1.7.2...v3.6.0) Signed-off-by: dependabot[bot] <[email protected]> * Fixed tests, updated parse logging * Fixed tests, better error logging * Fix failing tests * Updates as per review
1 parent bd52bc8 commit d6f8a91

14 files changed

+1019
-1011
lines changed

package-lock.json

Lines changed: 779 additions & 851 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@
4040
"semver": "6.0.0",
4141
"tv4": "1.3.0",
4242
"uuid": "3.3.2",
43-
"winston": "2.4.4",
44-
"winston-daily-rotate-file": "1.7.2",
43+
"winston": "3.2.1",
44+
"winston-daily-rotate-file": "3.8.0",
4545
"ws": "6.2.1"
4646
},
4747
"devDependencies": {

spec/AudienceRouter.spec.js

Lines changed: 50 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -189,52 +189,60 @@ describe('AudiencesRouter', () => {
189189
});
190190
});
191191

192-
it_exclude_dbs(['postgres'])('query installations with limit = 0 and count = 1', done => {
193-
const config = Config.get('test');
194-
const androidAudienceRequest = {
195-
name: 'Android Users',
196-
query: '{ "test": "android" }',
197-
};
198-
const iosAudienceRequest = {
199-
name: 'Iphone Users',
200-
query: '{ "test": "ios" }',
201-
};
202-
const request = {
203-
config: config,
204-
auth: auth.master(config),
205-
body: {},
206-
query: {
207-
limit: 0,
208-
count: 1,
209-
},
210-
info: {},
211-
};
192+
it_exclude_dbs(['postgres'])(
193+
'query installations with limit = 0 and count = 1',
194+
done => {
195+
const config = Config.get('test');
196+
const androidAudienceRequest = {
197+
name: 'Android Users',
198+
query: '{ "test": "android" }',
199+
};
200+
const iosAudienceRequest = {
201+
name: 'Iphone Users',
202+
query: '{ "test": "ios" }',
203+
};
204+
const request = {
205+
config: config,
206+
auth: auth.master(config),
207+
body: {},
208+
query: {
209+
limit: 0,
210+
count: 1,
211+
},
212+
info: {},
213+
};
212214

213-
const router = new AudiencesRouter();
214-
rest
215-
.create(config, auth.nobody(config), '_Audience', androidAudienceRequest)
216-
.then(() => {
217-
return rest.create(
215+
const router = new AudiencesRouter();
216+
rest
217+
.create(
218218
config,
219219
auth.nobody(config),
220220
'_Audience',
221-
iosAudienceRequest
222-
);
223-
})
224-
.then(() => {
225-
return router.handleFind(request);
226-
})
227-
.then(res => {
228-
const response = res.response;
229-
expect(response.results.length).toEqual(0);
230-
expect(response.count).toEqual(2);
231-
done();
232-
})
233-
.catch(err => {
234-
fail(JSON.stringify(err));
235-
done();
236-
});
237-
});
221+
androidAudienceRequest
222+
)
223+
.then(() => {
224+
return rest.create(
225+
config,
226+
auth.nobody(config),
227+
'_Audience',
228+
iosAudienceRequest
229+
);
230+
})
231+
.then(() => {
232+
return router.handleFind(request);
233+
})
234+
.then(res => {
235+
const response = res.response;
236+
expect(response.results.length).toEqual(0);
237+
expect(response.count).toEqual(2);
238+
done();
239+
})
240+
.catch(err => {
241+
fail(JSON.stringify(err));
242+
done();
243+
});
244+
}
245+
);
238246

239247
it('should create, read, update and delete audiences throw api', done => {
240248
Parse._request(

spec/CloudCodeLogger.spec.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,9 @@ describe('Cloud Code Logger', () => {
203203
.catch(() => {})
204204
.then(() => {
205205
const logs = spy.calls.all().reverse();
206-
expect(logs[0].args[1]).toBe('it failed!');
206+
expect(logs[0].args[1]).toBe('Parse error: ');
207+
expect(logs[0].args[2].message).toBe('it failed!');
208+
207209
const log = logs[1].args;
208210
expect(log[0]).toEqual('error');
209211
expect(log[1]).toMatch(
@@ -268,6 +270,7 @@ describe('Cloud Code Logger', () => {
268270
expect(spy).toHaveBeenCalled();
269271
expect(spy.calls.count()).toBe(1);
270272
const { args } = spy.calls.mostRecent();
271-
expect(args[0]).toBe('Object not found.');
273+
expect(args[0]).toBe('Parse error: ');
274+
expect(args[1].message).toBe('Object not found.');
272275
});
273276
});

spec/FilesController.spec.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const FilesController = require('../lib/Controllers/FilesController').default;
99

1010
const mockAdapter = {
1111
createFile: () => {
12-
return Promise.reject(new Error('it failed'));
12+
return Promise.reject(new Error('it failed with xyz'));
1313
},
1414
deleteFile: () => {},
1515
getFileData: () => {},
@@ -59,13 +59,18 @@ describe('FilesController', () => {
5959
.then(logs => {
6060
// we get two logs here: 1. the source of the failure to save the file
6161
// and 2 the message that will be sent back to the client.
62-
const log1 = logs.pop();
62+
63+
const log1 = logs.find(
64+
x => x.message === 'Error creating a file: it failed with xyz'
65+
);
6366
expect(log1.level).toBe('error');
64-
expect(log1.message).toBe('it failed');
65-
const log2 = logs.pop();
67+
68+
const log2 = logs.find(
69+
x => x.message === 'Parse error: Could not store file: yolo.txt.'
70+
);
6671
expect(log2.level).toBe('error');
6772
expect(log2.code).toBe(130);
68-
expect(log2.message).toBe('Could not store file.');
73+
6974
done();
7075
});
7176
});

spec/Logger.spec.js

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,30 @@
11
const logging = require('../lib/Adapters/Logger/WinstonLogger');
2-
const winston = require('winston');
2+
const Transport = require('winston-transport');
33

4-
class TestTransport extends winston.Transport {
5-
log(level, msg, meta, callback) {
4+
class TestTransport extends Transport {
5+
log(info, callback) {
66
callback(null, true);
77
}
88
}
99

10-
describe('Logger', () => {
10+
describe('WinstonLogger', () => {
1111
it('should add transport', () => {
12-
const testTransport = new TestTransport({
13-
name: 'test',
14-
});
12+
const testTransport = new TestTransport();
1513
spyOn(testTransport, 'log');
1614
logging.addTransport(testTransport);
17-
expect(Object.keys(logging.logger.transports).length).toBe(4);
15+
expect(logging.logger.transports.length).toBe(4);
1816
logging.logger.info('hi');
1917
expect(testTransport.log).toHaveBeenCalled();
18+
logging.logger.error('error');
19+
expect(testTransport.log).toHaveBeenCalled();
2020
logging.removeTransport(testTransport);
21-
expect(Object.keys(logging.logger.transports).length).toBe(3);
21+
expect(logging.logger.transports.length).toBe(3);
2222
});
2323

2424
it('should have files transports', done => {
2525
reconfigureServer().then(() => {
2626
const transports = logging.logger.transports;
27-
const transportKeys = Object.keys(transports);
28-
expect(transportKeys.length).toBe(3);
27+
expect(transports.length).toBe(3);
2928
done();
3029
});
3130
});
@@ -35,8 +34,7 @@ describe('Logger', () => {
3534
logsFolder: null,
3635
}).then(() => {
3736
const transports = logging.logger.transports;
38-
const transportKeys = Object.keys(transports);
39-
expect(transportKeys.length).toBe(1);
37+
expect(transports.length).toBe(1);
4038
done();
4139
});
4240
});

spec/LoggerController.spec.js

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ describe('LoggerController', () => {
4444
done();
4545
});
4646

47-
it('can process an ascending query without throwing', done => {
47+
it('can parse an ascending query without throwing', done => {
4848
// Make mock request
4949
const query = {
5050
from: '2016-01-01Z00:00:00',
@@ -65,11 +65,59 @@ describe('LoggerController', () => {
6565
done();
6666
});
6767

68+
it('can process an ascending query without throwing', done => {
69+
// Make mock request
70+
const query = {
71+
from: '2016-01-01Z00:00:00',
72+
until: '2016-01-01Z00:00:00',
73+
size: 5,
74+
order: 'asc',
75+
level: 'error',
76+
};
77+
78+
const loggerController = new LoggerController(new WinstonLoggerAdapter());
79+
80+
expect(() => {
81+
loggerController
82+
.getLogs(query)
83+
.then(function(res) {
84+
expect(res.length).not.toBe(0);
85+
done();
86+
})
87+
.catch(err => {
88+
jfail(err);
89+
fail('should not fail');
90+
done();
91+
});
92+
}).not.toThrow();
93+
});
94+
95+
it('can parse a descending query without throwing', done => {
96+
// Make mock request
97+
const query = {
98+
from: '2016-01-01Z00:00:00',
99+
until: '2016-01-01Z00:00:00',
100+
size: 5,
101+
order: 'desc',
102+
level: 'error',
103+
};
104+
105+
const result = LoggerController.parseOptions(query);
106+
107+
expect(result.from.getTime()).toEqual(1451606400000);
108+
expect(result.until.getTime()).toEqual(1451606400000);
109+
expect(result.size).toEqual(5);
110+
expect(result.order).toEqual('desc');
111+
expect(result.level).toEqual('error');
112+
113+
done();
114+
});
115+
68116
it('can process a descending query without throwing', done => {
69117
// Make mock request
70118
const query = {
71-
from: '2016-01-01',
72-
until: '2016-01-30',
119+
from: '2016-01-01Z00:00:00',
120+
until: '2016-01-01Z00:00:00',
73121
size: 5,
74122
order: 'desc',
75123
level: 'error',
@@ -81,7 +129,7 @@ describe('LoggerController', () => {
81129
loggerController
82130
.getLogs(query)
83131
.then(function(res) {
84-
expect(res.length).toBe(0);
132+
expect(res.length).not.toBe(0);
85133
done();
86134
})
87135
.catch(err => {

spec/MongoStorageAdapter.spec.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ const { MongoClient } = require('mongodb');
66
const databaseURI =
77
'mongodb://localhost:27017/parseServerMongoAdapterTestDatabase';
88

9+
const fakeClient = {
10+
s: { options: { dbName: null } },
11+
db: () => null,
12+
};
13+
914
// These tests are specific to the mongo storage adapter + mongo storage format
1015
// and will eventually be moved into their own repo
1116
describe_only_db('mongo')('MongoStorageAdapter', () => {
@@ -16,7 +21,7 @@ describe_only_db('mongo')('MongoStorageAdapter', () => {
1621
});
1722

1823
it('auto-escapes symbols in auth information', () => {
19-
spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(null));
24+
spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(fakeClient));
2025
new MongoStorageAdapter({
2126
uri:
2227
'mongodb://user!with@+ symbols:password!with@+ symbols@localhost:1234/parse',
@@ -28,7 +33,7 @@ describe_only_db('mongo')('MongoStorageAdapter', () => {
2833
});
2934

3035
it("doesn't double escape already URI-encoded information", () => {
31-
spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(null));
36+
spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(fakeClient));
3237
new MongoStorageAdapter({
3338
uri:
3439
'mongodb://user!with%40%2B%20symbols:password!with%40%2B%20symbols@localhost:1234/parse',
@@ -41,7 +46,7 @@ describe_only_db('mongo')('MongoStorageAdapter', () => {
4146

4247
// https://github.com/parse-community/parse-server/pull/148#issuecomment-180407057
4348
it('preserves replica sets', () => {
44-
spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(null));
49+
spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(fakeClient));
4550
new MongoStorageAdapter({
4651
uri:
4752
'mongodb://test:[email protected]:59325,ds059315-a1.mongolab.com:59315/testDBname?replicaSet=rs-ds059415',

spec/PushController.spec.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1512,7 +1512,10 @@ describe('PushController', () => {
15121512
date: noTimezone,
15131513
isLocalTime: true,
15141514
})
1515-
).toBe(`2017-09-06T${expectedHour}:14:01.048`, 'No timezone');
1515+
).toBe(
1516+
`2017-09-06T${expectedHour.toString().padStart(2, '0')}:14:01.048`,
1517+
'No timezone'
1518+
);
15161519
expect(
15171520
PushController.formatPushTime({
15181521
date: new Date('2017-09-06'),
@@ -1569,7 +1572,7 @@ describe('PushController', () => {
15691572
.then(pushStatus => {
15701573
expect(pushStatus.get('status')).toBe('scheduled');
15711574
expect(pushStatus.get('pushTime')).toBe(
1572-
`2017-09-06T${expectedHour}:14:01.048`
1575+
`2017-09-06T${expectedHour.toString().padStart(2, '0')}:14:01.048`
15731576
);
15741577
})
15751578
.then(done, done.fail);

0 commit comments

Comments
 (0)