package repository import ( "errors" "fmt" "github.com/stretchr/testify/suite" "go.etcd.io/bbolt" "go.uber.org/zap" "os" "gitea.pena/PenaSide/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)) }