github.com/cspotcode/docker-cli@v20.10.0-rc1.0.20201201121459-3faad7acc5b8+incompatible/cli/command/network/list_test.go (about)

     1  package network
     2  
     3  import (
     4  	"context"
     5  	"io/ioutil"
     6  	"testing"
     7  
     8  	"github.com/docker/cli/internal/test"
     9  	. "github.com/docker/cli/internal/test/builders"
    10  	"github.com/docker/docker/api/types"
    11  	"github.com/docker/docker/api/types/filters"
    12  	"github.com/google/go-cmp/cmp"
    13  	"github.com/pkg/errors"
    14  	"gotest.tools/v3/assert"
    15  	is "gotest.tools/v3/assert/cmp"
    16  	"gotest.tools/v3/golden"
    17  )
    18  
    19  func TestNetworkListErrors(t *testing.T) {
    20  	testCases := []struct {
    21  		networkListFunc func(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error)
    22  		expectedError   string
    23  	}{
    24  		{
    25  			networkListFunc: func(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error) {
    26  				return []types.NetworkResource{}, errors.Errorf("error creating network")
    27  			},
    28  			expectedError: "error creating network",
    29  		},
    30  	}
    31  
    32  	for _, tc := range testCases {
    33  		cmd := newListCommand(
    34  			test.NewFakeCli(&fakeClient{
    35  				networkListFunc: tc.networkListFunc,
    36  			}),
    37  		)
    38  		cmd.SetOut(ioutil.Discard)
    39  		assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
    40  	}
    41  }
    42  
    43  func TestNetworkList(t *testing.T) {
    44  	testCases := []struct {
    45  		doc             string
    46  		networkListFunc func(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error)
    47  		flags           map[string]string
    48  		golden          string
    49  	}{
    50  		{
    51  			doc: "network list with flags",
    52  			flags: map[string]string{
    53  				"filter": "image.name=ubuntu",
    54  			},
    55  			golden: "network-list.golden",
    56  			networkListFunc: func(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error) {
    57  				expectedOpts := types.NetworkListOptions{
    58  					Filters: filters.NewArgs(filters.Arg("image.name", "ubuntu")),
    59  				}
    60  				assert.Check(t, is.DeepEqual(expectedOpts, options, cmp.AllowUnexported(filters.Args{})))
    61  
    62  				return []types.NetworkResource{*NetworkResource(NetworkResourceID("123454321"),
    63  					NetworkResourceName("network_1"),
    64  					NetworkResourceDriver("09.7.01"),
    65  					NetworkResourceScope("global"))}, nil
    66  			},
    67  		},
    68  		{
    69  			doc: "network list sort order",
    70  			flags: map[string]string{
    71  				"format": "{{ .Name }}",
    72  			},
    73  			golden: "network-list-sort.golden",
    74  			networkListFunc: func(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error) {
    75  				return []types.NetworkResource{
    76  					*NetworkResource(NetworkResourceName("network-2-foo")),
    77  					*NetworkResource(NetworkResourceName("network-1-foo")),
    78  					*NetworkResource(NetworkResourceName("network-10-foo"))}, nil
    79  			},
    80  		},
    81  	}
    82  
    83  	for _, tc := range testCases {
    84  		t.Run(tc.doc, func(t *testing.T) {
    85  			cli := test.NewFakeCli(&fakeClient{networkListFunc: tc.networkListFunc})
    86  			cmd := newListCommand(cli)
    87  			for key, value := range tc.flags {
    88  				cmd.Flags().Set(key, value)
    89  			}
    90  			assert.NilError(t, cmd.Execute())
    91  			golden.Assert(t, cli.OutBuffer().String(), tc.golden)
    92  		})
    93  	}
    94  }