Skip to content

Commit

Permalink
code layout
Browse files Browse the repository at this point in the history
  • Loading branch information
cwaldren-ld committed Oct 16, 2024
1 parent 3668f83 commit b6eb56a
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 154 deletions.
96 changes: 0 additions & 96 deletions integrationtests/api_helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -368,102 +368,6 @@ func (a *apiHelper) createFlag(
return nil
}

// createFlagWithVariations sets up a flag with two variations. The first
// is served when the flag is off, and the second is served when it is on.
func (a *apiHelper) createFlagWithVariations(
proj projectInfo,
env environmentInfo,
flagKey string,
on bool,
variation1 ldvalue.Value,
variation2 ldvalue.Value,
) error {
return a.createFlagWithBody(proj, env, flagKey, on, func(body *ldapi.FeatureFlagBody) {
for _, value := range []ldvalue.Value{variation1, variation2} {
valueAsInterface := value.AsArbitraryValue()
body.Variations = append(body.Variations, ldapi.Variation{Value: &valueAsInterface})
}
})
}

func (a *apiHelper) createFlagWithBody(
proj projectInfo,
env environmentInfo,
flagKey string,
on bool,
body func(body *ldapi.FeatureFlagBody),
) error {
flagPost := ldapi.FeatureFlagBody{
Name: flagKey,
Key: flagKey,
}

body(&flagPost)

_, _, err := a.apiClient.FeatureFlagsApi.
PostFeatureFlag(a.apiContext, proj.key).
FeatureFlagBody(flagPost).
Execute()

err = a.logResult("Create flag "+flagKey+" in "+proj.key, err)
if err != nil {
return err
}

envPrefix := fmt.Sprintf("/environments/%s", env.key)
patch := ldapi.PatchWithComment{
Patch: []ldapi.PatchOperation{
makePatch("replace", envPrefix+"/offVariation", 0),
makePatch("replace", envPrefix+"/fallthrough/variation", 1),
makePatch("replace", envPrefix+"/on", on),
},
}
_, _, err = a.apiClient.FeatureFlagsApi.
PatchFeatureFlag(a.apiContext, proj.key, flagKey).
PatchWithComment(patch).
Execute()

err = a.logResult("Configure flag "+flagKey+" for "+env.key, err)
if err != nil {
return err
}

return nil
}

func (a *apiHelper) createFlagWithPrerequisites(
proj projectInfo,
env environmentInfo,
flagKey string,
on bool,
variation1 ldvalue.Value,
variation2 ldvalue.Value,
prerequisites []ldapi.Prerequisite,
) error {

if err := a.createFlagWithVariations(proj, env, flagKey, on, variation1, variation2); err != nil {
return err
}

envPrefix := fmt.Sprintf("/environments/%s", env.key)

_, _, err := a.apiClient.FeatureFlagsApi.PatchFeatureFlag(a.apiContext, proj.key, flagKey).PatchWithComment(ldapi.PatchWithComment{
Patch: []ldapi.PatchOperation{
makePatch("replace", envPrefix+"/prerequisites", prerequisites),
makePatch("replace", envPrefix+"/offVariation", 0),
makePatch("replace", envPrefix+"/on", on),
makePatch("replace", envPrefix+"/fallthrough/variation", 1),
},
}).Execute()

err = a.logResult(fmt.Sprintf("Configure flag %s in %s:%s", flagKey, proj.key, env.key), err)
if err != nil {
return err
}

return nil
}

