{
   
    "$schema": "https://files-apicasystem-com.s3-eu-west-1.amazonaws.com/schemas/url-xi-schema-v1-0.json",
    "name": "Ticket Monster Order Tickets",
    "description": "Order tickets in Ticket Monster. Setup AppDynamics integration headers",
    "message": "Ticket booking {{bookingId}} done.",
    "variables": [
        {
            "key": "email",
            "type": "string",
            "usage": "inResponse",
            "value": "{{$faker.internet.email}}",
            "description": "A random generated email"
        },
        {
            "key": "bookingId",
            "type": "number",
            "usage": "inResponse"
        },
        {
            "key": "ticketPrice",
            "type": "number",
            "usage": "inResponse"
        },
        {
            "key": "ticketCategory",
            "type": "string",
            "usage": "inResponse"
        },
        {
            "key": "ticketSection",
            "type": "string",
            "usage": "inResponse"
        },
        {
            "key": "eventName",
            "type": "string",
            "usage": "inResponse"
        },
        {
            "key": "venueName",
            "type": "string",
            "usage": "inResponse"
        }
    ],
    "includes": [
      
        {
            "name": "testdata",
            "scope": "project",
            "type": "data",
            "src": "my_test_data.json"
        },
        {
            "name": "defaultVariables",
            "scope": "project",
            "type": "vars",
            "src": "default_test_vars.json"
        }
    ],
    "baseURL": "http://ticketmonster.apicasystem.com",
    "config": {
        "headers": {
            "ApicaScenario": "{{$testName}}",
            "ApicaCheckId": "92e02d76-63cf-4a54-a4d6-29b9488fdc1a ",
            "AppDynamicsSnapshotEnabled": "true"
        }
    },
    "steps": [
        {
            "name": "Home page",
            "requests": [
                {
                    "name":"Start page html",
                    "config": {
                        "method": "get",
                        "url": "/ticket-monster",
                        "headers": {
                            "ApicaStep": "{{$stepName}}"
                        }
                    },
                    
                    "extractors": [
                        {
                            "type": "regexp",
                            "expression": "<script type=\"text\/javascript\".*src=\"(.*.js)\".*",
                            "variable": "javaScripts",
                            "array": true
                        },
                        {
                            "type": "regexp",
                            "expression": "<title>(.+)<\/title>",
                            "variable": "title"
                        }
                    ],
                    "assertions": [
                        {
                            "description": "Home page must contain javascript references",
                            "failStep": true,
                            "reportFailOnly": false,
                            "value": "{{javaScripts}}",
                            "expression": "value.length > 1",
                            "type": "javaScript"
                        },
                        {
                            "description": "Page title must be Ticket Monster",
                            "type": "value",
                            "value": "{{title}}",
                            "expression": "Ticket Monster",
                            "failStep": true
                        }

                    ]
                }
            ]
        },
        {
            "name": "Get JavaScripts",
            "ignoreDuration": true,
            
            "iterator": {
                "varName": "javaScript",
                "value": "{{javaScripts}}"
            },
            "requests": [
                {
                    "name": "Javascript {{$lapIdx1}}",
                    "config": {
                        "method": "get",
                        "url": "/ticket-monster/{{javaScript}}"
                    },
                    
                    "extractors": [],
                    "notSaveData": true
                }
            ]
        },
        {
            "name": "Get Events",
            "requests": [
                {
                    "name": "Get all events",
                    "config": {
                        "method": "get",
                        "url": "/ticket-monster/rest/events",
                        "headers": {
                            "ApicaStep": "{{$stepName}}"
                        },
                        "params": {
                            "_": "{{$timestamp}}"
                        }
                    },
                    "scripts": [
                        {
                            "scope": "after",
                            "name":"Get random event id",
                            "script": "getRandomEvent.js"
                            
                        }
                    ],
                    "assertions": [
                        {
                            "description": "A numeric event id must be extracted",
                            "failStep": true,
                            "reportFailOnly": false,
                            "type": "javaScript",
                            "value": "{{eventId}}",
                            "expression": "!isNaN(value) && Number(value) >0"
                        }
                    ]
                },
                {
                    "name": "Get event details",
                    "config": {
                        "method": "get",
                        "url": "/ticket-monster/rest/events/{{eventId}}",
                        "headers": {
                            "ApicaStep": "{{$stepName}}"
                        },
                        "params": {
                            "_": "{{$timestamp}}"
                        }
                    }
                   
                   
                }
            ]
        },
        {
            "name": "Get Tickets",
            "requests": [
                {
                    "name": "Get shows",
                    "config": {
                        "method": "get",
                        "url": "/ticket-monster/rest/shows",
                        "params": {
                            "_": "{{$timestamp}}",
                            "event": "{{eventId}}"
                        },
                        "headers": {
                            "ApicaStep": "{{$stepName}}"
                        }
                    },
                    "extractors": [
                        {
                            "type": "jsonpath",
                            "expression": "$[*].id",
                            "variable": "showId"
                        }
                    ]
                },
                {
                    "name": "Select Tickets",
                    "config": {
                        "method": "get",
                        "url": "/ticket-monster/rest/shows/{{showId}}",
                        "params": {
                            "_": "{{$timestamp}}"
                        },
                        "headers": {
                            "ApicaStep": "{{$stepName}}"
                        }
                    },
                    "extractors": [
                        {
                            "type": "jsonpath",
                            "expression": "$.performances[*].id",
                            "variable": "performanceId"
                        },
                        {
                            "type": "jsonpath",
                            "expression": "$.event.name",
                            "variable": "eventName"
                        },
                        {
                            "type": "jsonpath",
                            "expression": "$.venue.name",
                            "variable": "venueName"
                        },
                        {
                            "type": "jsonpath",
                            "expression": "$.ticketPrices[*]",
                            "variable": "ticketPrices",
                            "index": true
                        },
                        {
                            "type": "jsonpath",
                            "expression": "$.ticketPrices[{{ticketPrices}}].id",
                            "variable": "ticketPriceId"
                        },
                        {
                            "type": "jsonpath",
                            "expression": "$.ticketPrices[{{ticketPrices}}].section.name",
                            "variable": "ticketSection"
                        
                        },
                        {
                            "type": "jsonpath",
                            "expression": "$.ticketPrices[{{ticketPrices}}].ticketCategory.description",
                            "variable": "ticketCategory"
    
                        },
                        {
                            "type": "jsonpath",
                            "expression": "$.ticketPrices[{{ticketPrices}}].price",
                            "variable": "ticketPrice"
    
                        }
                    ]
                }
            ]
        },
       
        {
            "name": "Checkout",
            "requests": [
                {
                    "name":"Create booking",
                    "config": {
                        "method": "post",
                        "url": "/ticket-monster/rest/bookings",
                        "data": {
                            "ticketRequests": [
                                {
                                    "ticketPrice": "{{ticketPriceId}}",
                                    "quantity": 1
                                }
                            ],
                            "email": "{{email}}",
                            "performance": "{{performanceId}}"
                        },
                        "headers": {
                            "ApicaStep": "{{$stepName}}"
                        }
                    },
                    "extractors": [
                        {
                            "type": "jsonpath",
                            "expression": "$.id",
                            "variable": "bookingId"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Undo the ticket booking",
            "requests": [
                {
                    "name":"Delete booking",
                    "config": {
                        "method": "delete",
                        "url": "/ticket-monster/rest/bookings/{{bookingId}}",
                        "headers": {
                            "ApicaStep": "{{$stepName}}"
                        }
                    }
                }
            ]
        }
    ]
}