Skip to content

Commit

Permalink
🌱 add migrationwave API test (#471)
Browse files Browse the repository at this point in the history
Added the migration wave API test

---------

Signed-off-by: Yash Khare <yash2010118@akgec.ac.in>
  • Loading branch information
khareyash05 authored Aug 16, 2023
1 parent f18f21c commit 5dbd10d
Show file tree
Hide file tree
Showing 6 changed files with 327 additions and 1 deletion.
50 changes: 50 additions & 0 deletions binding/migrationwave.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package binding

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

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

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

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

//
// List MigrationWaves.
func (h *MigrationWave) List() (list []api.MigrationWave, err error) {
list = []api.MigrationWave{}
err = h.client.Get(api.MigrationWavesRoot, &list)
return
}

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

//
// Delete a MigrationWave.
func (h *MigrationWave) Delete(id uint) (err error) {
err = h.client.Delete(Path(api.MigrationWaveRoot).Inject(Params{api.ID: id}))
return
}
4 changes: 4 additions & 0 deletions binding/richclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ type RichClient struct {
File File
Identity Identity
JobFunction JobFunction
MigrationWave MigrationWave
Proxy Proxy
Review Review
RuleSet RuleSet
Expand Down Expand Up @@ -73,6 +74,9 @@ func New(baseUrl string) (r *RichClient) {
JobFunction: JobFunction{
client: client,
},
MigrationWave: MigrationWave{
client: client,
},
Proxy: Proxy{
client: client,
},
Expand Down
2 changes: 1 addition & 1 deletion docs/test-api-matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ analysis||||
ruleset|:heavy_check_mark:|:heavy_check_mark:||
**Migrationwaves and Jira**||||
batch||||
migrationwave||||
migrationwave|:heavy_check_mark:|:heavy_check_mark:||
ticket||||
tracker||||
**Other**||||
Expand Down
208 changes: 208 additions & 0 deletions test/api/migrationwave/api_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
package migrationwave

import (
"testing"
"time"

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

func TestMigrationWaveCRUD(t *testing.T) {
for _, r := range Samples {
createdApps := []api.Application{}
for _, app := range r.Applications {
expectedApp := api.Application{
Name: app.Name,
Description: "Sample application",
}
assert.Must(t, Application.Create(&expectedApp))
createdApps = append(createdApps, expectedApp)
}

createdStakeholders := []api.Stakeholder{}
for _, stakeholder := range r.Stakeholders {
expectedStakeholder := api.Stakeholder{
Name: stakeholder.Name,
Email: "sample@example.com",
}
assert.Must(t, Stakeholder.Create(&expectedStakeholder))
createdStakeholders = append(createdStakeholders, expectedStakeholder)
}

createdStakeholderGroups := []api.StakeholderGroup{}
for _, stakeholderGroup := range r.StakeholderGroups {
expectedStakeholderGroup := api.StakeholderGroup{
Name: stakeholderGroup.Name,
Description: "Sample Stakeholder Group",
}
assert.Must(t, StakeholderGroup.Create(&expectedStakeholderGroup))
createdStakeholderGroups = append(createdStakeholderGroups, expectedStakeholderGroup)
}

assert.Must(t, MigrationWave.Create(&r))

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

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

// Update MigrationWave's Name.
r.EndDate = r.EndDate.Add(30 * time.Minute)
assert.Should(t, MigrationWave.Update(&r))

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

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

// Delete created Applications, Stakeholders,StakeholdersGroup and MigrationWave
assert.Must(t, MigrationWave.Delete(r.ID))

for _, stakeholderGroup := range createdStakeholderGroups {
assert.Must(t, StakeholderGroup.Delete(stakeholderGroup.ID))
}

for _, stakeholder := range createdStakeholders {
assert.Must(t, Stakeholder.Delete(stakeholder.ID))
}

for _, app := range createdApps {
assert.Must(t, Application.Delete(app.ID))
}

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

func TestMigrationWaveList(t *testing.T) {

createdMigrationWaves := []api.MigrationWave{}
createdApps := []api.Application{}
createdStakeholders := []api.Stakeholder{}
createdStakeholderGroups := []api.StakeholderGroup{}

for _, r := range Samples {
for _, app := range r.Applications {
expectedApp := api.Application{
Name: app.Name,
Description: "Sample application",
}
assert.Must(t, Application.Create(&expectedApp))
createdApps = append(createdApps, expectedApp)
}

for _, stakeholder := range r.Stakeholders {
expectedStakeholder := api.Stakeholder{
Name: stakeholder.Name,
Email: "sample@example.com",
}
assert.Must(t, Stakeholder.Create(&expectedStakeholder))
createdStakeholders = append(createdStakeholders, expectedStakeholder)
}

for _, stakeholderGroup := range r.StakeholderGroups {
expectedStakeholderGroup := api.StakeholderGroup{
Name: stakeholderGroup.Name,
Description: "Sample Stakeholder Group",
}
assert.Must(t, StakeholderGroup.Create(&expectedStakeholderGroup))
createdStakeholderGroups = append(createdStakeholderGroups, expectedStakeholderGroup)
}
assert.Must(t, MigrationWave.Create(&r))
createdMigrationWaves = append(createdMigrationWaves, r)
}

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

// Compare contents of migration waves.
for _, createdWave := range createdMigrationWaves {
found := false
for _, retrievedWave := range got {
if assert.FlatEqual(createdWave.ID, retrievedWave.ID) {
found = true
break
}
}
if !found {
t.Errorf("Expected Wave not found in the list: %v", createdWave)
}
}

for _, r := range createdMigrationWaves {
assert.Must(t, MigrationWave.Delete(r.ID))
}

for _, stakeholderGroup := range createdStakeholderGroups {
assert.Must(t, StakeholderGroup.Delete(stakeholderGroup.ID))
}

for _, stakeholder := range createdStakeholders {
assert.Must(t, Stakeholder.Delete(stakeholder.ID))
}

for _, app := range createdApps {
assert.Must(t, Application.Delete(app.ID))
}
}

func AssertEqualMigrationWaves(t *testing.T, got *api.MigrationWave, expected api.MigrationWave) {
if got.Name != expected.Name {
t.Errorf("Different MigrationWave Name Got %v, expected %v", got.Name, expected.Name)
}
if got.StartDate != expected.StartDate {
t.Errorf("Different Start Date Got %v, expected %v", got.StartDate, expected.StartDate)
}
for _, expectedApp := range expected.Applications {
found := false
for _, gotApp := range got.Applications {
if assert.FlatEqual(expectedApp.ID, gotApp.ID) {
found = true
break
}
}
if !found {
t.Errorf("Expected Wave not found in the list: %v", expectedApp)
}
}
for _, expectedStakeholders := range expected.Stakeholders {
found := false
for _, gotStakeholders := range got.Stakeholders {
if assert.FlatEqual(expectedStakeholders.ID, gotStakeholders.ID) {
found = true
break
}
}
if !found {
t.Errorf("Expected Wave not found in the list: %v", expectedStakeholders)
}
}
for _, expectedStakeholderGroup := range expected.StakeholderGroups {
found := false
for _, gotStakeholderGroup := range got.StakeholderGroups {
if assert.FlatEqual(expectedStakeholderGroup.ID, gotStakeholderGroup.ID) {
found = true
break
}
}
if !found {
t.Errorf("Expected Wave not found in the list: %v", expectedStakeholderGroup)
}
}
}
31 changes: 31 additions & 0 deletions test/api/migrationwave/pkg.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package migrationwave

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

var (
RichClient *binding.RichClient
MigrationWave binding.MigrationWave
Application binding.Application
Stakeholder binding.Stakeholder
StakeholderGroup binding.StakeholderGroup
)

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

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

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

// Shortcut for StakeHolder-related RichClient methods.
Stakeholder = RichClient.Stakeholder

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

import (
"time"

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

var Samples = []api.MigrationWave{
{
Name: "MigrationWaves",
StartDate: time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.Local),
EndDate: time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.Local).Add(30 * time.Minute),
Applications: []api.Ref{
{
ID: 1,
Name: "Sample Application",
},
},
Stakeholders: []api.Ref{
{
ID: 1,
Name: "Sample Stakeholders",
},
},
StakeholderGroups: []api.Ref{
{
ID: 1,
Name: "Sample Stakeholders Groups",
},
},
},
}

0 comments on commit 5dbd10d

Please sign in to comment.