func createWorkItemLink(ctx *workItemLinkContext, funcs createWorkItemLinkFuncs, payload *app.CreateWorkItemLinkPayload) error { // Convert payload from app to model representation model := link.WorkItemLink{} in := app.WorkItemLinkSingle{ Data: payload.Data, } err := link.ConvertLinkToModel(in, &model) if err != nil { jerrors, _ := jsonapi.ErrorToJSONAPIErrors(err) return funcs.BadRequest(jerrors) } link, err := ctx.Application.WorkItemLinks().Create(ctx.Context, model.SourceID, model.TargetID, model.LinkTypeID) if err != nil { cause := errs.Cause(err) switch cause.(type) { case errors.NotFoundError: jerrors, _ := jsonapi.ErrorToJSONAPIErrors(goa.ErrBadRequest(err.Error())) return funcs.BadRequest(jerrors) case errors.BadParameterError: jerrors, _ := jsonapi.ErrorToJSONAPIErrors(goa.ErrBadRequest(err.Error())) return funcs.BadRequest(jerrors) default: jerrors, httpStatusCode := jsonapi.ErrorToJSONAPIErrors(err) return ctx.ResponseData.Service.Send(ctx.Context, httpStatusCode, jerrors) } } if err := enrichLinkSingle(ctx, link); err != nil { jerrors, httpStatusCode := jsonapi.ErrorToJSONAPIErrors(err) return ctx.ResponseData.Service.Send(ctx.Context, httpStatusCode, jerrors) } ctx.ResponseData.Header().Set("Location", app.WorkItemLinkHref(link.Data.ID)) return funcs.Created(link) }
func (s *workItemLinkSuite) createSomeLinks() (*app.WorkItemLinkSingle, *app.WorkItemLinkSingle) { createPayload1 := CreateWorkItemLink(s.bug1ID, s.bug2ID, s.bugBlockerLinkTypeID) _, workItemLink1 := test.CreateWorkItemLinkCreated(s.T(), nil, nil, s.workItemLinkCtrl, createPayload1) require.NotNil(s.T(), workItemLink1) // Delete this work item link during cleanup s.deleteWorkItemLinks = append(s.deleteWorkItemLinks, *workItemLink1.Data.ID) expected1 := link.WorkItemLink{} require.Nil(s.T(), link.ConvertLinkToModel(*workItemLink1, &expected1)) createPayload2 := CreateWorkItemLink(s.bug2ID, s.bug3ID, s.bugBlockerLinkTypeID) _, workItemLink2 := test.CreateWorkItemLinkCreated(s.T(), nil, nil, s.workItemLinkCtrl, createPayload2) require.NotNil(s.T(), workItemLink2) // Delete this work item link during cleanup s.deleteWorkItemLinks = append(s.deleteWorkItemLinks, *workItemLink2.Data.ID) expected2 := link.WorkItemLink{} require.Nil(s.T(), link.ConvertLinkToModel(*workItemLink2, &expected2)) return workItemLink1, workItemLink2 }
// TestShowWorkItemLinkOK tests if we can fetch the "system" work item link func (s *workItemLinkSuite) TestShowWorkItemLinkOK() { createPayload := CreateWorkItemLink(s.bug1ID, s.bug2ID, s.bugBlockerLinkTypeID) _, workItemLink := test.CreateWorkItemLinkCreated(s.T(), nil, nil, s.workItemLinkCtrl, createPayload) require.NotNil(s.T(), workItemLink) // Delete this work item link during cleanup s.deleteWorkItemLinks = append(s.deleteWorkItemLinks, *workItemLink.Data.ID) expected := link.WorkItemLink{} require.Nil(s.T(), link.ConvertLinkToModel(*workItemLink, &expected)) _, readIn := test.ShowWorkItemLinkOK(s.T(), nil, nil, s.workItemLinkCtrl, *workItemLink.Data.ID) require.NotNil(s.T(), readIn) // Convert to model space and use equal function actual := link.WorkItemLink{} require.Nil(s.T(), link.ConvertLinkToModel(*readIn, &actual)) require.True(s.T(), expected.Equal(actual)) require.NotNil(s.T(), readIn.Data.Links, "The link MUST include a self link") require.NotEmpty(s.T(), readIn.Data.Links.Self, "The link MUST include a self link that's not empty") }