mirror of
https://github.com/mainflux/mainflux.git
synced 2025-04-29 13:49:28 +08:00

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>
198 lines
4.0 KiB
Go
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))
|
|
}
|
|
}
|