Created
January 4, 2024 09:48
-
-
Save kkharji/9ede0b2ecd317a9f7866e87da05845be to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import ( | |
"testing" | |
"github.com/brianvoe/gofakeit/v6" | |
"github.com/gofiber/fiber/v2" | |
"github.com/stretchr/testify/assert" | |
"golang.org/x/net/context" | |
"github.com/kkharji/boonize/database" | |
"github.com/kkharji/boonize/lib/httpserver" | |
"github.com/kkharji/boonize/lib/tokenizer" | |
"github.com/kkharji/boonize/services/authservice" | |
) | |
func newTestClient(t *testing.T) (*httpserver.TestClient, *authservice.Controller) { | |
client := httpserver.NetTestClient(t, | |
httpserver.WithAddress(":51231"), | |
) | |
dataClient, err := database.New(database.InitParams{}) | |
assert.NoError(t, err, "failed to initialize data client") | |
tokenizer, err := tokenizer.NewJWTTokenizer() | |
assert.NoError(t, err, "failed to initialize tokenzier") | |
controllerParms := authservice.ControllerParams{Tokenizer: tokenizer, DataClient: dataClient} | |
controller, err := authservice.NewController(controllerParms) | |
assert.NoError(t, err, "failed to initialize controller") | |
registerHandlerParams := authservice.HTTPHandlerParams{HTTPServer: client.Inner, Controller: controller} | |
err = authservice.RegisterHTTPHandlers(registerHandlerParams) | |
assert.NoError(t, err, "failed to register http handler") | |
return client, controller | |
} | |
func TestHTTPHandler_Signup(t *testing.T) { | |
client, controller := newTestClient(t) | |
var signupDataOne authservice.SignupData | |
gofakeit.Struct(&signupDataOne) | |
var signupDataTwo authservice.SignupData | |
gofakeit.Struct(&signupDataTwo) | |
type response struct { | |
code int | |
body interface{} | |
} | |
tests := []struct { | |
name string | |
body authservice.SignupData | |
statusCode int | |
error error | |
response response | |
}{ | |
{ | |
name: "with new email", | |
response: response{ | |
code: fiber.StatusCreated, | |
body: nil, | |
}, | |
body: authservice.SignupData{ | |
Email: signupDataOne.Email, | |
Password: signupDataOne.Password, | |
}, | |
}, | |
{ | |
name: "with pre-existing email", | |
response: response{ | |
code: fiber.StatusConflict, | |
body: nil, | |
}, | |
body: authservice.SignupData{ | |
Email: signupDataOne.Email, | |
Password: signupDataOne.Password, | |
}, | |
}, | |
{ | |
name: "with new email and phone number", | |
response: response{ | |
code: fiber.StatusCreated, | |
body: nil, | |
}, | |
body: signupDataTwo, | |
}, | |
{ | |
name: "with pre-existing email and phone number", | |
response: response{ | |
code: fiber.StatusConflict, | |
body: nil, | |
}, | |
body: signupDataTwo, | |
}, | |
} | |
for _, tt := range tests { | |
t.Run(tt.name, func(*testing.T) { | |
response := client.Post("/auth/signup", nil, tt.body) | |
response.Assert(tt.response.code, nil) | |
if tt.response.code == fiber.StatusCreated { | |
var authData *database.AuthData | |
var err error | |
if tt.body.Email != "" { | |
authData, err, _ = controller.QueryByLogin(context.Background(), tt.body.Email) | |
} else { | |
authData, err, _ = controller.QueryByLogin(context.Background(), tt.body.PhoneNumber) | |
} | |
assert.NoError(t, err) | |
assert.NotNil(t, authData) | |
} | |
}) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment