2019-05-16 10:39:25 -04:00
|
|
|
package tests
|
|
|
|
|
|
|
|
import (
|
2019-06-26 01:16:57 -08:00
|
|
|
"geeks-accelerator/oss/saas-starter-kit/example-project/internal/account"
|
|
|
|
"geeks-accelerator/oss/saas-starter-kit/example-project/internal/signup"
|
|
|
|
"github.com/pborman/uuid"
|
2019-05-16 10:39:25 -04:00
|
|
|
"net/http"
|
|
|
|
"os"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
2019-05-16 18:05:39 -04:00
|
|
|
"geeks-accelerator/oss/saas-starter-kit/example-project/cmd/web-api/handlers"
|
2019-05-16 10:39:25 -04:00
|
|
|
"geeks-accelerator/oss/saas-starter-kit/example-project/internal/platform/auth"
|
|
|
|
"geeks-accelerator/oss/saas-starter-kit/example-project/internal/platform/tests"
|
|
|
|
"geeks-accelerator/oss/saas-starter-kit/example-project/internal/user"
|
|
|
|
)
|
|
|
|
|
|
|
|
var a http.Handler
|
|
|
|
var test *tests.Test
|
|
|
|
|
|
|
|
// Information about the users we have created for testing.
|
2019-06-26 01:16:57 -08:00
|
|
|
type roleTest struct {
|
|
|
|
Token user.Token
|
|
|
|
Claims auth.Claims
|
|
|
|
SignupRequest *signup.SignupRequest
|
|
|
|
SignupResponse *signup.SignupResponse
|
|
|
|
User *user.User
|
|
|
|
Account *account.Account
|
|
|
|
}
|
|
|
|
|
|
|
|
var roleTests map[string]roleTest
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
roleTests = make(map[string]roleTest)
|
|
|
|
}
|
2019-05-16 10:39:25 -04:00
|
|
|
|
|
|
|
// TestMain is the entry point for testing.
|
|
|
|
func TestMain(m *testing.M) {
|
|
|
|
os.Exit(testMain(m))
|
|
|
|
}
|
|
|
|
|
|
|
|
func testMain(m *testing.M) int {
|
|
|
|
test = tests.New()
|
|
|
|
defer test.TearDown()
|
|
|
|
|
2019-06-26 01:16:57 -08:00
|
|
|
now := time.Date(2018, time.October, 1, 0, 0, 0, 0, time.UTC)
|
2019-05-16 10:39:25 -04:00
|
|
|
|
2019-06-26 01:16:57 -08:00
|
|
|
authenticator, err := auth.NewAuthenticatorMemory(now)
|
2019-05-16 10:39:25 -04:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
shutdown := make(chan os.Signal, 1)
|
2019-06-26 01:16:57 -08:00
|
|
|
a = handlers.API(shutdown, test.Log, test.MasterDB, nil, authenticator)
|
|
|
|
|
|
|
|
// Create a new account directly business logic. This creates an
|
|
|
|
// initial account and user that we will use for admin validated endpoints.
|
|
|
|
signupReq := signup.SignupRequest{
|
|
|
|
Account: signup.SignupAccount{
|
|
|
|
Name: uuid.NewRandom().String(),
|
|
|
|
Address1: "103 East Main St",
|
|
|
|
Address2: "Unit 546",
|
|
|
|
City: "Valdez",
|
|
|
|
Region: "AK",
|
|
|
|
Country: "USA",
|
|
|
|
Zipcode: "99686",
|
|
|
|
},
|
|
|
|
User: signup.SignupUser{
|
|
|
|
Name: "Lee Brown",
|
|
|
|
Email: uuid.NewRandom().String() + "@geeksinthewoods.com",
|
|
|
|
Password: "akTechFr0n!ier",
|
|
|
|
PasswordConfirm: "akTechFr0n!ier",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
signup, err := signup.Signup(tests.Context(), auth.Claims{}, test.MasterDB, signupReq, now)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
2019-05-16 10:39:25 -04:00
|
|
|
}
|
|
|
|
|
2019-06-26 01:16:57 -08:00
|
|
|
expires := time.Now().UTC().Sub(signup.User.CreatedAt) + time.Hour
|
|
|
|
adminTkn, err := user.Authenticate(tests.Context(), test.MasterDB, authenticator, signupReq.User.Email, signupReq.User.Password, expires, now)
|
2019-05-16 10:39:25 -04:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
2019-06-26 01:16:57 -08:00
|
|
|
adminClaims, err := authenticator.ParseClaims(adminTkn.AccessToken)
|
2019-05-16 10:39:25 -04:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
2019-06-26 01:16:57 -08:00
|
|
|
roleTests[auth.RoleAdmin] = roleTest{
|
|
|
|
Token: adminTkn,
|
|
|
|
Claims: adminClaims,
|
|
|
|
SignupRequest: &signupReq,
|
|
|
|
SignupResponse: signup,
|
|
|
|
User: signup.User,
|
|
|
|
Account: signup.Account,
|
|
|
|
}
|
2019-05-16 10:39:25 -04:00
|
|
|
|
|
|
|
// Create a regular user to use when calling regular validated endpoints.
|
2019-06-26 01:16:57 -08:00
|
|
|
userReq := user.UserCreateRequest{
|
|
|
|
Name: "Lucas Brown",
|
|
|
|
Email: uuid.NewRandom().String() + "@geeksinthewoods.com",
|
|
|
|
Password: "akTechFr0n!ier",
|
|
|
|
PasswordConfirm: "akTechFr0n!ier",
|
|
|
|
}
|
|
|
|
usr, err := user.Create(tests.Context(), adminClaims, test.MasterDB, userReq, now)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
2019-05-16 10:39:25 -04:00
|
|
|
}
|
|
|
|
|
2019-06-26 01:16:57 -08:00
|
|
|
userTkn, err := user.Authenticate(tests.Context(), test.MasterDB, authenticator, usr.Email, userReq.Password, expires, now)
|
2019-05-16 10:39:25 -04:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
2019-06-26 01:16:57 -08:00
|
|
|
userClaims, err := authenticator.ParseClaims(userTkn.AccessToken)
|
2019-05-16 10:39:25 -04:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
2019-06-26 01:16:57 -08:00
|
|
|
roleTests[auth.RoleUser] = roleTest{
|
|
|
|
Token: userTkn,
|
|
|
|
Claims: userClaims,
|
|
|
|
SignupRequest: &signupReq,
|
|
|
|
SignupResponse: signup,
|
|
|
|
Account: signup.Account,
|
|
|
|
User: usr,
|
|
|
|
}
|
2019-05-16 10:39:25 -04:00
|
|
|
|
|
|
|
return m.Run()
|
|
|
|
}
|