예제 #1
0
func UpdateValueHandler(w http.ResponseWriter, r *http.Request) {
	dto := models.NewValueDTO()
	dto.ValueId = mux.Vars(r)["value_id"]
	dto.UpdateFields = strings.Split(r.URL.Query().Get("fields"), ",")

	res := models.NewResponse()

	if err := dto.FromJson(r.Body); err != nil {
		res.Message = "unknown"
		res.DevMessage = err.Error()
		w.Write(res.ToJson())
		return
	}
	value, err := Srv.Store.ValueStore().Update(dto)

	if err != nil {
		res.Message = "Ошибка обновления"
		res.DevMessage = err.Error()
		w.Write(res.ToJson())
		return
	}

	res.StatusCode = http.StatusOK
	res.Data = value

	w.Write(res.ToJson())
}
예제 #2
0
func TestCreateUniqValue(t *testing.T) {
	key1 := uuid.NewV1().String()
	key2 := uuid.NewV1().String()
	key3 := uuid.NewV1().String()

	dto := models.NewValueDTO()
	dto.Keys.Add(key1)
	dto.Keys.Add(key2)
	dto.Keys.Add(key3)
	dto.Keys.Add("uniq")
	dto.Value["string"] = strings.Join([]string{key1, key2, key3}, ":")

	_, err := _s.Get("value").(*ValueStore).Create(dto)

	if err != nil {
		t.Error(err)
		return
	}

	_, err = _s.Get("value").(*ValueStore).Create(dto)

	if err == nil || !strings.HasPrefix(err.Error(), "ERROR: duplicate key value violates unique constraint \"values_uniq_ifcontainuniqkey_idx\"") {
		t.Error(err)
		return
	}
}
예제 #3
0
func TestUpdateValue(t *testing.T) {
	key1 := uuid.NewV1().String()
	key2 := uuid.NewV1().String()
	key3 := uuid.NewV1().String()

	dto := models.NewValueDTO()
	dto.Keys.Add(key1)
	dto.Keys.Add(key2)
	dto.Keys.Add(key3)
	dto.Value["string"] = strings.Join([]string{key1, key2, key3}, ":")

	value, err := _s.Get("value").(*ValueStore).Create(dto)

	if err != nil {
		t.Error(err)
		return
	}

	dto.ValueId = value.PrimaryValue().String()
	dto.Value["string"] = "new value"
	dto.UpdateFields = []string{"value"}
	_, err = _s.Get("value").(*ValueStore).Update(dto)

	if err != nil {
		t.Error(err)
		return
	}

	dto.Keys = models.StringArray{}
	dto.Keys.Add(key3)
	dto.Keys.Add(key1)
	dto.Keys.Add(key2)
	values, err := _s.Get("value").(*ValueStore).FindByKeys(dto, "=")

	if err != nil {
		t.Error(err)
		return
	}

	if len(values) != 1 {
		t.Error("count of values ​​is not expected")
		return
	}

	if values[0].Value["string"].(string) != dto.Value["string"].(string) {
		t.Errorf("value '%v'", values[0].Value)
		t.Error("is not expected 'value'")
		return
	}
}
예제 #4
0
func GetValueHandler(w http.ResponseWriter, r *http.Request) {
	dto := models.NewValueDTO()
	dto.ValueId = mux.Vars(r)["value_id"]
	res := models.NewResponse()

	value, err := Srv.Store.ValueStore().GetOne(dto)

	if err != nil {
		res.Message = "Ошибка загрузки"
		res.DevMessage = err.Error()
		w.Write(res.ToJson())
		return
	}

	res.StatusCode = http.StatusOK
	res.Data = value

	w.Write(res.ToJson())
}
예제 #5
0
func BuildSearchByMode(mode string) func(http.ResponseWriter, *http.Request) {

	return func(w http.ResponseWriter, r *http.Request) {
		dto := models.NewValueDTO()
		res := models.NewResponse()
		dto.Keys.AddAsArray(strings.Split(mux.Vars(r)["keys"], ","))

		values, err := Srv.Store.ValueStore().FindByKeys(dto, mode)

		if err != nil {
			res.Message = "Ошибка поиска"
			res.DevMessage = err.Error()
			w.Write(res.ToJson())
			return
		}

		res.StatusCode = http.StatusOK
		res.Data = values

		w.Write(res.ToJson())
	}
}
예제 #6
0
func NewValueHandler(w http.ResponseWriter, r *http.Request) {
	dto := models.NewValueDTO()
	res := models.NewResponse()

	if err := dto.FromJson(r.Body); err != nil {
		res.Message = "unknown"
		res.DevMessage = err.Error()
		w.Write(res.ToJson())
		return
	}
	value, err := Srv.Store.ValueStore().Create(dto)

	if err != nil {
		res.Message = "Ошибка создания"
		res.DevMessage = err.Error()
		w.Write(res.ToJson())
		return
	}

	res.StatusCode = http.StatusOK
	res.Data = value

	w.Write(res.ToJson())
}
예제 #7
0
func TestCreateValue(t *testing.T) {
	key1 := uuid.NewV1().String()
	key2 := uuid.NewV1().String()
	key3 := uuid.NewV1().String()

	dto := models.NewValueDTO()
	dto.Keys.Add(key1)
	dto.Keys.Add(key2)
	dto.Keys.Add(key3)
	dto.Value["string"] = strings.Join([]string{key1, key2, key3}, ":")

	_, err := _s.Get("value").(*ValueStore).Create(dto)

	if err != nil {
		t.Error(err)
		return
	}

	dto.ValueId = ""
	values, err := _s.Get("value").(*ValueStore).FindByKeys(dto, "=")

	if err != nil {
		t.Error(err)
		return
	}

	value := values[0]
	_keys := models.StringArray(value.Keys)

	if !(_keys.IsExist(key1) && _keys.IsExist(key2) && _keys.IsExist(key3)) {
		t.Error("not valid keys")
		return
	}

	//

	dto.ValueId = ""
	dto.Keys = models.StringArray{}
	dto.Keys.Add(key1)
	values, err = _s.Get("value").(*ValueStore).FindByKeys(dto, "=")

	if err != nil {
		t.Error(err)
		return
	}

	if len(values) != 0 {
		t.Error("error search mode =")
		return
	}

	//

	dto.ValueId = ""
	dto.Keys = models.StringArray{}
	dto.Keys.Add(key1)
	values, err = _s.Get("value").(*ValueStore).FindByKeys(dto, "&&")

	if err != nil {
		t.Error(err)
		return
	}

	if len(values) != 1 {
		t.Error("error search mode &&")
		return
	}

	value = values[0]
	_keys = models.StringArray(value.Keys)

	if !(_keys.IsExist(key1) && _keys.IsExist(key2) && _keys.IsExist(key3)) {
		t.Error("not valid keys")
		return
	}
}
예제 #8
0
func TestModeEventsCreated(t *testing.T) {
	key1 := uuid.NewV1().String()
	key2 := uuid.NewV1().String()

	var origValueIndexes = make(map[uuid.UUID]int)

	for i, _ := range strings.Repeat("+", 10) {
		dto := models.NewValueDTO()
		dto.Keys.Add(key2)
		dto.Keys.Add(key1)
		dto.Value["string"] = strings.Join([]string{key1, key2, strconv.Itoa(i)}, ":")
		dto.Value["iter"] = i
		dto.Value["iter_inc"] = i + 1
		dto.Value[strconv.Itoa(i)+":special_value"] = i + 2
		dto.Value["enabled"] = true
		dto.Value["array"] = []string{"tag:" + strconv.Itoa(i), "tag1", "tag2"}

		value, err := _s.Get("value").(*ValueStore).Create(dto)

		if err != nil {
			t.Error(err)
			return
		}

		origValueIndexes[value.PrimaryValue()] = i
	}

	dto := models.NewValueDTO()
	dto.Keys.Add(key2)
	dto.Keys.Add(key1)
	values, err := _s.Get("value").(*ValueStore).FindByKeys(dto, "=")

	if err != nil {
		t.Error(err)
		return
	}

	for _, value := range values {
		iterValue, exist := origValueIndexes[value.PrimaryValue()]

		if !exist {
			t.Fatal("not exist item")
			return
		}

		if value.Value["string"].(string) != strings.Join([]string{key1, key2, strconv.Itoa(iterValue)}, ":") {
			t.Errorf("values Value is not correct for %v", value.PrimaryValue().String())
			return
		}

		if int(value.Value["iter"].(float64)) != iterValue {
			t.Errorf("values Value[\"iter\"] is not correct for %v", value.PrimaryValue().String())
			return
		}

		if int(value.Value["iter_inc"].(float64)) != iterValue+1 {
			t.Errorf("values Value[\"iter_inc\"] is not correct for %v", value.PrimaryValue().String())
			return
		}

		if int(value.Value[strconv.Itoa(iterValue)+":special_value"].(float64)) != iterValue+2 {
			t.Errorf("values Value[\"#:special_value\"] is not correct for %v", value.PrimaryValue().String())
			return
		}

		_array := models.StringArray{}
		_array.FromArray(value.Value["array"].([]interface{}))

		if !_array.IsExist("tag:" + strconv.Itoa(iterValue)) {
			t.Errorf("values Flags is not correct for %v", value.PrimaryValue().String())
			return
		}

		if value.Value["enabled"].(bool) != true {
			t.Errorf("values Value[\"enabled\"] is not correct for %v", value.PrimaryValue().String())
			return
		}
	}
}