Skip to content

Commit

Permalink
feat: add resource flag to make:controller (goravel#240)
Browse files Browse the repository at this point in the history
* feat: add resource flag to make:controller

* add test for resource

* mock OptionBool on base test
  • Loading branch information
mauri870 authored Jul 14, 2023
1 parent 4b0ca1d commit 01104f1
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 1 deletion.
18 changes: 17 additions & 1 deletion http/console/controller_make_command.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,13 @@ func (receiver *ControllerMakeCommand) Description() string {
func (receiver *ControllerMakeCommand) Extend() command.Extend {
return command.Extend{
Category: "make",
Flags: []command.Flag{
&command.BoolFlag{
Name: "resource",
Value: false,
Usage: "resourceful controller",
},
},
}
}

Expand All @@ -41,7 +48,12 @@ func (receiver *ControllerMakeCommand) Handle(ctx console.Context) error {
return errors.New("Not enough arguments (missing: name) ")
}

if err := file.Create(receiver.getPath(name), receiver.populateStub(receiver.getStub(), name)); err != nil {
stub := receiver.getStub()
if ctx.OptionBool("resource") {
stub = receiver.getResourceStub()
}

if err := file.Create(receiver.getPath(name), receiver.populateStub(stub, name)); err != nil {
return err
}

Expand All @@ -54,6 +66,10 @@ func (receiver *ControllerMakeCommand) getStub() string {
return Stubs{}.Controller()
}

func (receiver *ControllerMakeCommand) getResourceStub() string {
return Stubs{}.ResourceController()
}

// populateStub Populate the place-holders in the command stub.
func (receiver *ControllerMakeCommand) populateStub(stub string, name string) string {
controllerName, packageName, _ := receiver.parseName(name)
Expand Down
21 changes: 21 additions & 0 deletions http/console/controller_make_command_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,36 @@ func TestControllerMakeCommand(t *testing.T) {
assert.EqualError(t, err, "Not enough arguments (missing: name) ")

mockContext.On("Argument", 0).Return("UsersController").Once()
mockContext.On("OptionBool", "resource").Return(false).Once()
err = controllerMakeCommand.Handle(mockContext)
assert.Nil(t, err)
assert.True(t, file.Exists("app/http/controllers/users_controller.go"))

mockContext.On("Argument", 0).Return("User/AuthController").Once()
mockContext.On("OptionBool", "resource").Return(false).Once()
err = controllerMakeCommand.Handle(mockContext)
assert.Nil(t, err)
assert.True(t, file.Exists("app/http/controllers/User/auth_controller.go"))
assert.True(t, file.Contain("app/http/controllers/User/auth_controller.go", "package User"))
assert.True(t, file.Contain("app/http/controllers/User/auth_controller.go", "type AuthController struct"))
assert.True(t, file.Contain("app/http/controllers/User/auth_controller.go", "func (r *AuthController) Index(ctx http.Context) {"))
assert.Nil(t, file.Remove("app"))
}

func TestResourceControllerMakeCommand(t *testing.T) {
controllerMakeCommand := &ControllerMakeCommand{}
mockContext := &consolemocks.Context{}
mockContext.On("Argument", 0).Return("User/AuthController").Once()
mockContext.On("OptionBool", "resource").Return(true).Once()
err := controllerMakeCommand.Handle(mockContext)
assert.Nil(t, err)
assert.True(t, file.Exists("app/http/controllers/User/auth_controller.go"))
assert.True(t, file.Contain("app/http/controllers/User/auth_controller.go", "package User"))
assert.True(t, file.Contain("app/http/controllers/User/auth_controller.go", "type AuthController struct"))
assert.True(t, file.Contain("app/http/controllers/User/auth_controller.go", "func (r *AuthController) Index(ctx http.Context) {"))
assert.True(t, file.Contain("app/http/controllers/User/auth_controller.go", "func (r *AuthController) Show(ctx http.Context) {"))
assert.True(t, file.Contain("app/http/controllers/User/auth_controller.go", "func (r *AuthController) Store(ctx http.Context) {"))
assert.True(t, file.Contain("app/http/controllers/User/auth_controller.go", "func (r *AuthController) Update(ctx http.Context) {"))
assert.True(t, file.Contain("app/http/controllers/User/auth_controller.go", "func (r *AuthController) Destroy(ctx http.Context) {"))
assert.Nil(t, file.Remove("app"))
}
20 changes: 20 additions & 0 deletions http/console/stubs.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,26 @@ func (r *DummyController) Index(ctx http.Context) {
`
}

func (r Stubs) ResourceController() string {
return r.Controller() + `
func (r *DummyController) Store(ctx http.Context) {
}
func (r *DummyController) Show(ctx http.Context) {
}
func (r *DummyController) Store(ctx http.Context) {
}
func (r *DummyController) Update(ctx http.Context) {
}
func (r *DummyController) Destroy(ctx http.Context) {
}
`
}

func (r Stubs) Middleware() string {
return `package DummyPackage
Expand Down

0 comments on commit 01104f1

Please sign in to comment.