Added model class for user preferences object

Этот коммит содержится в:
hmhealey
2015-10-01 09:16:25 -04:00
родитель eb0c0fea35
Коммит 3229457de0
2 изменённых файлов: 136 добавлений и 0 удалений

74
model/preference.go Обычный файл
Просмотреть файл

@@ -0,0 +1,74 @@
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
// See License.txt for license information.
package model
import (
"encoding/json"
"io"
)
const (
PREFERENCE_CATEGORY_DIRECT_CHANNELS = "direct_channels"
PREFERENCE_NAME_SHOWHIDE = "show_hide"
)
type Preference struct {
UserId string `json:"user_id"`
Category string `json:"category"`
Name string `json:"name"`
AltId string `json:"alt_id"`
Value string `json:"value"`
}
func (o *Preference) ToJson() string {
b, err := json.Marshal(o)
if err != nil {
return ""
} else {
return string(b)
}
}
func PreferenceFromJson(data io.Reader) *Preference {
decoder := json.NewDecoder(data)
var o Preference
err := decoder.Decode(&o)
if err == nil {
return &o
} else {
return nil
}
}
func (o *Preference) IsValid() *AppError {
if len(o.UserId) != 26 {
return NewAppError("Preference.IsValid", "Invalid user id", "user_id="+o.UserId)
}
if len(o.Category) == 0 || len(o.Category) > 32 || !IsPreferenceCategoryValid(o.Category) {
return NewAppError("Preference.IsValid", "Invalid category", "category="+o.Category)
}
if len(o.Name) == 0 || len(o.Name) > 32 || !IsPreferenceNameValid(o.Name) {
return NewAppError("Preference.IsValid", "Invalid name", "name="+o.Name)
}
if o.AltId != "" && len(o.AltId) != 26 {
return NewAppError("Preference.IsValid", "Invalid alternate id", "altId="+o.AltId)
}
if len(o.Value) > 128 {
return NewAppError("Preference.IsValid", "Value is too long", "value="+o.Value)
}
return nil
}
func IsPreferenceCategoryValid(category string) bool {
return category == PREFERENCE_CATEGORY_DIRECT_CHANNELS
}
func IsPreferenceNameValid(name string) bool {
return name == PREFERENCE_NAME_SHOWHIDE
}

62
model/preference_test.go Обычный файл
Просмотреть файл

@@ -0,0 +1,62 @@
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
// See License.txt for license information.
package model
import (
"strings"
"testing"
)
func TestPreferenceIsValid(t *testing.T) {
preference := Preference{}
if err := preference.IsValid(); err == nil {
t.Fatal()
}
preference.UserId = NewId()
if err := preference.IsValid(); err == nil {
t.Fatal()
}
preference.Category = "1234garbage"
if err := preference.IsValid(); err == nil {
t.Fatal()
}
preference.Category = PREFERENCE_CATEGORY_DIRECT_CHANNELS
if err := preference.IsValid(); err == nil {
t.Fatal()
}
preference.Name = "1234garbage"
if err := preference.IsValid(); err == nil {
t.Fatal()
}
preference.Name = PREFERENCE_NAME_SHOWHIDE
if err := preference.IsValid(); err != nil {
t.Fatal()
}
preference.AltId = "1234garbage"
if err := preference.IsValid(); err == nil {
t.Fatal()
}
preference.AltId = NewId()
if err := preference.IsValid(); err != nil {
t.Fatal()
}
preference.Value = "1234garbage"
if err := preference.IsValid(); err != nil {
t.Fatal()
}
preference.Value = strings.Repeat("01234567890", 20)
if err := preference.IsValid(); err == nil {
t.Fatal()
}
}