// validateSomeLinks validates that workItemLink1 and workItemLink2 are in the // linkCollection and that all resources are included func (s *workItemLinkSuite) validateSomeLinks(linkCollection *app.WorkItemLinkList, workItemLink1, workItemLink2 *app.WorkItemLinkSingle) { require.NotNil(s.T(), linkCollection) require.Nil(s.T(), linkCollection.Validate()) // Check the number of found work item links require.NotNil(s.T(), linkCollection.Data) require.Condition(s.T(), func() bool { return (len(linkCollection.Data) >= 2) }, "At least two work item links must exist (%s and %s), but only %d exist.", *workItemLink1.Data.ID, *workItemLink2.Data.ID, len(linkCollection.Data)) // Search for the work item types that must exist at minimum toBeFound := 2 for i := 0; i < len(linkCollection.Data) && toBeFound > 0; i++ { actualLink := *linkCollection.Data[i] var expectedLink *app.WorkItemLinkData switch *actualLink.ID { case *workItemLink1.Data.ID: expectedLink = workItemLink1.Data case *workItemLink2.Data.ID: expectedLink = workItemLink2.Data } if expectedLink != nil { s.T().Log("Found work item link in collection: ", *expectedLink.ID) toBeFound-- // Check JSONAPI "type"" field (should be "workitemlinks") require.Equal(s.T(), expectedLink.Type, actualLink.Type) // Check work item link type require.Equal(s.T(), expectedLink.Relationships.LinkType.Data.ID, actualLink.Relationships.LinkType.Data.ID) require.Equal(s.T(), expectedLink.Relationships.LinkType.Data.Type, actualLink.Relationships.LinkType.Data.Type) // Check source type require.Equal(s.T(), expectedLink.Relationships.Source.Data.ID, actualLink.Relationships.Source.Data.ID, "Wrong source ID for the link") require.Equal(s.T(), expectedLink.Relationships.Source.Data.Type, actualLink.Relationships.Source.Data.Type, "Wrong source JSONAPI type for the link") // Check target type require.Equal(s.T(), expectedLink.Relationships.Target.Data.ID, actualLink.Relationships.Target.Data.ID, "Wrong target ID for the link") require.Equal(s.T(), expectedLink.Relationships.Target.Data.Type, actualLink.Relationships.Target.Data.Type, "Wrong target JSONAPI type for the link") } } require.Exactly(s.T(), 0, toBeFound, "Not all required work item links (%s and %s) where found.", *workItemLink1.Data.ID, *workItemLink2.Data.ID) toBeFound = 5 // 1 x link category, 1 x link type, 3 x work items for i := 0; i < len(linkCollection.Included) && toBeFound > 0; i++ { switch v := linkCollection.Included[i].(type) { case *app.WorkItemLinkCategoryData: if *v.ID == s.userLinkCategoryID { s.T().Log("Found work item link category in \"included\" element: ", *v.ID) toBeFound-- } case *app.WorkItemLinkTypeData: if *v.ID == s.bugBlockerLinkTypeID { s.T().Log("Found work item link type in \"included\" element: ", *v.ID) toBeFound-- } case *app.WorkItem2: wid, err := strconv.ParseUint(*v.ID, 10, 64) require.Nil(s.T(), err) if wid == s.bug1ID || wid == s.bug2ID || wid == s.bug3ID { s.T().Log("Found work item in \"included\" element: ", *v.ID) toBeFound-- } // TODO(kwk): Check for WITs (once #559 is merged) // case *app.WorkItemTypeData: default: s.T().Errorf("Object of unknown type included in work item link list response: %T", linkCollection.Included[i]) } } require.Exactly(s.T(), 0, toBeFound, "Not all required included elements where found.") }