github.com/justincormack/cli@v0.0.0-20201215022714-831ebeae9675/cli/command/image/load_test.go (about)

     1  package image
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"io/ioutil"
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/docker/cli/internal/test"
    11  	"github.com/docker/docker/api/types"
    12  	"github.com/pkg/errors"
    13  	"gotest.tools/v3/assert"
    14  	"gotest.tools/v3/golden"
    15  )
    16  
    17  func TestNewLoadCommandErrors(t *testing.T) {
    18  	testCases := []struct {
    19  		name          string
    20  		args          []string
    21  		isTerminalIn  bool
    22  		expectedError string
    23  		imageLoadFunc func(input io.Reader, quiet bool) (types.ImageLoadResponse, error)
    24  	}{
    25  		{
    26  			name:          "wrong-args",
    27  			args:          []string{"arg"},
    28  			expectedError: "accepts no arguments.",
    29  		},
    30  		{
    31  			name:          "input-to-terminal",
    32  			isTerminalIn:  true,
    33  			expectedError: "requested load from stdin, but stdin is empty",
    34  		},
    35  		{
    36  			name:          "pull-error",
    37  			expectedError: "something went wrong",
    38  			imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
    39  				return types.ImageLoadResponse{}, errors.Errorf("something went wrong")
    40  			},
    41  		},
    42  	}
    43  	for _, tc := range testCases {
    44  		cli := test.NewFakeCli(&fakeClient{imageLoadFunc: tc.imageLoadFunc})
    45  		cli.In().SetIsTerminal(tc.isTerminalIn)
    46  		cmd := NewLoadCommand(cli)
    47  		cmd.SetOut(ioutil.Discard)
    48  		cmd.SetArgs(tc.args)
    49  		assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
    50  	}
    51  }
    52  
    53  func TestNewLoadCommandInvalidInput(t *testing.T) {
    54  	expectedError := "open *"
    55  	cmd := NewLoadCommand(test.NewFakeCli(&fakeClient{}))
    56  	cmd.SetOut(ioutil.Discard)
    57  	cmd.SetArgs([]string{"--input", "*"})
    58  	err := cmd.Execute()
    59  	assert.ErrorContains(t, err, expectedError)
    60  }
    61  
    62  func TestNewLoadCommandSuccess(t *testing.T) {
    63  	testCases := []struct {
    64  		name          string
    65  		args          []string
    66  		imageLoadFunc func(input io.Reader, quiet bool) (types.ImageLoadResponse, error)
    67  	}{
    68  		{
    69  			name: "simple",
    70  			imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
    71  				return types.ImageLoadResponse{Body: ioutil.NopCloser(strings.NewReader("Success"))}, nil
    72  			},
    73  		},
    74  		{
    75  			name: "json",
    76  			imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
    77  				json := "{\"ID\": \"1\"}"
    78  				return types.ImageLoadResponse{
    79  					Body: ioutil.NopCloser(strings.NewReader(json)),
    80  					JSON: true,
    81  				}, nil
    82  			},
    83  		},
    84  		{
    85  			name: "input-file",
    86  			args: []string{"--input", "testdata/load-command-success.input.txt"},
    87  			imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
    88  				return types.ImageLoadResponse{Body: ioutil.NopCloser(strings.NewReader("Success"))}, nil
    89  			},
    90  		},
    91  	}
    92  	for _, tc := range testCases {
    93  		cli := test.NewFakeCli(&fakeClient{imageLoadFunc: tc.imageLoadFunc})
    94  		cmd := NewLoadCommand(cli)
    95  		cmd.SetOut(ioutil.Discard)
    96  		cmd.SetArgs(tc.args)
    97  		err := cmd.Execute()
    98  		assert.NilError(t, err)
    99  		golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("load-command-success.%s.golden", tc.name))
   100  	}
   101  }