Added some tests (createOne and getAll)

This commit is contained in:
Damien Broqua 2020-02-11 15:38:28 +01:00
parent ef7ca0315b
commit 9f0886541c
21 changed files with 2940 additions and 67 deletions

View file

@ -9,8 +9,8 @@ class Middleware extends QueryBuilder {
*/
constructor(params, models) {
super(params, models);
this.params = params || {};
this.models = models || {};
this.params = params;
this.models = models;
this.includes = [];
}
@ -157,7 +157,7 @@ class Middleware extends QueryBuilder {
// Un paramètre n'est pas bon dans les params
if (error) {
callback(new ErrorBuilder(406, error));
callback(new ErrorBuilder(406.1, error));
return false;
}

View file

@ -30,6 +30,7 @@ class QueryBuilder {
(page === "next" && currentPage < maxPage)
) {
let newIndex = 0;
// eslint-disable-next-line default-case
switch (page) {
case "first":
newIndex = 1;
@ -43,9 +44,6 @@ class QueryBuilder {
case "next":
newIndex = currentPage + 1;
break;
default:
newIndex = currentPage;
break;
}
return {
href: href.replace(`page=${currentPage}`, `page=${newIndex}`),
@ -117,6 +115,9 @@ class QueryBuilder {
case "$in":
newObject[Op.in] = value.split(",");
break;
case "$like":
newObject[Op.like] = value;
break;
default:
newObject[key] = [value];
break;
@ -128,6 +129,8 @@ class QueryBuilder {
});
}
console.log("newObject:", newObject);
return newObject;
}
@ -138,6 +141,12 @@ class QueryBuilder {
*/
_haveRight(req) {
let allowedRole = "all";
if (!req.user) {
req.user = {};
}
if (!req.user.role) {
req.user.role = "guest";
}
// eslint-disable-next-line default-case
switch (req.method) {
@ -218,10 +227,6 @@ class QueryBuilder {
return override;
}
if (!params) {
return override;
}
// On surcharge certains paramètres passé en query
if (params.filters) {
Object.keys(params.filters).map(column => {
@ -259,6 +264,13 @@ class QueryBuilder {
* @return {Mixed}
*/
_setInclusions(req, include) {
if (!req.user) {
req.user = {};
}
if (!req.user.role) {
req.user.role = "guest";
}
const includes = [];
const listOfIncludes = include || this.params.includes;
@ -361,12 +373,16 @@ class QueryBuilder {
callback(null, createdItem);
})
.catch(err => {
if (err.name === "SequelizeUniqueConstraintError") {
callback(new ErrorBuilder(409, "Duplicate item"));
return false;
switch (err.name) {
case "SequelizeUniqueConstraintError":
callback(new ErrorBuilder(409.1, "Duplicate item"));
break;
case "SequelizeForeignKeyConstraintError":
callback(new ErrorBuilder(406.2, "Bad foreign key"));
break;
default:
callback(new ErrorBuilder(500, err));
}
callback(err);
return false;
});
}
@ -378,10 +394,13 @@ class QueryBuilder {
*/
_formatItem(item, formatRule) {
const formated = {};
Object.keys(formatRule).map(key => {
switch (typeof formatRule[key]) {
case "string":
formated[key] = item[key] || null;
if (item) {
formated[key] = item[key] || null;
}
break;
case "object":
if (Array.isArray(item[key])) {
@ -451,7 +470,7 @@ class QueryBuilder {
});
if (error) {
callback(new ErrorBuilder(406, error));
callback(new ErrorBuilder(406.1, error));
} else {
callback(null, value);
}
@ -471,16 +490,32 @@ class QueryBuilder {
// On test les droits
if (!this._haveRight(req)) {
callback(new ErrorBuilder(401, "You're not allowed"));
callback(new ErrorBuilder(401.1, "You're not allowed"));
return false;
}
// On teste la query (ou les params)
const toValidate = req.getType === "list" ? req.query : req.params;
if (!toValidate) {
callback(
new ErrorBuilder(
406.0,
`Missing ${req.getType === "list" ? "query" : "params"}`
)
);
return false;
}
const { error, value } = this.params.validate[
req.getType
].validate(toValidate, { abortEarly: false });
// Un paramètre n'est pas bon dans la query
if (error) {
callback(new ErrorBuilder(406.1, error));
return false;
}
// On vire, pour le moment la liste des filtres un peu particuliers
let listOfIgnoredFilters = [
"limit",
@ -512,17 +547,11 @@ class QueryBuilder {
return true;
});
// Un paramètre n'est pas bon dans la query
if (error) {
callback(new ErrorBuilder(406, error));
return false;
}
if (req.getType === "list") {
// Aucune pagination n'est passée, on set celle par défaut
if (!value.page || !value.limit) {
value.page = 1;
value.limit = 20;
value.limit = 50;
}
// Un tri est spécifié
@ -542,11 +571,6 @@ class QueryBuilder {
const override = this._override(req, req.getType);
where = Object.assign(where, override);
// if ( value.page) {
// query.offset = ( value.page - 1 ) * value.limit;
// query.limit = value.limit;
// }
if (order) {
query.order = order;
}
@ -560,11 +584,6 @@ class QueryBuilder {
// Hack pour faire un recherche dans les nested de type hasMany
query.subQuery = false;
if (!value.page || !value.limit) {
value.page = 1;
value.limit = 50;
}
callback(null, query, {
start: value.page * value.limit - value.limit,
limit: value.limit