github.com/goravel/framework@v1.13.9/database/console/seed_command_test.go (about) 1 package console 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/suite" 7 8 configmocks "github.com/goravel/framework/contracts/config/mocks" 9 consolemocks "github.com/goravel/framework/contracts/console/mocks" 10 "github.com/goravel/framework/contracts/database/seeder" 11 seedermocks "github.com/goravel/framework/contracts/database/seeder/mocks" 12 ) 13 14 type SeedCommandTestSuite struct { 15 suite.Suite 16 mockConfig *configmocks.Config 17 mockFacade *seedermocks.Facade 18 mockContext *consolemocks.Context 19 seedCommand *SeedCommand 20 } 21 22 func TestSeedCommandTestSuite(t *testing.T) { 23 suite.Run(t, new(SeedCommandTestSuite)) 24 } 25 26 func (s *SeedCommandTestSuite) SetupTest() { 27 s.mockConfig = &configmocks.Config{} 28 s.mockFacade = &seedermocks.Facade{} 29 s.mockContext = &consolemocks.Context{} 30 s.seedCommand = NewSeedCommand(s.mockConfig, s.mockFacade) 31 } 32 33 func (s *SeedCommandTestSuite) TestHandle() { 34 s.mockContext.On("OptionBool", "force").Return(false).Once() 35 s.mockConfig.On("Env", "APP_ENV").Return("development").Once() 36 s.mockContext.On("OptionSlice", "seeder").Return([]string{"mock", "mock2"}).Once() 37 s.mockFacade.On("GetSeeder", "mock").Return(&MockSeeder{}).Once() 38 s.mockFacade.On("GetSeeder", "mock2").Return(&MockSeeder2{}).Once() 39 s.mockFacade.On("Call", []seeder.Seeder{&MockSeeder{}, &MockSeeder2{}}).Return(nil).Once() 40 s.NoError(s.seedCommand.Handle(s.mockContext)) 41 42 s.mockConfig.AssertExpectations(s.T()) 43 s.mockContext.AssertExpectations(s.T()) 44 s.mockFacade.AssertExpectations(s.T()) 45 } 46 47 func (s *SeedCommandTestSuite) TestConfirmToProceed() { 48 s.mockConfig.On("Env", "APP_ENV").Return("production").Once() 49 err := s.seedCommand.ConfirmToProceed(true) 50 s.NoError(err) 51 52 s.mockContext.On("OptionBool", "force").Return(false).Once() 53 err = s.seedCommand.ConfirmToProceed(false) 54 s.EqualError(err, "application in production use --force to run this command") 55 } 56 57 func (s *SeedCommandTestSuite) TestGetSeeders() { 58 // write logic for GetSeeders function here 59 seeders := []seeder.Seeder{ 60 &MockSeeder{}, 61 &MockSeeder2{}, 62 } 63 names := []string{"mock", "mock2"} 64 65 s.mockFacade.On("GetSeeder", "mock").Return(&MockSeeder{}).Once() 66 s.mockFacade.On("GetSeeder", "mock2").Return(&MockSeeder2{}).Once() 67 68 result, err := s.seedCommand.GetSeeders(names) 69 s.NoError(err) 70 s.ElementsMatch(seeders, result) 71 72 s.mockFacade.AssertExpectations(s.T()) 73 } 74 75 type MockSeeder struct { 76 } 77 78 func (m *MockSeeder) Run() error { 79 return nil 80 } 81 82 func (m *MockSeeder) Signature() string { 83 return "mock" 84 } 85 86 type MockSeeder2 struct { 87 } 88 89 func (m *MockSeeder2) Run() error { 90 return nil 91 } 92 93 func (m *MockSeeder2) Signature() string { 94 return "mock2" 95 }