Skip to content

Commit

Permalink
test: ErrStrategyAsksToReturnToUI behavior
Browse files Browse the repository at this point in the history
  • Loading branch information
aeneasr committed Oct 19, 2021
1 parent 57fd99a commit f739018
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 3 deletions.
3 changes: 1 addition & 2 deletions selfservice/flow/settings/error.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,8 +142,7 @@ func (s *ErrorHandler) WriteFlowError(

if errors.Is(err, flow.ErrStrategyAsksToReturnToUI) {
if f.Type == flow.TypeAPI || x.IsJSONRequest(r) {
http.Redirect(w, r, urlx.CopyWithQuery(urlx.AppendPaths(s.d.Config(r.Context()).SelfPublicURL(r),
RouteGetFlow), url.Values{"id": {f.ID.String()}}).String(), http.StatusSeeOther)
s.d.Writer().Write(w, r, f)
} else {
http.Redirect(w, r, f.AppendTo(s.d.Config(r.Context()).SelfServiceFlowSettingsUI()).String(), http.StatusSeeOther)
}
Expand Down
33 changes: 32 additions & 1 deletion selfservice/flow/settings/error_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ func TestHandleError(t *testing.T) {
ts := httptest.NewServer(router)
t.Cleanup(ts.Close)

testhelpers.NewSettingsUIFlowEchoServer(t, reg)
_ = testhelpers.NewSettingsUIFlowEchoServer(t, reg)
testhelpers.NewErrorTestServer(t, reg)
testhelpers.NewLoginUIFlowEchoServer(t, reg)

Expand All @@ -59,6 +59,7 @@ func TestHandleError(t *testing.T) {
require.NoError(t, faker.FakeData(&id))
id.SchemaID = "default"
id.State = identity.StateActive
reg.PrivilegedIdentityPool().CreateIdentity(context.Background(), &id)

router.GET("/error", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
h.WriteFlowError(w, r, flowMethod, settingsFlow, &id, flowError)
Expand Down Expand Up @@ -174,6 +175,24 @@ func TestHandleError(t *testing.T) {
assert.Equal(t, settingsFlow.ID.String(), gjson.GetBytes(body, "id").String())
})

t.Run("case=return to UI error", func(t *testing.T) {
t.Cleanup(reset)

settingsFlow = newFlow(t, time.Minute, flow.TypeBrowser)
settingsFlow.IdentityID = id.ID
flowError = flow.ErrStrategyAsksToReturnToUI
flowMethod = settings.StrategyProfile

res, err := ts.Client().Do(testhelpers.NewHTTPGetJSONRequest(t, ts.URL+"/error"))
require.NoError(t, err)
defer res.Body.Close()
require.Equal(t, http.StatusOK, res.StatusCode)

body, err := ioutil.ReadAll(res.Body)
require.NoError(t, err)
assert.Equal(t, settingsFlow.ID.String(), gjson.GetBytes(body, "id").String())
})

t.Run("case=generic error", func(t *testing.T) {
t.Cleanup(reset)

Expand Down Expand Up @@ -217,6 +236,18 @@ func TestHandleError(t *testing.T) {
assert.Equal(t, int(text.ErrorValidationSettingsFlowExpired), int(lf.UI.Messages[0].ID))
})

t.Run("case=return to ui error", func(t *testing.T) {
t.Cleanup(reset)

settingsFlow = newFlow(t, time.Minute, flow.TypeBrowser)
settingsFlow.IdentityID = id.ID
flowError = flow.ErrStrategyAsksToReturnToUI
flowMethod = settings.StrategyProfile

lf, _ := expectSettingsUI(t)
assert.EqualValues(t, settingsFlow.ID, lf.ID)
})

t.Run("case=session old error", func(t *testing.T) {
t.Cleanup(reset)

Expand Down

0 comments on commit f739018

Please sign in to comment.