
*** Settings ***
Documentation     Test Suite for XOS Service APIs
Suite Setup       Setup
Suite Teardown    Teardown
Test Template     Verify API Functionality
Library           Collections
Library           String
Library           OperatingSystem
Library           XML
Library           RequestsLibrary
Library           CORDRobot
Library           ImportResource  resources=CORDRobot
Resource          ${TESTLIBRARY}
Variables         ../Properties/RestApiProperties.py

*** Variables ***
${xos_service}    core

*** Test Cases ***    TYPE        API
{% for m in proto.messages %}
{%- if xproto_unquote(m.options.app_label) != "core" -%}
{%- if m.name not in  ['XOSBase'] -%}
{% autoescape false %}
{% endautoescape %}
Create {{ m.name }}    CREATE    /xosapi/v1/{{ xproto_unquote(m.options.app_label) }}/{{ xproto_pluralize(m) | lower }}    ${json_{{ m.name | lower}}_1}
    [Tags]    {{ m.name }}

Update {{ m.name }}    UPDATE    /xosapi/v1/{{ xproto_unquote(m.options.app_label) }}/{{ xproto_pluralize(m) | lower }}    ${json_{{ m.name | lower}}_amend_1}    ${id}
    [Tags]    {{ m.name }}

Get {{ m.name }}    RETRIEVE    /xosapi/v1/{{ xproto_unquote(m.options.app_label) }}/{{ xproto_pluralize(m) | lower }}    ${json_{{ m.name | lower}}_amend_1}    ${id}    ${json_{{ m.name | lower}}_amend_key}
    [Tags]    {{ m.name }}

Delete {{ m.name }}    DELETE    /xosapi/v1/{{ xproto_unquote(m.options.app_label) }}/{{ xproto_pluralize(m) | lower }}    data_id=${id}
    [Tags]    {{ m.name }}
{% endif -%}
{% endif -%}
{% endfor %}

*** Keywords ***
Setup
    Setup Tests

Teardown
    Teardown Tests
