Skip to content

Commit

Permalink
unmerged saving on service
Browse files Browse the repository at this point in the history
  • Loading branch information
Ishan Pandey committed Feb 11, 2021
2 parents d5f6513 + 7fb9e7a commit 9584003
Show file tree
Hide file tree
Showing 2 changed files with 143 additions and 22 deletions.
144 changes: 143 additions & 1 deletion panel/service/service_test.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,151 @@
package service

import (
"reflect"
"testing"

customeerror "github.com/zopsmart/hiring-portal-api/panel/error"

"github.com/DATA-DOG/go-sqlmock"
"github.com/vikash/gofr/pkg/gofr"
"github.com/vikash/gofr/pkg/gofr/logging"
"github.com/zopsmart/hiring-portal-api/panel/models"
)

func TestCreateEmployeeService(t *testing.T) {
func TestServiceLayer(t *testing.T) {
db, _, _ := sqlmock.New()
c := &gofr.Context{Container: &gofr.Container{
Logger: logging.NewLogger(logging.DEBUG),
DB: &gofr.DB{db},
}}

testGetAllEmployee(t, c)
testGetEmployeeByID(t, c)
testEditEmployeeService(t, c)
testDeleteEmployee(t, c)
}

type mockStore struct {
}

func CheckErrOutput(t *testing.T, expectedErr, actualErr, expectedOutput, actualOutPut interface{}) {
if expectedErr != actualErr {
t.Errorf("FAILED!! Expected Error %v Got Error %v\n", expectedErr, actualErr)
}

if !reflect.DeepEqual(expectedOutput, actualOutPut) {
t.Errorf("FAILED!! Expected Value %v Got Value %v\n", expectedOutput, actualOutPut)
}
}

func testGetAllEmployee(t *testing.T, c *gofr.Context) {
testCases := []struct {
input int
expectedOutput []models.Employee
expectedErr error
}{
{
input: 1,
expectedOutput: []models.Employee{
{1, "Bittu", "[email protected]", 7250073079, "sde1", 2, 1},
{2, "Bittu Ray", "[email protected]", 7250073080, "sde2", 2, 1},
},
expectedErr: nil,
},
{
input: 2,
expectedOutput: []models.Employee(nil),
expectedErr: customeerror.ErrDBServer,
},
{
input: 3,
expectedOutput: []models.Employee(nil),
expectedErr: customeerror.ErrRecordNotFound,
},
{
input: 4,
expectedOutput: []models.Employee(nil),
expectedErr: customeerror.ErrDBServer,
},
}

for i, v := range testCases {
dataService := New(mockStore{})
actualOutput, actualError := dataService.GetAllEmployee(c, 1)

}

}
func testEditEmployeeService(t *testing.T, c *gofr.Context) {

type InputData struct {
companyID int
employeeID int
body models.Employee
}

testCases := []struct {
input InputData

expectedOutput models.Employee
expectedErr error
}{
{
input: InputData{1, 1, models.Employee{1, "Bittu", "[email protected]", 7250073079, "sde1", 2, 1}},
expectedOutput: models.Employee{1, "Bittu", "[email protected]", 7250073079, "sde1", 2, 1},
expectedErr: nil,
},

{
input: InputData{-1, 2, models.Employee{1, "Bittu", "[email protected]", 7250073079, "sde1", 2, 1}},
expectedOutput: models.Employee{},
expectedErr: customeerror.ErrInvalidCompanyID,
},
{
input: InputData{1, -1, models.Employee{1, "Bittu", "[email protected]", 7250073079, "sde1", 2, 2}},
expectedOutput: models.Employee{},
expectedErr: customeerror.ErrInvalidEmployeeID,
},

{
input: InputData{1, 2, models.Employee{1, "Bittu", "[email protected]", 7250073079, "sde1", 2, 2}},
expectedOutput: models.Employee{},
expectedErr: customeerror.ErrDBServer,
},
}

for i := range testCases {
dataService := New(mockStore{})
output, err := dataService.EditEmployee(c, testCases[i].input.companyID, testCases[i].input.employeeID,
&testCases[i].input.body)
CheckErrOutput(t, testCases[i].expectedErr, err, testCases[i].expectedOutput, output)
}

}

func testGetEmployeeByID(t *testing.T, c *gofr.Context) {

}

func (m mockStore) GetAllEmployee(c *gofr.Context, companyID int) ([]models.Employee, error) {

}

func (m mockStore) GetEmployeeByID(c *gofr.Context, companyID, employeeID int) (models.Employee, error) {
return models.Employee{}, nil
}

func (m mockStore) CreateEmployee(c *gofr.Context, companyID int, emp *models.Employee) (int, error) {
return 0, nil
}

func (m mockStore) EditEmployee(c *gofr.Context, companyID, employeeID int, emp *models.Employee) (int, error) {
if companyID != emp.CompanyID || employeeID != emp.ID {
return -1, customeerror.ErrDBServer
}
return companyID, nil
}

func (m mockStore) DeleteEmployee(c *gofr.Context, companyID, employeeID int) error {
return nil
}
21 changes: 0 additions & 21 deletions panel/store/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,50 +14,37 @@ func New() Panel {

func (p PanelStore) GetAllEmployee(c *gofr.Context, companyID int) ([]models.Employee, error) {
const query = "select * from employee where companyId=? order by id, companyId asc"

var inputInterface []interface{}
inputInterface = append(inputInterface, companyID)

rows, err := c.DB.Query(query, inputInterface...)

if err != nil {
return nil, customeerror.ErrDBServer
}
defer rows.Close()

var res []models.Employee

for rows.Next() {
var e models.Employee
if err := rows.Scan(&e.ID, &e.Name, &e.Email, &e.Phone, &e.Designation, &e.YOE, &e.CompanyID); err != nil {
return nil, customeerror.ErrDBServer
}

res = append(res, e)
}

if len(res) == 0 {
return res, customeerror.ErrRecordNotFound
}

return res, nil
}

func (p PanelStore) GetEmployeeByID(c *gofr.Context, companyID, employeeID int) (models.Employee, error) {
const query = "select * from employee where companyId=? and id=?"

var inputInterface []interface{}
inputInterface = append(inputInterface, companyID, employeeID)

rows, err := c.DB.Query(query, inputInterface...)

if err != nil {
return models.Employee{}, customeerror.ErrDBServer
}
defer rows.Close()

var res models.Employee

for rows.Next() {
if err := rows.Scan(&res.ID, &res.Name, &res.Email, &res.Phone, &res.Designation, &res.YOE, &res.CompanyID); err != nil {
return models.Employee{}, customeerror.ErrDBServer
Expand All @@ -74,36 +61,28 @@ func (p PanelStore) CreateEmployee(c *gofr.Context, companyID int, emp *models.E
var inputInterface []interface{}
inputInterface = append(inputInterface, emp.Name, emp.Email, emp.Phone, emp.Designation, emp.YOE, companyID)
rows, err := c.DB.Exec(query, inputInterface...)

if err != nil {
return -1, customeerror.ErrDBServer
}
id, _ := rows.LastInsertId()

if id == -1 {
return -1, customeerror.ErrRecordNotFound
}

return int(id), nil
}

func (p PanelStore) EditEmployee(c *gofr.Context, companyID, employeeID int, emp *models.Employee) (int, error) {
var inputInterface []interface{}
const query = "update employee set name = ?, designation = ?, yoe = ?, phone = ? where companyId = ? and id = ?"

inputInterface = append(inputInterface, emp.Name, emp.Designation, emp.YOE, emp.Phone, companyID, employeeID)
row, err := c.DB.Exec(query, inputInterface...)

if err != nil {
return -1, customeerror.ErrDBServer
}

id, _ := row.LastInsertId()

if id == -1 {
return -1, customeerror.ErrRecordNotFound
}

return int(id), nil
}

Expand Down

0 comments on commit 9584003

Please sign in to comment.