diff --git a/githubtasksapi.go b/githubtasksapi.go index 71497b12..ddf58b8a 100644 --- a/githubtasksapi.go +++ b/githubtasksapi.go @@ -1,8 +1,12 @@ package main -import "golang.org/x/net/context" +import ( + "fmt" -import pb "github.com/brotherlogic/githubtasks/proto" + "golang.org/x/net/context" + + pb "github.com/brotherlogic/githubtasks/proto" +) // AddProject to the system func (s *Server) AddProject(ctx context.Context, req *pb.AddProjectRequest) (*pb.AddProjectResponse, error) { @@ -13,3 +17,19 @@ func (s *Server) AddProject(ctx context.Context, req *pb.AddProjectRequest) (*pb } return &pb.AddProjectResponse{}, err } + +// AddTask to the system +func (s *Server) AddTask(ctx context.Context, req *pb.AddTaskRequest) (*pb.AddTaskResponse, error) { + task := &pb.Task{Title: req.GetTitle(), Body: req.GetBody()} + + for _, p := range s.config.GetProjects() { + for _, m := range p.GetMilestones() { + if m.GetName() == req.GetMilestoneName() && m.GetNumber() == req.GetMilestoneNumber() { + m.Tasks = append(m.Tasks, task) + return &pb.AddTaskResponse{Task: task}, nil + } + } + } + + return nil, fmt.Errorf("Could not locate milestone %v/%v", req.GetMilestoneName(), req.GetMilestoneNumber()) +} diff --git a/githubtasksapi_test.go b/githubtasksapi_test.go index faf95406..646b80dd 100644 --- a/githubtasksapi_test.go +++ b/githubtasksapi_test.go @@ -11,9 +11,24 @@ func TestAddProject(t *testing.T) { s := InitTestServer() s.AddProject(context.Background(), - &pb.AddProjectRequest{Add: &pb.Project{Name: "test project"}}) + &pb.AddProjectRequest{Add: &pb.Project{Name: "test project", Milestones: []*pb.Milestone{&pb.Milestone{Name: "Testing", Number: 1}}}}) if len(s.config.GetProjects()) != 1 { t.Errorf("Project was not added") } + + _, err := s.AddTask(context.Background(), + &pb.AddTaskRequest{MilestoneName: "Testing", MilestoneNumber: 1, Title: "Add stuff", Body: "Do Stuff"}) + + if err != nil { + t.Errorf("Task add failed: %v", err) + } + + _, err = s.AddTask(context.Background(), + &pb.AddTaskRequest{MilestoneName: "Testing_No", MilestoneNumber: 10, Title: "Add stuff", Body: "Do Stuff"}) + + if err == nil { + t.Errorf("Task add did not fail") + } + } diff --git a/proto/githubtasks.proto b/proto/githubtasks.proto index ff03d637..fa50b97a 100644 --- a/proto/githubtasks.proto +++ b/proto/githubtasks.proto @@ -71,5 +71,5 @@ message AddTaskResponse { service TasksService { rpc AddProject(AddProjectRequest) returns (AddProjectResponse) {}; //rpc UpdateProject(UpdateProjectRequest) returns (UpdateProjectResponse) {}; - //rpc AddTask(AddTaskRequest) returns (AddTaskResponse) {}; + rpc AddTask(AddTaskRequest) returns (AddTaskResponse) {}; } \ No newline at end of file