github.com/khulnasoft/cli@v0.0.0-20240402070845-01bcad7beefa/cli/command/image/load_test.go (about)

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