github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/api/accessor/accessor_factory_test.go (about)

     1  package accessor_test
     2  
     3  import (
     4  	"errors"
     5  	"net/http"
     6  
     7  	"github.com/pf-qiu/concourse/v6/atc"
     8  	"github.com/pf-qiu/concourse/v6/atc/api/accessor/accessorfakes"
     9  	"github.com/pf-qiu/concourse/v6/atc/db/dbfakes"
    10  	. "github.com/onsi/ginkgo"
    11  	. "github.com/onsi/gomega"
    12  
    13  	"github.com/pf-qiu/concourse/v6/atc/api/accessor"
    14  	"github.com/pf-qiu/concourse/v6/atc/db"
    15  )
    16  
    17  var _ = Describe("AccessorFactory", func() {
    18  	var (
    19  		systemClaimKey    string
    20  		systemClaimValues []string
    21  
    22  		fakeTokenVerifier *accessorfakes.FakeTokenVerifier
    23  		fakeTeamFetcher   *accessorfakes.FakeTeamFetcher
    24  		dummyRequest      *http.Request
    25  
    26  		role string
    27  	)
    28  
    29  	BeforeEach(func() {
    30  		systemClaimKey = "sub"
    31  		systemClaimValues = []string{"some-sub"}
    32  
    33  		fakeTokenVerifier = new(accessorfakes.FakeTokenVerifier)
    34  		fakeTeamFetcher = new(accessorfakes.FakeTeamFetcher)
    35  		dummyRequest, _ = http.NewRequest("GET", "/", nil)
    36  
    37  		role = "viewer"
    38  	})
    39  
    40  	Describe("Create", func() {
    41  
    42  		var (
    43  			access accessor.Access
    44  			err    error
    45  		)
    46  
    47  		JustBeforeEach(func() {
    48  			factory := accessor.NewAccessFactory(fakeTokenVerifier, fakeTeamFetcher, systemClaimKey, systemClaimValues)
    49  			access, err = factory.Create(dummyRequest, role)
    50  		})
    51  
    52  		Context("when the token is valid", func() {
    53  			BeforeEach(func() {
    54  				fakeTokenVerifier.VerifyReturns(map[string]interface{}{
    55  					"preferred_username": "user1",
    56  					"federated_claims": map[string]interface{}{
    57  						"connector_id": "github",
    58  					},
    59  				}, nil)
    60  				teamWithUsers := func(name string, authenticated bool) db.Team {
    61  					t := new(dbfakes.FakeTeam)
    62  					t.NameReturns(name)
    63  					if authenticated {
    64  						t.AuthReturns(atc.TeamAuth{"viewer": map[string][]string{
    65  							"users": {"github:user1"},
    66  						}})
    67  					}
    68  					return t
    69  				}
    70  				fakeTeamFetcher.GetTeamsReturns([]db.Team{
    71  					teamWithUsers("t1", true),
    72  					teamWithUsers("t2", false),
    73  					teamWithUsers("t3", true),
    74  				}, nil)
    75  			})
    76  
    77  			It("returns an accessor with the correct teams", func() {
    78  				Expect(access.TeamNames()).To(ConsistOf("t1", "t3"))
    79  			})
    80  		})
    81  
    82  		Context("when the team fetcher returns an error", func() {
    83  			BeforeEach(func() {
    84  				fakeTeamFetcher.GetTeamsReturns(nil, errors.New("nope"))
    85  			})
    86  
    87  			It("returns an error", func() {
    88  				Expect(err).To(HaveOccurred())
    89  			})
    90  		})
    91  
    92  		Context("when the verifier returns a NoToken error", func() {
    93  			BeforeEach(func() {
    94  				fakeTokenVerifier.VerifyReturns(nil, accessor.ErrVerificationNoToken)
    95  			})
    96  
    97  			It("the accessor has no token", func() {
    98  				Expect(err).ToNot(HaveOccurred())
    99  				Expect(access.HasToken()).To(BeFalse())
   100  			})
   101  		})
   102  
   103  		Context("when the verifier returns some other error", func() {
   104  			BeforeEach(func() {
   105  				fakeTokenVerifier.VerifyReturns(nil, accessor.ErrVerificationTokenExpired)
   106  			})
   107  
   108  			It("the accessor is unauthenticated", func() {
   109  				Expect(err).ToNot(HaveOccurred())
   110  				Expect(access.IsAuthenticated()).To(BeFalse())
   111  			})
   112  		})
   113  	})
   114  })