diff --git a/api/ruleset.go b/api/ruleset.go index c270171da..9b390f95b 100644 --- a/api/ruleset.go +++ b/api/ruleset.go @@ -121,7 +121,7 @@ func (h RuleSetHandler) Create(ctx *gin.Context) { _ = ctx.Error(err) return } - + h.Respond(ctx, http.StatusCreated, ruleset) } diff --git a/binding/migrationwave.go b/binding/migrationwave.go new file mode 100644 index 000000000..abacc3711 --- /dev/null +++ b/binding/migrationwave.go @@ -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 +} diff --git a/binding/richclient.go b/binding/richclient.go index 3896870fd..56516580d 100644 --- a/binding/richclient.go +++ b/binding/richclient.go @@ -27,6 +27,7 @@ type RichClient struct { File File Identity Identity JobFunction JobFunction + MigrationWave MigrationWave Proxy Proxy Review Review RuleSet RuleSet @@ -73,6 +74,9 @@ func New(baseUrl string) (r *RichClient) { JobFunction: JobFunction{ client: client, }, + MigrationWave: MigrationWave{ + client: client, + }, Proxy: Proxy{ client: client, }, diff --git a/docs/test-api-matrix.md b/docs/test-api-matrix.md index 052f0d4c2..2391f2bff 100644 --- a/docs/test-api-matrix.md +++ b/docs/test-api-matrix.md @@ -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**|||| diff --git a/test/api/migrationwave/api_test.go b/test/api/migrationwave/api_test.go new file mode 100644 index 000000000..afa2ac846 --- /dev/null +++ b/test/api/migrationwave/api_test.go @@ -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) + } + } +} diff --git a/test/api/migrationwave/pkg.go b/test/api/migrationwave/pkg.go new file mode 100644 index 000000000..429f6ff03 --- /dev/null +++ b/test/api/migrationwave/pkg.go @@ -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 +} diff --git a/test/api/migrationwave/samples.go b/test/api/migrationwave/samples.go new file mode 100644 index 000000000..4c0ef9fa1 --- /dev/null +++ b/test/api/migrationwave/samples.go @@ -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", + }, + }, + }, +}