{
	"info": {
		"_postman_id": "69fb733b-51ec-49b2-aa04-e2330c1d26b6",
		"name": "WAVE Server REST API Tests copy",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"item": [
		{
			"name": "Read Available Tests",
			"item": [
				{
					"name": "Read Available Tests",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "7c432e7c-d0f9-4583-977a-55ca5d1e42a2",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"var availableTests = pm.response.json();",
									"",
									"pm.test(\"JSON structure is as expected\", function () {",
									"    pm.expect(typeof availableTests).to.equal(\"object\");",
									"    for (var api of Object.keys(availableTests)) {",
									"        pm.expect(availableTests[api]).to.be.an.instanceof(Array);",
									"        var apiRegExp = new RegExp(\"^/\" + api, \"i\");",
									"        for (var test of availableTests[api]) {",
									"            pm.expect(test).to.match(apiRegExp);",
									"        }",
									"    }",
									"});",
									"",
									"var includedTests = [];",
									"var excludedTests = [];",
									"var specialTimeoutTest = \"\";",
									"",
									"var apis = Object.keys(availableTests);",
									"for(var api of apis) {",
									"    if (availableTests[api].length > 50) {",
									"        var subDirs = availableTests[api].map(test => test.split(\"/\").filter(part => !!part).join(\"/\").split(\"/\")[1]).reduce((acc, curr) => acc.indexOf(curr) === -1 ? acc.concat([curr]) : acc, []);",
									"        if (subDirs.length > 2) {",
									"            includedTests.push(\"/\" + api);",
									"            excludedTests.push(\"/\" + api + \"/\" + subDirs[0]);",
									"            specialTimeoutTest = availableTests[api][availableTests[api].length - 1];",
									"            break;",
									"        }",
									"        ",
									"    }",
									"}",
									"",
									"pm.globals.set(\"available_tests\", availableTests);",
									"pm.globals.set(\"included_tests\", JSON.stringify(includedTests));",
									"pm.globals.set(\"excluded_tests\", JSON.stringify(excludedTests));",
									"pm.globals.set(\"special_timeout_test\", specialTimeoutTest.replace(\".\", \"\"));"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"tests"
							]
						}
					},
					"response": []
				}
			],
			"protocolProfileBehavior": {}
		},
		{
			"name": "Create and Read Sessions",
			"item": [
				{
					"name": "Start expiring session remove expiration date",
					"item": [
						{
							"name": "Create Session With Expiration",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "71470bf7-293b-4863-a74e-193d86f2e6ac",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
											"",
											"pm.test(\"Responds with token in JSON format\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(jsonData.token).to.match(tokenRegex);",
											"});",
											"",
											"",
											"const response = pm.response.json();",
											"const token = response.token;",
											"pm.globals.set(\"session_token\", token);"
										],
										"type": "text/javascript"
									}
								},
								{
									"listen": "prerequest",
									"script": {
										"id": "7d59b7a7-78f8-46fc-a3f1-bd06f7ec31b7",
										"exec": [
											"var expirationDate = Date.now() + 10000;",
											"pm.globals.set(\"expiration_date\", expirationDate);"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [
									{
										"key": "Content-Type",
										"name": "Content-Type",
										"type": "text",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "raw",
									"raw": "{\n\t\"expiration_date\": {{expiration_date}}\n}"
								},
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "daaa5a98-f330-4ca5-afc5-c4051e7a94c1",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
											"",
											"pm.test(\"JSON structure contains expiration date\", function () {",
											"    pm.expect(jsonData).to.have.property(\"expiration_date\");",
											"});",
											"",
											"var expirationDate = pm.globals.get(\"expiration_date\");",
											"",
											"pm.test(\"Expiration date is as specified\", function () {",
											"    pm.expect(Date.parse(jsonData.expiration_date)).to.equal(expirationDate);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						},
						{
							"name": "Start Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "d6e7a096-5bed-44b0-8772-ab80c1f53447",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/start",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"start"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "66075d71-55ed-4835-b6b5-ada854653d04",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
											"",
											"pm.test(\"JSON structure contains expiration date\", function () {",
											"    pm.expect(jsonData).to.have.property(\"expiration_date\");",
											"});",
											"",
											"pm.test(\"Expiration date is null\", function () {",
											"    pm.expect(jsonData.expiration_date).to.be.null;",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						},
						{
							"name": "Clean Up",
							"request": {
								"method": "DELETE",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				}
			],
			"protocolProfileBehavior": {}
		},
		{
			"name": "Read Public Sessions",
			"item": [
				{
					"name": "Read Public Sessions",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "a365eb0b-ba55-490a-8cd9-7286a1d39cd2",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Response is JSON Array\", function () {",
									"    var jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.be.an.instanceof(Array);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/public",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"public"
							]
						}
					},
					"response": []
				}
			],
			"protocolProfileBehavior": {}
		},
		{
			"name": "Find Session",
			"item": [
				{
					"name": "Create Session No Configuration",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "52719d31-ef36-4b74-8c5c-05d554e916c0",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
									"",
									"pm.test(\"Responds with token in JSON format\", function () {",
									"    var jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property(\"token\");",
									"    pm.expect(jsonData.token).to.match(tokenRegex);",
									"});",
									"",
									"",
									"const response = pm.response.json();",
									"const token = response.token;",
									"pm.globals.set(\"session_token\", token);"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"name": "Content-Type",
								"type": "text",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": ""
						},
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions"
							]
						}
					},
					"response": []
				},
				{
					"name": "Find Session Token",
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"id": "753a7451-2a92-4de0-a2e2-d0d9c66de134",
								"exec": [
									"const token = pm.globals.get(\"session_token\");",
									"pm.globals.set(\"session_token_fragment\", token.split(\"-\").shift());"
								],
								"type": "text/javascript"
							}
						},
						{
							"listen": "test",
							"script": {
								"id": "2a465de6-f66e-4161-ad7e-7c1c3738befd",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"const sessionToken = pm.globals.get(\"session_token\");",
									"",
									"pm.test(\"Found token is original token\", function () {",
									"    var jsonData = pm.response.json();",
									"    pm.expect(jsonData.token).to.equal(sessionToken);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token_fragment}}",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"{{session_token_fragment}}"
							]
						}
					},
					"response": []
				},
				{
					"name": "Clean Up",
					"request": {
						"method": "DELETE",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"{{session_token}}"
							]
						}
					},
					"response": []
				},
				{
					"name": "Find Session Too Short Fragment",
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"id": "0e7ff96f-8c5a-46f3-a1a0-258ad59b96e0",
								"exec": [
									"const token = pm.globals.get(\"session_token\");",
									"pm.globals.set(\"session_token_fragment\", token.split(\"-\").shift());"
								],
								"type": "text/javascript"
							}
						},
						{
							"listen": "test",
							"script": {
								"id": "eb36e017-4cdc-458a-b399-8998df800fa1",
								"exec": [
									"pm.test(\"Status code is 404\", function () {",
									"    pm.response.to.have.status(404);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/1234567",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"1234567"
							]
						}
					},
					"response": []
				}
			],
			"protocolProfileBehavior": {}
		},
		{
			"name": "Read Next Test",
			"item": [
				{
					"name": "Clean Up",
					"request": {
						"method": "DELETE",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"{{session_token}}"
							]
						}
					},
					"response": []
				},
				{
					"name": "Read Next Test of Invalid Session",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "9c8af59c-8d9b-4264-acb5-a0bdf3af434a",
								"exec": [
									"pm.test(\"Status code is 404\", function () {",
									"    pm.response.to.have.status(404);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/next",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"tests",
								"{{session_token}}",
								"next"
							]
						}
					},
					"response": []
				},
				{
					"name": "Create Session \\w Configuration",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "c16bf66e-283e-40b9-b98d-8b058ec1575a",
								"exec": [
									"const response = pm.response.json();",
									"const token = response.token;",
									"pm.globals.set(\"session_token\", token);"
								],
								"type": "text/javascript"
							}
						},
						{
							"listen": "prerequest",
							"script": {
								"id": "66780bc8-88e6-44d2-a6c8-5c649141accd",
								"exec": [
									"var automaticTimeout = 120000;",
									"var manualTimeout = 1000000;",
									"var specialTimeout = 2000;",
									"",
									"pm.globals.set(\"automatic_timeout\", automaticTimeout);",
									"pm.globals.set(\"manual_timeout\", manualTimeout);",
									"pm.globals.set(\"special_timeout\", specialTimeout);",
									"",
									"const availableTests = pm.globals.get(\"available_tests\");",
									"const test1 = availableTests[Object.keys(availableTests)[0]][0];",
									"",
									"pm.globals.set(\"single_test_1\", test1);"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"name": "Content-Type",
								"type": "text",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"tests\": {\n        \"include\": [\"{{single_test_1}}\"]\n    },\n    \"types\": [\n        \"automatic\"\n    ]\n}"
						},
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions"
							]
						}
					},
					"response": []
				},
				{
					"name": "Read Next Test of Pending Session",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "82ca12ad-3be5-419a-9a45-14164b0eaf60",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"var jsonData = pm.response.json();",
									"const nextTest = jsonData.next_test;",
									"const test = \"/\" + nextTest.split(\"/\").slice(3).join(\"/\").split(\"?\")[0];",
									"",
									"const web_root = pm.environment.get(\"web_root\");",
									"",
									"pm.test(\"Returned test is new session page\", function () {",
									"    pm.expect(test).to.equal(\"/\" + web_root + \"/newsession.html\");",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/next",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"tests",
								"{{session_token}}",
								"next"
							]
						}
					},
					"response": []
				},
				{
					"name": "Start Session",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "135d7d9e-1869-4c02-9c6a-7c0ea522e140",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/start",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"{{session_token}}",
								"start"
							]
						}
					},
					"response": []
				},
				{
					"name": "Read Next Test of Running Session",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "1bfe8c41-2144-46de-824d-2d1e3c88205b",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"var jsonData = pm.response.json();",
									"const nextTest = jsonData.next_test;",
									"const test = \"/\" + nextTest.split(\"/\").slice(3).join(\"/\").split(\"?\")[0];",
									"const api = test.split(\"/\").filter(part => !!part)[0]",
									"const availableTests = pm.globals.get(\"available_tests\")",
									"",
									"pm.test(\"Returned test is valid test\", function () {",
									"    pm.expect(availableTests).to.have.property(api);",
									"    pm.expect(availableTests[api]).to.contain(test)",
									"});",
									"",
									"",
									"setTimeout(function () {}, 1000);"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/next",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"tests",
								"{{session_token}}",
								"next"
							]
						}
					},
					"response": []
				},
				{
					"name": "Create Result",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "02cfcc68-43ed-4533-a80c-699954900390",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"name": "Content-Type",
								"value": "application/json",
								"type": "text"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"test\": \"{{current_test}}\",\n  \"status\": \"OK\",\n  \"message\": null,\n  \"subtests\": [\n    {\n      \"name\": \"Subtest testing feature xy\",\n      \"status\": \"FAIL\",\n      \"message\": \"Error message\"\n    }\n  ]\n}"
						},
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token}}",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"results",
								"{{session_token}}"
							]
						}
					},
					"response": []
				},
				{
					"name": "Read Next Test of Completed Session",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "c8f3d89b-34ca-4d39-977e-638d3630ee5b",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"var jsonData = pm.response.json();",
									"const nextTest = jsonData.next_test;",
									"const test = \"/\" + nextTest.split(\"/\").slice(3).join(\"/\").split(\"?\")[0];",
									"",
									"const web_root = pm.environment.get(\"web_root\");",
									"",
									"pm.test(\"Returned test is new session page\", function () {",
									"    pm.expect(test).to.equal(\"/\" + web_root + \"/finish.html\");",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/next",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"tests",
								"{{session_token}}",
								"next"
							]
						}
					},
					"response": []
				},
				{
					"name": "Clean Up",
					"request": {
						"method": "DELETE",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"{{session_token}}"
							]
						}
					},
					"response": []
				},
				{
					"name": "Create Session \\w Configuration Copy",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "bcde140e-51cf-4d7c-b745-5e56f9b59034",
								"exec": [
									"const response = pm.response.json();",
									"const token = response.token;",
									"pm.globals.set(\"session_token\", token);"
								],
								"type": "text/javascript"
							}
						},
						{
							"listen": "prerequest",
							"script": {
								"id": "c4354118-88ff-4b5a-9252-dac19264c262",
								"exec": [
									"var automaticTimeout = 120000;",
									"var manualTimeout = 1000000;",
									"var specialTimeout = 2000;",
									"",
									"pm.globals.set(\"automatic_timeout\", automaticTimeout);",
									"pm.globals.set(\"manual_timeout\", manualTimeout);",
									"pm.globals.set(\"special_timeout\", specialTimeout);"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"name": "Content-Type",
								"type": "text",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"tests\": {\n        \"include\": {{included_tests}},\n        \"exclude\": {{excluded_tests}}\n    },\n    \"types\": [\n        \"automatic\"\n    ],\n    \"timeouts\": {\n        \"automatic\": 1000\n    },\n    \"labels\": [\"label1\", \"label2\"]\n}"
						},
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions"
							]
						}
					},
					"response": []
				},
				{
					"name": "Start Session",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "737fc854-7901-4819-96eb-4883f5b15bc9",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/start",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"{{session_token}}",
								"start"
							]
						}
					},
					"response": []
				},
				{
					"name": "Pause Session",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "a28a515f-0e48-4c23-a418-3b30c1e6dc71",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/pause",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"{{session_token}}",
								"pause"
							]
						}
					},
					"response": []
				},
				{
					"name": "Read Next Test of Aborted Session",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "1b842c47-c67c-4bfe-a77d-7d5b553e001b",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"var jsonData = pm.response.json();",
									"const nextTest = jsonData.next_test;",
									"const test = \"/\" + nextTest.split(\"/\").slice(3).join(\"/\").split(\"?\")[0];",
									"",
									"const web_root = pm.environment.get(\"web_root\");",
									"",
									"pm.test(\"Returned test is new session page\", function () {",
									"    pm.expect(test).to.equal(\"/\" + web_root + \"/pause.html\");",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/next",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"tests",
								"{{session_token}}",
								"next"
							]
						}
					},
					"response": []
				},
				{
					"name": "Stop Session",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "e2318e93-7446-43be-ad52-99201a85fcbf",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/stop",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"{{session_token}}",
								"stop"
							]
						}
					},
					"response": []
				},
				{
					"name": "Read Next Test of Aborted Session",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "c3bdd37f-c048-4a2a-979b-deca61758292",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"var jsonData = pm.response.json();",
									"const nextTest = jsonData.next_test;",
									"const test = \"/\" + nextTest.split(\"/\").slice(3).join(\"/\").split(\"?\")[0];",
									"",
									"const web_root = pm.environment.get(\"web_root\");",
									"",
									"pm.test(\"Returned test is new session page\", function () {",
									"    pm.expect(test).to.equal(\"/\" + web_root + \"/finish.html\");",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/next",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"tests",
								"{{session_token}}",
								"next"
							]
						}
					},
					"response": []
				},
				{
					"name": "Clean Up",
					"request": {
						"method": "DELETE",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"{{session_token}}"
							]
						}
					},
					"response": []
				}
			],
			"protocolProfileBehavior": {}
		},
		{
			"name": "Control Session",
			"item": [
				{
					"name": "Setup",
					"item": [
						{
							"name": "Create Session No Configuration",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "506a2f52-ab98-4e61-943c-ca0f7cab7f28",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
											"",
											"pm.test(\"Responds with token in JSON format\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(jsonData.token).to.match(tokenRegex);",
											"});",
											"",
											"",
											"const response = pm.response.json();",
											"const token = response.token;",
											"pm.globals.set(\"session_token\", token);"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [
									{
										"key": "Content-Type",
										"name": "Content-Type",
										"type": "text",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "raw",
									"raw": ""
								},
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Pause Pending Session",
					"item": [
						{
							"name": "Pause Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "85ee0aec-9fbd-4544-a938-fb821e576fac",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/pause",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"pause"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "f42cdf2c-5304-420d-b79d-f3345ac4455d",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Status is pending\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData.status).to.equal(\"pending\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Start Pending Session",
					"item": [
						{
							"name": "Start Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "01d6bfab-8ec5-4317-8595-667778be42d8",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/start",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"start"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "dec9ab62-5014-4b6e-a747-be83dce71a3d",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"pm.test(\"Status is running\", function () {",
											"    pm.expect(jsonData.status).to.equal(\"running\");",
											"});",
											"",
											"pm.test(\"Start date is set\", function () {",
											"    pm.expect(Date.parse(jsonData.date_started)).to.be.below(Date.now());",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Start Running Session",
					"item": [
						{
							"name": "Start Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "1db3770b-6fa9-40b9-875c-56d113d0ff5b",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/start",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"start"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "84ccae85-36d6-4226-850c-269cbfddff8e",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Status is running\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData.status).to.equal(\"running\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Pause Running Session",
					"item": [
						{
							"name": "Pause Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "29e3a3ed-7b75-43a2-99b3-7300bd39044a",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/pause",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"pause"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "614689fb-9d26-4ac1-b89c-eca305a957f2",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Status is paused\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData.status).to.equal(\"paused\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Pause Paused Session",
					"item": [
						{
							"name": "Pause Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "221d9b75-af5c-4aa9-b13b-6d3af10578aa",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/pause",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"pause"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "34147223-f4f2-4c11-a60b-09396d46c152",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Status is paused\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData.status).to.equal(\"paused\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Start Paused Session",
					"item": [
						{
							"name": "Start Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "41b686b9-80e9-4c16-906d-ca948c0873a6",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/start",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"start"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "7a053b4c-87c6-426c-95d6-750c5d478aba",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Status is running\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData.status).to.equal(\"running\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Stop Running Session",
					"item": [
						{
							"name": "Stop Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "52600705-47f5-4ec7-bf3c-ff2243022625",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/stop",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"stop"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "39c0a314-3efe-4977-8c20-33666ea8e0e6",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"pm.test(\"Status is aborted\", function () {",
											"    pm.expect(jsonData.status).to.equal(\"aborted\");",
											"});",
											"",
											"pm.test(\"Finish date is set\", function () {",
											"    pm.expect(Date.parse(jsonData.date_finished)).to.be.below(Date.now());",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Stop Aborted Session",
					"item": [
						{
							"name": "Stop Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "0d53b83e-5b8b-4d69-980f-ddc2736d2a5f",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/stop",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"stop"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "4217abb8-3e6e-4125-8aaf-92b378136f87",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Status is aborted\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData.status).to.equal(\"aborted\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"id": "f66a7794-ade7-41e7-abc6-560af7acfd53",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						},
						{
							"listen": "test",
							"script": {
								"id": "04ca0247-e30e-470a-8282-d7a5eafc5b92",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Start Aborted Session",
					"item": [
						{
							"name": "Start Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "0a17b42b-dc5e-4588-88c5-b8bc29065dd0",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/start",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"start"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "5b908a57-2fe5-4309-86ab-933c196badfd",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Status is aborted\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData.status).to.equal(\"aborted\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"id": "fe61b75f-f106-43f6-bcaf-ad4400ae1ef4",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						},
						{
							"listen": "test",
							"script": {
								"id": "f94a7f25-72eb-4bcf-9ddb-573ca2cfbb1f",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Pause Aborted Session",
					"item": [
						{
							"name": "Pause Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "c3915b66-bcd4-4a23-8b74-2fd9c16210d8",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/pause",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"pause"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "c94d14bf-e48f-4a85-8939-e45bc66be6d0",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Status is aborted\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData.status).to.equal(\"aborted\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"id": "eb6a4051-3cd7-4d75-93ec-8f0c4463cc98",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						},
						{
							"listen": "test",
							"script": {
								"id": "64295661-300d-4773-8856-6c3ecbe158b0",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Setup",
					"item": [
						{
							"name": "Clean Up",
							"request": {
								"method": "DELETE",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}"
									]
								}
							},
							"response": []
						},
						{
							"name": "Create Session No Configuration",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "4d33ee50-4368-42f3-b8a4-ab0ff27f00f6",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
											"",
											"pm.test(\"Responds with token in JSON format\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(jsonData.token).to.match(tokenRegex);",
											"});",
											"",
											"",
											"const response = pm.response.json();",
											"const token = response.token;",
											"pm.globals.set(\"session_token\", token);"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [
									{
										"key": "Content-Type",
										"name": "Content-Type",
										"type": "text",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "raw",
									"raw": ""
								},
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions"
									]
								}
							},
							"response": []
						}
					],
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"id": "6a217097-fdf7-4c99-b005-723acf9b8389",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						},
						{
							"listen": "test",
							"script": {
								"id": "37c80a2a-9508-4e8d-93d5-dfbfac837bed",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Stop Pending Session",
					"item": [
						{
							"name": "Stop Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "6d0635aa-2b63-4e0f-89d2-da4d47741160",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/stop",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"stop"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "90895f8b-5398-4eeb-9f35-5869736dc46c",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Status is aborted\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData.status).to.equal(\"aborted\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Setup",
					"item": [
						{
							"name": "Clean Up",
							"request": {
								"method": "DELETE",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}"
									]
								}
							},
							"response": []
						},
						{
							"name": "Create Session No Configuration",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "e4929021-a5b2-4839-8537-bfb7ea1935c2",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
											"",
											"pm.test(\"Responds with token in JSON format\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(jsonData.token).to.match(tokenRegex);",
											"});",
											"",
											"",
											"const response = pm.response.json();",
											"const token = response.token;",
											"pm.globals.set(\"session_token\", token);"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [
									{
										"key": "Content-Type",
										"name": "Content-Type",
										"type": "text",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "raw",
									"raw": ""
								},
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions"
									]
								}
							},
							"response": []
						},
						{
							"name": "Start Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "2e2703a2-d74f-46ba-b168-9f3b64888086",
										"exec": [
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/start",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"start"
									]
								}
							},
							"response": []
						},
						{
							"name": "Pause Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "df98f07d-4bb3-467d-92aa-e9122db42e31",
										"exec": [
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/pause",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"pause"
									]
								}
							},
							"response": []
						}
					],
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"id": "c3e166ef-de4b-4c02-89c3-547aaa7a6555",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						},
						{
							"listen": "test",
							"script": {
								"id": "a86891f3-8f1d-48c6-9e08-0a792bb1627a",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Stop Paused Session Copy",
					"item": [
						{
							"name": "Stop Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "3ea151c0-8286-419f-bed6-0c06da912850",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/stop",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"stop"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "f10cf08b-9a1a-4f3e-8b3e-8be52f82734e",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Status is aborted\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData.status).to.equal(\"aborted\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"id": "a1b3bf2e-4d09-4ee1-9063-6c4c842fcd94",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						},
						{
							"listen": "test",
							"script": {
								"id": "a6745e90-5382-445d-9d65-db74aff7af1b",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Setup",
					"item": [
						{
							"name": "Clean Up",
							"request": {
								"method": "DELETE",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}"
									]
								}
							},
							"response": []
						},
						{
							"name": "Create Session One Test",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "da2ec442-44fd-432e-b335-abe4dd73c182",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
											"",
											"pm.test(\"Responds with token in JSON format\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(jsonData.token).to.match(tokenRegex);",
											"});",
											"",
											"",
											"const response = pm.response.json();",
											"const token = response.token;",
											"pm.globals.set(\"session_token\", token);"
										],
										"type": "text/javascript"
									}
								},
								{
									"listen": "prerequest",
									"script": {
										"id": "47665454-d468-4964-8167-bd80051a3937",
										"exec": [
											"const availableTests = pm.globals.get(\"available_tests\");",
											"const test = availableTests[Object.keys(availableTests)[0]][0]",
											"",
											"pm.globals.set(\"single_test\", test);"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [
									{
										"key": "Content-Type",
										"name": "Content-Type",
										"type": "text",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"tests\": {\n        \"include\": [\"{{single_test}}\"]\n    }\n}"
								},
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions"
									]
								}
							},
							"response": []
						},
						{
							"name": "Start Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "8a575b02-40ff-404c-a344-d768c218caba",
										"exec": [
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/start",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"start"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Next Test of Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "e8ab1a02-2be0-43ee-be8b-04967b5aaff3",
										"exec": [
											"const response = pm.response.json();",
											"const nextTest = response.next_test;",
											"pm.globals.set(\"current_test_url\", nextTest);",
											"if (!nextTest) return;",
											"const test = \"/\" + nextTest.split(\"/\").slice(3).join(\"/\").split(\"?\")[0];",
											"pm.globals.set(\"current_test\", test);"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/next",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"tests",
										"{{session_token}}",
										"next"
									]
								}
							},
							"response": []
						},
						{
							"name": "Create Result",
							"request": {
								"method": "POST",
								"header": [
									{
										"key": "Content-Type",
										"name": "Content-Type",
										"value": "application/json",
										"type": "text"
									}
								],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"test\": \"{{current_test}}\",\n  \"status\": \"OK\",\n  \"message\": null,\n  \"subtests\": [\n    {\n      \"name\": \"Subtest testing feature xy\",\n      \"status\": \"FAIL\",\n      \"message\": \"Error message\"\n    }\n  ]\n}"
								},
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"results",
										"{{session_token}}"
									]
								}
							},
							"response": []
						}
					],
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"id": "be410b75-d674-4ef3-8dda-5731f4dbcbd5",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						},
						{
							"listen": "test",
							"script": {
								"id": "706efcea-90f2-4206-8246-b82240e719fb",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Start Completed Session",
					"item": [
						{
							"name": "Start Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "a68edf67-0a80-450d-8f4e-921626491163",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/start",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"start"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "d3495b7e-e4b7-47a0-9589-f2d145915846",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Status is completed\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData.status).to.equal(\"completed\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Pause Completed Session",
					"item": [
						{
							"name": "Pause Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "f1ca8fab-80d3-4d92-887e-018cb6536a9f",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/pause",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"pause"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "c220fdc3-b483-40fa-ae88-bf7f57415d90",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Status is completed\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData.status).to.equal(\"completed\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Stop Completed Session",
					"item": [
						{
							"name": "Stop Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "a9130ab9-562e-48d9-a7c1-f8cb3bb8d85e",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/stop",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"stop"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "013fa69e-f98b-4124-ac3f-cbc1bb4c5078",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Status is completed\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData.status).to.equal(\"completed\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Clean Up",
					"item": [
						{
							"name": "Clean Up",
							"request": {
								"method": "DELETE",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				}
			],
			"protocolProfileBehavior": {}
		},
		{
			"name": "Update and Read Sessions",
			"item": [
				{
					"name": "Create Default",
					"item": [
						{
							"name": "Create Session No Configuration",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "6ed4bed9-b4d6-4463-beca-4c4c09a23e44",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
											"",
											"pm.test(\"Responds with token in JSON format\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(jsonData.token).to.match(tokenRegex);",
											"});",
											"",
											"",
											"const response = pm.response.json();",
											"const token = response.token;",
											"pm.globals.set(\"session_token\", token);"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [
									{
										"key": "Content-Type",
										"name": "Content-Type",
										"type": "text",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "raw",
									"raw": ""
								},
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Configuration",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "e2eba0d4-9e38-4a5c-9aa0-9874c70f0788",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"tests\");",
											"    pm.expect(typeof jsonData.tests).to.equal(\"object\");",
											"    pm.expect(jsonData.tests).to.have.property(\"include\");",
											"    pm.expect(jsonData.tests.include).to.be.an.instanceof(Array);",
											"    pm.expect(jsonData.tests).to.have.property(\"exclude\");",
											"    pm.expect(jsonData.tests.exclude).to.be.an.instanceof(Array);",
											"    pm.expect(jsonData).to.have.property(\"types\");",
											"    pm.expect(jsonData.types).to.be.an.instanceof(Array);",
											"    pm.expect(jsonData).to.have.property(\"user_agent\");",
											"    pm.expect(typeof jsonData.user_agent).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"timeouts\");",
											"    pm.expect(typeof jsonData.timeouts).to.equal(\"object\")",
											"    pm.expect(jsonData.timeouts).to.have.property(\"automatic\");",
											"    pm.expect(typeof jsonData.timeouts.automatic).to.equal(\"number\");",
											"    pm.expect(jsonData.timeouts).to.have.property(\"manual\");",
											"    pm.expect(typeof jsonData.timeouts.manual).to.equal(\"number\");",
											"    pm.expect(jsonData).to.have.property(\"browser\");",
											"    pm.expect(typeof jsonData.browser).to.equal(\"object\");",
											"    pm.expect(jsonData.browser).to.have.property(\"name\");",
											"    pm.expect(typeof jsonData.browser.name).to.equal(\"string\");",
											"    pm.expect(jsonData.browser).to.have.property(\"version\");",
											"    pm.expect(typeof jsonData.browser.version).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"reference_tokens\");",
											"    pm.expect(jsonData.reference_tokens).to.be.an.instanceof(Array);",
											"});",
											"",
											"pm.test(\"Configuration is default\", function () {",
											"    pm.expect(jsonData.token).to.match(tokenRegex);",
											"    pm.expect(jsonData.tests.include).to.include(\"/\");",
											"    pm.expect(jsonData.types).to.include(\"automatic\");",
											"    pm.expect(jsonData.types).to.include(\"manual\");",
											"    pm.expect(jsonData.user_agent).to.include(\"PostmanRuntime\");",
											"    pm.expect(jsonData.timeouts.automatic).to.equal(60000);",
											"    pm.expect(jsonData.timeouts.manual).to.equal(300000);",
											"    pm.expect(jsonData.browser.name).to.equal(\"Other\");",
											"    pm.expect(jsonData.browser.version).to.equal(\"0\");",
											"    pm.expect(jsonData.is_public).to.equal(false);",
											"    pm.expect(jsonData.reference_tokens).to.be.empty;",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "22d812a9-5d6f-4cbb-924e-cbe4392072ad",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"status\");",
											"    pm.expect(typeof jsonData.status).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"expiration_date\");",
											"    pm.expect(jsonData.expiration_date).to.be.null;",
											"    pm.expect(jsonData).to.have.property(\"date_started\");",
											"    pm.expect(jsonData.date_started).to.satisfy(value => !value || typeof value === \"number\");",
											"    pm.expect(jsonData).to.have.property(\"date_finished\");",
											"    pm.expect(jsonData.date_finished).to.satisfy(value => !value || typeof value === \"number\");",
											"});",
											"",
											"pm.test(\"Session status is pending\", function () {",
											"    pm.expect(jsonData.status).to.equal(\"pending\");",
											"})"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Tests of Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "d06b4cb9-f5b9-4a88-8a24-a195e59c298e",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"pending_tests\");",
											"    pm.expect(typeof jsonData.pending_tests).to.equal(\"object\");",
											"    pm.expect(jsonData).to.have.property(\"running_tests\");",
											"    pm.expect(typeof jsonData.running_tests).to.equal(\"object\");",
											"});",
											"",
											"pm.test(\"All tests are pending tests\", function () {",
											"    pm.expect(Object.keys(jsonData.pending_tests)).to.not.have.lengthOf(0);",
											"    pm.expect(Object.keys(jsonData.running_tests)).to.have.lengthOf(0);",
											"})",
											"",
											"const availableTests = pm.globals.get(\"available_tests\"); ",
											"",
											"pm.test(\"All available tests are part of the session\", function () {",
											"    for (var api of Object.keys(jsonData.pending_tests)) {",
											"        for (var test of jsonData.pending_tests[api]) {",
											"            pm.expect(availableTests[api]).to.include(test);",
											"        }",
											"    }",
											"})"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"tests",
										"{{session_token}}"
									]
								}
							},
							"response": []
						}
					],
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"id": "bcf419eb-495a-4558-95de-45dea07bd6b0",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						},
						{
							"listen": "test",
							"script": {
								"id": "86795630-9b19-49f3-988e-ac089ef76187",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Update With Configuration",
					"item": [
						{
							"name": "Update Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "181e1f95-34d7-4c2c-bc3c-b6d5f411807d",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								},
								{
									"listen": "prerequest",
									"script": {
										"id": "46e33bfe-0783-49f8-a9bc-98e26a34b55e",
										"exec": [
											"var automaticTimeout = 120000;",
											"var manualTimeout = 1000000;",
											"var specialTimeout = 2000;",
											"",
											"pm.globals.set(\"automatic_timeout\", automaticTimeout);",
											"pm.globals.set(\"manual_timeout\", manualTimeout);",
											"pm.globals.set(\"special_timeout\", specialTimeout);"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "PUT",
								"header": [
									{
										"key": "Content-Type",
										"name": "Content-Type",
										"type": "text",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"tests\": {\n        \"include\": {{included_tests}},\n        \"exclude\": {{excluded_tests}}\n    },\n    \"types\": [\n        \"automatic\"\n    ],\n    \"timeouts\": {\n        \"automatic\": {{automatic_timeout}},\n        \"manual\": {{manual_timeout}},\n        \"{{special_timeout_test}}\": {{special_timeout}}\n    }\n}"
								},
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Configuration",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "dd86be15-3e08-491e-b56b-274531c348e6",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"tests\");",
											"    pm.expect(typeof jsonData.tests).to.equal(\"object\");",
											"    pm.expect(jsonData.tests).to.have.property(\"include\");",
											"    pm.expect(jsonData.tests.include).to.be.an.instanceof(Array);",
											"    pm.expect(jsonData.tests).to.have.property(\"exclude\");",
											"    pm.expect(jsonData.tests.exclude).to.be.an.instanceof(Array);",
											"    pm.expect(jsonData).to.have.property(\"types\");",
											"    pm.expect(jsonData.types).to.be.an.instanceof(Array);",
											"    pm.expect(jsonData).to.have.property(\"user_agent\");",
											"    pm.expect(typeof jsonData.user_agent).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"timeouts\");",
											"    pm.expect(typeof jsonData.timeouts).to.equal(\"object\")",
											"    pm.expect(jsonData.timeouts).to.have.property(\"automatic\");",
											"    pm.expect(typeof jsonData.timeouts.automatic).to.equal(\"number\");",
											"    pm.expect(jsonData.timeouts).to.have.property(\"manual\");",
											"    pm.expect(typeof jsonData.timeouts.manual).to.equal(\"number\");",
											"    pm.expect(jsonData).to.have.property(\"browser\");",
											"    pm.expect(typeof jsonData.browser).to.equal(\"object\");",
											"    pm.expect(jsonData.browser).to.have.property(\"name\");",
											"    pm.expect(typeof jsonData.browser.name).to.equal(\"string\");",
											"    pm.expect(jsonData.browser).to.have.property(\"version\");",
											"    pm.expect(typeof jsonData.browser.version).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"reference_tokens\");",
											"    pm.expect(jsonData.reference_tokens).to.be.an.instanceof(Array);",
											"});",
											"",
											"var includedTests = JSON.parse(pm.globals.get(\"included_tests\"));",
											"var excludedTests = JSON.parse(pm.globals.get(\"excluded_tests\"));",
											"var automaticTimeout = pm.globals.get(\"automatic_timeout\");",
											"var manualTimeout = pm.globals.get(\"manual_timeout\");",
											"var specialTimeout = pm.globals.get(\"special_timeout\");",
											"var specialTimeoutTest = pm.globals.get(\"special_timeout_test\");",
											"",
											"pm.test(\"Configuration is as specified\", function () {",
											"    pm.expect(jsonData.token).to.match(tokenRegex);",
											"    for (var test of includedTests) {",
											"        pm.expect(jsonData.tests.include).to.include(test);",
											"    }",
											"    for (var test of excludedTests) {",
											"        pm.expect(jsonData.tests.exclude).to.include(test);",
											"    }",
											"    pm.expect(jsonData.types).to.include(\"automatic\");",
											"    pm.expect(jsonData.types).to.not.include(\"manual\");",
											"    pm.expect(jsonData.user_agent).to.include(\"PostmanRuntime\");",
											"    pm.expect(jsonData.timeouts.automatic).to.equal(automaticTimeout);",
											"    pm.expect(jsonData.timeouts.manual).to.equal(manualTimeout);",
											"    pm.expect(jsonData.timeouts[specialTimeoutTest]).to.equal(specialTimeout);",
											"    pm.expect(jsonData.browser.name).to.equal(\"Other\");",
											"    pm.expect(jsonData.browser.version).to.equal(\"0\");",
											"    pm.expect(jsonData.is_public).to.equal(false);",
											"    pm.expect(jsonData.reference_tokens).to.be.empty;",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Tests of Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "569dc8f6-39d4-4ec6-9466-64154671e4bc",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"pending_tests\");",
											"    pm.expect(typeof jsonData.pending_tests).to.equal(\"object\");",
											"    pm.expect(jsonData).to.have.property(\"running_tests\");",
											"    pm.expect(typeof jsonData.running_tests).to.equal(\"object\");",
											"});",
											"",
											"pm.test(\"All tests are pending tests\", function () {",
											"    pm.expect(Object.keys(jsonData.pending_tests)).to.not.have.lengthOf(0);",
											"    pm.expect(Object.keys(jsonData.running_tests)).to.have.lengthOf(0);",
											"})",
											"",
											"const availableTests = pm.globals.get(\"available_tests\");",
											"const includedTests = pm.globals.get(\"included_tests\");",
											"const excludedTests = pm.globals.get(\"excluded_tests\");",
											"",
											"pm.test(\"Selected subset of tests are part of the session\", function () {",
											"    for (var api of Object.keys(jsonData.pending_tests)) {",
											"        for (var includedTest of includedTests) {",
											"            if (includedTest.split(\"/\").find(part => !!part) === api) {",
											"                var includeRegExp = new RegExp(\"^\" + includedTest, \"i\");",
											"                for (var test of jsonData.pending_tests[api]) {",
											"                    pm.expect(test).to.match(regex);",
											"                }",
											"                break;",
											"            }",
											"        }",
											"        for (var excludedTest of excludedTests) {",
											"            if (excludedTest.split(\"/\").find(part => !!part) === api) {",
											"                var excludeRegExp = new RegExp(\"^\" + excludedTest, \"i\");",
											"                for (var test of jsonData.pending_tests[api]) {",
											"                    pm.expect(test).to.not.match(regex);",
											"                }",
											"                break;",
											"            }",
											"        }",
											"    }",
											"});",
											"",
											"const sessionTests = jsonData.pending_tests;",
											"",
											"pm.globals.set(\"session_tests\", JSON.stringify(sessionTests));"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"tests",
										"{{session_token}}"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "db83ae93-7a70-4267-8a2f-3d2e7cb40b88",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"status\");",
											"    pm.expect(typeof jsonData.status).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"expiration_date\");",
											"    pm.expect(jsonData.expiration_date).to.be.null;",
											"    pm.expect(jsonData).to.have.property(\"date_started\");",
											"    pm.expect(jsonData.date_started).to.satisfy(value => !value || typeof value === \"number\");",
											"    pm.expect(jsonData).to.have.property(\"date_finished\");",
											"    pm.expect(jsonData.date_finished).to.satisfy(value => !value || typeof value === \"number\");",
											"});",
											"",
											"pm.test(\"Session status is pending\", function () {",
											"    pm.expect(jsonData.status).to.equal(\"pending\");",
											"})",
											"",
											"pm.test(\"Start and Finish date not set\", function () {",
											"    pm.expect(jsonData.date_started).to.be.null;",
											"    pm.expect(jsonData.date_finished).to.be.null;",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						},
						{
							"name": "Clean Up",
							"request": {
								"method": "DELETE",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}"
									]
								}
							},
							"response": []
						}
					],
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"id": "52cc597e-30b7-426e-a15e-3a628c66619a",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						},
						{
							"listen": "test",
							"script": {
								"id": "60d6def7-cb5b-433f-8a4e-33bd8e20be53",
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				}
			],
			"protocolProfileBehavior": {}
		},
		{
			"name": "Update Session Labels",
			"item": [
				{
					"name": "Create Session \\w Configuration Copy",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "a1c2e070-9309-4dee-ae71-6edf4cbe3630",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
									"",
									"pm.test(\"Responds with token in JSON format\", function () {",
									"    var jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property(\"token\");",
									"    pm.expect(jsonData.token).to.match(tokenRegex);",
									"});",
									"",
									"",
									"const response = pm.response.json();",
									"const token = response.token;",
									"pm.globals.set(\"session_token\", token);"
								],
								"type": "text/javascript"
							}
						},
						{
							"listen": "prerequest",
							"script": {
								"id": "1f03ad23-73c7-4e64-9de9-abe902e2b90c",
								"exec": [
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"name": "Content-Type",
								"type": "text",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"labels\": [\"label1\", \"label2\"]\n}"
						},
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions"
							]
						}
					},
					"response": []
				},
				{
					"name": "Read Session Configuration",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "bf76f47c-960c-4007-a59b-92793e470082",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"var jsonData = pm.response.json();",
									"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
									"",
									"pm.test(\"JSON structure is as expected\", function () {",
									"    pm.expect(jsonData).to.have.property(\"token\");",
									"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
									"    pm.expect(jsonData).to.have.property(\"tests\");",
									"    pm.expect(typeof jsonData.tests).to.equal(\"object\");",
									"    pm.expect(jsonData.tests).to.have.property(\"include\");",
									"    pm.expect(jsonData.tests.include).to.be.an.instanceof(Array);",
									"    pm.expect(jsonData.tests).to.have.property(\"exclude\");",
									"    pm.expect(jsonData.tests.exclude).to.be.an.instanceof(Array);",
									"    pm.expect(jsonData).to.have.property(\"types\");",
									"    pm.expect(jsonData.types).to.be.an.instanceof(Array);",
									"    pm.expect(jsonData).to.have.property(\"user_agent\");",
									"    pm.expect(typeof jsonData.user_agent).to.equal(\"string\");",
									"    pm.expect(jsonData).to.have.property(\"timeouts\");",
									"    pm.expect(typeof jsonData.timeouts).to.equal(\"object\")",
									"    pm.expect(jsonData.timeouts).to.have.property(\"automatic\");",
									"    pm.expect(typeof jsonData.timeouts.automatic).to.equal(\"number\");",
									"    pm.expect(jsonData.timeouts).to.have.property(\"manual\");",
									"    pm.expect(typeof jsonData.timeouts.manual).to.equal(\"number\");",
									"    pm.expect(jsonData).to.have.property(\"browser\");",
									"    pm.expect(typeof jsonData.browser).to.equal(\"object\");",
									"    pm.expect(jsonData.browser).to.have.property(\"name\");",
									"    pm.expect(typeof jsonData.browser.name).to.equal(\"string\");",
									"    pm.expect(jsonData.browser).to.have.property(\"version\");",
									"    pm.expect(typeof jsonData.browser.version).to.equal(\"string\");",
									"    pm.expect(jsonData).to.have.property(\"reference_tokens\");",
									"    pm.expect(jsonData.reference_tokens).to.be.an.instanceof(Array);",
									"    pm.expect(jsonData).to.have.property(\"labels\");",
									"    pm.expect(jsonData.labels).to.be.an.instanceof(Array);",
									"});",
									"",
									"pm.test(\"Configuration is default\", function () {",
									"    pm.expect(jsonData.token).to.match(tokenRegex);",
									"    pm.expect(jsonData.tests.include).to.include(\"/\");",
									"    pm.expect(jsonData.types).to.include(\"automatic\");",
									"    pm.expect(jsonData.types).to.include(\"manual\");",
									"    pm.expect(jsonData.user_agent).to.include(\"PostmanRuntime\");",
									"    pm.expect(jsonData.timeouts.automatic).to.equal(60000);",
									"    pm.expect(jsonData.timeouts.manual).to.equal(300000);",
									"    pm.expect(jsonData.browser.name).to.equal(\"Other\");",
									"    pm.expect(jsonData.browser.version).to.equal(\"0\");",
									"    pm.expect(jsonData.is_public).to.equal(false);",
									"    pm.expect(jsonData.reference_tokens).to.be.empty;",
									"    pm.expect(jsonData.labels).to.include(\"label1\");",
									"    pm.expect(jsonData.labels).to.include(\"label2\");",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"{{session_token}}"
							]
						}
					},
					"response": []
				},
				{
					"name": "Update Labels Copy",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "20cc9f7d-b4bb-4bb2-a628-4cfddd86112a",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "PUT",
						"header": [
							{
								"key": "Content-Type",
								"name": "Content-Type",
								"value": "application/json",
								"type": "text"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n\t\"labels\": [\"new\", \"labels\"]\n}"
						},
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/labels",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"{{session_token}}",
								"labels"
							]
						}
					},
					"response": []
				},
				{
					"name": "Read Session Configuration",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "11fcc51b-effd-4522-8126-6b6a20435927",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"var jsonData = pm.response.json();",
									"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
									"",
									"pm.test(\"JSON structure is as expected\", function () {",
									"    pm.expect(jsonData).to.have.property(\"token\");",
									"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
									"    pm.expect(jsonData).to.have.property(\"tests\");",
									"    pm.expect(typeof jsonData.tests).to.equal(\"object\");",
									"    pm.expect(jsonData.tests).to.have.property(\"include\");",
									"    pm.expect(jsonData.tests.include).to.be.an.instanceof(Array);",
									"    pm.expect(jsonData.tests).to.have.property(\"exclude\");",
									"    pm.expect(jsonData.tests.exclude).to.be.an.instanceof(Array);",
									"    pm.expect(jsonData).to.have.property(\"types\");",
									"    pm.expect(jsonData.types).to.be.an.instanceof(Array);",
									"    pm.expect(jsonData).to.have.property(\"user_agent\");",
									"    pm.expect(typeof jsonData.user_agent).to.equal(\"string\");",
									"    pm.expect(jsonData).to.have.property(\"timeouts\");",
									"    pm.expect(typeof jsonData.timeouts).to.equal(\"object\")",
									"    pm.expect(jsonData.timeouts).to.have.property(\"automatic\");",
									"    pm.expect(typeof jsonData.timeouts.automatic).to.equal(\"number\");",
									"    pm.expect(jsonData.timeouts).to.have.property(\"manual\");",
									"    pm.expect(typeof jsonData.timeouts.manual).to.equal(\"number\");",
									"    pm.expect(jsonData).to.have.property(\"browser\");",
									"    pm.expect(typeof jsonData.browser).to.equal(\"object\");",
									"    pm.expect(jsonData.browser).to.have.property(\"name\");",
									"    pm.expect(typeof jsonData.browser.name).to.equal(\"string\");",
									"    pm.expect(jsonData.browser).to.have.property(\"version\");",
									"    pm.expect(typeof jsonData.browser.version).to.equal(\"string\");",
									"    pm.expect(jsonData).to.have.property(\"reference_tokens\");",
									"    pm.expect(jsonData.reference_tokens).to.be.an.instanceof(Array);",
									"    pm.expect(jsonData).to.have.property(\"labels\");",
									"    pm.expect(jsonData.labels).to.be.an.instanceof(Array);",
									"});",
									"",
									"pm.test(\"Configuration is default\", function () {",
									"    pm.expect(jsonData.token).to.match(tokenRegex);",
									"    pm.expect(jsonData.tests.include).to.include(\"/\");",
									"    pm.expect(jsonData.types).to.include(\"automatic\");",
									"    pm.expect(jsonData.types).to.include(\"manual\");",
									"    pm.expect(jsonData.user_agent).to.include(\"PostmanRuntime\");",
									"    pm.expect(jsonData.timeouts.automatic).to.equal(60000);",
									"    pm.expect(jsonData.timeouts.manual).to.equal(300000);",
									"    pm.expect(jsonData.browser.name).to.equal(\"Other\");",
									"    pm.expect(jsonData.browser.version).to.equal(\"0\");",
									"    pm.expect(jsonData.is_public).to.equal(false);",
									"    pm.expect(jsonData.reference_tokens).to.be.empty;",
									"    pm.expect(jsonData.labels).to.include(\"new\");",
									"    pm.expect(jsonData.labels).to.include(\"labels\");",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"{{session_token}}"
							]
						}
					},
					"response": []
				},
				{
					"name": "Clean Up",
					"request": {
						"method": "DELETE",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"{{session_token}}"
							]
						}
					},
					"response": []
				}
			],
			"protocolProfileBehavior": {}
		},
		{
			"name": "Delete Session",
			"item": [
				{
					"name": "Setup",
					"item": [
						{
							"name": "Create Session No Configuration",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "2b7198ef-6051-40ee-af4f-466bf41e3768",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
											"",
											"pm.test(\"Responds with token in JSON format\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(jsonData.token).to.match(tokenRegex);",
											"});",
											"",
											"",
											"const response = pm.response.json();",
											"const token = response.token;",
											"pm.globals.set(\"session_token\", token);"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [
									{
										"key": "Content-Type",
										"name": "Content-Type",
										"type": "text",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "raw",
									"raw": ""
								},
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Delete Session",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "cabccfe1-882e-48bf-9946-4b8f67b09f04",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "DELETE",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"{{session_token}}"
							]
						}
					},
					"response": []
				},
				{
					"name": "Read Session Configuration",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "cad95ed0-822a-433b-b411-adf3b2e5ea77",
								"exec": [
									"pm.test(\"Status code is 404\", function () {",
									"    pm.response.to.have.status(404);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions",
								"{{session_token}}"
							]
						}
					},
					"response": []
				}
			],
			"protocolProfileBehavior": {}
		},
		{
			"name": "Create and Read Results",
			"item": [
				{
					"name": "Create Session",
					"item": [
						{
							"name": "Create Session Two Tests",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "3c82b199-e27f-4b86-b98d-9f10ad2b363f",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
											"",
											"pm.test(\"Responds with token in JSON format\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(jsonData.token).to.match(tokenRegex);",
											"});",
											"",
											"",
											"const response = pm.response.json();",
											"const token = response.token;",
											"pm.globals.set(\"session_token\", token);"
										],
										"type": "text/javascript"
									}
								},
								{
									"listen": "prerequest",
									"script": {
										"id": "70ad16d3-5df7-4c94-9498-f5abd0b6f76c",
										"exec": [
											"const availableTests = pm.globals.get(\"available_tests\");",
											"const test1 = availableTests[Object.keys(availableTests)[0]][0];",
											"const test2 = availableTests[Object.keys(availableTests)[1]][0];",
											"",
											"pm.globals.set(\"single_test_1\", test1);",
											"pm.globals.set(\"single_test_2\", test2);"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [
									{
										"key": "Content-Type",
										"name": "Content-Type",
										"type": "text",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"tests\": {\n        \"include\": [\"{{single_test_1}}\", \"{{single_test_2}}\"]\n    }\n}"
								},
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions"
									]
								}
							},
							"response": []
						},
						{
							"name": "Start Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "074aff68-931d-4d31-b138-d9068bc57422",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/start",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"start"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Results",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "9440583c-b8a5-4488-93aa-e37daf96485a",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Responds with no results\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(typeof jsonData).to.equal(\"object\");",
											"    pm.expect(Object.keys(jsonData)).to.be.empty;",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"results",
										"{{session_token}}"
									],
									"query": [
										{
											"key": "path",
											"value": "/2dcontext/drawing-images-to-the-canvas",
											"disabled": true
										},
										{
											"key": "path",
											"value": "/2dcontext/conformance-requirements",
											"disabled": true
										},
										{
											"key": "path",
											"value": "/2dcontext/conformance-requirements/2d.missingargs.html",
											"disabled": true
										}
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Results Compact",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "50b9afe7-63ef-40ae-a6ea-5abbd40f254d",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var singleTest1 = pm.globals.get(\"single_test_1\");",
											"var singleTest2 = pm.globals.get(\"single_test_2\");",
											"",
											"var api1 = singleTest1.split(\"/\").find(part => !!part);",
											"var api2 = singleTest2.split(\"/\").find(part => !!part);",
											"",
											"pm.test(\"Responds with no results\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(typeof jsonData).to.equal(\"object\");",
											"    pm.expect(jsonData).to.have.property(api1);",
											"    pm.expect(jsonData).to.have.property(api2);",
											"    pm.expect(jsonData[api1].complete).to.equal(0);",
											"    pm.expect(jsonData[api2].complete).to.equal(0);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token}}/compact",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"results",
										"{{session_token}}",
										"compact"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Last Completed Tests of Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "f0c77dd0-d424-4b6e-8bfa-3e0ea5908514",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"    ",
											"pm.test(\"JSON format is as expected\", function () {",
											"    pm.expect(Object.keys(jsonData)).to.have.lengthOf(3);",
											"    pm.expect(jsonData).to.have.property(\"pass\");",
											"    pm.expect(jsonData).to.have.property(\"fail\");",
											"    pm.expect(jsonData).to.have.property(\"timeout\");",
											"    for (var key of Object.keys(jsonData)) {",
											"        pm.expect(jsonData[key]).to.be.an.instanceof(Array);",
											"    }",
											"});",
											"",
											"pm.test(\"Responds with no last completed tests\", function () {",
											"    for (var key of Object.keys(jsonData)) {",
											"        pm.expect(jsonData[key]).to.be.empty;",
											"    }",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/last_completed",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"tests",
										"{{session_token}}",
										"last_completed"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Tests of Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "bfdb82c2-1411-4e22-810b-a1f7edb8d2f4",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"pending_tests\");",
											"    pm.expect(typeof jsonData.pending_tests).to.equal(\"object\");",
											"    pm.expect(jsonData).to.have.property(\"running_tests\");",
											"    pm.expect(typeof jsonData.running_tests).to.equal(\"object\");",
											"});",
											"",
											"const sessionTests = jsonData.pending_tests;",
											"",
											"pm.globals.set(\"session_tests\", JSON.stringify(sessionTests));"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"tests",
										"{{session_token}}"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Create First Result",
					"item": [
						{
							"name": "Read Next Test of Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "2a60296d-953b-430d-a21d-df99265b90c1",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"const response = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(Object.keys(response)).to.have.lengthOf(1);",
											"    pm.expect(response).to.have.property(\"next_test\");",
											"    pm.expect(typeof response.next_test).to.equal(\"string\");",
											"});",
											"",
											"const nextTest = response.next_test;",
											"pm.globals.set(\"current_test_url\", nextTest);",
											"if (!nextTest) return;",
											"const test = \"/\" + nextTest.split(\"/\").slice(3).join(\"/\").split(\"?\")[0];",
											"pm.globals.set(\"current_test\", test);",
											"",
											"const test1 = pm.globals.get(\"single_test_1\");",
											"",
											"pm.test(\"Returned test is first of two specified tests\", function () {",
											"    pm.expect(test).to.equal(test1);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/next",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"tests",
										"{{session_token}}",
										"next"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Tests of Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "42168b0e-8be9-4211-8c4a-5a0776a3d131",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"pending_tests\");",
											"    pm.expect(typeof jsonData.pending_tests).to.equal(\"object\");",
											"    pm.expect(jsonData).to.have.property(\"running_tests\");",
											"    pm.expect(typeof jsonData.running_tests).to.equal(\"object\");",
											"});",
											"",
											"const test1 = pm.globals.get(\"single_test_1\");",
											"const test2 = pm.globals.get(\"single_test_2\");",
											"",
											"pm.test(\"One test is pending, one test is running\", function () {",
											"    pm.expect(Object.keys(jsonData.pending_tests)).to.have.lengthOf(1);",
											"    var api = Object.keys(jsonData.pending_tests)[0];",
											"    pm.expect(jsonData.pending_tests[api]).to.have.lengthOf(1);",
											"    pm.expect(jsonData.pending_tests[api]).to.include(test2);",
											"    pm.expect(Object.keys(jsonData.running_tests)).to.have.lengthOf(1);",
											"    api = Object.keys(jsonData.running_tests)[0];",
											"    pm.expect(jsonData.running_tests[api]).to.have.lengthOf(1);",
											"    pm.expect(jsonData.running_tests[api]).to.include(test1);",
											"})"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"tests",
										"{{session_token}}"
									]
								}
							},
							"response": []
						},
						{
							"name": "Create Result",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "95a23ee1-f9e9-4b6a-abf5-4afa48ba5254",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [
									{
										"key": "Content-Type",
										"name": "Content-Type",
										"value": "application/json",
										"type": "text"
									}
								],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"test\": \"{{current_test}}\",\n  \"status\": \"OK\",\n  \"message\": null,\n  \"subtests\": [\n    {\n      \"name\": \"Subtest testing feature xy\",\n      \"status\": \"FAIL\",\n      \"message\": \"Error message\"\n    }\n  ]\n}"
								},
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"results",
										"{{session_token}}"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Tests of Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "707c403b-7135-4e0b-aae8-4fa4f07daac9",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"pending_tests\");",
											"    pm.expect(typeof jsonData.pending_tests).to.equal(\"object\");",
											"    pm.expect(jsonData).to.have.property(\"running_tests\");",
											"    pm.expect(typeof jsonData.running_tests).to.equal(\"object\");",
											"});",
											"",
											"",
											"const test1 = pm.globals.get(\"single_test_1\");",
											"const test2 = pm.globals.get(\"single_test_2\");",
											"",
											"pm.test(\"One test is pending, one test is completed\", function () {",
											"    pm.expect(Object.keys(jsonData.pending_tests)).to.have.lengthOf(1);",
											"    var api = Object.keys(jsonData.pending_tests)[0];",
											"    pm.expect(jsonData.pending_tests[api]).to.have.lengthOf(1);",
											"    pm.expect(jsonData.pending_tests[api]).to.include(test2);",
											"    pm.expect(Object.keys(jsonData.running_tests)).to.have.lengthOf(0);",
											"})"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"tests",
										"{{session_token}}"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "7b77cb94-4159-462c-877b-23b48446a1bb",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"status\");",
											"    pm.expect(typeof jsonData.status).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"expiration_date\");",
											"    pm.expect(jsonData.expiration_date).to.be.null;",
											"    pm.expect(jsonData).to.have.property(\"date_started\");",
											"    pm.expect(jsonData).to.have.property(\"date_finished\");",
											"});",
											"",
											"pm.test(\"Session status is running\", function () {",
											"    pm.expect(jsonData.status).to.equal(\"running\");",
											"})"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Last Completed Tests of Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "8ba5726b-ed37-48f5-9389-4f6041b1eeaa",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"    ",
											"pm.test(\"JSON format is as expected\", function () {",
											"    pm.expect(Object.keys(jsonData)).to.have.lengthOf(3);",
											"    pm.expect(jsonData).to.have.property(\"pass\");",
											"    pm.expect(jsonData).to.have.property(\"fail\");",
											"    pm.expect(jsonData).to.have.property(\"timeout\");",
											"    for (var key of Object.keys(jsonData)) {",
											"        pm.expect(jsonData[key]).to.be.an.instanceof(Array);",
											"    }",
											"});",
											"",
											"const test1 = pm.globals.get(\"single_test_1\");",
											"",
											"pm.test(\"Responds with one last completed tests as failed\", function () {",
											"    pm.expect(jsonData[\"pass\"]).to.be.empty;",
											"    pm.expect(jsonData[\"fail\"]).to.have.lengthOf(1);",
											"    pm.expect(jsonData[\"fail\"][0]).to.equal(test1);",
											"    pm.expect(jsonData[\"timeout\"]).to.be.empty;",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/last_completed",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"tests",
										"{{session_token}}",
										"last_completed"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Results",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "5ac4de17-caf3-43b2-8eb8-fee26eed5c96",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON format is as expected\", function () {",
											"    for (var api of Object.keys(jsonData)) {",
											"        pm.expect(jsonData[api]).to.be.an.instanceof(Array);",
											"        for (var result of jsonData[api]) {",
											"            pm.expect(typeof result).to.equal(\"object\");",
											"            pm.expect(Object.keys(result)).to.have.lengthOf(4);",
											"            pm.expect(result).to.have.property(\"test\");",
											"            pm.expect(typeof result.test).to.equal(\"string\");",
											"            pm.expect(result).to.have.property(\"status\");",
											"            pm.expect(typeof result.status).to.equal(\"string\");",
											"            pm.expect(result).to.have.property(\"message\");",
											"            pm.expect(result.message).to.satisfy(message => !message || typeof message === \"string\");",
											"            pm.expect(result).to.have.property(\"subtests\");",
											"            pm.expect(result.subtests).to.be.an.instanceof(Array);",
											"            for (var subtest of result.subtests) {",
											"                pm.expect(typeof subtest).to.equal(\"object\");",
											"                pm.expect(Object.keys(subtest)).to.have.lengthOf(3);",
											"                pm.expect(subtest).to.have.property(\"name\");",
											"                pm.expect(typeof subtest.name).to.equal(\"string\");",
											"                pm.expect(subtest).to.have.property(\"status\");",
											"                pm.expect(typeof subtest.status).to.equal(\"string\");",
											"                pm.expect(subtest).to.have.property(\"message\");",
											"                pm.expect(subtest.message).to.satisfy(message => !message || typeof message === \"string\");",
											"            }",
											"        }",
											"    }",
											"});",
											"",
											"const test1 = pm.globals.get(\"single_test_1\");",
											"",
											"pm.test(\"Test is first test, successful run and failed\", function () {",
											"    var api = Object.keys(jsonData)[0];",
											"    pm.expect(api).to.equal(test1.split(\"/\").find(part => !!part))",
											"    var result = jsonData[api][0];",
											"    pm.expect(result.test).to.equal(test1);",
											"    pm.expect(result.status).to.equal(\"OK\");",
											"    pm.expect(result.message).to.be.null;",
											"    var subtest = result.subtests[0];",
											"    pm.expect(subtest.status).to.equal(\"FAIL\");",
											"})"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"results",
										"{{session_token}}"
									],
									"query": [
										{
											"key": "path",
											"value": "/2dcontext/drawing-images-to-the-canvas",
											"disabled": true
										},
										{
											"key": "path",
											"value": "/2dcontext/conformance-requirements",
											"disabled": true
										},
										{
											"key": "path",
											"value": "/2dcontext/conformance-requirements/2d.missingargs.html",
											"disabled": true
										}
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Results Compact",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "38afbc94-502e-4aa7-85c2-70dbbdae7e13",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(typeof jsonData).to.equal(\"object\");",
											"    for (var api of Object.keys(jsonData)) {",
											"        pm.expect(jsonData[api]).to.have.property(\"pass\");",
											"        pm.expect(typeof jsonData[api].pass).to.equal(\"number\");",
											"        pm.expect(jsonData[api]).to.have.property(\"fail\");",
											"        pm.expect(typeof jsonData[api].fail).to.equal(\"number\");",
											"        pm.expect(jsonData[api]).to.have.property(\"timeout\");",
											"        pm.expect(typeof jsonData[api].timeout).to.equal(\"number\");",
											"        pm.expect(jsonData[api]).to.have.property(\"not_run\");",
											"        pm.expect(typeof jsonData[api].not_run).to.equal(\"number\");",
											"    }",
											"})",
											"",
											"pm.test(\"Responds with one test failed\", function () {",
											"    var api = Object.keys(jsonData)[0];",
											"    pm.expect(jsonData[api].pass).to.equal(0);",
											"    pm.expect(jsonData[api].fail).to.equal(1);",
											"    pm.expect(jsonData[api].timeout).to.equal(0);",
											"    pm.expect(jsonData[api].not_run).to.equal(0);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token}}/compact",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"results",
										"{{session_token}}",
										"compact"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Create Last Result",
					"item": [
						{
							"name": "Read Next Test of Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "85cf7940-73d0-4419-81a1-390c9c4c3a1c",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"const response = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(Object.keys(response)).to.have.lengthOf(1);",
											"    pm.expect(response).to.have.property(\"next_test\");",
											"    pm.expect(typeof response.next_test).to.equal(\"string\");",
											"});",
											"",
											"const nextTest = response.next_test;",
											"pm.globals.set(\"current_test_url\", nextTest);",
											"if (!nextTest) return;",
											"const test = \"/\" + nextTest.split(\"/\").slice(3).join(\"/\").split(\"?\")[0];",
											"pm.globals.set(\"current_test\", test);",
											"",
											"const test2 = pm.globals.get(\"single_test_2\");",
											"",
											"pm.test(\"Returned test is second of two specified tests\", function () {",
											"    pm.expect(test).to.equal(test2);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/next",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"tests",
										"{{session_token}}",
										"next"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Tests of Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "3e288d2c-865a-48ab-ac53-cddd160a9840",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"pending_tests\");",
											"    pm.expect(typeof jsonData.pending_tests).to.equal(\"object\");",
											"    pm.expect(jsonData).to.have.property(\"running_tests\");",
											"    pm.expect(typeof jsonData.running_tests).to.equal(\"object\");",
											"});",
											"",
											"const test1 = pm.globals.get(\"single_test_1\");",
											"const test2 = pm.globals.get(\"single_test_2\");",
											"",
											"pm.test(\"One test is running\", function () {",
											"    pm.expect(Object.keys(jsonData.pending_tests)).to.have.lengthOf(0);",
											"    pm.expect(Object.keys(jsonData.running_tests)).to.have.lengthOf(1);",
											"    var api = Object.keys(jsonData.running_tests)[0];",
											"    pm.expect(jsonData.running_tests[api]).to.have.lengthOf(1);",
											"    pm.expect(jsonData.running_tests[api]).to.include(test2);",
											"})"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"tests",
										"{{session_token}}"
									]
								}
							},
							"response": []
						},
						{
							"name": "Create Result",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "786dbb67-47e8-4009-991c-1670d0ab04e1",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [
									{
										"key": "Content-Type",
										"name": "Content-Type",
										"type": "text",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"test\": \"{{current_test}}\",\n  \"status\": \"OK\",\n  \"message\": null,\n  \"subtests\": [\n    {\n      \"name\": \"Subtest testing feature xy\",\n      \"status\": \"PASS\",\n      \"message\": \"Error message\"\n    }\n  ]\n}"
								},
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"results",
										"{{session_token}}"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "db8fcfe2-89f3-4e1c-be82-059412218073",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"status\");",
											"    pm.expect(typeof jsonData.status).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"expiration_date\");",
											"    pm.expect(jsonData.expiration_date).to.be.null;",
											"    pm.expect(jsonData).to.have.property(\"date_started\");",
											"    pm.expect(jsonData).to.have.property(\"date_finished\");",
											"});",
											"",
											"pm.test(\"Session status is completed\", function () {",
											"    pm.expect(jsonData.status).to.equal(\"completed\");",
											"})",
											"",
											"pm.test(\"Finish date is set\", function () {",
											"    pm.expect(Date.parse(jsonData.date_finished)).to.be.below(Date.now());",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Tests of Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "f8938178-c924-4038-a1cb-5d6fc88c08d2",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"pending_tests\");",
											"    pm.expect(typeof jsonData.pending_tests).to.equal(\"object\");",
											"    pm.expect(jsonData).to.have.property(\"running_tests\");",
											"    pm.expect(typeof jsonData.running_tests).to.equal(\"object\");",
											"});",
											"",
											"const test1 = pm.globals.get(\"single_test_1\");",
											"const test2 = pm.globals.get(\"single_test_2\");",
											"",
											"var test1Api = test1.split(\"/\").find(part => !!part);",
											"var test2Api = test1.split(\"/\").find(part => !!part);",
											"",
											"pm.test(\"One test is pending, one test is completed\", function () {",
											"    pm.expect(Object.keys(jsonData.pending_tests)).to.have.lengthOf(0);",
											"    pm.expect(Object.keys(jsonData.running_tests)).to.have.lengthOf(0);",
											"})"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"tests",
										"{{session_token}}"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Last Completed Tests of Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "5ff3fe93-2649-4874-9ae6-ce0bc2887685",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"    ",
											"pm.test(\"JSON format is as expected\", function () {",
											"    pm.expect(Object.keys(jsonData)).to.have.lengthOf(3);",
											"    pm.expect(jsonData).to.have.property(\"pass\");",
											"    pm.expect(jsonData).to.have.property(\"fail\");",
											"    pm.expect(jsonData).to.have.property(\"timeout\");",
											"    for (var key of Object.keys(jsonData)) {",
											"        pm.expect(jsonData[key]).to.be.an.instanceof(Array);",
											"    }",
											"});",
											"",
											"const test1 = pm.globals.get(\"single_test_1\");",
											"const test2 = pm.globals.get(\"single_test_2\");",
											"",
											"pm.test(\"Responds with one last completed tests as failed and one last completed test as passed\", function () {",
											"    pm.expect(jsonData[\"pass\"]).to.have.lengthOf(1);",
											"    pm.expect(jsonData[\"pass\"][0]).to.equal(test2);",
											"    pm.expect(jsonData[\"fail\"]).to.have.lengthOf(1);",
											"    pm.expect(jsonData[\"fail\"][0]).to.equal(test1);",
											"    pm.expect(jsonData[\"timeout\"]).to.be.empty;",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/last_completed",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"tests",
										"{{session_token}}",
										"last_completed"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Results",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "fee15d71-abfc-46f6-ad63-bdf67c42905d",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON format is as expected\", function () {",
											"    for (var api of Object.keys(jsonData)) {",
											"        pm.expect(jsonData[api]).to.be.an.instanceof(Array);",
											"        for (var result of jsonData[api]) {",
											"            pm.expect(typeof result).to.equal(\"object\");",
											"            pm.expect(Object.keys(result)).to.have.lengthOf(4);",
											"            pm.expect(result).to.have.property(\"test\");",
											"            pm.expect(typeof result.test).to.equal(\"string\");",
											"            pm.expect(result).to.have.property(\"status\");",
											"            pm.expect(typeof result.status).to.equal(\"string\");",
											"            pm.expect(result).to.have.property(\"message\");",
											"            pm.expect(result.message).to.satisfy(message => !message || typeof message === \"string\");",
											"            pm.expect(result).to.have.property(\"subtests\");",
											"            pm.expect(result.subtests).to.be.an.instanceof(Array);",
											"            for (var subtest of result.subtests) {",
											"                pm.expect(typeof subtest).to.equal(\"object\");",
											"                pm.expect(Object.keys(subtest)).to.have.lengthOf(3);",
											"                pm.expect(subtest).to.have.property(\"name\");",
											"                pm.expect(typeof subtest.name).to.equal(\"string\");",
											"                pm.expect(subtest).to.have.property(\"status\");",
											"                pm.expect(typeof subtest.status).to.equal(\"string\");",
											"                pm.expect(subtest).to.have.property(\"message\");",
											"                pm.expect(subtest.message).to.satisfy(message => !message || typeof message === \"string\");",
											"            }",
											"        }",
											"    }",
											"});",
											"",
											"const test1 = pm.globals.get(\"single_test_1\");",
											"const test2 = pm.globals.get(\"single_test_2\");",
											"",
											"pm.test(\"Test is first and second test, successful run and failed, and successful run and passed\", function () {",
											"    var api = Object.keys(jsonData)[0];",
											"    for (var result of jsonData[api]) {",
											"        if (result.test === test1) {",
											"            pm.expect(result.test).to.equal(test1); ",
											"            pm.expect(result.status).to.equal(\"OK\");",
											"            pm.expect(result.message).to.be.null;",
											"            var subtest = result.subtests[0];",
											"            pm.expect(subtest.status).to.equal(\"FAIL\");",
											"        } else {",
											"            pm.expect(result.test).to.equal(test2); ",
											"            pm.expect(result.status).to.equal(\"OK\");",
											"            pm.expect(result.message).to.be.null;",
											"            subtest = result.subtests[0];",
											"            pm.expect(subtest.status).to.equal(\"PASS\");",
											"        }",
											"    }",
											"})"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"results",
										"{{session_token}}"
									],
									"query": [
										{
											"key": "path",
											"value": "/2dcontext/drawing-images-to-the-canvas",
											"disabled": true
										},
										{
											"key": "path",
											"value": "/2dcontext/conformance-requirements",
											"disabled": true
										},
										{
											"key": "path",
											"value": "/2dcontext/conformance-requirements/2d.missingargs.html",
											"disabled": true
										}
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Results Compact",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "9f739832-3e90-4efc-96cf-2889f08af718",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(typeof jsonData).to.equal(\"object\");",
											"    for (var api of Object.keys(jsonData)) {",
											"        pm.expect(jsonData[api]).to.have.property(\"pass\");",
											"        pm.expect(typeof jsonData[api].pass).to.equal(\"number\");",
											"        pm.expect(jsonData[api]).to.have.property(\"fail\");",
											"        pm.expect(typeof jsonData[api].fail).to.equal(\"number\");",
											"        pm.expect(jsonData[api]).to.have.property(\"timeout\");",
											"        pm.expect(typeof jsonData[api].timeout).to.equal(\"number\");",
											"        pm.expect(jsonData[api]).to.have.property(\"not_run\");",
											"        pm.expect(typeof jsonData[api].not_run).to.equal(\"number\");",
											"    }",
											"})",
											"",
											"const test1 = pm.globals.get(\"single_test_1\");",
											"const test2 = pm.globals.get(\"single_test_2\");",
											"",
											"var test1Api = test1.split(\"/\").find(part => !!part);",
											"var test2Api = test1.split(\"/\").find(part => !!part);",
											"",
											"pm.test(\"Responds with one test failed\", function () {",
											"    pm.expect(Object.keys(jsonData)).to.have.lengthOf(2);",
											"    var api = Object.keys(jsonData)[0];",
											"    if (api === test1Api) {",
											"        pm.expect(jsonData[api].pass).to.equal(0);",
											"        pm.expect(jsonData[api].fail).to.equal(1);",
											"    } else {",
											"        pm.expect(jsonData[api].pass).to.equal(1);",
											"        pm.expect(jsonData[api].fail).to.equal(0);",
											"    }",
											"    pm.expect(jsonData[api].timeout).to.equal(0);",
											"    pm.expect(jsonData[api].not_run).to.equal(0);",
											"    api = Object.keys(jsonData)[1];",
											"    if (api === test1Api) {",
											"        pm.expect(jsonData[api].pass).to.equal(0);",
											"        pm.expect(jsonData[api].fail).to.equal(1);",
											"    } else {",
											"        pm.expect(jsonData[api].pass).to.equal(1);",
											"        pm.expect(jsonData[api].fail).to.equal(0);",
											"    }",
											"    pm.expect(jsonData[api].timeout).to.equal(0);",
											"    pm.expect(jsonData[api].not_run).to.equal(0);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token}}/compact",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"results",
										"{{session_token}}",
										"compact"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Next Test of Session",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "353cde4e-5c57-4df7-b69e-7dac5cf408e3",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"const response = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(Object.keys(response)).to.have.lengthOf(1);",
											"    pm.expect(response).to.have.property(\"next_test\");",
											"    pm.expect(typeof response.next_test).to.equal(\"string\");",
											"});",
											"",
											"const nextTest = response.next_test;",
											"pm.globals.set(\"current_test_url\", nextTest);",
											"if (!nextTest) return;",
											"const test = \"/\" + nextTest.split(\"/\").slice(3).join(\"/\").split(\"?\")[0];",
											"pm.globals.set(\"current_test\", test);",
											"",
											"const web_root = pm.environment.get(\"web_root\");",
											"",
											"pm.test(\"Returned test finish page\", function () {",
											"    pm.expect(test).to.equal(\"/\" + web_root + \"/finish.html\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/next",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"tests",
										"{{session_token}}",
										"next"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Clean Up",
					"item": [
						{
							"name": "Delete Session",
							"request": {
								"method": "DELETE",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				}
			],
			"protocolProfileBehavior": {}
		},
		{
			"name": "Viewing and Downloading Reports",
			"item": [
				{
					"name": "Create Sessions",
					"item": [
						{
							"name": "First Session",
							"item": [
								{
									"name": "Create Session One Tests",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "84a0a44c-fdac-42e5-a3f8-7bbe7fc01fd8",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"const response = pm.response.json();",
													"const token = response.token;",
													"pm.globals.set(\"session_token\", token);"
												],
												"type": "text/javascript"
											}
										},
										{
											"listen": "prerequest",
											"script": {
												"id": "6748c537-4286-48bb-9a10-7c1828d7f6e8",
												"exec": [
													"const availableTests = pm.globals.get(\"available_tests\");",
													"const test1 = availableTests[Object.keys(availableTests)[0]][0];",
													"const test2 = availableTests[Object.keys(availableTests)[0]][1];",
													"const apiName = test1.split(\"/\").filter(part => !!part)[0];",
													"",
													"pm.globals.set(\"single_test_1\", test1);",
													"pm.globals.set(\"single_test_2\", test2);",
													"pm.globals.set(\"api_name\", apiName);"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "POST",
										"header": [
											{
												"key": "Content-Type",
												"name": "Content-Type",
												"type": "text",
												"value": "application/json"
											}
										],
										"body": {
											"mode": "raw",
											"raw": "{\n    \"tests\": {\n        \"include\": [\"{{single_test_1}}\"]\n    }\n}"
										},
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions"
											]
										}
									},
									"response": []
								},
								{
									"name": "Start Session",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "579feb39-25c5-482a-95e1-be6861144110",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "POST",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/start",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions",
												"{{session_token}}",
												"start"
											]
										}
									},
									"response": []
								},
								{
									"name": "Read Next Test of Session",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "2399a9f6-0689-4035-8f01-22ad4726232b",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"const response = pm.response.json();",
													"",
													"const nextTest = response.next_test;",
													"pm.globals.set(\"current_test_url\", nextTest);",
													"if (!nextTest) return;",
													"const test = \"/\" + nextTest.split(\"/\").slice(3).join(\"/\").split(\"?\")[0];",
													"pm.globals.set(\"current_test\", test);",
													""
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "GET",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/next",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"tests",
												"{{session_token}}",
												"next"
											]
										}
									},
									"response": []
								},
								{
									"name": "Create Result",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "75177890-a772-4bcc-9d94-6a7f485b647b",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "POST",
										"header": [
											{
												"key": "Content-Type",
												"name": "Content-Type",
												"value": "application/json",
												"type": "text"
											}
										],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"test\": \"{{current_test}}\",\n  \"status\": \"OK\",\n  \"message\": null,\n  \"subtests\": [\n    {\n      \"name\": \"Subtest testing feature xy\",\n      \"status\": \"FAIL\",\n      \"message\": \"Error message\"\n    }\n  ]\n}"
										},
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token}}",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"results",
												"{{session_token}}"
											]
										}
									},
									"response": []
								}
							],
							"protocolProfileBehavior": {},
							"_postman_isSubFolder": true
						},
						{
							"name": "Second Session",
							"item": [
								{
									"name": "Create Session One Tests",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "e35de151-f1d5-4cb4-b403-953bb7dca87f",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"const response = pm.response.json();",
													"const token = response.token;",
													"pm.globals.set(\"session_token_comp\", token);"
												],
												"type": "text/javascript"
											}
										},
										{
											"listen": "prerequest",
											"script": {
												"id": "30b29828-cd1c-469a-873c-77a31ce7b7f4",
												"exec": [
													"const availableTests = pm.globals.get(\"available_tests\");",
													"const test1 = availableTests[Object.keys(availableTests)[0]][0];",
													"const test2 = availableTests[Object.keys(availableTests)[0]][1];",
													"",
													"pm.globals.set(\"single_test_1\", test1);",
													"pm.globals.set(\"single_test_2\", test2);"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "POST",
										"header": [
											{
												"key": "Content-Type",
												"name": "Content-Type",
												"type": "text",
												"value": "application/json"
											}
										],
										"body": {
											"mode": "raw",
											"raw": "{\n    \"tests\": {\n        \"include\": [\"{{single_test_1}}\"]\n    }\n}"
										},
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions"
											]
										}
									},
									"response": []
								},
								{
									"name": "Start Session",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "29cdd92a-28c4-426e-9f53-8563bc3a36e7",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "POST",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token_comp}}/start",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions",
												"{{session_token_comp}}",
												"start"
											]
										}
									},
									"response": []
								},
								{
									"name": "Read Next Test of Session",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "8cc61693-a77c-467c-a7df-5c239a3bf569",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"const response = pm.response.json();",
													"",
													"const nextTest = response.next_test;",
													"pm.globals.set(\"current_test_url\", nextTest);",
													"if (!nextTest) return;",
													"const test = \"/\" + nextTest.split(\"/\").slice(3).join(\"/\").split(\"?\")[0];",
													"pm.globals.set(\"current_test\", test);",
													""
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "GET",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token_comp}}/next",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"tests",
												"{{session_token_comp}}",
												"next"
											]
										}
									},
									"response": []
								},
								{
									"name": "Create Result",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "ae30e47e-bb3d-4479-9455-3823bc2adf88",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "POST",
										"header": [
											{
												"key": "Content-Type",
												"name": "Content-Type",
												"value": "application/json",
												"type": "text"
											}
										],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"test\": \"{{current_test}}\",\n  \"status\": \"OK\",\n  \"message\": null,\n  \"subtests\": [\n    {\n      \"name\": \"Subtest testing feature xy\",\n      \"status\": \"FAIL\",\n      \"message\": \"Error message\"\n    }\n  ]\n}"
										},
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token_comp}}",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"results",
												"{{session_token_comp}}"
											]
										}
									},
									"response": []
								}
							],
							"protocolProfileBehavior": {},
							"_postman_isSubFolder": true
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "Download reports",
					"item": [
						{
							"name": "Download Results Overview",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "e614e97d-15e4-4c9b-987f-bd9f272bd295",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token}}/overview",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"results",
										"{{session_token}}",
										"overview"
									]
								}
							},
							"response": []
						},
						{
							"name": "Download All Apis Json",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "e72a7387-bd42-4221-be2a-21bca702d1fe",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token}}/json",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"results",
										"{{session_token}}",
										"json"
									]
								}
							},
							"response": []
						},
						{
							"name": "Download WPT Multi Report Url",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "dbcd722b-480a-4544-807a-6f7d6edcb441",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Uri returned\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(typeof jsonData.uri).to.equal(\"string\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{api_name}}/reporturl?tokens={{session_token}},{{session_token_comp}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"results",
										"{{api_name}}",
										"reporturl"
									],
									"query": [
										{
											"key": "tokens",
											"value": "{{session_token}},{{session_token_comp}}"
										}
									]
								}
							},
							"response": []
						},
						{
							"name": "Download Results Api Json",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "9e302610-c7a7-4de0-989a-9903e77499eb",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});"
										],
										"type": "text/javascript"
									}
								},
								{
									"listen": "prerequest",
									"script": {
										"id": "9d79c233-e3a3-4972-af76-aa3dfa2ade4b",
										"exec": [
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token}}/{{api_name}}/json",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"results",
										"{{session_token}}",
										"{{api_name}}",
										"json"
									]
								}
							},
							"response": []
						},
						{
							"name": "Download WPT Report Copy",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "0a43dacd-8106-414c-b9b4-750c2a0375a4",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"pm.test(\"Uri returned\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(typeof jsonData.uri).to.equal(\"string\");",
											"});"
										],
										"type": "text/javascript"
									}
								},
								{
									"listen": "prerequest",
									"script": {
										"id": "4b29e651-47e5-48ae-aa5d-b04b62e47e54",
										"exec": [
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/results/{{session_token}}/{{api_name}}/reporturl",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"results",
										"{{session_token}}",
										"{{api_name}}",
										"reporturl"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				}
			],
			"protocolProfileBehavior": {}
		},
		{
			"name": "Malfunctioning List",
			"item": [
				{
					"name": "Create Session \\w Configuration Copy",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "d0ededde-44a0-48f3-bc21-eab3302b7b4d",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
									"",
									"pm.test(\"Responds with token in JSON format\", function () {",
									"    var jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property(\"token\");",
									"    pm.expect(jsonData.token).to.match(tokenRegex);",
									"});",
									"",
									"",
									"const response = pm.response.json();",
									"const token = response.token;",
									"pm.globals.set(\"session_token\", token);"
								],
								"type": "text/javascript"
							}
						},
						{
							"listen": "prerequest",
							"script": {
								"id": "ef1d181c-10b8-4bdd-9b5c-f14d6d9ca046",
								"exec": [
									"var automaticTimeout = 120000;",
									"var manualTimeout = 1000000;",
									"var specialTimeout = 2000;",
									"",
									"pm.globals.set(\"automatic_timeout\", automaticTimeout);",
									"pm.globals.set(\"manual_timeout\", manualTimeout);",
									"pm.globals.set(\"special_timeout\", specialTimeout);"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"name": "Content-Type",
								"type": "text",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"tests\": {\n        \"include\": {{included_tests}},\n        \"exclude\": {{excluded_tests}}\n    },\n    \"types\": [\n        \"automatic\"\n    ],\n    \"timeouts\": {\n        \"automatic\": {{automatic_timeout}},\n        \"manual\": {{manual_timeout}},\n        \"{{special_timeout_test}}\": {{special_timeout}}\n    },\n    \"labels\": [\"label1\", \"label2\"]\n}"
						},
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"sessions"
							]
						}
					},
					"response": []
				},
				{
					"name": "Read Session Malfunctioning Empty",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "e4ed838e-02e3-4fe7-9f27-b9aed6d72d02",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"var jsonData = pm.response.json();",
									"",
									"pm.test(\"Return empty array\", function() {",
									"    pm.expect(jsonData).to.be.an.instanceof(Array)",
									"    pm.expect(jsonData).to.have.length(0)",
									"})"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/malfunctioning",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"tests",
								"{{session_token}}",
								"malfunctioning"
							]
						}
					},
					"response": []
				},
				{
					"name": "Update Session Malfunctioning Insert Two",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "40b5a135-a839-4ffc-98e5-6d8923d53743",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "PUT",
						"header": [
							{
								"key": "Content-Type",
								"name": "Content-Type",
								"value": "application/json",
								"type": "text"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "[\n\t\"/test/file/one.html\",\n\t\"/test/file/two.html\"\n]",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/malfunctioning",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"tests",
								"{{session_token}}",
								"malfunctioning"
							]
						}
					},
					"response": []
				},
				{
					"name": "Read Session Malfunctioning Two Tests",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "32953640-3b13-4df0-8af2-36544ebfe59e",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"var jsonData = pm.response.json();",
									"",
									"pm.test(\"Return array with two tests\", function() {",
									"    pm.expect(jsonData).to.be.an.instanceof(Array)",
									"    pm.expect(jsonData).to.have.length(2)",
									"    pm.expect(jsonData).to.include(\"/test/file/one.html\")",
									"    pm.expect(jsonData).to.include(\"/test/file/two.html\")",
									"})"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/malfunctioning",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"tests",
								"{{session_token}}",
								"malfunctioning"
							]
						}
					},
					"response": []
				},
				{
					"name": "Update Session Malfunctioning Empty Array",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "784734d2-61db-4ff3-b063-ba9fc07176d3",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "PUT",
						"header": [
							{
								"key": "Content-Type",
								"name": "Content-Type",
								"type": "text",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "[]",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/malfunctioning",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"tests",
								"{{session_token}}",
								"malfunctioning"
							]
						}
					},
					"response": []
				},
				{
					"name": "Read Session Malfunctioning Empty",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "75a2bbc5-47aa-4708-b783-2c5e36f59e1a",
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"var jsonData = pm.response.json();",
									"",
									"pm.test(\"Return empty array\", function() {",
									"    pm.expect(jsonData).to.be.an.instanceof(Array)",
									"    pm.expect(jsonData).to.have.length(0)",
									"})"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}/malfunctioning",
							"protocol": "{{protocol}}",
							"host": [
								"{{host}}"
							],
							"port": "{{port}}",
							"path": [
								"{{web_root}}",
								"api",
								"tests",
								"{{session_token}}",
								"malfunctioning"
							]
						}
					},
					"response": []
				}
			],
			"protocolProfileBehavior": {}
		},
		{
			"name": "Sessions API",
			"item": [
				{
					"name": "create session",
					"item": [
						{
							"name": "With Defaults",
							"item": [
								{
									"name": "Prep: Read Available Tests",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "2f9076bb-59aa-43f9-992d-49723c0487e7",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"var availableTests = pm.response.json();",
													"",
													"pm.test(\"JSON structure is as expected\", function () {",
													"    pm.expect(typeof availableTests).to.equal(\"object\");",
													"    for (var api of Object.keys(availableTests)) {",
													"        pm.expect(availableTests[api]).to.be.an.instanceof(Array);",
													"        var apiRegExp = new RegExp(\"^/\" + api, \"i\");",
													"        for (var test of availableTests[api]) {",
													"            pm.expect(test).to.match(apiRegExp);",
													"        }",
													"    }",
													"});",
													"",
													"var includedTests = [];",
													"var excludedTests = [];",
													"var specialTimeoutTest = \"\";",
													"",
													"var apis = Object.keys(availableTests);",
													"for(var api of apis) {",
													"    if (availableTests[api].length > 50) {",
													"        var subDirs = availableTests[api].map(test => test.split(\"/\").filter(part => !!part).join(\"/\").split(\"/\")[1]).reduce((acc, curr) => acc.indexOf(curr) === -1 ? acc.concat([curr]) : acc, []);",
													"        if (subDirs.length > 2) {",
													"            includedTests.push(\"/\" + api);",
													"            excludedTests.push(\"/\" + api + \"/\" + subDirs[0]);",
													"            specialTimeoutTest = availableTests[api][availableTests[api].length - 1];",
													"            break;",
													"        }",
													"        ",
													"    }",
													"}",
													"",
													"pm.globals.set(\"available_tests\", availableTests);",
													"pm.globals.set(\"included_tests\", JSON.stringify(includedTests));",
													"pm.globals.set(\"excluded_tests\", JSON.stringify(excludedTests));",
													"pm.globals.set(\"special_timeout_test\", specialTimeoutTest.replace(\".\", \"\"));"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "GET",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"tests"
											]
										}
									},
									"response": []
								},
								{
									"name": "Create Session No Configuration",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "3279e145-d372-4feb-a496-8e3cce73e839",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
													"",
													"pm.test(\"Responds with token in JSON format\", function () {",
													"    var jsonData = pm.response.json();",
													"    pm.expect(jsonData).to.have.property(\"token\");",
													"    pm.expect(jsonData.token).to.match(tokenRegex);",
													"});",
													"",
													"",
													"const response = pm.response.json();",
													"const token = response.token;",
													"pm.globals.set(\"session_token\", token);"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "POST",
										"header": [
											{
												"key": "Content-Type",
												"name": "Content-Type",
												"type": "text",
												"value": "application/json"
											}
										],
										"body": {
											"mode": "raw",
											"raw": ""
										},
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions"
											]
										}
									},
									"response": []
								},
								{
									"name": "Read Session Configuration",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "2f52b046-49d6-4ae3-bd84-111c5f9e534a",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"var jsonData = pm.response.json();",
													"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
													"",
													"pm.test(\"Configuration is default\", function () {",
													"    pm.expect(jsonData.token).to.match(tokenRegex);",
													"    pm.expect(jsonData.tests.include).to.include(\"/\");",
													"    pm.expect(jsonData.types).to.include(\"automatic\");",
													"    pm.expect(jsonData.types).to.include(\"manual\");",
													"    pm.expect(jsonData.user_agent).to.include(\"PostmanRuntime\");",
													"    pm.expect(jsonData.timeouts.automatic).to.equal(60000);",
													"    pm.expect(jsonData.timeouts.manual).to.equal(300000);",
													"    pm.expect(jsonData.browser.name).to.equal(\"Other\");",
													"    pm.expect(jsonData.browser.version).to.equal(\"0\");",
													"    pm.expect(jsonData.is_public).to.equal(false);",
													"    pm.expect(jsonData.reference_tokens).to.be.empty;",
													"    pm.expect(jsonData.labels).to.be.empty;",
													"    pm.expect(new Date(jsonData.date_created).getTime()).to.be.below(Date.now());",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "GET",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions",
												"{{session_token}}"
											]
										}
									},
									"response": []
								},
								{
									"name": "Read Session Status",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "86966d77-4519-415d-b893-5af6e18a0acf",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"",
													"var jsonData = pm.response.json();",
													"",
													"pm.test(\"Session status is pending\", function () {",
													"    pm.expect(jsonData.status).to.equal(\"pending\");",
													"})",
													"",
													"pm.test(\"Start, Finish and Expiration date not set\", function () {",
													"    pm.expect(jsonData.date_started).to.be.null;",
													"    pm.expect(jsonData.date_finished).to.be.null;",
													"    pm.expect(jsonData.expiration_date).to.be.null;",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "GET",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions",
												"{{session_token}}",
												"status"
											]
										}
									},
									"response": []
								},
								{
									"name": "Read Tests of Session",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "b67d346a-b2c9-4d67-af7b-27d2f5b8854f",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"var jsonData = pm.response.json();",
													"",
													"pm.test(\"JSON structure is as expected\", function () {",
													"    pm.expect(jsonData).to.have.property(\"token\");",
													"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
													"    pm.expect(jsonData).to.have.property(\"pending_tests\");",
													"    pm.expect(typeof jsonData.pending_tests).to.equal(\"object\");",
													"    pm.expect(jsonData).to.have.property(\"running_tests\");",
													"    pm.expect(typeof jsonData.running_tests).to.equal(\"object\");",
													"});",
													"",
													"pm.test(\"All tests are pending tests\", function () {",
													"    pm.expect(Object.keys(jsonData.pending_tests)).to.not.have.lengthOf(0);",
													"    pm.expect(Object.keys(jsonData.running_tests)).to.have.lengthOf(0);",
													"})",
													"",
													"const availableTests = pm.globals.get(\"available_tests\"); ",
													"",
													"pm.test(\"All available tests are part of the session\", function () {",
													"    for (var api of Object.keys(jsonData.pending_tests)) {",
													"        for (var test of jsonData.pending_tests[api]) {",
													"            pm.expect(availableTests[api]).to.include(test);",
													"        }",
													"    }",
													"})"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "GET",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"tests",
												"{{session_token}}"
											]
										}
									},
									"response": []
								},
								{
									"name": "Clean up: Delete session",
									"request": {
										"method": "DELETE",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions",
												"{{session_token}}"
											]
										}
									},
									"response": []
								}
							],
							"event": [
								{
									"listen": "prerequest",
									"script": {
										"id": "a4ad3a47-e64a-491b-91cf-57b36a8eb88f",
										"type": "text/javascript",
										"exec": [
											""
										]
									}
								},
								{
									"listen": "test",
									"script": {
										"id": "ee4ad964-e66e-45fd-9c7a-7895fcbc9e10",
										"type": "text/javascript",
										"exec": [
											""
										]
									}
								}
							],
							"protocolProfileBehavior": {},
							"_postman_isSubFolder": true
						},
						{
							"name": "With Configuration",
							"item": [
								{
									"name": "Prep: Read Available Tests",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "1a955154-d0c2-4d20-84a7-445da8ecc722",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"var availableTests = pm.response.json();",
													"",
													"pm.test(\"JSON structure is as expected\", function () {",
													"    pm.expect(typeof availableTests).to.equal(\"object\");",
													"    for (var api of Object.keys(availableTests)) {",
													"        pm.expect(availableTests[api]).to.be.an.instanceof(Array);",
													"        var apiRegExp = new RegExp(\"^/\" + api, \"i\");",
													"        for (var test of availableTests[api]) {",
													"            pm.expect(test).to.match(apiRegExp);",
													"        }",
													"    }",
													"});",
													"",
													"var includedTests = [];",
													"var excludedTests = [];",
													"var specialTimeoutTest = \"\";",
													"",
													"var apis = Object.keys(availableTests);",
													"for(var api of apis) {",
													"    if (availableTests[api].length > 50) {",
													"        var subDirs = availableTests[api].map(test => test.split(\"/\").filter(part => !!part).join(\"/\").split(\"/\")[1]).reduce((acc, curr) => acc.indexOf(curr) === -1 ? acc.concat([curr]) : acc, []);",
													"        if (subDirs.length > 2) {",
													"            includedTests.push(\"/\" + api);",
													"            excludedTests.push(\"/\" + api + \"/\" + subDirs[0]);",
													"            specialTimeoutTest = availableTests[api][availableTests[api].length - 1];",
													"            break;",
													"        }",
													"        ",
													"    }",
													"}",
													"",
													"pm.globals.set(\"available_tests\", availableTests);",
													"pm.globals.set(\"included_tests\", JSON.stringify(includedTests));",
													"pm.globals.set(\"excluded_tests\", JSON.stringify(excludedTests));",
													"pm.globals.set(\"special_timeout_test\", specialTimeoutTest.replace(\".\", \"\"));"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "GET",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"tests"
											]
										}
									},
									"response": []
								},
								{
									"name": "Create Session \\w Configuration",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "38973bf0-0737-469d-b2ed-819c1acc6cf3",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
													"",
													"pm.test(\"Responds with token in JSON format\", function () {",
													"    var jsonData = pm.response.json();",
													"    pm.expect(jsonData).to.have.property(\"token\");",
													"    pm.expect(jsonData.token).to.match(tokenRegex);",
													"});",
													"",
													"",
													"const response = pm.response.json();",
													"const token = response.token;",
													"pm.globals.set(\"session_token\", token);"
												],
												"type": "text/javascript"
											}
										},
										{
											"listen": "prerequest",
											"script": {
												"id": "cc54eb7d-209f-4659-8119-ade100bb37ef",
												"exec": [
													"var automaticTimeout = 120000;",
													"var manualTimeout = 1000000;",
													"var specialTimeout = 2000;",
													"",
													"pm.globals.set(\"automatic_timeout\", automaticTimeout);",
													"pm.globals.set(\"manual_timeout\", manualTimeout);",
													"pm.globals.set(\"special_timeout\", specialTimeout);"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "POST",
										"header": [
											{
												"key": "Content-Type",
												"name": "Content-Type",
												"type": "text",
												"value": "application/json"
											}
										],
										"body": {
											"mode": "raw",
											"raw": "{\n    \"tests\": {\n        \"include\": {{included_tests}},\n        \"exclude\": {{excluded_tests}}\n    },\n    \"types\": [\n        \"automatic\"\n    ],\n    \"timeouts\": {\n        \"automatic\": {{automatic_timeout}},\n        \"manual\": {{manual_timeout}},\n        \"{{special_timeout_test}}\": {{special_timeout}}\n    },\n    \"labels\": [\"label1\", \"label2\"]\n}"
										},
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions"
											]
										}
									},
									"response": []
								},
								{
									"name": "Read Session Configuration",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "dbe16a67-70ba-4989-ab50-bafc8acab84c",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"var jsonData = pm.response.json();",
													"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
													"",
													"var includedTests = JSON.parse(pm.globals.get(\"included_tests\"));",
													"var excludedTests = JSON.parse(pm.globals.get(\"excluded_tests\"));",
													"var automaticTimeout = pm.globals.get(\"automatic_timeout\");",
													"var manualTimeout = pm.globals.get(\"manual_timeout\");",
													"var specialTimeout = pm.globals.get(\"special_timeout\");",
													"var specialTimeoutTest = pm.globals.get(\"special_timeout_test\");",
													"",
													"pm.test(\"Configuration is as specified\", function () {",
													"    pm.expect(jsonData.token).to.match(tokenRegex);",
													"    for (var test of includedTests) {",
													"        pm.expect(jsonData.tests.include).to.include(test);",
													"    }",
													"    for (var test of excludedTests) {",
													"        pm.expect(jsonData.tests.exclude).to.include(test);",
													"    }",
													"    pm.expect(jsonData.types).to.include(\"automatic\");",
													"    pm.expect(jsonData.types).to.not.include(\"manual\");",
													"    pm.expect(jsonData.user_agent).to.include(\"PostmanRuntime\");",
													"    pm.expect(jsonData.timeouts.automatic).to.equal(automaticTimeout);",
													"    pm.expect(jsonData.timeouts.manual).to.equal(manualTimeout);",
													"    pm.expect(jsonData.timeouts[specialTimeoutTest]).to.equal(specialTimeout);",
													"    pm.expect(jsonData.browser.name).to.equal(\"Other\");",
													"    pm.expect(jsonData.browser.version).to.equal(\"0\");",
													"    pm.expect(jsonData.is_public).to.equal(false);",
													"    pm.expect(jsonData.reference_tokens).to.be.empty;",
													"    pm.expect(jsonData.labels).to.include(\"label1\");",
													"    pm.expect(jsonData.labels).to.include(\"label2\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "GET",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions",
												"{{session_token}}"
											]
										}
									},
									"response": []
								},
								{
									"name": "Read Session Status",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "c1514c3e-fd96-4e9c-b799-6fd04185bb63",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"",
													"var jsonData = pm.response.json();",
													"",
													"pm.test(\"Session status is pending\", function () {",
													"    pm.expect(jsonData.status).to.equal(\"pending\");",
													"})",
													"",
													"pm.test(\"Start and Finish date not set\", function () {",
													"    pm.expect(jsonData.date_started).to.be.null;",
													"    pm.expect(jsonData.date_finished).to.be.null;",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "GET",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions",
												"{{session_token}}",
												"status"
											]
										}
									},
									"response": []
								},
								{
									"name": "Read Tests of Session",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "d31b10eb-4a59-4f92-98b2-73707e37a03b",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"var jsonData = pm.response.json();",
													"",
													"pm.test(\"All tests are pending tests\", function () {",
													"    pm.expect(Object.keys(jsonData.pending_tests)).to.not.have.lengthOf(0);",
													"    pm.expect(Object.keys(jsonData.running_tests)).to.have.lengthOf(0);",
													"})",
													"",
													"const availableTests = pm.globals.get(\"available_tests\");",
													"const includedTests = pm.globals.get(\"included_tests\");",
													"const excludedTests = pm.globals.get(\"excluded_tests\");",
													"",
													"pm.test(\"Selected subset of tests are part of the session\", function () {",
													"    for (var api of Object.keys(jsonData.pending_tests)) {",
													"        for (var includedTest of includedTests) {",
													"            if (includedTest.split(\"/\").find(part => !!part) === api) {",
													"                var includeRegExp = new RegExp(\"^\" + includedTest, \"i\");",
													"                for (var test of jsonData.pending_tests[api]) {",
													"                    pm.expect(test).to.match(regex);",
													"                }",
													"                break;",
													"            }",
													"        }",
													"        for (var excludedTest of excludedTests) {",
													"            if (excludedTest.split(\"/\").find(part => !!part) === api) {",
													"                var excludeRegExp = new RegExp(\"^\" + excludedTest, \"i\");",
													"                for (var test of jsonData.pending_tests[api]) {",
													"                    pm.expect(test).to.not.match(regex);",
													"                }",
													"                break;",
													"            }",
													"        }",
													"    }",
													"});",
													"",
													"const sessionTests = jsonData.pending_tests;",
													"",
													"pm.globals.set(\"session_tests\", JSON.stringify(sessionTests));"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "GET",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/tests/{{session_token}}",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"tests",
												"{{session_token}}"
											]
										}
									},
									"response": []
								},
								{
									"name": "Clean up: Delete session",
									"request": {
										"method": "DELETE",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions",
												"{{session_token}}"
											]
										}
									},
									"response": []
								}
							],
							"event": [
								{
									"listen": "prerequest",
									"script": {
										"id": "daf759dc-ea36-4d8f-a524-4dae0cc841dc",
										"type": "text/javascript",
										"exec": [
											""
										]
									}
								},
								{
									"listen": "test",
									"script": {
										"id": "b50f4e6b-23b6-41e1-9bab-cd2ca90b7f43",
										"type": "text/javascript",
										"exec": [
											""
										]
									}
								}
							],
							"protocolProfileBehavior": {},
							"_postman_isSubFolder": true
						},
						{
							"name": "With Expiration",
							"item": [
								{
									"name": "Create Session With Expiration",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "53183c44-31d1-48de-89ae-17950ef47363",
												"exec": [
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
													"",
													"pm.test(\"Responds with token in JSON format\", function () {",
													"    var jsonData = pm.response.json();",
													"    pm.expect(jsonData).to.have.property(\"token\");",
													"    pm.expect(jsonData.token).to.match(tokenRegex);",
													"});",
													"",
													"",
													"const response = pm.response.json();",
													"const token = response.token;",
													"pm.globals.set(\"session_token\", token);"
												],
												"type": "text/javascript"
											}
										},
										{
											"listen": "prerequest",
											"script": {
												"id": "6dadba7e-5352-4b9c-9601-f0eb429341ce",
												"exec": [
													"var expirationDate = Date.now() + 3000;",
													"pm.globals.set(\"expiration_date\", expirationDate);"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "POST",
										"header": [
											{
												"key": "Content-Type",
												"name": "Content-Type",
												"type": "text",
												"value": "application/json"
											}
										],
										"body": {
											"mode": "raw",
											"raw": "{\n\t\"expiration_date\": {{expiration_date}}\n}"
										},
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions"
											]
										}
									},
									"response": []
								},
								{
									"name": "Read Expired Session",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "f2bc16d6-099b-487c-a7a6-d48d198ff826",
												"exec": [
													"pm.test(\"Status code is 404\", function () {",
													"    pm.response.to.have.status(404);",
													"});"
												],
												"type": "text/javascript"
											}
										},
										{
											"listen": "prerequest",
											"script": {
												"id": "57f858cd-b882-4fc0-9170-60078cfe5af8",
												"exec": [
													"var expirationDate = pm.globals.get(\"expiration_date\");",
													"",
													"var timeout = expirationDate - Date.now() + 1000",
													"",
													"console.log(timeout)",
													"",
													"setTimeout(function () {}, timeout);"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "GET",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions",
												"{{session_token}}"
											]
										}
									},
									"response": []
								},
								{
									"name": "Clean up: Delete session",
									"request": {
										"method": "DELETE",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions",
												"{{session_token}}"
											]
										}
									},
									"response": []
								}
							],
							"protocolProfileBehavior": {},
							"_postman_isSubFolder": true
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "read session",
					"item": [
						{
							"name": "Prep: Create Session No Configuration",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "b50313e7-7fd2-434b-a86e-7ff5fb0af1d8",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
											"",
											"pm.test(\"Responds with token in JSON format\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(jsonData.token).to.match(tokenRegex);",
											"});",
											"",
											"",
											"const response = pm.response.json();",
											"const token = response.token;",
											"pm.globals.set(\"session_token\", token);"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [
									{
										"key": "Content-Type",
										"name": "Content-Type",
										"type": "text",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "raw",
									"raw": ""
								},
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Configuration",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "ef9e2d68-6b36-4ce7-8dba-27ebc7153015",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"tests\");",
											"    pm.expect(typeof jsonData.tests).to.equal(\"object\");",
											"    pm.expect(jsonData.tests).to.have.property(\"include\");",
											"    pm.expect(jsonData.tests.include).to.be.an.instanceof(Array);",
											"    pm.expect(jsonData.tests).to.have.property(\"exclude\");",
											"    pm.expect(jsonData.tests.exclude).to.be.an.instanceof(Array);",
											"    pm.expect(jsonData).to.have.property(\"types\");",
											"    pm.expect(jsonData.types).to.be.an.instanceof(Array);",
											"    pm.expect(jsonData).to.have.property(\"user_agent\");",
											"    pm.expect(typeof jsonData.user_agent).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"timeouts\");",
											"    pm.expect(typeof jsonData.timeouts).to.equal(\"object\")",
											"    pm.expect(jsonData.timeouts).to.have.property(\"automatic\");",
											"    pm.expect(typeof jsonData.timeouts.automatic).to.equal(\"number\");",
											"    pm.expect(jsonData.timeouts).to.have.property(\"manual\");",
											"    pm.expect(typeof jsonData.timeouts.manual).to.equal(\"number\");",
											"    pm.expect(jsonData).to.have.property(\"browser\");",
											"    pm.expect(typeof jsonData.browser).to.equal(\"object\");",
											"    pm.expect(jsonData.browser).to.have.property(\"name\");",
											"    pm.expect(typeof jsonData.browser.name).to.equal(\"string\");",
											"    pm.expect(jsonData.browser).to.have.property(\"version\");",
											"    pm.expect(typeof jsonData.browser.version).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"reference_tokens\");",
											"    pm.expect(jsonData.reference_tokens).to.be.an.instanceof(Array);",
											"    pm.expect(jsonData).to.have.property(\"labels\");",
											"    pm.expect(jsonData.labels).to.be.an.instanceof(Array);",
											"    pm.expect(jsonData).to.have.property(\"date_created\");",
											"});",
											"",
											"pm.test(\"Configuration is default\", function () {",
											"    pm.expect(jsonData.token).to.match(tokenRegex);",
											"    pm.expect(jsonData.tests.include).to.include(\"/\");",
											"    pm.expect(jsonData.types).to.include(\"automatic\");",
											"    pm.expect(jsonData.types).to.include(\"manual\");",
											"    pm.expect(jsonData.user_agent).to.include(\"PostmanRuntime\");",
											"    pm.expect(jsonData.timeouts.automatic).to.equal(60000);",
											"    pm.expect(jsonData.timeouts.manual).to.equal(300000);",
											"    pm.expect(jsonData.browser.name).to.equal(\"Other\");",
											"    pm.expect(jsonData.browser.version).to.equal(\"0\");",
											"    pm.expect(jsonData.is_public).to.equal(false);",
											"    pm.expect(jsonData.reference_tokens).to.be.empty;",
											"    pm.expect(jsonData.labels).to.be.empty;",
											"    pm.expect(new Date(jsonData.date_created).getTime()).to.be.below(Date.now());",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}"
									]
								}
							},
							"response": []
						},
						{
							"name": "Clean up: Delete session",
							"request": {
								"method": "DELETE",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "read session status",
					"item": [
						{
							"name": "Prep: Create Session No Configuration",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "8c7bcb56-cd2a-4d99-ad6e-ac4bc4767dce",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"const tokenRegex = new RegExp(\"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\");",
											"",
											"pm.test(\"Responds with token in JSON format\", function () {",
											"    var jsonData = pm.response.json();",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(jsonData.token).to.match(tokenRegex);",
											"});",
											"",
											"",
											"const response = pm.response.json();",
											"const token = response.token;",
											"pm.globals.set(\"session_token\", token);"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [
									{
										"key": "Content-Type",
										"name": "Content-Type",
										"type": "text",
										"value": "application/json"
									}
								],
								"body": {
									"mode": "raw",
									"raw": ""
								},
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions"
									]
								}
							},
							"response": []
						},
						{
							"name": "Read Session Status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "0639b5a0-d419-4642-baf1-5aa4aedf33c9",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"token\");",
											"    pm.expect(typeof jsonData.token).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"status\");",
											"    pm.expect(typeof jsonData.status).to.equal(\"string\");",
											"    pm.expect(jsonData).to.have.property(\"expiration_date\");",
											"    pm.expect(jsonData.expiration_date).to.be.null;",
											"    pm.expect(jsonData).to.have.property(\"date_started\");",
											"    pm.expect(jsonData).to.have.property(\"date_finished\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}",
										"status"
									]
								}
							},
							"response": []
						},
						{
							"name": "Clean up: Delete session",
							"request": {
								"method": "DELETE",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"sessions",
										"{{session_token}}"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				},
				{
					"name": "read sessions",
					"item": [
						{
							"name": "Without query parameters",
							"item": [
								{
									"name": "Read sessions",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "a1fe1580-1807-45d1-93bb-e54596895c00",
												"exec": [
													"const response = pm.response.json();",
													"",
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"pm.test(\"JSON structure as expected\", function() {",
													"    pm.expect(response).to.have.property(\"items\");",
													"    pm.expect(response[\"items\"]).to.be.instanceof(Array);",
													"    pm.expect(response).to.have.property(\"_links\");",
													"    pm.expect(response[\"_links\"]).to.be.instanceof(Object);",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "GET",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/_wave/api/sessions",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"_wave",
												"api",
												"sessions"
											]
										}
									},
									"response": []
								}
							],
							"protocolProfileBehavior": {},
							"_postman_isSubFolder": true
						},
						{
							"name": "Containing created session",
							"item": [
								{
									"name": "Prep: Create session",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "8c6722cf-7d5c-4b03-8404-3bdf17e543d9",
												"exec": [
													"const response = pm.response.json();",
													"const token = response.token;",
													"pm.globals.set(\"session_token\", token);"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions"
											]
										}
									},
									"response": []
								},
								{
									"name": "Read sessions",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "7478f8f8-c838-4ae0-87ef-9889afc1041d",
												"exec": [
													"const token = pm.globals.get(\"session_token\");",
													"const response = pm.response.json();",
													"",
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"pm.test(\"JSON structure as expected\", function() {",
													"    pm.expect(response).to.have.property(\"items\");",
													"    pm.expect(response[\"items\"]).to.be.instanceof(Array);",
													"    pm.expect(response).to.have.property(\"_links\");",
													"    pm.expect(response[\"_links\"]).to.be.instanceof(Object);",
													"});",
													"",
													"pm.test(\"Created session's token in response\", function() {",
													"    pm.expect(response.items).to.contain(token);",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "GET",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/_wave/api/sessions?index=0&count=1000",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"_wave",
												"api",
												"sessions"
											],
											"query": [
												{
													"key": "index",
													"value": "0"
												},
												{
													"key": "count",
													"value": "1000"
												}
											]
										}
									},
									"response": []
								},
								{
									"name": "Clean up: Delete Session",
									"request": {
										"method": "DELETE",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions",
												"{{session_token}}"
											]
										}
									},
									"response": []
								}
							],
							"protocolProfileBehavior": {},
							"_postman_isSubFolder": true
						},
						{
							"name": "With configuration expansion",
							"item": [
								{
									"name": "Prep: Create session",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "9f59683a-df99-4e3c-b461-85c606196218",
												"exec": [
													"const response = pm.response.json();",
													"const token = response.token;",
													"pm.globals.set(\"session_token\", token);"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions"
											]
										}
									},
									"response": []
								},
								{
									"name": "Read sessions",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "1cb72090-e989-4f6d-b19a-cd57388b18dc",
												"exec": [
													"const token = pm.globals.get(\"session_token\");",
													"const response = pm.response.json();",
													"",
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"pm.test(\"JSON structure as expected\", function() {",
													"    pm.expect(response).to.have.property(\"items\");",
													"    pm.expect(response[\"items\"]).to.be.instanceof(Array);",
													"    pm.expect(response).to.have.property(\"_links\");",
													"    pm.expect(response[\"_links\"]).to.be.instanceof(Object);",
													"    pm.expect(response).to.have.property(\"_embedded\");",
													"    pm.expect(response[\"_embedded\"]).to.be.instanceof(Object);",
													"    pm.expect(response[\"_embedded\"]).to.have.property(\"configuration\");",
													"    pm.expect(response[\"_embedded\"][\"configuration\"]).to.be.instanceof(Array);",
													"});",
													"",
													"pm.test(\"Created session's token in response\", function() {",
													"    pm.expect(response.items).to.contain(token);",
													"});",
													"",
													"pm.test(\"Created session's token in embedded configuration\", function() {",
													"    let tokenInConfigurationList = false;",
													"    let configurations = response._embedded.configuration;",
													"    for (let configuration of configurations) {",
													"        if (configuration.token !== token) continue;",
													"        tokenInConfigurationList = true;",
													"    }",
													"    pm.expect(tokenInConfigurationList).to.equal(true);",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "GET",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/_wave/api/sessions?index=0&count=1000&expand=configuration",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"_wave",
												"api",
												"sessions"
											],
											"query": [
												{
													"key": "index",
													"value": "0"
												},
												{
													"key": "count",
													"value": "1000"
												},
												{
													"key": "expand",
													"value": "configuration"
												}
											]
										}
									},
									"response": []
								},
								{
									"name": "Clean up: Delete Session",
									"request": {
										"method": "DELETE",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions",
												"{{session_token}}"
											]
										}
									},
									"response": []
								}
							],
							"protocolProfileBehavior": {},
							"_postman_isSubFolder": true
						},
						{
							"name": "With status expansion",
							"item": [
								{
									"name": "Prep: Create session",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "268fd1fa-4dba-401b-8072-8177a0f250c6",
												"exec": [
													"const response = pm.response.json();",
													"const token = response.token;",
													"pm.globals.set(\"session_token\", token);"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions"
											]
										}
									},
									"response": []
								},
								{
									"name": "Read sessions",
									"event": [
										{
											"listen": "test",
											"script": {
												"id": "93db4741-b574-4433-8dbd-008611311442",
												"exec": [
													"const token = pm.globals.get(\"session_token\");",
													"const response = pm.response.json();",
													"",
													"pm.test(\"Status code is 200\", function () {",
													"    pm.response.to.have.status(200);",
													"});",
													"",
													"pm.test(\"JSON structure as expected\", function() {",
													"    pm.expect(response).to.have.property(\"items\");",
													"    pm.expect(response[\"items\"]).to.be.instanceof(Array);",
													"    pm.expect(response).to.have.property(\"_links\");",
													"    pm.expect(response[\"_links\"]).to.be.instanceof(Object);",
													"    pm.expect(response).to.have.property(\"_embedded\");",
													"    pm.expect(response[\"_embedded\"]).to.be.instanceof(Object);",
													"    pm.expect(response[\"_embedded\"]).to.have.property(\"status\");",
													"    pm.expect(response[\"_embedded\"][\"status\"]).to.be.instanceof(Array);",
													"});",
													"",
													"pm.test(\"Created session's token in response\", function() {",
													"    pm.expect(response.items).to.contain(token);",
													"});",
													"",
													"pm.test(\"Created session's token in embedded status\", function() {",
													"    let tokenInStatusList = false;",
													"    let statuses = response._embedded.status;",
													"    for (let status of statuses) {",
													"        if (status.token !== token) continue;",
													"        tokenInStatusList = true;",
													"    }",
													"    pm.expect(tokenInStatusList).to.equal(true);",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"method": "GET",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/_wave/api/sessions?index=0&count=1000&expand=status",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"_wave",
												"api",
												"sessions"
											],
											"query": [
												{
													"key": "index",
													"value": "0"
												},
												{
													"key": "count",
													"value": "1000"
												},
												{
													"key": "expand",
													"value": "status"
												}
											]
										}
									},
									"response": []
								},
								{
									"name": "Clean up: Delete Session",
									"request": {
										"method": "DELETE",
										"header": [],
										"url": {
											"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/sessions/{{session_token}}",
											"protocol": "{{protocol}}",
											"host": [
												"{{host}}"
											],
											"port": "{{port}}",
											"path": [
												"{{web_root}}",
												"api",
												"sessions",
												"{{session_token}}"
											]
										}
									},
									"response": []
								}
							],
							"protocolProfileBehavior": {},
							"_postman_isSubFolder": true
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				}
			],
			"protocolProfileBehavior": {}
		},
		{
			"name": "General API",
			"item": [
				{
					"name": "server status",
					"item": [
						{
							"name": "Read server status",
							"event": [
								{
									"listen": "test",
									"script": {
										"id": "d695b371-c742-4eaf-9179-852b04460ecf",
										"exec": [
											"pm.test(\"Status code is 200\", function () {",
											"    pm.response.to.have.status(200);",
											"});",
											"",
											"var jsonData = pm.response.json();",
											"",
											"pm.test(\"JSON structure is as expected\", function () {",
											"    pm.expect(jsonData).to.have.property(\"import_results_enabled\");",
											"    pm.expect(typeof jsonData.import_results_enabled).to.equal(\"boolean\");",
											"    pm.expect(jsonData).to.have.property(\"reports_enabled\");",
											"    pm.expect(typeof jsonData.reports_enabled).to.equal(\"boolean\");",
											"    pm.expect(jsonData).to.have.property(\"read_sessions_enabled\");",
											"    pm.expect(typeof jsonData.read_sessions_enabled).to.equal(\"boolean\");",
											"    pm.expect(jsonData).to.have.property(\"version_string\");",
											"    pm.expect(typeof jsonData.version_string).to.equal(\"string\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{protocol}}://{{host}}:{{port}}/{{web_root}}/api/status",
									"protocol": "{{protocol}}",
									"host": [
										"{{host}}"
									],
									"port": "{{port}}",
									"path": [
										"{{web_root}}",
										"api",
										"status"
									]
								}
							},
							"response": []
						}
					],
					"protocolProfileBehavior": {},
					"_postman_isSubFolder": true
				}
			],
			"protocolProfileBehavior": {}
		}
	],
	"protocolProfileBehavior": {}
}