diff --git a/pkg/login/grafana_login_test.go b/pkg/login/grafana_login_test.go index 5212e0a478bd..528827e53a5c 100644 --- a/pkg/login/grafana_login_test.go +++ b/pkg/login/grafana_login_test.go @@ -3,83 +3,51 @@ package login import ( "testing" - . "github.com/smartystreets/goconvey/convey" - "github.com/grafana/grafana/pkg/bus" "github.com/grafana/grafana/pkg/models" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) -func TestGrafanaLogin(t *testing.T) { - Convey("Login using Grafana DB", t, func() { - grafanaLoginScenario("When login with non-existing user", func(sc *grafanaLoginScenarioContext) { - sc.withNonExistingUser() - err := loginUsingGrafanaDB(sc.loginUserQuery) +func TestLoginUsingGrafanaDB(t *testing.T) { + grafanaLoginScenario(t, "When login with non-existing user", func(sc *grafanaLoginScenarioContext) { + sc.withNonExistingUser() + err := loginUsingGrafanaDB(sc.loginUserQuery) + require.EqualError(t, err, models.ErrUserNotFound.Error()) - Convey("it should result in user not found error", func() { - So(err, ShouldEqual, models.ErrUserNotFound) - }) + assert.False(t, sc.validatePasswordCalled) + assert.Nil(t, sc.loginUserQuery.User) + }) - Convey("it should not call password validation", func() { - So(sc.validatePasswordCalled, ShouldBeFalse) - }) + grafanaLoginScenario(t, "When login with invalid credentials", func(sc *grafanaLoginScenarioContext) { + sc.withInvalidPassword() + err := loginUsingGrafanaDB(sc.loginUserQuery) - Convey("it should not populate user object", func() { - So(sc.loginUserQuery.User, ShouldBeNil) - }) - }) + require.EqualError(t, err, ErrInvalidCredentials.Error()) - grafanaLoginScenario("When login with invalid credentials", func(sc *grafanaLoginScenarioContext) { - sc.withInvalidPassword() - err := loginUsingGrafanaDB(sc.loginUserQuery) + assert.True(t, sc.validatePasswordCalled) + assert.Nil(t, sc.loginUserQuery.User) + }) - Convey("it should result in invalid credentials error", func() { - So(err, ShouldEqual, ErrInvalidCredentials) - }) + grafanaLoginScenario(t, "When login with valid credentials", func(sc *grafanaLoginScenarioContext) { + sc.withValidCredentials() + err := loginUsingGrafanaDB(sc.loginUserQuery) + require.NoError(t, err) - Convey("it should call password validation", func() { - So(sc.validatePasswordCalled, ShouldBeTrue) - }) + assert.True(t, sc.validatePasswordCalled) - Convey("it should not populate user object", func() { - So(sc.loginUserQuery.User, ShouldBeNil) - }) - }) + require.NotNil(t, sc.loginUserQuery.User) + assert.Equal(t, sc.loginUserQuery.Username, sc.loginUserQuery.User.Login) + assert.Equal(t, sc.loginUserQuery.Password, sc.loginUserQuery.User.Password) + }) - grafanaLoginScenario("When login with valid credentials", func(sc *grafanaLoginScenarioContext) { - sc.withValidCredentials() - err := loginUsingGrafanaDB(sc.loginUserQuery) + grafanaLoginScenario(t, "When login with disabled user", func(sc *grafanaLoginScenarioContext) { + sc.withDisabledUser() + err := loginUsingGrafanaDB(sc.loginUserQuery) + require.EqualError(t, err, ErrUserDisabled.Error()) - Convey("it should not result in error", func() { - So(err, ShouldBeNil) - }) - - Convey("it should call password validation", func() { - So(sc.validatePasswordCalled, ShouldBeTrue) - }) - - Convey("it should populate user object", func() { - So(sc.loginUserQuery.User, ShouldNotBeNil) - So(sc.loginUserQuery.User.Login, ShouldEqual, sc.loginUserQuery.Username) - So(sc.loginUserQuery.User.Password, ShouldEqual, sc.loginUserQuery.Password) - }) - }) - - grafanaLoginScenario("When login with disabled user", func(sc *grafanaLoginScenarioContext) { - sc.withDisabledUser() - err := loginUsingGrafanaDB(sc.loginUserQuery) - - Convey("it should return user is disabled error", func() { - So(err, ShouldEqual, ErrUserDisabled) - }) - - Convey("it should not call password validation", func() { - So(sc.validatePasswordCalled, ShouldBeFalse) - }) - - Convey("it should not populate user object", func() { - So(sc.loginUserQuery.User, ShouldBeNil) - }) - }) + assert.False(t, sc.validatePasswordCalled) + assert.Nil(t, sc.loginUserQuery.User) }) } @@ -90,8 +58,10 @@ type grafanaLoginScenarioContext struct { type grafanaLoginScenarioFunc func(c *grafanaLoginScenarioContext) -func grafanaLoginScenario(desc string, fn grafanaLoginScenarioFunc) { - Convey(desc, func() { +func grafanaLoginScenario(t *testing.T, desc string, fn grafanaLoginScenarioFunc) { + t.Helper() + + t.Run(desc, func(t *testing.T) { origValidatePassword := validatePassword sc := &grafanaLoginScenarioContext{ @@ -103,9 +73,9 @@ func grafanaLoginScenario(desc string, fn grafanaLoginScenarioFunc) { validatePasswordCalled: false, } - defer func() { + t.Cleanup(func() { validatePassword = origValidatePassword - }() + }) fn(sc) })