usersvc

package module
v0.0.0-...-c1cfb8f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 13, 2022 License: MIT Imports: 12 Imported by: 0

README

usersvc

This example illustrates how to apply HTTP testing for a layered Web application.

Prerequisites

  1. Write the test specification for the HTTP server

    See httpserver.httptest.yaml.

  2. Write the test specification for the HTTP client

    See httpclient.httptest.yaml.

Generate tests

$ go generate

Generated tests:

Run tests

$ go test -v -race
Result
=== RUN   TestHTTPClient_GetUser
=== RUN   TestHTTPClient_GetUser/ok
=== RUN   TestHTTPClient_GetUser/err
--- PASS: TestHTTPClient_GetUser (0.00s)
    --- PASS: TestHTTPClient_GetUser/ok (0.00s)
    --- PASS: TestHTTPClient_GetUser/err (0.00s)
=== RUN   TestHTTPClient_ListUsers
=== RUN   TestHTTPClient_ListUsers/ok
--- PASS: TestHTTPClient_ListUsers (0.00s)
    --- PASS: TestHTTPClient_ListUsers/ok (0.00s)
=== RUN   TestHTTPClient_CreateUser
=== RUN   TestHTTPClient_CreateUser/ok
=== RUN   TestHTTPClient_CreateUser/err
--- PASS: TestHTTPClient_CreateUser (0.00s)
    --- PASS: TestHTTPClient_CreateUser/ok (0.00s)
    --- PASS: TestHTTPClient_CreateUser/err (0.00s)
=== RUN   TestHTTPClient_UpdateUser
=== RUN   TestHTTPClient_UpdateUser/ok
=== RUN   TestHTTPClient_UpdateUser/err
--- PASS: TestHTTPClient_UpdateUser (0.00s)
    --- PASS: TestHTTPClient_UpdateUser/ok (0.00s)
    --- PASS: TestHTTPClient_UpdateUser/err (0.00s)
=== RUN   TestHTTPClient_DeleteUser
=== RUN   TestHTTPClient_DeleteUser/ok
=== RUN   TestHTTPClient_DeleteUser/err
--- PASS: TestHTTPClient_DeleteUser (0.00s)
    --- PASS: TestHTTPClient_DeleteUser/ok (0.00s)
    --- PASS: TestHTTPClient_DeleteUser/err (0.00s)
=== RUN   TestHTTPServer_GetUser
=== RUN   TestHTTPServer_GetUser/ok
=== RUN   TestHTTPServer_GetUser/err
--- PASS: TestHTTPServer_GetUser (0.00s)
    --- PASS: TestHTTPServer_GetUser/ok (0.00s)
    --- PASS: TestHTTPServer_GetUser/err (0.00s)
=== RUN   TestHTTPServer_ListUsers
=== RUN   TestHTTPServer_ListUsers/ok
--- PASS: TestHTTPServer_ListUsers (0.00s)
    --- PASS: TestHTTPServer_ListUsers/ok (0.00s)
=== RUN   TestHTTPServer_CreateUser
=== RUN   TestHTTPServer_CreateUser/ok
=== RUN   TestHTTPServer_CreateUser/err
--- PASS: TestHTTPServer_CreateUser (0.00s)
    --- PASS: TestHTTPServer_CreateUser/ok (0.00s)
    --- PASS: TestHTTPServer_CreateUser/err (0.00s)
=== RUN   TestHTTPServer_UpdateUser
=== RUN   TestHTTPServer_UpdateUser/ok
=== RUN   TestHTTPServer_UpdateUser/err
--- PASS: TestHTTPServer_UpdateUser (0.00s)
    --- PASS: TestHTTPServer_UpdateUser/ok (0.00s)
    --- PASS: TestHTTPServer_UpdateUser/err (0.00s)
=== RUN   TestHTTPServer_DeleteUser
=== RUN   TestHTTPServer_DeleteUser/ok
=== RUN   TestHTTPServer_DeleteUser/err
--- PASS: TestHTTPServer_DeleteUser (0.00s)
    --- PASS: TestHTTPServer_DeleteUser/ok (0.00s)
    --- PASS: TestHTTPServer_DeleteUser/err (0.00s)
PASS
ok      github.com/protogodev/httptest/examples/usersvc 0.043s

Run the server/client

Run the server:

$ go run cmd/server/main.go
2022/06/11 22:47:01 transport=HTTP addr=:8080

Run the client:

$ go run cmd/client/main.go
2022/06/11 22:47:03 GetUser ok: &{Name:foo Sex:male Birth:2022-01-01 00:00:00 +0000 UTC}
2022/06/11 22:47:03 ListUsers ok: [&{Name:foo Sex:female Birth:2022-01-01 00:00:00 +0000 UTC}]

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrAlreadyExists = errors.New("already exists")
	ErrNotFound      = errors.New("not found")
)

Functions

func NewHTTPServer

func NewHTTPServer(svc Service) http.Handler

Types

type HTTPClient

type HTTPClient struct {
	// contains filtered or unexported fields
}

func NewHTTPClient

func NewHTTPClient(httpClient *http.Client, baseURL string) *HTTPClient

func (*HTTPClient) CreateUser

func (c *HTTPClient) CreateUser(ctx context.Context, user *User) (err error)

func (*HTTPClient) DeleteUser

func (c *HTTPClient) DeleteUser(ctx context.Context, name string) (err error)

func (*HTTPClient) GetUser

func (c *HTTPClient) GetUser(ctx context.Context, name string) (user *User, err error)

func (*HTTPClient) ListUsers

func (c *HTTPClient) ListUsers(ctx context.Context) (users []*User, err error)

func (*HTTPClient) UpdateUser

func (c *HTTPClient) UpdateUser(ctx context.Context, name string, user *User) (err error)

type InmemService

type InmemService struct {
	// contains filtered or unexported fields
}

func NewInmemService

func NewInmemService() *InmemService

func (*InmemService) CreateUser

func (s *InmemService) CreateUser(ctx context.Context, user *User) error

func (*InmemService) DeleteUser

func (s *InmemService) DeleteUser(ctx context.Context, name string) error

func (*InmemService) GetUser

func (s *InmemService) GetUser(ctx context.Context, name string) (*User, error)

func (*InmemService) ListUsers

func (s *InmemService) ListUsers(ctx context.Context) ([]*User, error)

func (*InmemService) UpdateUser

func (s *InmemService) UpdateUser(ctx context.Context, name string, user *User) error

type Service

type Service interface {
	GetUser(ctx context.Context, name string) (user *User, err error)
	ListUsers(ctx context.Context) (users []*User, err error)
	CreateUser(ctx context.Context, user *User) (err error)
	UpdateUser(ctx context.Context, name string, user *User) (err error)
	DeleteUser(ctx context.Context, name string) (err error)
}

type User

type User struct {
	Name  string    `json:"name,omitempty" httptest:"name,omitempty"`
	Sex   string    `json:"sex,omitempty" httptest:"sex,omitempty"`
	Birth time.Time `json:"birth,omitempty" httptest:"birth,omitempty"`
}

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL