github.com/goravel/framework@v1.13.9/foundation/console/package_make_command_test.go (about)

     1  package console
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  
     8  	consolemocks "github.com/goravel/framework/contracts/console/mocks"
     9  	"github.com/goravel/framework/support/file"
    10  )
    11  
    12  func TestPackageMakeCommand(t *testing.T) {
    13  	var (
    14  		mockContext *consolemocks.Context
    15  	)
    16  
    17  	beforeEach := func() {
    18  		mockContext = &consolemocks.Context{}
    19  	}
    20  
    21  	tests := []struct {
    22  		name   string
    23  		setup  func()
    24  		assert func()
    25  	}{
    26  		{
    27  			name: "name is empty",
    28  			setup: func() {
    29  				mockContext.On("Argument", 0).Return("").Once()
    30  			},
    31  		},
    32  		{
    33  			name: "name is sms and use default root",
    34  			setup: func() {
    35  				mockContext.On("Argument", 0).Return("sms").Once()
    36  				mockContext.On("Option", "root").Return("packages").Once()
    37  			},
    38  			assert: func() {
    39  				assert.True(t, file.Exists("packages/sms/README.md"))
    40  				assert.True(t, file.Exists("packages/sms/service_provider.go"))
    41  				assert.True(t, file.Exists("packages/sms/sms.go"))
    42  				assert.True(t, file.Exists("packages/sms/config/sms.go"))
    43  				assert.True(t, file.Exists("packages/sms/contracts/sms.go"))
    44  				assert.True(t, file.Exists("packages/sms/facades/sms.go"))
    45  				assert.True(t, file.Contain("packages/sms/facades/sms.go", "goravel/packages/sms"))
    46  				assert.True(t, file.Contain("packages/sms/facades/sms.go", "goravel/packages/sms/contracts"))
    47  				assert.Nil(t, file.Remove("packages"))
    48  			},
    49  		},
    50  		{
    51  			name: "name is github.com/goravel/sms and use other root",
    52  			setup: func() {
    53  				mockContext.On("Argument", 0).Return("github.com/goravel/sms-aws").Once()
    54  				mockContext.On("Option", "root").Return("package").Once()
    55  			},
    56  			assert: func() {
    57  				assert.True(t, file.Exists("package/github_com_goravel_sms_aws/README.md"))
    58  				assert.True(t, file.Exists("package/github_com_goravel_sms_aws/service_provider.go"))
    59  				assert.True(t, file.Exists("package/github_com_goravel_sms_aws/github_com_goravel_sms_aws.go"))
    60  				assert.True(t, file.Exists("package/github_com_goravel_sms_aws/config/github_com_goravel_sms_aws.go"))
    61  				assert.True(t, file.Exists("package/github_com_goravel_sms_aws/contracts/github_com_goravel_sms_aws.go"))
    62  				assert.True(t, file.Exists("package/github_com_goravel_sms_aws/facades/github_com_goravel_sms_aws.go"))
    63  				assert.Nil(t, file.Remove("package"))
    64  			},
    65  		},
    66  	}
    67  	for _, test := range tests {
    68  		t.Run(test.name, func(t *testing.T) {
    69  			beforeEach()
    70  			test.setup()
    71  			_ = NewPackageMakeCommand().Handle(mockContext)
    72  			if test.assert != nil {
    73  				test.assert()
    74  			}
    75  			mockContext.AssertExpectations(t)
    76  		})
    77  	}
    78  }
    79  
    80  func TestPackageName(t *testing.T) {
    81  	input := "github.com/example/package-name"
    82  	expected := "package_name"
    83  	assert.Equal(t, expected, packageName(input))
    84  
    85  	input2 := "example.com/another_package.name"
    86  	expected2 := "another_package_name"
    87  	assert.Equal(t, expected2, packageName(input2))
    88  }