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  }