1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-04-29 13:49:28 +08:00
Mainflux.mainflux/manager/api/requests_test.go
Dejan Mijic 481b5b230d Validate incoming requests
All validation has been moved to the API resources layer, i.e. the
domain objects provide validation method, but the service itself assumes
no corrupted values are passed to it.

Signed-off-by: Dejan Mijic <dejan@mainflux.com>
2017-10-01 01:12:06 +02:00

198 lines
4.0 KiB
Go

package api
import (
"fmt"
"testing"
"github.com/gocql/gocql"
"github.com/mainflux/mainflux/manager"
"github.com/stretchr/testify/assert"
)
func TestUserReqValidation(t *testing.T) {
cases := []struct {
user manager.User
err error
}{
{manager.User{"foo@example.com", "pass"}, nil},
{manager.User{"invalid", "pass"}, manager.ErrMalformedEntity},
{manager.User{"", "pass"}, manager.ErrMalformedEntity},
{manager.User{"foo@example.com", ""}, manager.ErrMalformedEntity},
}
for i, tc := range cases {
req := userReq{tc.user}
err := req.validate()
assert.Equal(t, tc.err, err, fmt.Sprintf("failed at %d\n", i))
}
}
func TestIdentityReqValidation(t *testing.T) {
cases := []struct {
key string
err error
}{
{"valid", nil},
{"", manager.ErrUnauthorizedAccess},
}
for i, tc := range cases {
req := identityReq{tc.key}
err := req.validate()
assert.Equal(t, tc.err, err, fmt.Sprintf("failed at %d\n", i))
}
}
func TestAddClientReqValidation(t *testing.T) {
key := "key"
vc := manager.Client{Type: "app"}
cases := []struct {
key string
client manager.Client
err error
}{
{key, vc, nil},
{"", vc, manager.ErrUnauthorizedAccess},
{key, manager.Client{Type: "invalid"}, manager.ErrMalformedEntity},
}
for i, tc := range cases {
req := addClientReq{
key: tc.key,
client: tc.client,
}
err := req.validate()
assert.Equal(t, tc.err, err, fmt.Sprintf("failed at %d\n", i))
}
}
func TestUpdateClientReqValidation(t *testing.T) {
key := "key"
uuid := gocql.TimeUUID().String()
vc := manager.Client{Type: "app"}
cases := []struct {
key string
id string
client manager.Client
err error
}{
{key, uuid, vc, nil},
{key, "non-uuid", vc, manager.ErrNotFound},
{"", uuid, vc, manager.ErrUnauthorizedAccess},
{key, uuid, manager.Client{Type: "invalid"}, manager.ErrMalformedEntity},
}
for i, tc := range cases {
req := updateClientReq{
key: tc.key,
id: tc.id,
client: tc.client,
}
err := req.validate()
assert.Equal(t, tc.err, err, fmt.Sprintf("failed at %d\n", i))
}
}
func TestCreateChannelReqValidation(t *testing.T) {
key := "key"
vc := manager.Channel{}
cases := []struct {
key string
channel manager.Channel
err error
}{
{key, vc, nil},
{"", vc, manager.ErrUnauthorizedAccess},
}
for i, tc := range cases {
req := createChannelReq{
key: tc.key,
channel: tc.channel,
}
err := req.validate()
assert.Equal(t, tc.err, err, fmt.Sprintf("failed at %d\n", i))
}
}
func TestUpdateChannelReqValidation(t *testing.T) {
key := "key"
uuid := gocql.TimeUUID().String()
vc := manager.Channel{}
cases := []struct {
key string
id string
channel manager.Channel
err error
}{
{key, uuid, vc, nil},
{key, "non-uuid", vc, manager.ErrNotFound},
{"", uuid, vc, manager.ErrUnauthorizedAccess},
}
for i, tc := range cases {
req := updateChannelReq{
key: tc.key,
id: tc.id,
channel: tc.channel,
}
err := req.validate()
assert.Equal(t, tc.err, err, fmt.Sprintf("failed at %d\n", i))
}
}
func TestViewResourceReqValidation(t *testing.T) {
key := "key"
uuid := gocql.TimeUUID().String()
cases := []struct {
key string
id string
err error
}{
{key, uuid, nil},
{"", uuid, manager.ErrUnauthorizedAccess},
{key, "non-uuid", manager.ErrNotFound},
}
for i, tc := range cases {
req := viewResourceReq{tc.key, tc.id}
err := req.validate()
assert.Equal(t, tc.err, err, fmt.Sprintf("failed at %d\n", i))
}
}
func TestListResourcesReqValidation(t *testing.T) {
cases := []struct {
key string
size int
offset int
err error
}{
{"key", 10, 10, nil},
{"", 10, 10, manager.ErrUnauthorizedAccess},
{"key", 10, -10, manager.ErrMalformedEntity},
{"key", 0, 10, manager.ErrMalformedEntity},
{"key", -10, 10, manager.ErrMalformedEntity},
}
for i, tc := range cases {
req := listResourcesReq{
key: tc.key,
size: tc.size,
offset: tc.offset,
}
err := req.validate()
assert.Equal(t, tc.err, err, fmt.Sprintf("failed at %d\n", i))
}
}