190 lines
6.8 KiB
JavaScript
190 lines
6.8 KiB
JavaScript
const expect = require('chai').expect;
|
|
const osu = require('../index.js');
|
|
const osuApi = new osu.Api();
|
|
|
|
try {
|
|
osuApi.apiKey = process.env.osuApiKey || (require('fs')).readFileSync(__dirname + '/auth.txt');
|
|
} catch(error) {
|
|
if (error.code === 'ENOENT')
|
|
throw new Error('No osuApiKey environment variable or auth.txt file found. Please create one and place your api key in it.');
|
|
else
|
|
throw error;
|
|
}
|
|
|
|
describe('osu!api methods', function() {
|
|
describe('getUser()', function() {
|
|
it('Should resolve with a valid User', function() {
|
|
return osuApi.getUser({ u: 'brussell98' }).then(user => {
|
|
expect(user).to.be.an.instanceof(osu.User);
|
|
expect(user.name).to.equal('brussell98');
|
|
expect(user.scores.total).to.be.a('string');
|
|
|
|
if (user.events.length !== 0) {
|
|
expect(user.events[0]).to.be.instanceof(osu.Event);
|
|
expect(parseInt(user.events[0].epicFactor)).to.be.within(1, 32);
|
|
expect(user.events[0].date).to.be.a('date');
|
|
}
|
|
}).catch(error => {
|
|
throw error;
|
|
});
|
|
});
|
|
|
|
it('Should reject when given an invalid user', function() {
|
|
return osuApi.getUser({ u: '' }).catch(error => {
|
|
expect(error).to.be.an('error');
|
|
expect(error.message).to.equal('Not found');
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('getScores()', function() {
|
|
it('Should resolve with an array of valid Scores', function() {
|
|
return osuApi.getScores({ b: '1036655' }).then(scores => {
|
|
expect(scores).to.be.an('array');
|
|
expect(scores).to.have.lengthOf(50);
|
|
expect(scores[0]).to.be.an.instanceOf(osu.Score);
|
|
expect(scores[0].user.name).to.be.a('string');
|
|
expect(scores[0].perfect).to.be.a('boolean');
|
|
expect(scores[0].pp).to.not.equal(null);
|
|
expect(scores[0].date).to.be.a('date');
|
|
|
|
if (scores[0].mods.length !== 0)
|
|
expect(scores[0].mods[0]).to.be.a('string');
|
|
}).catch(error => {
|
|
throw error;
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('getBeatmaps()', function() {
|
|
it('Should resolve with an array of valid Beatmaps', function() {
|
|
return osuApi.getBeatmaps({ b: '765567' }).then(beatmaps => {
|
|
expect(beatmaps).to.be.an('array');
|
|
expect(beatmaps).to.have.lengthOf(1);
|
|
expect(beatmaps[0]).to.be.an.instanceOf(osu.Beatmap);
|
|
expect(beatmaps[0].source).to.equal('GATE 自衛隊 彼の地にて、斯く戦えり');
|
|
expect(beatmaps[0].tags).to.be.an('array');
|
|
expect(beatmaps[0].approvedDate).to.be.a('date');
|
|
expect(beatmaps[0].hasDownload).to.be.true;
|
|
|
|
const langs = [];
|
|
for (const lang in osu.Constants.Beatmaps.language)
|
|
langs.push(osu.Constants.Beatmaps.language[lang]);
|
|
expect(beatmaps[0].language).to.be.oneOf(langs);
|
|
}).catch(error => {
|
|
throw error;
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('getUserBest()', function() {
|
|
it('Should resolve with an array of valid Scores', function() {
|
|
return osuApi.getUserBest({ u: 'brussell98' }).then(scores => {
|
|
expect(scores).to.be.an('array');
|
|
expect(scores).to.have.length.below(11);
|
|
expect(scores[0]).to.be.an.instanceOf(osu.Score);
|
|
expect(scores).to.satisfy(scores => scores.filter(s => s.pp && s.beatmapId).length === scores.length);
|
|
expect(scores[4].date).to.be.a('date');
|
|
expect(scores[7].perfect).to.be.a('boolean');
|
|
expect(scores[2].mods).to.be.an('array');
|
|
expect(scores[0].beatmap).to.equal(undefined);
|
|
}).catch(error => {
|
|
throw error;
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('getUserRecent()', function() {
|
|
it('Should resolve with an array of valid Scores', function() {
|
|
return osuApi.getUserRecent({ u: 'brussell98' }).then(scores => {
|
|
expect(scores).to.be.an('array');
|
|
expect(scores).to.have.length.below(11);
|
|
expect(scores[0]).to.be.an.instanceOf(osu.Score);
|
|
expect(scores).to.satisfy(scores => scores.filter(s => s.score && s.beatmapId).length === scores.length);
|
|
expect(scores[4].date).to.be.a('date');
|
|
expect(scores[3].perfect).to.be.a('boolean');
|
|
expect(scores[2].mods).to.be.an('array');
|
|
}).catch(error => {
|
|
throw error;
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('new Match()', function() {
|
|
it('Should return a valid Match', function() {
|
|
const sampleMatch = require('./sampleMatch.json');
|
|
const match = new osu.Match({ }, sampleMatch);
|
|
expect(match.start).to.be.a('date');
|
|
expect(match.name).to.equal(sampleMatch.match.name);
|
|
expect(match.games).to.be.an('array');
|
|
|
|
const modes = [];
|
|
const scoringTypes = [];
|
|
const teamTypes = [];
|
|
const teams = [];
|
|
for (const mode in osu.Constants.Beatmaps.mode)
|
|
modes.push(osu.Constants.Beatmaps.mode[mode]);
|
|
for (const st in osu.Constants.Multiplayer.scoringType)
|
|
scoringTypes.push(osu.Constants.Multiplayer.scoringType[st]);
|
|
for (const tt in osu.Constants.Multiplayer.teamType)
|
|
teamTypes.push(osu.Constants.Multiplayer.teamType[tt]);
|
|
for (const team in osu.Constants.Multiplayer.team)
|
|
teams.push(osu.Constants.Multiplayer.team[team]);
|
|
|
|
expect(match.games[0]).to.be.an.instanceOf(osu.Game);
|
|
expect(match.games[7].scores[0].mods).to.include.members(['NoFail', 'DoubleTime']);
|
|
expect(match.games[0].beatmapId).to.equal(sampleMatch.games[0].beatmap_id);
|
|
expect(match.games[2].mode).to.be.oneOf(modes);
|
|
expect(match.games[2].scoringType).to.be.oneOf(scoringTypes);
|
|
expect(match.games[2].teamType).to.be.oneOf(teamTypes);
|
|
|
|
expect(match.games[2].scores).to.be.an('array');
|
|
expect(match.games[2].scores[0]).to.be.an.instanceOf(osu.MultiplayerScore);
|
|
expect(match.games[2].scores[0].team).to.be.oneOf(teams);
|
|
expect(match.games[2].scores[0].pass).to.equal(sampleMatch.games[2].scores[0].pass === '1');
|
|
});
|
|
});
|
|
|
|
describe('Scores with competeScores enabled', function() {
|
|
it('Should have a beatmap included', async function() {
|
|
osuApi.completeScores = true;
|
|
|
|
const scores = await osuApi.getScores({ u: 'brussell98', b: '1416386', limit: 1 });
|
|
const scoresBest = await osuApi.getUserBest({ u: 'brussell98', limit: 1 });
|
|
|
|
expect(scores[0].beatmapId).to.equal('1416386');
|
|
expect(scores[0].beatmap).to.be.an.instanceof(osu.Beatmap);
|
|
|
|
expect(scoresBest[0].beatmapId).to.exist;
|
|
expect(scoresBest[0].beatmap).to.be.an.instanceof(osu.Beatmap);
|
|
|
|
osuApi.completeScores = false;
|
|
});
|
|
|
|
it('Should compute accuracy correctly', async function() {
|
|
osuApi.completeScores = true;
|
|
|
|
const scores = await osuApi.getScores({ u: 'brussell98', b: '1416386', limit: 1 });
|
|
|
|
expect(scores[0].accuracy).to.be.closeTo(.9658, .0001);
|
|
|
|
osuApi.completeScores = false;
|
|
});
|
|
});
|
|
|
|
describe('parseNumeric', function() {
|
|
it('Should return numeric non-id values as numbers', function() {
|
|
osuApi.parseNumeric = true;
|
|
|
|
return osuApi.getScores({ b: '1036655' }).then(scores => {
|
|
expect(scores[0].user.id).to.be.a('string');
|
|
expect(scores[0].pp).to.be.a('number');
|
|
|
|
osuApi.parseNumeric = false;
|
|
}).catch(error => {
|
|
throw error;
|
|
});
|
|
});
|
|
});
|
|
});
|