예제 #1
0
파일: client_test.go 프로젝트: vsco/dcdr
func TestSet(t *testing.T) {
	ft := models.NewFeature("test", 0.5, "c", "u", "s", "n")
	cs := stores.NewMockStore(ft, nil)
	c := New(cs, &stores.MockRepo{}, config.DefaultConfig(), nil)

	err := c.Set(ft)

	assert.Nil(t, err)
}
예제 #2
0
파일: client_test.go 프로젝트: vsco/dcdr
func TestSetErrorOnNilValue(t *testing.T) {
	ft := models.NewFeature("test", nil, "c", "u", "s", "n")
	cs := stores.NewMockStore(nil, nil)
	c := New(cs, &stores.MockRepo{}, config.DefaultConfig(), nil)

	err := c.Set(ft)

	assert.Equal(t, ErrNilValue, err)
}
예제 #3
0
파일: client_test.go 프로젝트: vsco/dcdr
func TestSetWithError(t *testing.T) {
	ft := models.NewFeature("test", 0.5, "c", "u", "s", "n")
	e := errors.New("")
	cs := stores.NewMockStore(ft, e)
	c := New(cs, nil, config.DefaultConfig(), nil)

	err := c.Set(ft)

	assert.Equal(t, e, err)
}
예제 #4
0
파일: client_test.go 프로젝트: vsco/dcdr
func TestTypeChangeErrorSet(t *testing.T) {
	orig := models.NewFeature("test", 0.5, "c", "u", "s", "n")
	bad := models.NewFeature("test", false, "c", "u", "s", "n")

	cs := stores.NewMockStore(orig, nil)
	c := New(cs, nil, config.DefaultConfig(), nil)

	err := c.Set(bad)
	assert.Equal(t, ErrTypeChange, err)
}
예제 #5
0
파일: client_test.go 프로젝트: vsco/dcdr
func TestList(t *testing.T) {
	ft := models.NewFeature("test", 0.5, "c", "u", "s", "n")
	cs := stores.NewMockStore(ft, nil)
	c := New(cs, &stores.MockRepo{}, config.DefaultConfig(), nil)

	fts, err := c.List("test", "")

	assert.Nil(t, err)
	assert.Equal(t, models.Features{*ft}, fts)
}
예제 #6
0
파일: client_test.go 프로젝트: vsco/dcdr
func TestNilGet(t *testing.T) {
	cs := stores.NewMockStore(nil, nil)
	c := New(cs, &stores.MockRepo{}, config.DefaultConfig(), nil)

	var f *models.Feature
	err := c.Get("test", &f)

	assert.EqualError(t, err, "dcdr/test not found")
	assert.Nil(t, f)
}
예제 #7
0
파일: client_test.go 프로젝트: vsco/dcdr
func TestClientSetExisting(t *testing.T) {
	update := models.NewFeature("test", nil, "c", "u", "s", "n")
	orig := models.NewFeature("test", 0.5, "c", "u", "s", "n")

	c := New(stores.NewMockStore(orig, nil), &stores.MockRepo{}, config.DefaultConfig(), nil)

	err := c.Set(update)

	assert.NoError(t, err)
}
예제 #8
0
파일: client_test.go 프로젝트: vsco/dcdr
func TestDeleteWithError(t *testing.T) {
	ft := models.NewFeature("test", 0.5, "c", "u", "s", "n")
	e := errors.New("")
	cs := stores.NewMockStore(ft, e)
	c := New(cs, &stores.MockRepo{}, config.DefaultConfig(), nil)

	err := c.Delete(ft.Key, "")

	assert.Equal(t, e, err)
}
예제 #9
0
파일: client_test.go 프로젝트: vsco/dcdr
func TestGet(t *testing.T) {
	ft := models.NewFeature("test", 0.5, "c", "u", "s", "n")
	cs := stores.NewMockStore(ft, nil)
	c := New(cs, &stores.MockRepo{}, config.DefaultConfig(), nil)

	var f *models.Feature
	err := c.Get("test", &f)

	assert.Nil(t, err)
	assert.Equal(t, f, ft)
}
예제 #10
0
파일: server.go 프로젝트: vsco/dcdr
// NewDefault creates a new `Server` using `config.hcl`.
func NewDefault() (srv *Server, err error) {
	cfg := config.DefaultConfig()
	cl, err := client.New(cfg)

	if err != nil {
		return nil, err
	}

	srv = New(cfg, cl)

	return
}
예제 #11
0
func TestListEmptyFeatures(t *testing.T) {
	cfg := config.DefaultConfig()
	c := NewMockClient(nil, nil, nil)
	ctl := New(cfg, c)

	ctx := climax.Context{
		Variable: map[string]string{},
	}

	code := ctl.List(ctx)

	assert.Equal(t, Error, code)
}
예제 #12
0
func TestListFeatures(t *testing.T) {
	cfg := config.DefaultConfig()
	fts := models.Features{
		models.Feature{
			Key:   "test",
			Value: true,
		},
	}
	c := NewMockClient(nil, fts, nil)
	ctl := New(cfg, c)

	ctx := climax.Context{
		Variable: map[string]string{},
	}

	code := ctl.List(ctx)

	assert.Equal(t, Success, code)
}
예제 #13
0
파일: client_test.go 프로젝트: vsco/dcdr
func TestWatch(t *testing.T) {
	p := "/tmp/decider.json"
	fm, err := models.NewFeatureMap(JSONBytes)
	assert.NoError(t, err)
	err = ioutil.WriteFile(p, JSONBytes, 0644)
	assert.NoError(t, err)

	cfg := config.DefaultConfig()
	cfg.Watcher.OutputPath = p
	c, err := New(cfg)
	if err != nil {
		assert.NoError(t, err)
	}
	c.Watch()

	assert.Equal(t, fm, c.FeatureMap())

	err = os.Remove(p)
	assert.NoError(t, err)
}
예제 #14
0
파일: client_test.go 프로젝트: vsco/dcdr
func TestUpdateFeatures(t *testing.T) {
	json := []byte(`{
	  "dcdr": {
		"info": {
		  "current_sha": "abcde"
		},
		"features": {
		  "ab": {
			"float": 0.2
		  },
		  "cc": {
			"cn": {
			  "float": 0.1
			}
		  },
		  "default": {
			"float": 0,
			"default_bool": true
		  }
		}
	  }
	}`)

	update := []byte(`{
	  "dcdr": {
		"info": {
		  "current_sha": "updated"
		},
		"features": {
		  "ab": {
			"float": 0.3,
			"new_ab_feature": true
		  },
		  "cc": {
			"cn": {
			  "float": 0.1
			}
		  },
		  "default": {
			"float": 0,
			"default_bool": true
		  }
		}
	  }
	}`)

	cfg := config.DefaultConfig()
	cfg.Git.RepoPath = "/tmp"
	c, _ := New(cfg)
	c.UpdateFeatures(json)

	scoped := c.WithScopes("ab")

	assert.False(t, scoped.FeatureExists("new_ab_feature"))
	assert.Equal(t, float64(0.2), scoped.Features()["float"])
	assert.Equal(t, true, scoped.Features()["default_bool"])

	scoped.UpdateFeatures(update)

	assert.Equal(t, float64(0.3), scoped.Features()["float"])
	assert.True(t, scoped.FeatureExists("new_ab_feature"))
	assert.Equal(t, true, scoped.Features()["default_bool"])
}