Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🌱 add migrationwave API test #471

Merged
merged 7 commits into from
Aug 16, 2023
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion api/ruleset.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ func (h RuleSetHandler) Create(ctx *gin.Context) {
_ = ctx.Error(err)
return
}

h.Respond(ctx, http.StatusCreated, ruleset)
}

Expand Down
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
197 changes: 197 additions & 0 deletions test/api/migrationwave/api_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
package migrationwave

import (
"strconv"
"testing"
"time"

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

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

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

@aufi aufi Aug 15, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is one thing I missed before. I understand you cannot use r.Applications or r.Stakeholders directly since they're just Refs, but you need to preserve Refs IDs.

Currently this test creates Application&Stakeholder&StakeholderGroup with ID 1 (on empty database) and tries delete Application ID 1, Stakeholder ID 2, StakeholderGroup ID 3 (and leaves created Stakeholder&StakehoderGroup in the database).

Use IDs from Refs when creating these resources and ensure (just check manually on your local dev env) there are no remains in database after test execution.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ya that seems an issue.Noticed how. Thanks for the check will update them

}

for _, stakeholderGroup := range r.StakeholderGroups {
expectedStakeholderGroup := api.StakeholderGroup{
Name: stakeholderGroup.Name,
Description: "Sample Stakeholder Group",
}
assert.Must(t, StakeholderGroup.Create(&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 r.StakeholderGroups {
assert.Must(t, StakeholderGroup.Delete(stakeholderGroup.ID))
}

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

for _, app := range r.Applications {
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{}

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

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

for i, stakeholderGroup := range r.StakeholderGroups {
expectedStakeholderGroup := api.StakeholderGroup{
Name: stakeholderGroup.Name + strconv.Itoa(i),
Description: "Sample Stakeholder Group",
}
assert.Must(t, StakeholderGroup.Create(&expectedStakeholderGroup))
}
assert.Must(t, MigrationWave.Create(&r))
khareyash05 marked this conversation as resolved.
Show resolved Hide resolved
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)
}
}

// Delete created resources.
for _, createdMigrationWave := range createdMigrationWaves {
assert.Must(t, MigrationWave.Delete(createdMigrationWave.ID))

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

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

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

func AssertEqualMigrationWaves(t *testing.T, got *api.MigrationWave, expected api.MigrationWave) {
khareyash05 marked this conversation as resolved.
Show resolved Hide resolved
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: 2,
Name: "Sample Stakeholders",
},
},
StakeholderGroups: []api.Ref{
{
ID: 3,
Name: "Sample Stakeholders Groups",
},
},
},
}