Skip to content

Commit

Permalink
Merge ba0e242 into a6864e3
Browse files Browse the repository at this point in the history
  • Loading branch information
williambelle committed May 12, 2019
2 parents a6864e3 + ba0e242 commit 92e06a7
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 1 deletion.
40 changes: 40 additions & 0 deletions src/index.js
Expand Up @@ -14,6 +14,22 @@ const DEFAULT_MENUS_OPTIONS = {
partOfDay: 'midi'
};

const TAGS = {
'Volaille': 'Chicken',
'Chinois': 'Chinese',
'Poisson': 'Fish',
'Fourchette Verte': 'Green Fork',
'Indian': 'Indien',
'Japonais': 'Japanese',
'Libanais': 'Lebanese',
'Viande': 'Meat',
'Pâtes': 'Pasta',
'Pizza': 'Pizza',
'Thaï': 'Thai',
'Végétalien': 'Vegan',
'Végétarien': 'Vegetarian'
};

let buildMenuUrl = (opts) => {
var queryParameters = '?midisoir=' + opts.partOfDay +
'&lang=' + opts.language;
Expand Down Expand Up @@ -41,6 +57,22 @@ let escapeTab = (jsonString) => {
return jsonString.replace(/\t/g, '\\t');
};

let prepareTags = (strTags) => {
let listTags = strTags.split(',');
return listTags.map(tag => tag.trim());
};

let checkTags = (listTags) => {
let isValid = true;
let validTags = Object.keys(TAGS);
for (var i = 0; i < listTags.length; i++) {
if (!validTags.includes(listTags[i])) {
isValid = false;
}
}
return isValid;
};

exports.findMenu = (opts = DEFAULT_MENUS_OPTIONS) => {
opts.language = opts.language || DEFAULT_MENUS_OPTIONS.language;
opts.partOfDay = opts.partOfDay || DEFAULT_MENUS_OPTIONS.partOfDay;
Expand All @@ -57,6 +89,14 @@ exports.findMenu = (opts = DEFAULT_MENUS_OPTIONS) => {
return Promise.reject(new TypeError('Not a valid date'));
}

if (opts.tags) {
let listTags = prepareTags(opts.tags);
if (!checkTags(listTags)) {
return Promise.reject(new TypeError('Not a valid tags'));
}
opts.tags = listTags.join(',');
}

const url = buildMenuUrl(opts);
return new Promise((resolve, reject) => {
got(url).then((response) => {
Expand Down
11 changes: 10 additions & 1 deletion test/test-findMenu.js
Expand Up @@ -34,11 +34,20 @@ describe('epfl-menu-api findMenu', function () {
);
});

it('should throw an exception with a tag not supported', () => {
return epflMenuApi.findMenu({
'tags': 'Cheese'
}).then(() => {
}).catch(
(err) => err.message.should.equal('Not a valid tags')
);
});

it('should contains at least 5 menus', function () {
return epflMenuApi.findMenu({
date: '18/04/2019',
restoId: '22',
tags: 'Viande,Volaille,Pizza'
tags: 'Viande,Volaille, Pizza '
}).then((menus) => {
var enoughMenus = Object.keys(menus).length > 4;
enoughMenus.should.equal(true);
Expand Down

0 comments on commit 92e06a7

Please sign in to comment.