feedback/internal/repository/feedback_test.go
2023-04-20 07:03:21 +05:00

127 lines
3.0 KiB
Go

package repository
import (
"errors"
"fmt"
"github.com/stretchr/testify/suite"
"go.etcd.io/bbolt"
"go.uber.org/zap"
"os"
"penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/models"
"testing"
)
type FeedbackTestSuite struct {
args *models.Feedback
repository *FeedbackRepository
db *bbolt.DB
suite.Suite
}
func (suite *FeedbackTestSuite) SetupSuite() {
suite.args = models.NewFeedback("test.repository.feedback.insert", "suite test", "suite test")
}
func (suite *FeedbackTestSuite) SetupTest() {
logger := zap.NewNop()
db, err := bbolt.Open("test.db", 0666, nil)
if suite.NoError(err) {
suite.db = db
suite.repository = NewFeedback(logger, db)
err = suite.repository.CreateBucket()
if suite.NoError(err) {
err = suite.repository.Insert(suite.args)
suite.NoError(err)
}
}
}
func (suite *FeedbackTestSuite) TearDownTest() {
suite.NoError(suite.db.Close())
suite.NoError(os.Remove("test.db"))
}
func (suite *FeedbackTestSuite) TestFeedback_CreateBucket() {
err := suite.repository.CreateBucket()
suite.NoError(err)
}
func (suite *FeedbackTestSuite) TestFeedback_Insert() {
err := suite.repository.Insert(suite.args)
if suite.NoError(err) {
got, err := suite.repository.Get(suite.args.GetID())
if suite.NoError(err) {
suite.Equal(suite.args.GetID(), got.GetID())
suite.Equal(suite.args.Contact, got.Contact)
suite.Equal(suite.args.WhoAmi, got.WhoAmi)
suite.Equal(suite.args.Host, got.Host)
suite.True(suite.args.CreatedAt.Equal(got.CreatedAt))
}
}
}
func (suite *FeedbackTestSuite) TestFeedback_GetAll() {
gotArr, err := suite.repository.GetAll()
got := gotArr[0]
if suite.NoError(err) {
suite.Equal(suite.args.GetID(), got.GetID())
suite.Equal(suite.args.Contact, got.Contact)
suite.Equal(suite.args.WhoAmi, got.WhoAmi)
suite.Equal(suite.args.Host, got.Host)
suite.True(suite.args.CreatedAt.Equal(got.CreatedAt))
}
}
func (suite *FeedbackTestSuite) TestFeedback_Get() {
got, err := suite.repository.Get(suite.args.GetID())
if suite.NoError(err) {
suite.Equal(suite.args.GetID(), got.GetID())
suite.Equal(suite.args.Contact, got.Contact)
suite.Equal(suite.args.WhoAmi, got.WhoAmi)
suite.Equal(suite.args.Host, got.Host)
suite.True(suite.args.CreatedAt.Equal(got.CreatedAt))
}
}
func (suite *FeedbackTestSuite) TestFeedback_Delete() {
err := suite.repository.Delete(suite.args.GetID())
if suite.NoError(err) {
got, err := suite.repository.Get(suite.args.GetID())
fmt.Println("got:", got, err)
}
}
func (suite *FeedbackTestSuite) TestFeedback_err() {
tests := []struct {
name string
args error
want bool
}{
{
name: "no error",
args: nil,
want: false,
},
{
name: "have error",
args: errors.New("test.repository.feedback.err"),
want: true,
},
}
for _, tt := range tests {
suite.Run(tt.name, func() {
got := suite.repository.err(tt.args)
suite.Equal(tt.want, got)
})
}
}
func TestFeedbackTestSuite(t *testing.T) {
suite.Run(t, new(FeedbackTestSuite))
}