func TestUpdateTodo(t *testing.T) { // given client := client.TodoClient{Host: "http://localhost:8080"} todo, _ := client.CreateTodo("foo", "bar") // when todo.Status = "doing" todo.Title = "baz" todo.Description = "bing" _, err := client.UpdateTodo(todo) // then if err != nil { t.Error(err) } todoResult, _ := client.GetTodo(todo.Id) if !reflect.DeepEqual(todo, todoResult) { t.Error("returned todo not updated") } // cleanup _ = client.DeleteTodo(todo.Id) }
func TestGetAllTodos(t *testing.T) { // given client := client.TodoClient{Host: "http://localhost:8080"} client.CreateTodo("foo", "bar") client.CreateTodo("baz", "bing") // when todos, err := client.GetAllTodos() // then if err != nil { t.Error(err) } if len(todos) != 2 { t.Errorf("wrong number of todos: %d", len(todos)) } if todos[0].Title != "foo" && todos[0].Description != "bar" { t.Error("returned todo not right") } if todos[1].Title != "baz" && todos[1].Description != "bing" { t.Error("returned todo not right") } // cleanup _ = client.DeleteTodo(todos[0].Id) _ = client.DeleteTodo(todos[1].Id) }
func TestUpdateNotFoundTodosStatus(t *testing.T) { // given client := client.TodoClient{Host: "http://localhost:8080"} id := int32(3) // when _, err := client.UpdateTodoStatus(id, api.DoingStatus) // then if err == nil { t.Error(err) } }
func TestGetNotFoundTodo(t *testing.T) { // given client := client.TodoClient{Host: "http://localhost:8080"} id := int32(3) // when _, err := client.GetTodo(id) // then if err == nil { t.Error(err) } }
func TestUpdateNonExistantTodo(t *testing.T) { // given client := client.TodoClient{Host: "http://localhost:8080"} todo, _ := client.CreateTodo("foo", "bar") _ = client.DeleteTodo(todo.Id) // when todo.Status = "doing" todo.Title = "baz" todo.Description = "bing" _, err := client.UpdateTodo(todo) // then if err == nil { t.Error(err) } }
func TestCreateTodo(t *testing.T) { // given client := client.TodoClient{Host: "http://localhost:8080"} // when todo, err := client.CreateTodo("foo", "bar") //then if err != nil { t.Error(err) } if todo.Title != "foo" && todo.Description != "bar" { t.Error("returned todo not right") } // cleanup _ = client.DeleteTodo(todo.Id) }
func TestDeleteTodo(t *testing.T) { // given client := client.TodoClient{Host: "http://localhost:8080"} todo, _ := client.CreateTodo("foo", "bar") id := todo.Id // when err := client.DeleteTodo(id) // then if err != nil { t.Error(err) } _, err = client.GetTodo(id) if err == nil { t.Error(err) } }
func TestUpdateTodosStatus(t *testing.T) { // given client := client.TodoClient{Host: "http://localhost:8080"} todo, _ := client.CreateTodo("foo", "bar") // when _, err := client.UpdateTodoStatus(todo.Id, api.DoingStatus) // then if err != nil { t.Error(err) } todoResult, _ := client.GetTodo(todo.Id) if todoResult.Status != "doing" { t.Error("returned todo status not updated") } // cleanup _ = client.DeleteTodo(todo.Id) }
func main() { app := cli.NewApp() app.Name = "todo cli" app.Usage = "cli to work with the `todo` microservice" app.Version = "0.0.1" app.Flags = []cli.Flag{ cli.StringFlag{"host", "http://localhost:8080", "Todo service host", "APP_HOST", nil}, } app.Commands = []cli.Command{ { Name: "add", Usage: "(title description) create a todo", Action: func(c *cli.Context) { title := c.Args().Get(0) desc := c.Args().Get(1) host := c.GlobalString("host") client := client.TodoClient{Host: host} todo, err := client.CreateTodo(title, desc) if err != nil { log.Fatal(err) return } fmt.Printf("%+v\n", todo) }, }, { Name: "ls", Usage: "list all todos", Action: func(c *cli.Context) { host := c.GlobalString("host") client := client.TodoClient{Host: host} todos, err := client.GetAllTodos() if err != nil { log.Fatal(err) return } for _, todo := range todos { fmt.Printf("%+v\n", todo) } }, }, { Name: "doing", Usage: "(id) update a todo status to 'doing'", Action: func(c *cli.Context) { idStr := c.Args().Get(0) id, err := strconv.Atoi(idStr) if err != nil { log.Print(err) return } host := c.GlobalString("host") client := client.TodoClient{Host: host} todo, err := client.UpdateTodoStatus(int32(id), "doing") if err != nil { log.Fatal(err) return } fmt.Printf("%+v\n", todo) }, }, { Name: "done", Usage: "(id) update a todo status to 'done'", Action: func(c *cli.Context) { idStr := c.Args().Get(0) id, err := strconv.Atoi(idStr) if err != nil { log.Print(err) return } host := c.GlobalString("host") client := client.TodoClient{Host: host} todo, err := client.UpdateTodoStatus(int32(id), "done") if err != nil { log.Fatal(err) return } fmt.Printf("%+v\n", todo) }, }, { Name: "save", Usage: "(id title description) update a todo title and description", Action: func(c *cli.Context) { idStr := c.Args().Get(0) id, err := strconv.Atoi(idStr) if err != nil { log.Print(err) return } title := c.Args().Get(1) desc := c.Args().Get(2) host := c.GlobalString("host") client := client.TodoClient{Host: host} todo, err := client.GetTodo(int32(id)) if err != nil { log.Fatal(err) return } todo.Title = title todo.Description = desc todo2, err := client.UpdateTodo(todo) if err != nil { log.Fatal(err) return } fmt.Printf("%+v\n", todo2) }, }, } app.Run(os.Args) }