Răsfoiți Sursa

slight repo restructuring

Alexander Belanger 5 ani în urmă
părinte
comite
44ed37609d

+ 1 - 1
internal/repository/gorm/repository.go

@@ -9,6 +9,6 @@ import (
 // gorm.DB for querying the database
 func NewRepository(db *gorm.DB) *repository.Repository {
 	return &repository.Repository{
-		User: *NewUserRepository(db),
+		User: NewUserRepository(db),
 	}
 }

+ 6 - 5
internal/repository/gorm/user.go

@@ -2,6 +2,7 @@ package gorm
 
 import (
 	"github.com/porter-dev/porter/internal/models"
+	"github.com/porter-dev/porter/internal/repository"
 	"gorm.io/gorm"
 )
 
@@ -12,12 +13,12 @@ type UserRepository struct {
 
 // NewUserRepository returns a DefaultUserRepository which uses
 // gorm.DB for querying the database
-func NewUserRepository(db *gorm.DB) *UserRepository {
+func NewUserRepository(db *gorm.DB) repository.UserRepository {
 	return &UserRepository{db}
 }
 
 // CreateUser adds a new User row to the Users table in the database
-func (repo UserRepository) CreateUser(user *models.User) (*models.User, error) {
+func (repo *UserRepository) CreateUser(user *models.User) (*models.User, error) {
 	if err := repo.db.Create(user).Error; err != nil {
 		return nil, err
 	}
@@ -25,7 +26,7 @@ func (repo UserRepository) CreateUser(user *models.User) (*models.User, error) {
 }
 
 // ReadUser finds a single user based on their unique id
-func (repo UserRepository) ReadUser(id uint) (*models.User, error) {
+func (repo *UserRepository) ReadUser(id uint) (*models.User, error) {
 	user := &models.User{}
 	if err := repo.db.Where("id = ?", id).First(&user).Error; err != nil {
 		return nil, err
@@ -34,7 +35,7 @@ func (repo UserRepository) ReadUser(id uint) (*models.User, error) {
 }
 
 // UpdateUser modifies an existing User in the database
-func (repo UserRepository) UpdateUser(user *models.User) (*models.User, error) {
+func (repo *UserRepository) UpdateUser(user *models.User) (*models.User, error) {
 	if err := repo.db.First(&models.User{}, user.ID).Updates(user).Error; err != nil {
 		return nil, err
 	}
@@ -43,7 +44,7 @@ func (repo UserRepository) UpdateUser(user *models.User) (*models.User, error) {
 }
 
 // DeleteUser deletes a single user using their unique id
-func (repo UserRepository) DeleteUser(user *models.User) (*models.User, error) {
+func (repo *UserRepository) DeleteUser(user *models.User) (*models.User, error) {
 	if err := repo.db.First(&models.User{}, user.ID).Delete(&user).Error; err != nil {
 		return nil, err
 	}

+ 1 - 1
internal/repository/test/repository.go

@@ -8,6 +8,6 @@ import (
 // and accepts a parameter that can trigger read/write errors
 func NewRepository(canQuery bool) *repository.Repository {
 	return &repository.Repository{
-		User: *NewUserRepository(canQuery),
+		User: NewUserRepository(canQuery),
 	}
 }

+ 19 - 7
internal/repository/test/user.go

@@ -2,9 +2,11 @@ package test
 
 import (
 	"errors"
+	"fmt"
 
-	"gorm.io/gorm"
 	"github.com/porter-dev/porter/internal/models"
+	"github.com/porter-dev/porter/internal/repository"
+	"gorm.io/gorm"
 )
 
 // UserRepository will return errors on queries if canQuery is false
@@ -16,24 +18,34 @@ type UserRepository struct {
 }
 
 // NewUserRepository will return errors
-func NewUserRepository(canQuery bool) *UserRepository {
+func NewUserRepository(canQuery bool) repository.UserRepository {
 	return &UserRepository{canQuery, []*models.User{}}
 }
 
 // CreateUser adds a new User row to the Users table in array memory
-func (repo UserRepository) CreateUser(user *models.User) (*models.User, error) {
+func (repo *UserRepository) CreateUser(user *models.User) (*models.User, error) {
 	if !repo.canQuery {
 		return nil, errors.New("Cannot write database")
 	}
 
+	fmt.Println(len(repo.users))
+
+	// make sure email doesn't exist
+	for _, u := range repo.users {
+		if u.Email == user.Email {
+			return nil, errors.New("Cannot write database")
+		}
+	}
+
 	users := repo.users
 	users = append(users, user)
-	user.ID = uint(len(users))
+	repo.users = users
+	user.ID = uint(len(repo.users))
 	return user, nil
 }
 
 // ReadUser finds a single user based on their unique id
-func (repo UserRepository) ReadUser(id uint) (*models.User, error) {
+func (repo *UserRepository) ReadUser(id uint) (*models.User, error) {
 	if !repo.canQuery {
 		return nil, errors.New("Cannot read from database")
 	}
@@ -47,7 +59,7 @@ func (repo UserRepository) ReadUser(id uint) (*models.User, error) {
 }
 
 // UpdateUser modifies an existing User in the database
-func (repo UserRepository) UpdateUser(user *models.User) (*models.User, error) {
+func (repo *UserRepository) UpdateUser(user *models.User) (*models.User, error) {
 	if !repo.canQuery {
 		return nil, errors.New("Cannot write database")
 	}
@@ -63,7 +75,7 @@ func (repo UserRepository) UpdateUser(user *models.User) (*models.User, error) {
 }
 
 // DeleteUser deletes a single user using their unique id
-func (repo UserRepository) DeleteUser(user *models.User) (*models.User, error) {
+func (repo *UserRepository) DeleteUser(user *models.User) (*models.User, error) {
 	if !repo.canQuery {
 		return nil, errors.New("Cannot write database")
 	}

+ 55 - 48
server/api/user_handler_test.go

@@ -8,6 +8,7 @@ import (
 	"time"
 
 	"github.com/porter-dev/porter/internal/config"
+	"github.com/porter-dev/porter/internal/models"
 	"github.com/porter-dev/porter/internal/repository"
 	"github.com/porter-dev/porter/internal/repository/test"
 	"github.com/porter-dev/porter/server/api"
@@ -50,54 +51,60 @@ type userTest struct {
 }
 
 var createUserTests = []userTest{
+	// userTest{
+	// 	msg:      "Create user",
+	// 	method:   "POST",
+	// 	endpoint: "/api/users",
+	// 	body: `{
+	// 		"email": "belanger@getporter.dev",
+	// 		"password": "hello"
+	// 	}`,
+	// 	expStatus: http.StatusCreated,
+	// 	expBody:   "",
+	// 	canQuery:  true,
+	// },
+	// userTest{
+	// 	msg:      "Create user invalid email",
+	// 	method:   "POST",
+	// 	endpoint: "/api/users",
+	// 	body: `{
+	// 		"email": "notanemail",
+	// 		"password": "hello"
+	// 	}`,
+	// 	expStatus: http.StatusUnprocessableEntity,
+	// 	expBody:   `{"code":1,"errors":["email validation failed"]}`,
+	// 	canQuery:  true,
+	// },
+	// userTest{
+	// 	msg:      "Create user missing field",
+	// 	method:   "POST",
+	// 	endpoint: "/api/users",
+	// 	body: `{
+	// 		"password": "hello"
+	// 	}`,
+	// 	expStatus: http.StatusUnprocessableEntity,
+	// 	expBody:   `{"code":1,"errors":["required validation failed"]}`,
+	// 	canQuery:  true,
+	// },
+	// userTest{
+	// 	msg:      "Create user cannot write to db",
+	// 	method:   "POST",
+	// 	endpoint: "/api/users",
+	// 	body: `{
+	// 		"email": "belanger@getporter.dev",
+	// 		"password": "hello"
+	// 	}`,
+	// 	expStatus: http.StatusInternalServerError,
+	// 	expBody:   `{"code":2,"errors":["data write error"]}`,
+	// 	canQuery:  false,
+	// },
 	userTest{
-		msg:      "Create user",
-		method:   "POST",
-		endpoint: "/api/users",
-		body: `{
-			"email": "belanger@getporter.dev",
-			"password": "hello"
-		}`,
-		expStatus: http.StatusCreated,
-		expBody:   "",
-		canQuery:  true,
-	},
-	userTest{
-		msg:      "Create user invalid email",
-		method:   "POST",
-		endpoint: "/api/users",
-		body: `{
-			"email": "notanemail",
-			"password": "hello"
-		}`,
-		expStatus: http.StatusUnprocessableEntity,
-		expBody:   `{"code":1,"errors":["email validation failed"]}`,
-		canQuery:  true,
-	},
-	userTest{
-		msg:      "Create user missing field",
-		method:   "POST",
-		endpoint: "/api/users",
-		body: `{
-			"password": "hello"
-		}`,
-		expStatus: http.StatusUnprocessableEntity,
-		expBody:   `{"code":1,"errors":["required validation failed"]}`,
-		canQuery:  true,
-	},
-	userTest{
-		msg:      "Create user cannot write to db",
-		method:   "POST",
-		endpoint: "/api/users",
-		body: `{
-			"email": "belanger@getporter.dev",
-			"password": "hello"
-		}`,
-		expStatus: http.StatusInternalServerError,
-		expBody:   `{"code":2,"errors":["data write error"]}`,
-		canQuery:  false,
-	},
-	userTest{
+		init: func(repo *repository.Repository) {
+			repo.User.CreateUser(&models.User{
+				Email:    "belanger@getporter.dev",
+				Password: "hello",
+			})
+		},
 		msg:      "Create user same email",
 		method:   "POST",
 		endpoint: "/api/users",
@@ -105,7 +112,7 @@ var createUserTests = []userTest{
 			"email": "belanger@getporter.dev",
 			"password": "hello"
 		}`,
-		expStatus: http.StatusCreated,
+		expStatus: http.StatusInternalServerError,
 		expBody:   "",
 		canQuery:  true,
 	},