From e858e86ed94d2def61852ddeef2f299800ed18dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dejan=20Miji=C4=87?= Date: Wed, 18 Apr 2018 23:06:11 +0200 Subject: [PATCH] NOISSUE - Fix paging (#232) * Fix docs errors Signed-off-by: Dejan Mijic * Fix edge case for limit check Signed-off-by: Dejan Mijic * Explain limit value Signed-off-by: Dejan Mijic --- docs/getting-started.md | 20 +++++++++++++------- manager/api/requests.go | 2 +- manager/api/requests_test.go | 9 +++++---- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index 7f9c9e54..39deaa01 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -124,13 +124,16 @@ Content-Length: 1105 } ``` -You can specify `offset` and `limit` parameters in order to fetch specific group of channels. In that case, your request should look like: +You can specify `offset` and `limit` parameters in order to fetch specific +group of clients. In that case, your request should look like: ``` -curl -s -S -i --cacert docker/ssl/certs/mainflux-server.crt --insecure -H "Authorization: " https://localhost/channels?offset=0&limit=5 +curl -s -S -i --cacert docker/ssl/certs/mainflux-server.crt --insecure -H "Authorization: " https://localhost/clients?offset=0&limit=5 ``` -If you don't provide these params, default values will be used insted. Default value for -offset is 0, and for limit is 10. Max value for limit is 100, and every value above that will be replaced by limit max value. Providing invalid values for these two params will be considered malformed request, so bad request will be received as response. + +If you don't provide them, default values will be used instead: 0 for `offset`, +and 10 for `limit`. Note that `limit` cannot be set to values greater than 100. Providing +invalid values will be considered malformed request. ### Removing clients @@ -187,13 +190,16 @@ Content-Length: 139 } ``` -You can specify `offset` and `limit` parameters in order to fetch specific group of channels. In that case, your request should look like: +You can specify `offset` and `limit` parameters in order to fetch specific +group of channels. In that case, your request should look like: ``` curl -s -S -i --cacert docker/ssl/certs/mainflux-server.crt --insecure -H "Authorization: " https://localhost/channels?offset=0&limit=5 ``` -If you don't provide these params, default values will be used insted. Default value for -offset is 0, and for limit is 10. Max value for limit is 100, and every value above that will be replaced by limit max value. Providing invalid values for these two params will be considered malformed request, so bad request will be received as response. + +If you don't provide them, default values will be used instead: 0 for `offset`, +and 10 for `limit`. Note that `limit` cannot be set to values greater than 100. Providing +invalid values will be considered malformed request. ### Removing channels diff --git a/manager/api/requests.go b/manager/api/requests.go index 80fba1c1..86d1b2a7 100644 --- a/manager/api/requests.go +++ b/manager/api/requests.go @@ -121,7 +121,7 @@ func (req *listResourcesReq) validate() error { return manager.ErrUnauthorizedAccess } - if req.offset >= 0 && req.limit > 0 && req.limit < maxLimitSize { + if req.offset >= 0 && req.limit > 0 && req.limit <= maxLimitSize { return nil } diff --git a/manager/api/requests_test.go b/manager/api/requests_test.go index 39b3cbcd..94aa03c1 100644 --- a/manager/api/requests_test.go +++ b/manager/api/requests_test.go @@ -12,8 +12,8 @@ import ( const wrong string = "?" var ( - client manager.Client = manager.Client{Type: "app"} - channel manager.Channel = manager.Channel{} + client = manager.Client{Type: "app"} + channel = manager.Channel{} ) func TestUserReqValidation(t *testing.T) { @@ -186,8 +186,9 @@ func TestListResourcesReqValidation(t *testing.T) { "valid listing request": {key, value, value, nil}, "missing token": {"", value, value, manager.ErrUnauthorizedAccess}, "negative offset": {key, -value, value, manager.ErrMalformedEntity}, - "zero size": {key, value, 0, manager.ErrMalformedEntity}, - "negative size": {key, value, -value, manager.ErrMalformedEntity}, + "zero limit": {key, value, 0, manager.ErrMalformedEntity}, + "negative limit": {key, value, -value, manager.ErrMalformedEntity}, + "too big limit": {key, value, 20 * value, manager.ErrMalformedEntity}, } for desc, tc := range cases {