github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/application/fakeapplication_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package application_test
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/juju/collections/set"
    10  	"github.com/juju/errors"
    11  
    12  	"github.com/juju/juju/apiserver/params"
    13  	"github.com/juju/juju/core/model"
    14  )
    15  
    16  // fakeApplicationAPI is the fake application API for testing the application
    17  // update command.
    18  type fakeApplicationAPI struct {
    19  	generation  model.GenerationVersion
    20  	name        string
    21  	charmName   string
    22  	charmValues map[string]interface{}
    23  	appValues   map[string]interface{}
    24  	config      string
    25  	err         error
    26  	version     int
    27  }
    28  
    29  func (f *fakeApplicationAPI) Update(args params.ApplicationUpdate) error {
    30  	if f.err != nil {
    31  		return f.err
    32  	}
    33  
    34  	if args.ApplicationName != f.name {
    35  		return errors.NotFoundf("application %q", args.ApplicationName)
    36  	}
    37  
    38  	f.config = args.SettingsYAML
    39  	return nil
    40  }
    41  
    42  func (f *fakeApplicationAPI) BestAPIVersion() int {
    43  	return f.version
    44  }
    45  
    46  func (f *fakeApplicationAPI) Close() error {
    47  	return nil
    48  }
    49  
    50  func (f *fakeApplicationAPI) Get(
    51  	generation model.GenerationVersion, application string,
    52  ) (*params.ApplicationGetResults, error) {
    53  	if generation != f.generation {
    54  		return nil, errors.Errorf("expected generation %q, got %q", f.generation, generation)
    55  	}
    56  
    57  	if application != f.name {
    58  		return nil, errors.NotFoundf("application %q", application)
    59  	}
    60  
    61  	charmConfigInfo := make(map[string]interface{})
    62  	for k, v := range f.charmValues {
    63  		charmConfigInfo[k] = map[string]interface{}{
    64  			"description": fmt.Sprintf("Specifies %s", k),
    65  			"type":        fmt.Sprintf("%T", v),
    66  			"value":       v,
    67  		}
    68  	}
    69  	appConfigInfo := make(map[string]interface{})
    70  	for k, v := range f.appValues {
    71  		appConfigInfo[k] = map[string]interface{}{
    72  			"description": fmt.Sprintf("Specifies %s", k),
    73  			"type":        fmt.Sprintf("%T", v),
    74  			"value":       v,
    75  		}
    76  	}
    77  
    78  	return &params.ApplicationGetResults{
    79  		Application:       f.name,
    80  		Charm:             f.charmName,
    81  		CharmConfig:       charmConfigInfo,
    82  		ApplicationConfig: appConfigInfo,
    83  	}, nil
    84  }
    85  
    86  func (f *fakeApplicationAPI) Set(application string, options map[string]string) error {
    87  	if f.err != nil {
    88  		return f.err
    89  	}
    90  
    91  	if application != f.name {
    92  		return errors.NotFoundf("application %q", application)
    93  	}
    94  
    95  	charmKeys := set.NewStrings("title", "skill-level", "username", "outlook")
    96  	if f.charmValues == nil {
    97  		f.charmValues = make(map[string]interface{})
    98  	}
    99  	for k, v := range options {
   100  		if charmKeys.Contains(k) {
   101  			f.charmValues[k] = v
   102  		} else {
   103  			f.appValues[k] = v
   104  		}
   105  	}
   106  
   107  	return nil
   108  }
   109  
   110  func (f *fakeApplicationAPI) SetApplicationConfig(
   111  	generation model.GenerationVersion, application string, config map[string]string,
   112  ) error {
   113  	if generation != f.generation {
   114  		return errors.Errorf("expected generation %q, got %q", f.generation, generation)
   115  	}
   116  	return f.Set(application, config)
   117  }
   118  
   119  func (f *fakeApplicationAPI) Unset(application string, options []string) error {
   120  	if f.err != nil {
   121  		return f.err
   122  	}
   123  
   124  	if application != f.name {
   125  		return errors.NotFoundf("application %q", application)
   126  	}
   127  
   128  	// Verify all options before unsetting any of them.
   129  	for _, name := range options {
   130  		if _, ok := f.appValues[name]; ok {
   131  			continue
   132  		}
   133  		if _, ok := f.charmValues[name]; !ok {
   134  			return errors.Errorf("unknown option %q", name)
   135  		}
   136  	}
   137  
   138  	for _, name := range options {
   139  		delete(f.charmValues, name)
   140  		delete(f.appValues, name)
   141  	}
   142  
   143  	return nil
   144  }
   145  
   146  func (f *fakeApplicationAPI) UnsetApplicationConfig(
   147  	generation model.GenerationVersion, application string, options []string,
   148  ) error {
   149  	if generation != f.generation {
   150  		return errors.Errorf("expected generation %q, got %q", f.generation, generation)
   151  	}
   152  	return f.Unset(application, options)
   153  }