1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-04-29 13:49:28 +08:00
Mainflux.mainflux/manager/manager_test.go
Dejan Mijic c966a7802d
Integrate manager service
Setup top-level glide dependencies file. Migrated all of the manager
service code into this repository. Fixed docker build procedure.
Extracted executable to the top-level.

Signed-off-by: Dejan Mijic <dejan@mainflux.com>
2017-09-23 01:03:27 +02:00

248 lines
6.3 KiB
Go

package manager_test
import (
"testing"
"github.com/mainflux/mainflux/manager"
"github.com/mainflux/mainflux/manager/mocks"
"github.com/stretchr/testify/assert"
)
var (
users manager.UserRepository = mocks.NewUserRepository()
clients manager.ClientRepository = mocks.NewClientRepository()
channels manager.ChannelRepository = mocks.NewChannelRepository()
hasher manager.Hasher = mocks.NewHasher()
idp manager.IdentityProvider = mocks.NewIdentityProvider()
svc manager.Service = manager.NewService(users, clients, channels, hasher, idp)
)
func TestRegister(t *testing.T) {
var cases = []struct {
user manager.User
err error
}{
{manager.User{"foo@bar.com", "pass"}, nil},
{manager.User{"foo@bar.com", "pass"}, manager.ErrConflict},
{manager.User{"", "pass"}, manager.ErrInvalidCredentials},
{manager.User{"abc@bar.com", ""}, manager.ErrInvalidCredentials},
{manager.User{"abc@bar.com", "pass"}, nil},
}
for _, tc := range cases {
e := svc.Register(tc.user)
assert.Equal(t, tc.err, e, "unexpected error occurred")
}
}
func TestLogin(t *testing.T) {
var cases = []struct {
user manager.User
key string
err error
}{
{manager.User{"foo@bar.com", "pass"}, "foo@bar.com", nil},
{manager.User{"new@bar.com", "pass"}, "", manager.ErrInvalidCredentials},
{manager.User{"foo@bar.com", ""}, "", manager.ErrInvalidCredentials},
}
for _, tc := range cases {
k, e := svc.Login(tc.user)
assert.Equal(t, tc.key, k, "unexpected key retrieved")
assert.Equal(t, tc.err, e, "unexpected error occurred")
}
}
func TestAddClient(t *testing.T) {
var cases = []struct {
key string
client manager.Client
id string
err error
}{
{"foo@bar.com", manager.Client{Type: "app", Name: "a"}, "1", nil},
{"foo@bar.com", manager.Client{Type: "device", Name: "b"}, "2", nil},
{"", manager.Client{Type: "app", Name: "d"}, "", manager.ErrUnauthorizedAccess},
{"foo@bar.com", manager.Client{Type: "invalid", Name: "d"}, "", manager.ErrMalformedClient},
}
for _, tc := range cases {
id, err := svc.AddClient(tc.key, tc.client)
assert.Equal(t, tc.id, id, "unexpected id retrieved")
assert.Equal(t, tc.err, err, "unexpected error occurred")
}
}
func TestUpdateClient(t *testing.T) {
var cases = []struct {
key string
client manager.Client
err error
}{
{"foo@bar.com", manager.Client{ID: "1", Type: "app", Name: "aa"}, nil},
{"foo@bar.com", manager.Client{ID: "2", Type: "device", Name: "bb"}, nil},
{"", manager.Client{ID: "2", Type: "app", Name: "cc"}, manager.ErrUnauthorizedAccess},
{"foo@bar.com", manager.Client{ID: "2", Type: "invalid", Name: "d"}, manager.ErrMalformedClient},
{"foo@bar.com", manager.Client{ID: "3", Type: "app", Name: "d"}, manager.ErrNotFound},
}
for _, tc := range cases {
err := svc.UpdateClient(tc.key, tc.client)
assert.Equal(t, tc.err, err, "unexpected error occurred")
}
}
func TestViewClient(t *testing.T) {
var cases = []struct {
id string
key string
err error
}{
{"1", "foo@bar.com", nil},
{"1", "", manager.ErrUnauthorizedAccess},
{"5", "foo@bar.com", manager.ErrNotFound},
}
for _, tc := range cases {
_, err := svc.ViewClient(tc.key, tc.id)
assert.Equal(t, tc.err, err, "unexpected error occurred")
}
}
func TestListClients(t *testing.T) {
var cases = []struct {
key string
err error
}{
{"foo@bar.com", nil},
{"", manager.ErrUnauthorizedAccess},
}
for _, tc := range cases {
_, err := svc.ListClients(tc.key)
assert.Equal(t, tc.err, err, "unexpected error occurred")
}
}
func TestRemoveClient(t *testing.T) {
var cases = []struct {
id string
key string
err error
}{
{"1", "", manager.ErrUnauthorizedAccess},
{"1", "foo@bar.com", nil},
{"1", "foo@bar.com", nil},
{"2", "foo@bar.com", nil},
}
for _, tc := range cases {
err := svc.RemoveClient(tc.key, tc.id)
assert.Equal(t, tc.err, err, "unexpected error occurred")
}
}
func TestCreateChannel(t *testing.T) {
var cases = []struct {
key string
channel manager.Channel
id string
err error
}{
{"foo@bar.com", manager.Channel{Connected: []string{"1", "2"}}, "1", nil},
{"foo@bar.com", manager.Channel{Connected: []string{"2"}}, "2", nil},
{"", manager.Channel{Connected: []string{"1"}}, "", manager.ErrUnauthorizedAccess},
}
for _, tc := range cases {
id, err := svc.CreateChannel(tc.key, tc.channel)
assert.Equal(t, tc.id, id, "unexpected id retrieved")
assert.Equal(t, tc.err, err, "unexpected error occurred")
}
}
func TestUpdateChannel(t *testing.T) {
var cases = []struct {
key string
channel manager.Channel
err error
}{
{"foo@bar.com", manager.Channel{ID: "1", Connected: []string{"1"}}, nil},
{"foo@bar.com", manager.Channel{ID: "2", Connected: []string{}}, nil},
{"", manager.Channel{ID: "2", Connected: []string{"1"}}, manager.ErrUnauthorizedAccess},
{"foo@bar.com", manager.Channel{ID: "3", Connected: []string{"1"}}, manager.ErrNotFound},
}
for _, tc := range cases {
err := svc.UpdateChannel(tc.key, tc.channel)
assert.Equal(t, tc.err, err, "unexpected error occurred")
}
}
func TestViewChannel(t *testing.T) {
var cases = []struct {
id string
key string
err error
}{
{"1", "foo@bar.com", nil},
{"1", "", manager.ErrUnauthorizedAccess},
{"5", "foo@bar.com", manager.ErrNotFound},
}
for _, tc := range cases {
_, err := svc.ViewChannel(tc.key, tc.id)
assert.Equal(t, tc.err, err, "unexpected error occurred")
}
}
func TestListChannels(t *testing.T) {
var cases = []struct {
key string
err error
}{
{"foo@bar.com", nil},
{"", manager.ErrUnauthorizedAccess},
}
for _, tc := range cases {
_, err := svc.ListChannels(tc.key)
assert.Equal(t, tc.err, err, "unexpected error occurred")
}
}
func TestCanAccess(t *testing.T) {
var cases = []struct {
client string
channel string
allowed bool
}{
{"1", "1", true},
{"1", "2", false},
{"", "1", false},
}
for _, tc := range cases {
allowed := svc.CanAccess(tc.client, tc.channel)
assert.Equal(t, tc.allowed, allowed, "unexpected value occurred")
}
}
func TestRemoveChannel(t *testing.T) {
var cases = []struct {
id string
key string
err error
}{
{"1", "", manager.ErrUnauthorizedAccess},
{"1", "foo@bar.com", nil},
{"1", "foo@bar.com", nil},
{"2", "foo@bar.com", nil},
}
for _, tc := range cases {
err := svc.RemoveChannel(tc.key, tc.id)
assert.Equal(t, tc.err, err, "unexpected error occurred")
}
}