diff --git a/store/postgres.go b/store/postgres.go index 271afc5..fc1f697 100644 --- a/store/postgres.go +++ b/store/postgres.go @@ -99,7 +99,7 @@ func (store *postgresStore) UpdateAction(action *models.Action) error { func (store *postgresStore) SelectPlans() ([]*models.Plan, error) { plans := make([]*models.Plan, 0) - err := store.db.Select(&plans, "SELECT plan_id, plan_date FROM plans") + err := store.db.Select(&plans, "SELECT plan_id, plan_date, user_id FROM plans") if err != nil { return nil, err } @@ -108,7 +108,7 @@ func (store *postgresStore) SelectPlans() ([]*models.Plan, error) { func (store *postgresStore) SelectPlanByID(id int) (*models.Plan, error) { plan := models.Plan{} - err := store.db.Get(&plan, store.db.Rebind("SELECT plan_id, plan_date FROM plans WHERE plan_id = ?"), id) + err := store.db.Get(&plan, store.db.Rebind("SELECT plan_id, plan_date, user_id FROM plans WHERE plan_id = ?"), id) if err != nil { return nil, err } @@ -116,10 +116,10 @@ func (store *postgresStore) SelectPlanByID(id int) (*models.Plan, error) { } func (store *postgresStore) InsertPlan(plan *models.Plan) (int, error) { - queryString := store.db.Rebind("INSERT INTO plans (plan_date) VALUES (?) RETURNING plan_id") + queryString := store.db.Rebind("INSERT INTO plans (plan_date, user_id) VALUES (?, ?) RETURNING plan_id") tx := store.db.MustBegin() var id int - err := tx.Get(&id, queryString, plan.PlanDate) + err := tx.Get(&id, queryString, plan.PlanDate, plan.UserID) if err != nil { tx.Rollback() return -1, err diff --git a/store/postgres_plan_test.go b/store/postgres_plan_test.go new file mode 100644 index 0000000..a02b1d2 --- /dev/null +++ b/store/postgres_plan_test.go @@ -0,0 +1,176 @@ +package store_test + +import ( + "fmt" + "gitea.deepak.science/deepak/gogmagog/models" + "github.com/DATA-DOG/go-sqlmock" + "github.com/stretchr/testify/assert" + "testing" + "time" +) + +func TestSelectPlans(t *testing.T) { + assert := assert.New(t) + + currentTime := time.Now() + idToUse := 1 + userIDToUse := 2 + + str, mock := getDbMock(t) + + rows := sqlmock.NewRows([]string{"plan_id", "plan_date", "user_id"}).AddRow(idToUse, currentTime, userIDToUse) + mock.ExpectQuery("^SELECT plan_id, plan_date, user_id FROM plans$").WillReturnRows(rows) + + plans, err := str.SelectPlans() + assert.Nil(err) + assert.Equal(1, len(plans)) + plan := plans[0] + assert.EqualValues(idToUse, plan.PlanID) + assert.Equal(currentTime, *plan.PlanDate) + assert.EqualValues(userIDToUse, plan.UserID) + + if err := mock.ExpectationsWereMet(); err != nil { + t.Errorf("unfulfilled expectations: %s", err) + } +} + +func TestSelectPlanByID(t *testing.T) { + assert := assert.New(t) + + currentTime := time.Now() + idToUse := 1 + userIDToUse := 2 + + str, mock := getDbMock(t) + + rows := sqlmock.NewRows([]string{"plan_id", "plan_date", "user_id"}).AddRow(idToUse, currentTime, userIDToUse) + mock.ExpectQuery("^SELECT plan_id, plan_date, user_id FROM plans WHERE plan_id = \\$1$").WithArgs(idToUse).WillReturnRows(rows) + + plan, err := str.SelectPlanByID(idToUse) + assert.Nil(err) + assert.EqualValues(idToUse, plan.PlanID) + assert.Equal(currentTime, *plan.PlanDate) + assert.EqualValues(userIDToUse, plan.UserID) + + if err := mock.ExpectationsWereMet(); err != nil { + t.Errorf("unfulfilled expectations: %s", err) + } +} + +func TestInsertPlan(t *testing.T) { + // setup + assert := assert.New(t) + + str, mock := getDbMock(t) + planDate, _ := time.Parse("2006-01-02", "2021-01-01") + userID := 2 + + plan := &models.Plan{PlanDate: &planDate, UserID: int64(userID)} + + idToUse := 8 + + rows := sqlmock.NewRows([]string{"plan_id"}).AddRow(8) + + mock.ExpectBegin() + mock.ExpectQuery(`^INSERT INTO plans \(plan_date, user_id\) VALUES \(\$1, \$2\) RETURNING plan_id$`). + WithArgs(planDate, userID). + WillReturnRows(rows) + mock.ExpectCommit() + + // function under test + insertedId, err := str.InsertPlan(plan) + // check results + assert.Nil(err) + assert.EqualValues(idToUse, insertedId) + if err := mock.ExpectationsWereMet(); err != nil { + t.Errorf("unfulfilled expectations: %s", err) + } + +} + +func TestInsertPlanErr(t *testing.T) { + // setup + assert := assert.New(t) + + str, mock := getDbMock(t) + planDate, _ := time.Parse("2006-01-02", "2021-01-01") + userID := 2 + plan := &models.Plan{PlanDate: &planDate, UserID: 2} + + mock.ExpectBegin() + mock.ExpectQuery(`^INSERT INTO plans \(plan_date, user_id\) VALUES \(\$1, \$2\) RETURNING plan_id$`). + WithArgs(planDate, userID). + WillReturnError(fmt.Errorf("example error")) + mock.ExpectRollback() + + // function under test + _, err := str.InsertPlan(plan) + // check results + assert.NotNil(err) + if err := mock.ExpectationsWereMet(); err != nil { + t.Errorf("unfulfilled expectations: %s", err) + } + +} + +func TestInsertPlanCommitErr(t *testing.T) { + // setup + assert := assert.New(t) + + str, mock := getDbMock(t) + planDate, _ := time.Parse("2006-01-02", "2021-01-01") + userID := 2 + plan := &models.Plan{PlanDate: &planDate, UserID: int64(userID)} + idToUse := 8 + + rows := sqlmock.NewRows([]string{"plan_id"}).AddRow(idToUse) + + mock.ExpectBegin() + mock.ExpectQuery(`^INSERT INTO plans \(plan_date, user_id\) VALUES \(\$1, \$2\) RETURNING plan_id$`). + WithArgs(planDate, userID). + WillReturnRows(rows) + mock.ExpectCommit().WillReturnError(fmt.Errorf("another error example")) + + // function under test + _, err := str.InsertPlan(plan) + // check results + assert.NotNil(err) + if err := mock.ExpectationsWereMet(); err != nil { + t.Errorf("unfulfilled expectations: %s", err) + } + +} + +func TestErrPlanByID(t *testing.T) { + assert := assert.New(t) + + idToUse := 1 + + str, mock := getDbMock(t) + + mock.ExpectQuery(`^SELECT plan_id, plan_date, user_id FROM plans WHERE plan_id = \$1$`).WithArgs(idToUse).WillReturnError(fmt.Errorf("example error")) + + plan, err := str.SelectPlanByID(idToUse) + assert.NotNil(err) + assert.Nil(plan) + + if err := mock.ExpectationsWereMet(); err != nil { + t.Errorf("unfulfilled expectations: %s", err) + } +} + +func TestErrPlans(t *testing.T) { + // set up tests + assert := assert.New(t) + str, mock := getDbMock(t) + + mock.ExpectQuery(`^SELECT plan_id, plan_date, user_id FROM plans$`).WillReturnError(fmt.Errorf("example error")) + // function under test + plans, err := str.SelectPlans() + // test results + assert.Nil(plans) + assert.NotNil(err) + if err := mock.ExpectationsWereMet(); err != nil { + t.Errorf("unfulfilled expectations: %s", err) + } +} diff --git a/store/postgres_test.go b/store/postgres_test.go index 4fe3371..2a309aa 100644 --- a/store/postgres_test.go +++ b/store/postgres_test.go @@ -24,149 +24,6 @@ func getDbMock(t *testing.T) (models.Store, sqlmock.Sqlmock) { return str, mock } -func TestSelectPlans(t *testing.T) { - assert := assert.New(t) - - currentTime := time.Now() - idToUse := 1 - - str, mock := getDbMock(t) - - rows := sqlmock.NewRows([]string{"plan_id", "plan_date"}).AddRow(idToUse, currentTime) - mock.ExpectQuery("^SELECT plan_id, plan_date FROM plans$").WillReturnRows(rows) - - plans, err := str.SelectPlans() - assert.Nil(err) - assert.Equal(1, len(plans)) - plan := plans[0] - assert.EqualValues(idToUse, plan.PlanID) - assert.Equal(currentTime, *plan.PlanDate) - - if err := mock.ExpectationsWereMet(); err != nil { - t.Errorf("unfulfilled expectations: %s", err) - } -} - -func TestSelectPlanByID(t *testing.T) { - assert := assert.New(t) - - currentTime := time.Now() - idToUse := 1 - - str, mock := getDbMock(t) - - rows := sqlmock.NewRows([]string{"plan_id", "plan_date"}).AddRow(idToUse, currentTime) - mock.ExpectQuery("^SELECT plan_id, plan_date FROM plans WHERE plan_id = \\$1$").WithArgs(idToUse).WillReturnRows(rows) - - plan, err := str.SelectPlanByID(idToUse) - assert.Nil(err) - assert.EqualValues(idToUse, plan.PlanID) - assert.Equal(currentTime, *plan.PlanDate) - - if err := mock.ExpectationsWereMet(); err != nil { - t.Errorf("unfulfilled expectations: %s", err) - } -} - -func TestInsertPlan(t *testing.T) { - // setup - assert := assert.New(t) - - str, mock := getDbMock(t) - planDate, _ := time.Parse("2006-01-02", "2021-01-01") - plan := &models.Plan{PlanDate: &planDate} - - idToUse := 8 - - rows := sqlmock.NewRows([]string{"plan_id"}).AddRow(8) - - mock.ExpectBegin() - mock.ExpectQuery("^INSERT INTO plans \\(plan_date\\) VALUES \\(\\$1\\) RETURNING plan_id$"). - WithArgs(planDate). - WillReturnRows(rows) - mock.ExpectCommit() - - // function under test - insertedId, err := str.InsertPlan(plan) - // check results - assert.Nil(err) - assert.EqualValues(idToUse, insertedId) - if err := mock.ExpectationsWereMet(); err != nil { - t.Errorf("unfulfilled expectations: %s", err) - } - -} - -func TestInsertPlanErr(t *testing.T) { - // setup - assert := assert.New(t) - - str, mock := getDbMock(t) - planDate, _ := time.Parse("2006-01-02", "2021-01-01") - plan := &models.Plan{PlanDate: &planDate} - - mock.ExpectBegin() - mock.ExpectQuery("^INSERT INTO plans \\(plan_date\\) VALUES \\(\\$1\\) RETURNING plan_id$"). - WithArgs(planDate). - WillReturnError(fmt.Errorf("example error")) - mock.ExpectRollback() - - // function under test - _, err := str.InsertPlan(plan) - // check results - assert.NotNil(err) - if err := mock.ExpectationsWereMet(); err != nil { - t.Errorf("unfulfilled expectations: %s", err) - } - -} - -func TestInsertPlanCommitErr(t *testing.T) { - // setup - assert := assert.New(t) - - str, mock := getDbMock(t) - planDate, _ := time.Parse("2006-01-02", "2021-01-01") - plan := &models.Plan{PlanDate: &planDate} - - idToUse := 8 - - rows := sqlmock.NewRows([]string{"plan_id"}).AddRow(idToUse) - - mock.ExpectBegin() - mock.ExpectQuery("^INSERT INTO plans \\(plan_date\\) VALUES \\(\\$1\\) RETURNING plan_id$"). - WithArgs(planDate). - WillReturnRows(rows) - mock.ExpectCommit().WillReturnError(fmt.Errorf("another error example")) - - // function under test - _, err := str.InsertPlan(plan) - // check results - assert.NotNil(err) - if err := mock.ExpectationsWereMet(); err != nil { - t.Errorf("unfulfilled expectations: %s", err) - } - -} - -func TestErrPlanByID(t *testing.T) { - assert := assert.New(t) - - idToUse := 1 - - str, mock := getDbMock(t) - - mock.ExpectQuery("^SELECT plan_id, plan_date FROM plans WHERE plan_id = \\$1$").WithArgs(idToUse).WillReturnError(fmt.Errorf("example error")) - - plan, err := str.SelectPlanByID(idToUse) - assert.NotNil(err) - assert.Nil(plan) - - if err := mock.ExpectationsWereMet(); err != nil { - t.Errorf("unfulfilled expectations: %s", err) - } -} - func TestSelectActions(t *testing.T) { // set up test assert := assert.New(t) @@ -338,22 +195,6 @@ func TestSelectActionById(t *testing.T) { } } -func TestErrPlans(t *testing.T) { - // set up tests - assert := assert.New(t) - str, mock := getDbMock(t) - - mock.ExpectQuery("^SELECT plan_id, plan_date FROM plans$").WillReturnError(fmt.Errorf("example error")) - // function under test - plans, err := str.SelectPlans() - // test results - assert.Nil(plans) - assert.NotNil(err) - if err := mock.ExpectationsWereMet(); err != nil { - t.Errorf("unfulfilled expectations: %s", err) - } -} - func TestErrActions(t *testing.T) { // set up tests assert := assert.New(t)