Skip to content

Commit

Permalink
implement add image reference to release
Browse files Browse the repository at this point in the history
[#168464628]

Signed-off-by: Ivan Wang <[email protected]>
  • Loading branch information
pivotal-ivan-wang committed Sep 26, 2019
1 parent 801a252 commit 832bcbc
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 0 deletions.
38 changes: 38 additions & 0 deletions image_references.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,44 @@ func (p ImageReferencesService) Create(config CreateImageReferenceConfig) (Image
return response.ImageReference, nil
}

func (p ImageReferencesService) AddToRelease(
productSlug string,
releaseID int,
imageReferenceID int,
) error {
url := fmt.Sprintf(
"/products/%s/releases/%d/add_image_reference",
productSlug,
releaseID,
)

body := createUpdateImageReferenceBody{
ImageReference: ImageReference{
ID: imageReferenceID,
},
}

b, err := json.Marshal(body)
if err != nil {
// Untested as we cannot force an error because we are marshalling
// a known-good body
return err
}

resp, err := p.client.MakeRequest(
"PATCH",
url,
http.StatusNoContent,
bytes.NewReader(b),
)
if err != nil {
return err
}
defer resp.Body.Close()

return nil
}

type createUpdateImageReferenceBody struct {
ImageReference ImageReference `json:"image_reference"`
}
77 changes: 77 additions & 0 deletions image_references_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -174,4 +174,81 @@ var _ = Describe("PivnetClient - image references", func() {
})
})

Describe("Add Image Reference to release", func() {
var (
productSlug = "some-product"
releaseID = 2345
imageReferenceID = 3456

expectedRequestBody = `{"image_reference":{"id":3456}}`
)

Context("when the server responds with a 204 status code", func() {
It("returns without error", func() {
server.AppendHandlers(
ghttp.CombineHandlers(
ghttp.VerifyRequest("PATCH", fmt.Sprintf(
"%s/products/%s/releases/%d/add_image_reference",
apiPrefix,
productSlug,
releaseID,
)),
ghttp.VerifyJSON(expectedRequestBody),
ghttp.RespondWith(http.StatusNoContent, nil),
),
)

err := client.ImageReferences.AddToRelease(productSlug, releaseID, imageReferenceID)
Expect(err).NotTo(HaveOccurred())
})
})

Context("when the server responds with a non-204 status code", func() {
var (
response interface{}
)

BeforeEach(func() {
response = pivnetErr{Message: "foo message"}
})

It("returns an error", func() {
server.AppendHandlers(
ghttp.CombineHandlers(
ghttp.VerifyRequest("PATCH", fmt.Sprintf(
"%s/products/%s/releases/%d/add_image_reference",
apiPrefix,
productSlug,
releaseID,
)),
ghttp.RespondWithJSONEncoded(http.StatusTeapot, response),
),
)

err := client.ImageReferences.AddToRelease(productSlug, releaseID, imageReferenceID)
Expect(err.Error()).To(ContainSubstring("foo message"))
})
})

Context("when the json unmarshalling fails with error", func() {
It("forwards the error", func() {
server.AppendHandlers(
ghttp.CombineHandlers(
ghttp.VerifyRequest("PATCH", fmt.Sprintf(
"%s/products/%s/releases/%d/add_image_reference",
apiPrefix,
productSlug,
releaseID,
)),
ghttp.RespondWith(http.StatusTeapot, "%%%"),
),
)

err := client.ImageReferences.AddToRelease(productSlug, releaseID, imageReferenceID)
Expect(err).To(HaveOccurred())

Expect(err.Error()).To(ContainSubstring("invalid character"))
})
})
})
})

0 comments on commit 832bcbc

Please sign in to comment.