Skip to content

Instantly share code, notes, and snippets.

@kkharji
Created January 4, 2024 09:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kkharji/9ede0b2ecd317a9f7866e87da05845be to your computer and use it in GitHub Desktop.
Save kkharji/9ede0b2ecd317a9f7866e87da05845be to your computer and use it in GitHub Desktop.
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