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

     1  package pipelineserver_test
     2  
     3  import (
     4  	"errors"
     5  	"io/ioutil"
     6  	"net/http"
     7  	"net/http/httptest"
     8  
     9  	"github.com/pf-qiu/concourse/v6/atc/api/pipelineserver"
    10  	"github.com/pf-qiu/concourse/v6/atc/db/dbfakes"
    11  
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  )
    15  
    16  var _ = Describe("Rejected Archived Handler", func() {
    17  	var (
    18  		response *http.Response
    19  		server   *httptest.Server
    20  		delegate *delegateHandler
    21  
    22  		dbTeamFactory *dbfakes.FakeTeamFactory
    23  		fakeTeam      *dbfakes.FakeTeam
    24  		fakePipeline  *dbfakes.FakePipeline
    25  
    26  		handler http.Handler
    27  	)
    28  
    29  	BeforeEach(func() {
    30  		delegate = &delegateHandler{}
    31  
    32  		dbTeamFactory = new(dbfakes.FakeTeamFactory)
    33  		fakeTeam = new(dbfakes.FakeTeam)
    34  		fakePipeline = new(dbfakes.FakePipeline)
    35  
    36  		handlerFactory := pipelineserver.NewRejectArchivedHandlerFactory(dbTeamFactory)
    37  		handler = handlerFactory.RejectArchived(delegate.GetHandler(fakePipeline))
    38  	})
    39  
    40  	JustBeforeEach(func() {
    41  		server = httptest.NewServer(handler)
    42  
    43  		request, err := http.NewRequest("POST", server.URL+"?:team_name=some-team&:pipeline_name=some-pipeline", nil)
    44  		Expect(err).NotTo(HaveOccurred())
    45  
    46  		response, err = new(http.Client).Do(request)
    47  		Expect(err).NotTo(HaveOccurred())
    48  	})
    49  
    50  	var _ = AfterEach(func() {
    51  		server.Close()
    52  	})
    53  
    54  	Context("when a team is found", func() {
    55  		BeforeEach(func() {
    56  			dbTeamFactory.FindTeamReturns(fakeTeam, true, nil)
    57  		})
    58  		Context("when a pipeline is found", func() {
    59  			BeforeEach(func() {
    60  				fakeTeam.PipelineReturns(fakePipeline, true, nil)
    61  			})
    62  			Context("when a pipeline is archived", func() {
    63  				BeforeEach(func() {
    64  					fakePipeline.ArchivedReturns(true)
    65  				})
    66  				It("returns 409", func() {
    67  					Expect(response.StatusCode).To(Equal(http.StatusConflict))
    68  				})
    69  				It("returns an error in the body", func() {
    70  					body, err := ioutil.ReadAll(response.Body)
    71  					Expect(err).NotTo(HaveOccurred())
    72  					Expect(body).To(ContainSubstring("action not allowed for an archived pipeline"))
    73  				})
    74  			})
    75  			Context("when a pipeline is not archived", func() {
    76  				BeforeEach(func() {
    77  					fakePipeline.ArchivedReturns(false)
    78  				})
    79  				It("returns the delegate handler", func() {
    80  					Expect(delegate.IsCalled).To(BeTrue())
    81  				})
    82  			})
    83  		})
    84  		Context("when a pipeline is not found", func() {
    85  			BeforeEach(func() {
    86  				fakeTeam.PipelineReturns(nil, false, nil)
    87  			})
    88  			It("returns 404", func() {
    89  				Expect(response.StatusCode).To(Equal(http.StatusNotFound))
    90  			})
    91  		})
    92  		Context("when getting a pipeline returns an error", func() {
    93  			BeforeEach(func() {
    94  				fakeTeam.PipelineReturns(nil, false, errors.New("some error"))
    95  			})
    96  			It("returns 500", func() {
    97  				Expect(response.StatusCode).To(Equal(http.StatusInternalServerError))
    98  			})
    99  		})
   100  	})
   101  	Context("when a team is not found", func() {
   102  		BeforeEach(func() {
   103  			dbTeamFactory.FindTeamReturns(nil, false, nil)
   104  		})
   105  		It("returns 404", func() {
   106  			Expect(response.StatusCode).To(Equal(http.StatusNotFound))
   107  		})
   108  	})
   109  	Context("when finding a team returns an error", func() {
   110  		BeforeEach(func() {
   111  			dbTeamFactory.FindTeamReturns(nil, false, errors.New("some error"))
   112  		})
   113  		It("returns 500", func() {
   114  			Expect(response.StatusCode).To(Equal(http.StatusInternalServerError))
   115  		})
   116  	})
   117  })