Added some tests (createOne and getAll)
This commit is contained in:
parent
ef7ca0315b
commit
9f0886541c
21 changed files with 2940 additions and 67 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue