Skip to content

Commit

Permalink
🌱 add tracker API Test (#473)
Browse files Browse the repository at this point in the history
  • Loading branch information
khareyash05 authored Aug 19, 2023
1 parent 5dbd10d commit e3f8fa9
Show file tree
Hide file tree
Showing 6 changed files with 322 additions and 1 deletion.
4 changes: 4 additions & 0 deletions binding/richclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ type RichClient struct {
TagCategory TagCategory
Target Target
Task Task
Tracker Tracker
Dependency Dependency

// A REST client.
Expand Down Expand Up @@ -107,6 +108,9 @@ func New(baseUrl string) (r *RichClient) {
Task: Task{
client: client,
},
Tracker: Tracker{
client: client,
},
Client: client,
}

Expand Down
74 changes: 74 additions & 0 deletions binding/tracker.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package binding

import (
"github.com/konveyor/tackle2-hub/api"
)

//
// Tracker API.
type Tracker struct {
client *Client
}

//
// Create a Tracker.
func (h *Tracker) Create(r *api.Tracker) (err error) {
err = h.client.Post(api.TrackersRoot, &r)
return
}

//
// Get a Tracker by ID.
func (h *Tracker) Get(id uint) (r *api.Tracker, err error) {
r = &api.Tracker{}
path := Path(api.TrackerRoot).Inject(Params{api.ID: id})
err = h.client.Get(path, r)
return
}

//
// List Trackers.
func (h *Tracker) List() (list []api.Tracker, err error) {
list = []api.Tracker{}
err = h.client.Get(api.TrackersRoot, &list)
return
}

//
// Update a Tracker.
func (h *Tracker) Update(r *api.Tracker) (err error) {
path := Path(api.TrackerRoot).Inject(Params{api.ID: r.ID})
err = h.client.Put(path, r)
return
}

//
// Delete a Tracker.
func (h *Tracker) Delete(id uint) (err error) {
err = h.client.Delete(Path(api.TrackerRoot).Inject(Params{api.ID: id}))
return
}

//
// List Projects.
func (h *Tracker) ListProjects(id uint) (projectList []api.Project, err error) {
projectList = []api.Project{}
err = h.client.Get(Path(api.TrackerProjects).Inject(Params{api.ID: id}), &projectList)
return
}

//
// Get Projects.
func (h *Tracker) GetProjects(id1 uint, id2 uint) (project api.Project, err error) {
project = api.Project{}
err = h.client.Get(Path(api.TrackerProject).Inject(Params{api.ID: id1, api.ID2: id2}), &project)
return
}

//
// List Project Issue Types.
func (h *Tracker) ListProjectIssueTypes(id1 uint, id2 uint) (issueType []api.IssueType, err error) {
issueType = []api.IssueType{}
err = h.client.Get(Path(api.TrackerProjectIssueTypes).Inject(Params{api.ID: id1, api.ID2: id2}), &issueType)
return
}
2 changes: 1 addition & 1 deletion docs/test-api-matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ ruleset|:heavy_check_mark:|:heavy_check_mark:||
batch||||
migrationwave|:heavy_check_mark:|:heavy_check_mark:||
ticket||||
tracker||||
tracker|:heavy_check_mark:|:heavy_check_mark:||
**Other**||||
addon || | |
auth||||
Expand Down
186 changes: 186 additions & 0 deletions test/api/tracker/api_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
package tracker

import (
"strconv"
"testing"

"github.com/konveyor/tackle2-hub/api"
"github.com/konveyor/tackle2-hub/test/assert"
)

func TestTrackerCRUD(t *testing.T) {
for _, r := range Samples {
t.Run("Tracker "+r.Kind+" CRUD", func(t *testing.T) {
// Create a sample identity for the tracker.
identity := api.Identity{
Kind: r.Kind,
Name: r.Identity.Name,
}
assert.Must(t, Identity.Create(&identity))
// Copy the identity name to the tracker.
r.Identity.ID = identity.ID

// Create a tracker.
assert.Must(t, Tracker.Create(&r))

// Get.
got, err := Tracker.Get(r.ID)
if err != nil {
t.Errorf(err.Error())
}

// Compare got values with expected values.
AssertEqualTrackers(t, got, r)

// Update Message.
r.Message = "Updated Comment " + r.Message
assert.Should(t, Tracker.Update(&r))

// Find Tracker and check its parameters with the got(On Updation).
got, err = Tracker.Get(r.ID)
if err != nil {
t.Errorf(err.Error())
}

// Check if the unchanged values remain same or not.
AssertEqualTrackers(t, got, r)

// Delete identity and tracker.
assert.Must(t, Tracker.Delete(r.ID))
assert.Must(t, Identity.Delete(identity.ID))

// Check if the Tracker is present even after deletion or not.
_, err = Tracker.Get(r.ID)
if err == nil {
t.Errorf("Resource exits, but should be deleted: %v", r)
}
})

t.Run("Tracker "+r.Kind+" Project", func(t *testing.T) {
// Create a sample identity for the tracker.
identity := api.Identity{
Kind: r.Kind,
Name: r.Identity.Name,
}
assert.Must(t, Identity.Create(&identity))

// Copy the identity name to the tracker.
r.Identity.ID = identity.ID

// Create a tracker.
assert.Must(t, Tracker.Create(&r))

projectsList, err := Tracker.ListProjects(r.ID)
if err != nil {
// check for type of service (maybe Connected?)
// if API service then print Not connected to Jira and pass the test
// else fail the test
if r.Connected == false {
t.Logf("Not connected to Jira(Thus passing the API Test)")
} else {
t.Errorf(err.Error())
}
}

for _, projects := range projectsList {

// convert project Id's to uint.
projectID, err := strconv.Atoi(projects.ID)
if err != nil {
t.Errorf(err.Error())
}

_, err = Tracker.GetProjects(r.ID, uint(projectID))
if err != nil {
if r.Connected == false {
t.Logf("Not connected to Jira(Thus passing the API Test)")
} else {
t.Errorf(err.Error())
}
}

_, err = Tracker.ListProjectIssueTypes(r.ID, uint(projectID))
if err != nil {
if r.Connected == false {
t.Logf("Not connected to Jira(Thus passing the API Test)")
} else {
t.Errorf(err.Error())
}
}
}

// Delete identity and tracker.
assert.Must(t, Tracker.Delete(r.ID))
assert.Must(t, Identity.Delete(identity.ID))

// Check if the Tracker is present even after deletion or not.
_, err = Tracker.Get(r.ID)
if err == nil {
t.Errorf("Resource exits, but should be deleted: %v", r)
}
})
}
}

func TestTrackerList(t *testing.T) {
createdTrackers := []api.Tracker{}

for _, r := range Samples {
identity := api.Identity{
Kind: r.Kind,
Name: r.Identity.Name,
}
assert.Must(t, Identity.Create(&identity))
r.Identity.ID = identity.ID

assert.Must(t, Tracker.Create(&r))
createdTrackers = append(createdTrackers, r)
}

// List Trackers.
got, err := Tracker.List()
if err != nil {
t.Errorf(err.Error())
}

// check if created Trackers are in the list we got from Tracker.List()
for _, createdTracker := range createdTrackers {
found := false
for _, retrievedTracker := range got {
if assert.FlatEqual(createdTracker.ID, retrievedTracker.ID) {
found = true
break
}
}
if !found {
t.Errorf("Expected tracker not found in the list: %v", createdTracker)
}
}

// Delete related trackers and identities.
for _, tracker := range createdTrackers {
assert.Must(t, Tracker.Delete(tracker.ID))
assert.Must(t, Identity.Delete(tracker.ID))
}
}

func AssertEqualTrackers(t *testing.T, got *api.Tracker, expected api.Tracker) {
if got.Name != expected.Name {
t.Errorf("Different Tracker Name Got %v, expected %v", got.Name, expected.Name)
}
if got.URL != expected.URL {
t.Errorf("Different Url Got %v, expected %v", got.URL, expected.URL)
}
if got.Kind != expected.Kind {
t.Errorf("Different Kind Got %v, expected %v", got.Kind, expected.Kind)
}
if got.Connected != expected.Connected {
t.Errorf("Different Connected Got %v, expected %v", got.Connected, expected.Connected)
}
if got.Identity.Name != expected.Identity.Name {
t.Errorf("Different Identity's Name Got %v, expected %v", got.Identity.Name, expected.Identity.Name)
}
if got.Insecure != expected.Insecure {
t.Errorf("Different Insecure Got %v, expected %v", got.Insecure, expected.Kind)
}
}
23 changes: 23 additions & 0 deletions test/api/tracker/pkg.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package tracker

import (
"github.com/konveyor/tackle2-hub/binding"
"github.com/konveyor/tackle2-hub/test/api/client"
)

var (
RichClient *binding.RichClient
Tracker binding.Tracker
Identity binding.Identity
)

func init() {
// Prepare RichClient and login to Hub API (configured from env variables).
RichClient = client.PrepareRichClient()

// Shortcut for Tracker-related RichClient methods.
Tracker = RichClient.Tracker

// Shortcut for Identity-related RichClient methods.
Identity = RichClient.Identity
}
34 changes: 34 additions & 0 deletions test/api/tracker/samples.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package tracker

import (
"time"

"github.com/konveyor/tackle2-hub/api"
)

var Samples = []api.Tracker{
{
Name: "Sample tracker",
URL: "https://konveyor.io/test/api/tracker",
Kind: "jira-onprem",
Message: "Description of tracker",
LastUpdated: time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.Local),
Identity: api.Ref{
ID: 1,
Name: "Sample Tracker Identity",
},
Insecure: false,
},
{
Name: "Sample tracker1",
URL: "https://konveyor.io/test/api/tracker1",
Kind: "jira-cloud",
Message: "Description of tracker1",
LastUpdated: time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.Local),
Identity: api.Ref{
ID: 2,
Name: "Sample Tracker Identity1",
},
Insecure: false,
},
}

0 comments on commit e3f8fa9

Please sign in to comment.