From 801a1cd8940985d4eafc54652c8e8eea49523ce2 Mon Sep 17 00:00:00 2001 From: Simon Tucker Date: Sat, 18 Jan 2020 12:20:43 -0800 Subject: [PATCH] Validates ordering. This closes #45. --- githubtasksutils.go | 7 +++++++ githubtasksutils_test.go | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/githubtasksutils.go b/githubtasksutils.go index 158106a3..6a0d3e1d 100644 --- a/githubtasksutils.go +++ b/githubtasksutils.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "sort" "time" "golang.org/x/net/context" @@ -56,6 +57,12 @@ func (s *Server) processProjects(ctx context.Context) (time.Time, error) { for _, project := range s.config.GetProjects() { for _, milestone := range project.GetMilestones() { if milestone.GetState() == pb.Milestone_ACTIVE { + + // Sort tasks by the UID + sort.SliceStable(milestone.GetTasks(), func(i, j int) bool { + return milestone.GetTasks()[i].GetUid() < milestone.GetTasks()[j].GetUid() + }) + for _, task := range milestone.GetTasks() { if task.GetState() == pb.Task_ACTIVE { break diff --git a/githubtasksutils_test.go b/githubtasksutils_test.go index 30ae7d20..083e467a 100644 --- a/githubtasksutils_test.go +++ b/githubtasksutils_test.go @@ -194,3 +194,38 @@ func TestActiveTasks(t *testing.T) { } } + +func TestAddTasks(t *testing.T) { + s := InitTestServer() + s.AddProject(context.Background(), &pb.AddProjectRequest{Add: &pb.Project{Name: "Hello", Milestones: []*pb.Milestone{&pb.Milestone{Name: "Testing", State: pb.Milestone_ACTIVE, Number: 1, Tasks: []*pb.Task{}}}}}) + _, err := s.processProjects(context.Background()) + + _, err = s.AddTask(context.Background(), + &pb.AddTaskRequest{MilestoneName: "Testing", MilestoneNumber: 1, Title: "Add stuff", Body: "Do Stuff"}) + _, err = s.AddTask(context.Background(), + &pb.AddTaskRequest{MilestoneName: "Testing", MilestoneNumber: 1, Title: "Add more stuff", Body: "Do Stuff"}) + + _, err = s.processProjects(context.Background()) + if err != nil { + t.Fatalf("Bad project proc") + } + + resp, err := s.GetMilestones(context.Background(), &pb.GetMilestonesRequest{}) + if err != nil { + t.Fatalf("Cannot get milestones") + } + + chosenTask := "" + for _, m := range resp.GetMilestones() { + for _, tsk := range m.GetTasks() { + if tsk.GetNumber() > 0 { + chosenTask = tsk.GetTitle() + } + } + } + + if chosenTask != "Add stuff" { + t.Errorf("Ordering is out of line: %v", resp.GetMilestones()) + } + +}