Skip to content

Commit

Permalink
🌱 add ticket API test (#477)
Browse files Browse the repository at this point in the history
Add the ticket API Test

---------

Signed-off-by: Yash Khare <yash2010118@akgec.ac.in>
  • Loading branch information
khareyash05 committed Oct 12, 2023
1 parent 47eee2d commit aae707c
Show file tree
Hide file tree
Showing 6 changed files with 251 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 @@ -40,6 +40,7 @@ type RichClient struct {
TagCategory TagCategory
Target Target
Task Task
Ticket Ticket
Tracker Tracker

// A REST client.
Expand Down Expand Up @@ -112,6 +113,9 @@ func New(baseUrl string) (r *RichClient) {
Task: Task{
client: client,
},
Ticket: Ticket{
client: client,
},
Tracker: Tracker{
client: client,
},
Expand Down
42 changes: 42 additions & 0 deletions binding/ticket.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package binding

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

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

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

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

//
// List Tickets..
func (h *Ticket) List() (list []api.Ticket, err error) {
list = []api.Ticket{}
err = h.client.Get(api.TicketsRoot, &list)
return
}

//
// Delete a Ticket.
func (h *Ticket) Delete(id uint) (err error) {
err = h.client.Delete(Path(api.TicketRoot).Inject(Params{api.ID: id}))
return
}
2 changes: 1 addition & 1 deletion docs/test-api-matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ ruleset|:heavy_check_mark:|:heavy_check_mark:||
**Migrationwaves and Jira**||||
batch||||
migrationwave|:heavy_check_mark:|:heavy_check_mark:||
ticket||||
ticket|:heavy_check_mark:|:heavy_check_mark:||
tracker|:heavy_check_mark:|:heavy_check_mark:||
**Assessments**||||
archetype||||
Expand Down
152 changes: 152 additions & 0 deletions test/api/ticket/api_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
package ticket

import (
"testing"

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

func TestTicketCRUD(t *testing.T) {
for _, r := range Samples {
t.Run("Ticket "+r.Kind+" CRUD", func(t *testing.T) {

// Create a sample Application for the ticket.
app := api.Application{
Name: r.Application.Name,
}
assert.Must(t, Application.Create(&app))

createdIdentities := []api.Identity{}
createdTrackers := []api.Tracker{}
for _, tracker := range TrackerSamples.Samples {
// Create a sample identity for the tracker
identity := api.Identity{
Name: tracker.Identity.Name,
Kind: tracker.Kind,
}
assert.Must(t, Identity.Create(&identity))
createdIdentities = append(createdIdentities, identity)
assert.Must(t, Tracker.Create(&tracker))
createdTrackers = append(createdTrackers, tracker)
}

// Create a sample ticket
assert.Must(t, Ticket.Create(&r))

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

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

// Delete ticket and its related resources.
assert.Must(t, Ticket.Delete(r.ID))
for _, tracker := range createdTrackers {
assert.Must(t, Tracker.Delete(tracker.ID))
}
for _, identity := range createdIdentities {
assert.Must(t, Identity.Delete(identity.ID))
}
assert.Must(t, Application.Delete(app.ID))

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

func TestTicketList(t *testing.T) {
for _, r := range Samples {

createdTickets := []api.Ticket{}
// Create a sample Application for the ticket.
app := api.Application{
Name: r.Application.Name,
}
assert.Must(t, Application.Create(&app))

createdIdentities := []api.Identity{}
createdTrackers := []api.Tracker{}
for _, tracker := range TrackerSamples.Samples {
// Create a sample identity for the tracker
identity := api.Identity{
Name: tracker.Identity.Name,
Kind: tracker.Kind,
}
assert.Must(t, Identity.Create(&identity))
createdIdentities = append(createdIdentities, identity)
assert.Must(t, Tracker.Create(&tracker))
createdTrackers = append(createdTrackers, tracker)
}

// Create a sample ticket
assert.Must(t, Ticket.Create(&r))
createdTickets = append(createdTickets, r)

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

for _, createdTicket := range createdTickets {
found := false
for _, retrievedTicket := range got {
if assert.FlatEqual(createdTicket.ID, retrievedTicket.ID) {
found = true
break
}
}
if !found {
t.Errorf("Expected ticket not found in the list: %v", createdTicket)
}
}

// Delete tickets and related resources.
for _, ticket := range createdTickets {
assert.Must(t, Ticket.Delete(ticket.ID))
assert.Must(t, Application.Delete(ticket.ID))
}
for _, tracker := range createdTrackers {
assert.Must(t, Tracker.Delete(tracker.ID))
}
for _, identity := range createdIdentities {
assert.Must(t, Identity.Delete(identity.ID))
}
}
}

func AssertEqualTickets(t *testing.T, got *api.Ticket, expected api.Ticket) {
if got.Kind != expected.Kind {
t.Errorf("Different Kind Got %v, expected %v", got.Kind, expected.Kind)
}
if got.Reference != expected.Reference {
t.Errorf("Different Tracker Reference Got %v, expected %v", got.Reference, expected.Reference)
}
if got.Link != expected.Link {
t.Errorf("Different Url Got %v, expected %v", got.Link, expected.Link)
}
if got.Parent != expected.Parent {
t.Errorf("Different Parent Got %v, expected %v", got.Parent, expected.Parent)
}
if got.Message != expected.Message {
t.Errorf("Different Message Got %v, expected %v", got.Message, expected.Message)
}
if got.Status != expected.Status {
t.Errorf("Different Status Got %v, expected %v", got.Status, expected.Status)
}
if got.Application.Name != expected.Application.Name {
t.Errorf("Different Application's Name Got %v, expected %v", got.Application.Name, expected.Application.Name)
}
if got.Tracker.Name != expected.Tracker.Name {
t.Errorf("Different Tracker's Name Got %v, expected %v", got.Tracker.Name, expected.Tracker.Name)
}
}
31 changes: 31 additions & 0 deletions test/api/ticket/pkg.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package ticket

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

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

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

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

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

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

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

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

var Samples = []api.Ticket{
{
Kind: "10001",
Parent: "10000",
Application: api.Ref{
ID: 1,
Name: "Sample Application1",
},
Tracker: api.Ref{
ID: 1,
Name: TrackerSamples.Samples[0].Name,
},
},
}

0 comments on commit aae707c

Please sign in to comment.