diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..b82bb59 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "cSpell.words": [ + "pactum" + ] +} \ No newline at end of file diff --git a/features/sample.feature b/features/sample.feature index a6c6d3b..f95cfd4 100644 --- a/features/sample.feature +++ b/features/sample.feature @@ -6,6 +6,10 @@ Feature: Regres Scenario: Create a new user Given I create a new user - Then I fetch users + Then I fetch user by id + + Scenario: Fetch All Users + Given I fetch all users + diff --git a/features/support/base.js b/features/support/base.js index 2adb0a5..96dffd6 100644 --- a/features/support/base.js +++ b/features/support/base.js @@ -1,7 +1,30 @@ -const { request, settings } = require('pactum'); -const { Before } = require('@cucumber/cucumber'); +const { request, settings, events } = require('pactum'); +const { Before, AfterStep } = require('@cucumber/cucumber'); + Before(() => { request.setBaseUrl('https://reqres.in'); settings.setReporterAutoRun(false); +}); + +let req = {}; +let res = {}; + +AfterStep(function(ctx) { + this.attach(JSON.stringify({req, res}), { mediaType: 'application/json' }); +}); + +events.pactumEvents.on(events.EVENT_TYPES.AFTER_RESPONSE, (ctx) => { + + req = {}; + req.url = ctx.request.url; + req.method = ctx.request.method; + req.body = ctx.request.body; + req.headers = ctx.request.headers; + + res = {}; + res.status = ctx.response.statusCode; + res.body = ctx.response.body; + res.headers = ctx.response.headers; + }); \ No newline at end of file diff --git a/features/support/steps.js b/features/support/steps.js index 0f261c0..964e3b0 100644 --- a/features/support/steps.js +++ b/features/support/steps.js @@ -19,7 +19,7 @@ Given('I create a new user', async () => { }); }); -Given('I fetch users', async () => { +Given('I fetch user by id', async () => { await spec() .get('/api/users/2') .expectStatus(200) @@ -32,4 +32,19 @@ Given('I fetch users', async () => { "avatar": "https://reqres.in/img/faces/2-image.jpg" } }); +}); + +Given('I fetch all users', async () => { + await spec() + .get('/api/users') + .expectStatus(200) + .expectJsonLike({ + "data": { + "id": 2, + "email": "janet.weaver@reqres.in", + "first_name": "Janet", + "last_name": "Weaver", + "avatar": "https://reqres.in/img/faces/2-image.jpg" + } + }); }); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f0b1798..eeaeb9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@cucumber/cucumber": "^10.8.0", - "pactum": "^3.7.0" + "@cucumber/cucumber": "^10.9.0", + "pactum": "^3.7.1" } }, "node_modules/@arr/every": { @@ -134,16 +134,16 @@ "integrity": "sha512-/+ooDMPtKSmvcPMDYnMZt4LuoipfFfHaYspStI4shqw8FyKcfQAmekz6G+QKWjQQrvM+7Hkljwx58MEwPCwwzg==" }, "node_modules/@cucumber/cucumber": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/@cucumber/cucumber/-/cucumber-10.8.0.tgz", - "integrity": "sha512-o8SR6MRQVCKKw4tytWqCqOjfX4cASj9dqpdHKHMi09rZWBCNQHBwH1TO9wj7NKjOa6RfUOTcgvDlayTcjyCH4A==", + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/@cucumber/cucumber/-/cucumber-10.9.0.tgz", + "integrity": "sha512-7XHJ6nmr9IkIag0nv6or82HfelbSInrEe3H4aT6dMHyTehwFLUifG6eQQ+uE4LZIOXAnzLPH37YmqygEO67vCA==", "dependencies": { "@cucumber/ci-environment": "10.0.1", "@cucumber/cucumber-expressions": "17.1.0", "@cucumber/gherkin": "28.0.0", "@cucumber/gherkin-streams": "5.0.1", "@cucumber/gherkin-utils": "9.0.0", - "@cucumber/html-formatter": "21.3.1", + "@cucumber/html-formatter": "21.6.0", "@cucumber/message-streams": "4.0.1", "@cucumber/messages": "24.1.0", "@cucumber/tag-expressions": "6.1.0", @@ -164,6 +164,7 @@ "lodash.merge": "^4.6.2", "lodash.mergewith": "^4.6.2", "luxon": "3.2.1", + "mime": "^3.0.0", "mkdirp": "^2.1.5", "mz": "^2.7.0", "progress": "^2.0.3", @@ -377,9 +378,9 @@ } }, "node_modules/@cucumber/html-formatter": { - "version": "21.3.1", - "resolved": "https://registry.npmjs.org/@cucumber/html-formatter/-/html-formatter-21.3.1.tgz", - "integrity": "sha512-M1zbre7e8MsecXheqNv62BKY5J06YJSv1LmsD7sJ3mu5t1jirLjj2It1HqPsX5CQAfg9n69xFRugPgLMSte9TA==", + "version": "21.6.0", + "resolved": "https://registry.npmjs.org/@cucumber/html-formatter/-/html-formatter-21.6.0.tgz", + "integrity": "sha512-Qw1tdObBJrgXgXwVjKVjB3hFhFPI8WhIFb+ULy8g5lDl5AdnKDiyDXAMvAWRX+pphnRMMNdkPCt6ZXEfWvUuAA==", "peerDependencies": { "@cucumber/messages": ">=18" } @@ -1047,6 +1048,17 @@ "node": ">=6" } }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/mime-lite": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/mime-lite/-/mime-lite-1.0.3.tgz", @@ -1163,9 +1175,9 @@ "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" }, "node_modules/pactum": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/pactum/-/pactum-3.7.0.tgz", - "integrity": "sha512-zYw+84hb/rQZ2/mEw2xla/qowLnOvlIvbTYeAhQS2pu3ZAyx+pXJLntcCqZ0QI9PUWwx8HqCzm2qBclZTtZUzw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/pactum/-/pactum-3.7.1.tgz", + "integrity": "sha512-r+R1dMy2MfRCQpAHohMyICusiMz14t0E+bhnLDScl2x4lXJKQAvQUGV/WWKUUxN2DS0Jdm0PUj6KjblfcSk1GA==", "dependencies": { "@exodus/schemasafe": "^1.3.0", "deep-override": "^1.0.2", diff --git a/package.json b/package.json index 4647b00..9e224e9 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "author": "", "license": "ISC", "dependencies": { - "@cucumber/cucumber": "^10.8.0", - "pactum": "^3.7.0" + "@cucumber/cucumber": "^10.9.0", + "pactum": "^3.7.1" } } diff --git a/reports/cucumber-report.json b/reports/cucumber-report.json index b51e305..e39e8b0 100644 --- a/reports/cucumber-report.json +++ b/reports/cucumber-report.json @@ -14,7 +14,7 @@ "hidden": true, "result": { "status": "passed", - "duration": 521791 + "duration": 364415 } }, { @@ -27,21 +27,72 @@ }, "result": { "status": "passed", - "duration": 385459290 - } + "duration": 465891833 + }, + "embeddings": [ + { + "data": "eyJyZXEiOnsidXJsIjoiaHR0cHM6Ly9yZXFyZXMuaW4vYXBpL3VzZXJzIiwibWV0aG9kIjoiUE9TVCIsImJvZHkiOnsibmFtZSI6Im1vcnBoZXVzIiwiam9iIjoibGVhZGVyIn19LCJyZXMiOnsic3RhdHVzIjoyMDEsImJvZHkiOnsibmFtZSI6Im1vcnBoZXVzIiwiam9iIjoibGVhZGVyIiwiaWQiOiIxMCIsImNyZWF0ZWRBdCI6IjIwMjQtMDktMDFUMTI6NTg6MDcuMDExWiJ9LCJoZWFkZXJzIjp7ImRhdGUiOiJTdW4sIDAxIFNlcCAyMDI0IDEyOjU4OjA3IEdNVCIsImNvbnRlbnQtdHlwZSI6ImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiLCJjb250ZW50LWxlbmd0aCI6IjgzIiwiY29ubmVjdGlvbiI6ImtlZXAtYWxpdmUiLCJyZXBvcnQtdG8iOiJ7XCJncm91cFwiOlwiaGVyb2t1LW5lbFwiLFwibWF4X2FnZVwiOjM2MDAsXCJlbmRwb2ludHNcIjpbe1widXJsXCI6XCJodHRwczovL25lbC5oZXJva3UuY29tL3JlcG9ydHM/dHM9MTcyNTE5NTQ4NyZzaWQ9YzRjOTcyNWYtMWFiMC00NGQ4LTgyMGYtNDMwZGYyNzE4ZTExJnM9ZTBaRXp0TktVR0VwaHpGbzJtZjJ1Y250eE1hbGttNmU3aDZNdmZHQiUyRm1JJTNEXCJ9XX0iLCJyZXBvcnRpbmctZW5kcG9pbnRzIjoiaGVyb2t1LW5lbD1odHRwczovL25lbC5oZXJva3UuY29tL3JlcG9ydHM/dHM9MTcyNTE5NTQ4NyZzaWQ9YzRjOTcyNWYtMWFiMC00NGQ4LTgyMGYtNDMwZGYyNzE4ZTExJnM9ZTBaRXp0TktVR0VwaHpGbzJtZjJ1Y250eE1hbGttNmU3aDZNdmZHQiUyRm1JJTNEIiwibmVsIjoie1wicmVwb3J0X3RvXCI6XCJoZXJva3UtbmVsXCIsXCJtYXhfYWdlXCI6MzYwMCxcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLjAwNSxcImZhaWx1cmVfZnJhY3Rpb25cIjowLjA1LFwicmVzcG9uc2VfaGVhZGVyc1wiOltcIlZpYVwiXX0iLCJ4LXBvd2VyZWQtYnkiOiJFeHByZXNzIiwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luIjoiKiIsImV0YWciOiJXL1wiNTMtWnh0aWpzSUJ4eEtLUTU5ZVIvaFJoZGNlZDRNXCIiLCJ2aWEiOiIxLjEgdmVndXIiLCJjZi1jYWNoZS1zdGF0dXMiOiJEWU5BTUlDIiwic2VydmVyIjoiY2xvdWRmbGFyZSIsImNmLXJheSI6IjhiYzU2ZTBmYmNmNzJlODUtSFlEIn19fQ==", + "mime_type": "application/json" + } + ] }, { "arguments": [], "keyword": "Then ", "line": 9, - "name": "I fetch users", + "name": "I fetch user by id", "match": { "location": "features/support/steps.js:22" }, "result": { "status": "passed", - "duration": 11984208 + "duration": 11961207 + }, + "embeddings": [ + { + "data": "eyJyZXEiOnsidXJsIjoiaHR0cHM6Ly9yZXFyZXMuaW4vYXBpL3VzZXJzLzIiLCJtZXRob2QiOiJHRVQifSwicmVzIjp7InN0YXR1cyI6MjAwLCJib2R5Ijp7ImRhdGEiOnsiaWQiOjIsImVtYWlsIjoiamFuZXQud2VhdmVyQHJlcXJlcy5pbiIsImZpcnN0X25hbWUiOiJKYW5ldCIsImxhc3RfbmFtZSI6IldlYXZlciIsImF2YXRhciI6Imh0dHBzOi8vcmVxcmVzLmluL2ltZy9mYWNlcy8yLWltYWdlLmpwZyJ9LCJzdXBwb3J0Ijp7InVybCI6Imh0dHBzOi8vcmVxcmVzLmluLyNzdXBwb3J0LWhlYWRpbmciLCJ0ZXh0IjoiVG8ga2VlcCBSZXFSZXMgZnJlZSwgY29udHJpYnV0aW9ucyB0b3dhcmRzIHNlcnZlciBjb3N0cyBhcmUgYXBwcmVjaWF0ZWQhIn19LCJoZWFkZXJzIjp7ImRhdGUiOiJTdW4sIDAxIFNlcCAyMDI0IDEyOjU4OjA3IEdNVCIsImNvbnRlbnQtdHlwZSI6ImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiLCJjb250ZW50LWxlbmd0aCI6IjI4MCIsImNvbm5lY3Rpb24iOiJrZWVwLWFsaXZlIiwicmVwb3J0LXRvIjoie1wiZ3JvdXBcIjpcImhlcm9rdS1uZWxcIixcIm1heF9hZ2VcIjozNjAwLFwiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6Ly9uZWwuaGVyb2t1LmNvbS9yZXBvcnRzP3RzPTE3MjQ3NjE2OTImc2lkPWM0Yzk3MjVmLTFhYjAtNDRkOC04MjBmLTQzMGRmMjcxOGUxMSZzPWVJaFJsSEpYUHpvajR6cUtwMHZHS2slMkJLMjNXR2xIRnR6eiUyRkE4SlAyM284JTNEXCJ9XX0iLCJyZXBvcnRpbmctZW5kcG9pbnRzIjoiaGVyb2t1LW5lbD1odHRwczovL25lbC5oZXJva3UuY29tL3JlcG9ydHM/dHM9MTcyNDc2MTY5MiZzaWQ9YzRjOTcyNWYtMWFiMC00NGQ4LTgyMGYtNDMwZGYyNzE4ZTExJnM9ZUloUmxISlhQem9qNHpxS3AwdkdLayUyQksyM1dHbEhGdHp6JTJGQThKUDIzbzglM0QiLCJuZWwiOiJ7XCJyZXBvcnRfdG9cIjpcImhlcm9rdS1uZWxcIixcIm1heF9hZ2VcIjozNjAwLFwic3VjY2Vzc19mcmFjdGlvblwiOjAuMDA1LFwiZmFpbHVyZV9mcmFjdGlvblwiOjAuMDUsXCJyZXNwb25zZV9oZWFkZXJzXCI6W1wiVmlhXCJdfSIsIngtcG93ZXJlZC1ieSI6IkV4cHJlc3MiLCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW4iOiIqIiwiZXRhZyI6IlcvXCIxMTgtcGJkd3dGbzlTS05oRDNMeDVpSEp5bmdwcTAwXCIiLCJ2aWEiOiIxLjEgdmVndXIiLCJjYWNoZS1jb250cm9sIjoibWF4LWFnZT0xNDQwMCIsImNmLWNhY2hlLXN0YXR1cyI6IkhJVCIsImFnZSI6IjEwMDQiLCJhY2NlcHQtcmFuZ2VzIjoiYnl0ZXMiLCJzZXJ2ZXIiOiJjbG91ZGZsYXJlIiwiY2YtcmF5IjoiOGJjNTZlMTI2ZTVlMmU4NS1IWUQifX19", + "mime_type": "application/json" + } + ] + } + ], + "tags": [], + "type": "scenario" + }, + { + "description": "", + "id": "regres;fetch-all-users", + "keyword": "Scenario", + "line": 11, + "name": "Fetch All Users", + "steps": [ + { + "keyword": "Before", + "hidden": true, + "result": { + "status": "passed", + "duration": 52290 } + }, + { + "arguments": [], + "keyword": "Given ", + "line": 12, + "name": "I fetch all users", + "match": { + "location": "features/support/steps.js:37" + }, + "result": { + "status": "failed", + "duration": 436505083, + "error_message": "AssertionError [ERR_ASSERTION]: Json doesn't have type 'object' at '$.data' but found 'array'\n at Expect.fail (/Users/anudeep/Documents/my/repos/test-results-reporter/example-pactum-cucumber-testbeats/node_modules/pactum/src/models/expect.js:461:12)\n at Expect._validateJsonLike (/Users/anudeep/Documents/my/repos/test-results-reporter/example-pactum-cucumber-testbeats/node_modules/pactum/src/models/expect.js:229:21)\n at Expect.validate (/Users/anudeep/Documents/my/repos/test-results-reporter/example-pactum-cucumber-testbeats/node_modules/pactum/src/models/expect.js:55:10)\n at Tosser.validateResponse (/Users/anudeep/Documents/my/repos/test-results-reporter/example-pactum-cucumber-testbeats/node_modules/pactum/src/models/Tosser.js:243:23)\n at Tosser.validate (/Users/anudeep/Documents/my/repos/test-results-reporter/example-pactum-cucumber-testbeats/node_modules/pactum/src/models/Tosser.js:210:18)\n at Tosser.toss (/Users/anudeep/Documents/my/repos/test-results-reporter/example-pactum-cucumber-testbeats/node_modules/pactum/src/models/Tosser.js:46:18)\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)" + }, + "embeddings": [ + { + "data": "eyJyZXEiOnsidXJsIjoiaHR0cHM6Ly9yZXFyZXMuaW4vYXBpL3VzZXJzIiwibWV0aG9kIjoiR0VUIn0sInJlcyI6eyJzdGF0dXMiOjIwMCwiYm9keSI6eyJwYWdlIjoxLCJwZXJfcGFnZSI6NiwidG90YWwiOjEyLCJ0b3RhbF9wYWdlcyI6MiwiZGF0YSI6W3siaWQiOjEsImVtYWlsIjoiZ2VvcmdlLmJsdXRoQHJlcXJlcy5pbiIsImZpcnN0X25hbWUiOiJHZW9yZ2UiLCJsYXN0X25hbWUiOiJCbHV0aCIsImF2YXRhciI6Imh0dHBzOi8vcmVxcmVzLmluL2ltZy9mYWNlcy8xLWltYWdlLmpwZyJ9LHsiaWQiOjIsImVtYWlsIjoiamFuZXQud2VhdmVyQHJlcXJlcy5pbiIsImZpcnN0X25hbWUiOiJKYW5ldCIsImxhc3RfbmFtZSI6IldlYXZlciIsImF2YXRhciI6Imh0dHBzOi8vcmVxcmVzLmluL2ltZy9mYWNlcy8yLWltYWdlLmpwZyJ9LHsiaWQiOjMsImVtYWlsIjoiZW1tYS53b25nQHJlcXJlcy5pbiIsImZpcnN0X25hbWUiOiJFbW1hIiwibGFzdF9uYW1lIjoiV29uZyIsImF2YXRhciI6Imh0dHBzOi8vcmVxcmVzLmluL2ltZy9mYWNlcy8zLWltYWdlLmpwZyJ9LHsiaWQiOjQsImVtYWlsIjoiZXZlLmhvbHRAcmVxcmVzLmluIiwiZmlyc3RfbmFtZSI6IkV2ZSIsImxhc3RfbmFtZSI6IkhvbHQiLCJhdmF0YXIiOiJodHRwczovL3JlcXJlcy5pbi9pbWcvZmFjZXMvNC1pbWFnZS5qcGcifSx7ImlkIjo1LCJlbWFpbCI6ImNoYXJsZXMubW9ycmlzQHJlcXJlcy5pbiIsImZpcnN0X25hbWUiOiJDaGFybGVzIiwibGFzdF9uYW1lIjoiTW9ycmlzIiwiYXZhdGFyIjoiaHR0cHM6Ly9yZXFyZXMuaW4vaW1nL2ZhY2VzLzUtaW1hZ2UuanBnIn0seyJpZCI6NiwiZW1haWwiOiJ0cmFjZXkucmFtb3NAcmVxcmVzLmluIiwiZmlyc3RfbmFtZSI6IlRyYWNleSIsImxhc3RfbmFtZSI6IlJhbW9zIiwiYXZhdGFyIjoiaHR0cHM6Ly9yZXFyZXMuaW4vaW1nL2ZhY2VzLzYtaW1hZ2UuanBnIn1dLCJzdXBwb3J0Ijp7InVybCI6Imh0dHBzOi8vcmVxcmVzLmluLyNzdXBwb3J0LWhlYWRpbmciLCJ0ZXh0IjoiVG8ga2VlcCBSZXFSZXMgZnJlZSwgY29udHJpYnV0aW9ucyB0b3dhcmRzIHNlcnZlciBjb3N0cyBhcmUgYXBwcmVjaWF0ZWQhIn19LCJoZWFkZXJzIjp7ImRhdGUiOiJTdW4sIDAxIFNlcCAyMDI0IDEyOjU4OjA3IEdNVCIsImNvbnRlbnQtdHlwZSI6ImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiLCJjb250ZW50LWxlbmd0aCI6Ijk5NiIsImNvbm5lY3Rpb24iOiJrZWVwLWFsaXZlIiwicmVwb3J0LXRvIjoie1wiZ3JvdXBcIjpcImhlcm9rdS1uZWxcIixcIm1heF9hZ2VcIjozNjAwLFwiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6Ly9uZWwuaGVyb2t1LmNvbS9yZXBvcnRzP3RzPTE3MjQ2ODA2NDImc2lkPWM0Yzk3MjVmLTFhYjAtNDRkOC04MjBmLTQzMGRmMjcxOGUxMSZzPWJIR2RiVXoxc3ZkUUtqaFFHeHpRc2FqZElET0FlR2xGNFlJTUJlQno4JTJGRSUzRFwifV19IiwicmVwb3J0aW5nLWVuZHBvaW50cyI6Imhlcm9rdS1uZWw9aHR0cHM6Ly9uZWwuaGVyb2t1LmNvbS9yZXBvcnRzP3RzPTE3MjQ2ODA2NDImc2lkPWM0Yzk3MjVmLTFhYjAtNDRkOC04MjBmLTQzMGRmMjcxOGUxMSZzPWJIR2RiVXoxc3ZkUUtqaFFHeHpRc2FqZElET0FlR2xGNFlJTUJlQno4JTJGRSUzRCIsIm5lbCI6IntcInJlcG9ydF90b1wiOlwiaGVyb2t1LW5lbFwiLFwibWF4X2FnZVwiOjM2MDAsXCJzdWNjZXNzX2ZyYWN0aW9uXCI6MC4wMDUsXCJmYWlsdXJlX2ZyYWN0aW9uXCI6MC4wNSxcInJlc3BvbnNlX2hlYWRlcnNcIjpbXCJWaWFcIl19IiwieC1wb3dlcmVkLWJ5IjoiRXhwcmVzcyIsImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbiI6IioiLCJldGFnIjoiVy9cIjNlNC0yUkxYdnI1d1RnOVlRNmFIOTVDa1lvRk51TzhcIiIsInZpYSI6IjEuMSB2ZWd1ciIsImNhY2hlLWNvbnRyb2wiOiJtYXgtYWdlPTE0NDAwIiwiY2YtY2FjaGUtc3RhdHVzIjoiUkVWQUxJREFURUQiLCJhY2NlcHQtcmFuZ2VzIjoiYnl0ZXMiLCJzZXJ2ZXIiOiJjbG91ZGZsYXJlIiwiY2YtcmF5IjoiOGJjNTZlMTI4ZTY3MmU4NS1IWUQifX19", + "mime_type": "application/json" + } + ] } ], "tags": [],