From 31e3f51638ceb217655b29db5927e7e949490a37 Mon Sep 17 00:00:00 2001 From: Marek Aufart Date: Thu, 5 Oct 2023 11:31:53 +0200 Subject: [PATCH] Initial Asessment API test Signed-off-by: Marek Aufart --- binding/assessment.go | 50 ++++++++++++++++++++ binding/richclient.go | 4 ++ test/api/assessment/api_test.go | 81 +++++++++++++++++++++++++++++++++ test/api/assessment/pkg.go | 20 ++++++++ test/api/assessment/samples.go | 53 +++++++++++++++++++++ 5 files changed, 208 insertions(+) create mode 100644 binding/assessment.go create mode 100644 test/api/assessment/api_test.go create mode 100644 test/api/assessment/pkg.go create mode 100644 test/api/assessment/samples.go diff --git a/binding/assessment.go b/binding/assessment.go new file mode 100644 index 000000000..ebe4cf6a9 --- /dev/null +++ b/binding/assessment.go @@ -0,0 +1,50 @@ +package binding + +import ( + "github.com/konveyor/tackle2-hub/api" +) + +// +// Assessment API. +type Assessment struct { + client *Client +} + +// +// Create a Assessment. +func (h *Assessment) Create(r *api.Assessment) (err error) { + err = h.client.Post(api.AssessmentsRoot, &r) + return +} + +// +// Get a Assessment by ID. +func (h *Assessment) Get(id uint) (r *api.Assessment, err error) { + r = &api.Assessment{} + path := Path(api.AssessmentRoot).Inject(Params{api.ID: id}) + err = h.client.Get(path, r) + return +} + +// +// List Assessments. +func (h *Assessment) List() (list []api.Assessment, err error) { + list = []api.Assessment{} + err = h.client.Get(api.AssessmentsRoot, &list) + return +} + +// +// Update a Assessment. +func (h *Assessment) Update(r *api.Assessment) (err error) { + path := Path(api.AssessmentRoot).Inject(Params{api.ID: r.ID}) + err = h.client.Put(path, r) + return +} + +// +// Delete a Assessment. +func (h *Assessment) Delete(id uint) (err error) { + err = h.client.Delete(Path(api.AssessmentRoot).Inject(Params{api.ID: id})) + return +} diff --git a/binding/richclient.go b/binding/richclient.go index 6302ed07a..a586e4856 100644 --- a/binding/richclient.go +++ b/binding/richclient.go @@ -22,6 +22,7 @@ func init() { type RichClient struct { // Resources APIs. Application Application + Assessment Assessment Bucket Bucket BusinessService BusinessService Dependency Dependency @@ -58,6 +59,9 @@ func New(baseUrl string) (r *RichClient) { Application: Application{ client: client, }, + Assessment: Assessment{ + client: client, + }, Bucket: Bucket{ client: client, }, diff --git a/test/api/assessment/api_test.go b/test/api/assessment/api_test.go new file mode 100644 index 000000000..1445021e8 --- /dev/null +++ b/test/api/assessment/api_test.go @@ -0,0 +1,81 @@ +package assessment + +import ( + "fmt" + "testing" + + "github.com/konveyor/tackle2-hub/test/assert" +) + +func TestAssessmentCRUD(t *testing.T) { + for _, r := range Samples { + t.Run(fmt.Sprintf("%s for application %s", r.Questionnaire.Name, r.Application.Name), func(t *testing.T) { + // Create. + err := Assessment.Create(&r) + if err != nil { + t.Errorf(err.Error()) + } + + // Get. + got, err := Assessment.Get(r.ID) + if err != nil { + t.Errorf(err.Error()) + } + if assert.FlatEqual(got, r) { + t.Errorf("Different response error. Got %v, expected %v", got, r) + } + + // Update. + r.Name = "Updated " + r.Name + r.Required = false + err = Assessment.Update(&r) + if err != nil { + t.Errorf(err.Error()) + } + + got, err = Assessment.Get(r.ID) + if err != nil { + t.Errorf(err.Error()) + } + if got.Name != r.Name { + t.Errorf("Different response error. Got %s, expected %s", got.Name, r.Name) + } + if got.Required != false { + t.Errorf("Required should be false after update. Got %+v, expected %+v", got, r) + } + + // Delete. + err = Assessment.Delete(r.ID) + if err != nil { + t.Errorf(err.Error()) + } + + _, err = Assessment.Get(r.ID) + if err == nil { + t.Errorf("Resource exits, but should be deleted: %v", r) + } + }) + } +} + +func TestAssessmentList(t *testing.T) { + samples := Samples + + for name := range samples { + sample := samples[name] + assert.Must(t, Assessment.Create(&sample)) + samples[name] = sample + } + + got, err := Assessment.List() + if err != nil { + t.Errorf(err.Error()) + } + if assert.FlatEqual(got, &samples) { + t.Errorf("Different response error. Got %v, expected %v", got, samples) + } + + for _, r := range samples { + assert.Must(t, Assessment.Delete(r.ID)) + } +} diff --git a/test/api/assessment/pkg.go b/test/api/assessment/pkg.go new file mode 100644 index 000000000..eb8c06323 --- /dev/null +++ b/test/api/assessment/pkg.go @@ -0,0 +1,20 @@ +package assessment + +import ( + "github.com/konveyor/tackle2-hub/binding" + "github.com/konveyor/tackle2-hub/test/api/client" +) + +var ( + RichClient *binding.RichClient + Assessment binding.Assessment +) + + +func init() { + // Prepare RichClient and login to Hub API (configured from env variables). + RichClient = client.PrepareRichClient() + + // Shortcut for Assessment-related RichClient methods. + Assessment = RichClient.Assessment +} diff --git a/test/api/assessment/samples.go b/test/api/assessment/samples.go new file mode 100644 index 000000000..7fce20351 --- /dev/null +++ b/test/api/assessment/samples.go @@ -0,0 +1,53 @@ +package assessment + +import ( + "github.com/konveyor/tackle2-hub/api" + "github.com/konveyor/tackle2-hub/assessment" + "github.com/konveyor/tackle2-hub/test/api/application" + "github.com/konveyor/tackle2-hub/test/api/questionnaire" +) + +// Set of valid resources for tests and reuse. +var ( + Assessment1 = api.Assessment{ + // Ref resource are created by the test. + Application: &api.Ref{ + Name: application.Minimal.Name, + }, + Questionnaire: api.Ref{ + Name: questionnaire.Questionnaire1.Name, + }, + Sections: []assessment.Section{ + { + Order: 1, + Name: "Section 1", + Questions: []assessment.Question{ + { + Order: 1, + Text: "What is your favorite color?", + Explanation: "Please tell us your favorite color.", + Answers: []assessment.Answer{ + { + Order: 1, + Text: "Red", + Risk: "red", + }, + { + Order: 2, + Text: "Green", + Risk: "green", + }, + { + Order: 3, + Text: "Blue", + Risk: "yellow", + Selected: true, + }, + }, + }, + }, + }, + }, + } + Samples = []api.Assessment{Assessment1} +)