func (a *apiHelper) createFlags(projsAndEnvs projsAndEnvs) error {
for proj, envs := range projsAndEnvs {
err := a.createFlag(proj, envs, flagKeyForProj(proj), flagValueForEnv)
Expand Down
112 changes: 54 additions & 58 deletions integrationtests/standard_mode_prerequisite_flags_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,61 @@ func (s *scopedApiHelper) newFlag(key string) *flagBuilder {
return newFlagBuilder(s.apiHelper, key, s.project.key, s.env.key)
}

func makeTopLevelPrerequisites(api *scopedApiHelper) (map[string][]string, error) {
func testStandardModeWithPrerequisites(t *testing.T, manager *integrationTestManager) {
t.Run("includes top-level prerequisites", func(t *testing.T) {
api, err := newScopedApiHelper(manager.apiHelper)
require.NoError(t, err)
defer api.cleanup()

prerequisites, err := makeTopLevelPrerequisites(api)
require.NoError(t, err)

manager.startRelay(t, api.envVariables())
defer manager.stopRelay(t)

manager.awaitEnvironments(t, api.projAndEnvs(), nil, func(proj projectInfo, env environmentInfo) string {
return env.name
})
manager.verifyFlagPrerequisites(t, api.projAndEnvs(), prerequisites)
})

t.Run("ignores prereqs if not evaluated", func(t *testing.T) {
api, err := newScopedApiHelper(manager.apiHelper)
require.NoError(t, err)
defer api.cleanup()

prerequisites, err := makeFailedPrerequisites(api)
require.NoError(t, err)

manager.startRelay(t, api.envVariables())
defer manager.stopRelay(t)

manager.awaitEnvironments(t, api.projAndEnvs(), nil, func(proj projectInfo, env environmentInfo) string {
return env.name
})
manager.verifyFlagPrerequisites(t, api.projAndEnvs(), prerequisites)
})

t.Run("ignores client-side-only for prereq keys", func(t *testing.T) {
api, err := newScopedApiHelper(manager.apiHelper)
require.NoError(t, err)
defer api.cleanup()

prerequisites, err := makeIgnoreClientSideOnlyPrereqs(api)
require.NoError(t, err)

manager.startRelay(t, api.envVariables())
defer manager.stopRelay(t)

manager.awaitEnvironments(t, api.projAndEnvs(), nil, func(proj projectInfo, env environmentInfo) string {
return env.name
})

manager.verifyFlagPrerequisites(t, api.projAndEnvs(), prerequisites)
})
}

func makeTopLevelPrerequisites(api *scopedApiHelper) (map[string][]string, error) {
// topLevel -> directPrereq1, directPrereq2
// directPrereq1 -> indirectPrereqOf1

Expand Down Expand Up @@ -112,7 +165,6 @@ func makeTopLevelPrerequisites(api *scopedApiHelper) (map[string][]string, error
}

func makeFailedPrerequisites(api *scopedApiHelper) (map[string][]string, error) {

// flagOn -> prereq1
// failedPrereq -> prereq1

Expand Down Expand Up @@ -166,7 +218,6 @@ func makeFailedPrerequisites(api *scopedApiHelper) (map[string][]string, error)
}

func makeIgnoreClientSideOnlyPrereqs(api *scopedApiHelper) (map[string][]string, error) {

// flag -> prereq1, prereq2

if err := api.newFlag("prereq1").
Expand Down Expand Up @@ -196,59 +247,4 @@ func makeIgnoreClientSideOnlyPrereqs(api *scopedApiHelper) (map[string][]string,
"flag": {"prereq1", "prereq2"},
"prereq1": {},
}, nil

}

func testStandardModeWithPrerequisites(t *testing.T, manager *integrationTestManager) {
t.Run("includes top-level prerequisites", func(t *testing.T) {
api, err := newScopedApiHelper(manager.apiHelper)
require.NoError(t, err)
defer api.cleanup()

prerequisites, err := makeTopLevelPrerequisites(api)
require.NoError(t, err)

manager.startRelay(t, api.envVariables())
defer manager.stopRelay(t)

manager.awaitEnvironments(t, api.projAndEnvs(), nil, func(proj projectInfo, env environmentInfo) string {
return env.name
})
manager.verifyFlagPrerequisites(t, api.projAndEnvs(), prerequisites)
})

t.Run("ignores prereqs if not evaluated", func(t *testing.T) {
api, err := newScopedApiHelper(manager.apiHelper)
require.NoError(t, err)
defer api.cleanup()

prerequisites, err := makeFailedPrerequisites(api)
require.NoError(t, err)

manager.startRelay(t, api.envVariables())
defer manager.stopRelay(t)

manager.awaitEnvironments(t, api.projAndEnvs(), nil, func(proj projectInfo, env environmentInfo) string {
return env.name
})
manager.verifyFlagPrerequisites(t, api.projAndEnvs(), prerequisites)
})

t.Run("ignores client-side-only for prereq keys", func(t *testing.T) {
api, err := newScopedApiHelper(manager.apiHelper)
require.NoError(t, err)
defer api.cleanup()

prerequisites, err := makeIgnoreClientSideOnlyPrereqs(api)
require.NoError(t, err)

manager.startRelay(t, api.envVariables())
defer manager.stopRelay(t)

manager.awaitEnvironments(t, api.projAndEnvs(), nil, func(proj projectInfo, env environmentInfo) string {
return env.name
})

manager.verifyFlagPrerequisites(t, api.projAndEnvs(), prerequisites)
})
}

0 comments on commit b6eb56a

Please sign in to comment.