README.md

# CarlaTestHelper

## Description
This repo contains a testing library used in Carla end-to-end tests. It provides a library to describe and test conversations.

## Requirements
* Elixir - The language
* Mix - Elixir run tool (included with Elixir)
* Hex - Elixir package manage (included with Elixir)

## Installation
If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `carla_test_helper` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:carla_test_helper, "~> 0.1.0"}
  ]
end
```

Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
be found at [https://hexdocs.pm/carla_test_helper](https://hexdocs.pm/carla_test_helper).

## Example Test Case
If we want to write a test case for the "Request Detail - request details for optima" scenario, our file would look like this:
```elixir
defmodule BotTestsTest do
  use CarlaTestHelper.Case, async: true
  import CarlaTestHelper

  describe "request.detail" do

    carlatest "should provide details on optima", do: [
      # write conversation tests here 
      # message("optima", "request.details.optima")
    ]
    
  end

end
```

## Helper Functions 

### message

Parameters:
* message - Message to send.
* expected_action - Resulting response's action. 

Sends `message` for the asserts the response is the `expected_action`.

```elixir
message("optima", "request.details.optima")
```

### quick_reply

Parameters:
* label - Label of the button you want to *click*. 
* expected_action - Resulting response's action. 

Uses quick reply button using `label` and asserts the response is the `expected_action`.

```elixir
quick_reply("Build & Price", "build:_optima")
```

### button_action

Parameters:
* label - Label of the button you want to *click*. 
* expected_action - Resulting response's action. 

Similar to quick reply, uses gallery card item button using `label` and asserts the response is `expected_action`. 

```elixir
button_action("Ok", "hello_2")
```

### button_linkout

Parameters:
* label - Label of the button you want to *click*. 
* value - Linkout button payload value 

Similar to quick reply, uses gallery card item button using `label` and asserts the button payload is `value`. 

```elixir
button_linkout("Features & Specs", "https://kia.com/us/en/vehicle/optima/2018/features")
```

### debug_last_response

Prints out JSON of last response in the console

```elixir
debug_last_response()
```