RestFixtureTests.LetTestsV2

Included page: .RestFixtureTests.SetUp (edit)

script smartrics.rest.test.fitnesse.fixture.HttpServerFixture
check is started true
reset resources database

LET can use now the full power of JavaScript to extract data from the last response parts. The additions
to support the new JavaScript extensions will not break the existing .RestFixture. API.

The JavaScript extensions can be used to process more effectively JSON Content-Types.

LET can access the Fitnesse Symbols map to extract data previously stored

If the context of the let context is js the expression is evaluated as a javascript string. The value assigned
to the let label is the result of the evaluation of the content in the expression cell.

For example:

Table: Rest Fixture http://localhost:9876
let message js
'Hello, World!'
Hello, World!
let sum js
'2 + 5 = ' + (2 + 5)
2 + 5 = 7
let two_expressions js
a=1;
'a is ' + a
a is 1
let json_expr js

json = {
    "widget": {
        "debug": "on",
        "window": {
            "title": "Sample Konfabulator Widget",
            "name": "main_window",
            "width": 500,
            "height": 500
        },
        "image": { 
            "src": "Images/Sun.png",
            "name": "sun1",
            "hOffset": 250,
            "vOffset": 250,
            "alignment": "center"
        },
        "text": {
            "data": "Click Here",
            "size": 36,
            "style": "bold",
            "name": "text1",
            "hOffset": 250,
            "vOffset": 100,
            "alignment": "center",
            "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
        }
    }
};
json.widget.image.src
Images/Sun.png

(Example courtesy of http://json.org/example.html)

It's also possible to access the FitNesse symbols map. The scope where expression is evaluated contains the
'symbols' object

Table: Rest Fixture http://localhost:9876
setBody <resource><name>Bill</name><data>Some data on Bill</data></resource>
POST
201
Location : /resources/2
Content-Length : 0
Server : Jetty(6.0.2)
no-body
let id header
Location:/resources/(.+)
2
let id_string js
'The id is: ' + symbols.get('id')
The id is: 2

Symbols that don't exist return null (or, in fact, the null representation set via the
'restfixture.null.value.representation' confuguration variable.

comment
Table: Rest Fixture Config reassing_null_representation
restfixture.null.value.representation da_nil_123

comment
Table: Rest Fixture http://localhost:9876 reassing_null_representation
let x js String(symbols.get('doesnt_exist')) da_nil_123

The scope also contains the 'response' object, populated with the data from the last Rest response executed

For example

Table: Rest Fixture http://localhost:9876
GET
200
Set-Cookie : JID="ABC.${a.y}";
Content-Type : application/xml;charset=ISO-8859-1
Content-Length : 77
Server : Jetty(6.0.2)
{ "resource" : { "name" : "a funky name", "data" : "an important message" } }
let body_value js
response.body
{ "resource" : { "name" : "a funky name", "data" : "an important message" } }
setBody <resource><name>Bill</name><data>Some data on Bill</data></resource>
POST
201
Location : /resources/3
Content-Length : 0
Server : Jetty(6.0.2)
no-body
let status_code_value js
response.statusCode
201
let status_text_value js
response.statusText
Created
let c_len js
response.header0('Content-Length')
0
let loc_again js
response.header('Location', 0)
/resources/3
let h_size js
response.headerListSize('Location')
1
let all_h_size js
response.headersSize()
3

A particoular case is when the response is JSON (Content-Type : application/json). In such case, the property jsonbody
contains the JSON object that can be accessed using the dot notation. For example

Table: Rest Fixture http://localhost:9876
GET
200
Set-Cookie : JID="ABC.${a.y}";
Content-Type : application/json;charset=ISO-8859-1
Content-Length : 77
Server : Jetty(6.0.2)

jsonbody.resource.name=="a funky name"
jsonbody.resource.data=="an important message"

expected

{ "resource" : { "name" : "a funky name", "data" : "an important message" } }
actual
let body_value js
response.jsonbody
[object Object]
let body_value js
response.jsonbody.resource.name
a funky name