github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/api/try_in_order_login_provider_test.go (about)

     1  // Copyright 2024 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package api_test
     5  
     6  import (
     7  	"context"
     8  
     9  	"github.com/juju/errors"
    10  	jc "github.com/juju/testing/checkers"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	"github.com/juju/juju/api"
    14  	"github.com/juju/juju/api/base"
    15  )
    16  
    17  type tryInOrderLoginProviderSuite struct{}
    18  
    19  var _ = gc.Suite(&tryInOrderLoginProviderSuite{})
    20  
    21  func (s *tryInOrderLoginProviderSuite) Test(c *gc.C) {
    22  	p1 := &mockLoginProvider{err: errors.New("provider 1 error")}
    23  	p2 := &mockLoginProvider{err: errors.New("provider 2 error")}
    24  	p3 := &mockLoginProvider{}
    25  
    26  	lp := api.NewTryInOrderLoginProvider(p1, p2)
    27  	_, err := lp.Login(context.Background(), nil)
    28  	c.Assert(err, gc.ErrorMatches, "provider 2 error")
    29  
    30  	lp = api.NewTryInOrderLoginProvider(p1, p2, p3)
    31  	_, err = lp.Login(context.Background(), nil)
    32  	c.Assert(err, jc.ErrorIsNil)
    33  }
    34  
    35  type mockLoginProvider struct {
    36  	err error
    37  }
    38  
    39  func (p *mockLoginProvider) Login(ctx context.Context, caller base.APICaller) (*api.LoginResultParams, error) {
    40  	return &api.LoginResultParams{}, p.err
    41  }