diff --git a/package-lock.json b/package-lock.json
index d348f76c..747d94ec 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -30,7 +30,6 @@
"expo-status-bar": "~1.12.1",
"expo-updates": "~0.25.22",
"jest": "^29.2.1",
- "jest-expo": "~51.0.3",
"jest-mock-extended": "^3.0.5",
"jest-sonar": "^0.2.16",
"jest-sonar-reporter": "^2.0.0",
@@ -63,6 +62,7 @@
"better-sqlite3": "^11.2.1",
"eslint": "^8.52.0",
"eslint-config-universe": "^12.0.0",
+ "jest-expo": "^51.0.4",
"jest-sonar-reporter": "^2.0.0",
"prettier": "^3.0.3",
"typescript": "~5.3.3"
@@ -7867,6 +7867,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
"integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
+ "dev": true,
"engines": {
"node": ">= 10"
}
@@ -7981,6 +7982,7 @@
"version": "20.0.1",
"resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz",
"integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==",
+ "dev": true,
"dependencies": {
"@types/node": "*",
"@types/tough-cookie": "*",
@@ -8063,7 +8065,8 @@
"node_modules/@types/tough-cookie": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.4.tgz",
- "integrity": "sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A=="
+ "integrity": "sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A==",
+ "dev": true
},
"node_modules/@types/yargs": {
"version": "17.0.29",
@@ -8447,7 +8450,8 @@
"node_modules/abab": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
- "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA=="
+ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
+ "dev": true
},
"node_modules/abort-controller": {
"version": "3.0.0",
@@ -8487,6 +8491,7 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz",
"integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==",
+ "dev": true,
"dependencies": {
"acorn": "^8.1.0",
"acorn-walk": "^8.0.2"
@@ -8505,6 +8510,7 @@
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz",
"integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==",
+ "dev": true,
"engines": {
"node": ">=0.4.0"
}
@@ -9152,11 +9158,6 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
- "node_modules/base-64": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
- "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA=="
- },
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -10125,12 +10126,14 @@
"node_modules/cssom": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
- "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw=="
+ "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==",
+ "dev": true
},
"node_modules/cssstyle": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
"integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
+ "dev": true,
"dependencies": {
"cssom": "~0.3.6"
},
@@ -10141,7 +10144,8 @@
"node_modules/cssstyle/node_modules/cssom": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
+ "dev": true
},
"node_modules/csstype": {
"version": "3.1.2",
@@ -10166,6 +10170,7 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
"integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
+ "dev": true,
"dependencies": {
"abab": "^2.0.6",
"whatwg-mimetype": "^3.0.0",
@@ -10270,7 +10275,8 @@
"node_modules/decimal.js": {
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
- "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
+ "dev": true
},
"node_modules/decode-uri-component": {
"version": "0.2.2",
@@ -10653,6 +10659,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
"integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
+ "dev": true,
"dependencies": {
"webidl-conversions": "^7.0.0"
},
@@ -10977,6 +10984,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
"integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
+ "dev": true,
"dependencies": {
"esprima": "^4.0.1",
"estraverse": "^5.2.0",
@@ -11540,6 +11548,7 @@
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
"engines": {
"node": ">=4.0"
}
@@ -13300,6 +13309,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
"integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
+ "dev": true,
"dependencies": {
"whatwg-encoding": "^2.0.0"
},
@@ -13339,6 +13349,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
"integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+ "dev": true,
"dependencies": {
"@tootallnate/once": "2",
"agent-base": "6",
@@ -13930,7 +13941,8 @@
"node_modules/is-potential-custom-element-name": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "dev": true
},
"node_modules/is-regex": {
"version": "1.1.4",
@@ -14888,6 +14900,7 @@
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz",
"integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==",
+ "dev": true,
"dependencies": {
"@jest/environment": "^29.7.0",
"@jest/fake-timers": "^29.7.0",
@@ -14927,9 +14940,11 @@
}
},
"node_modules/jest-expo": {
- "version": "51.0.3",
- "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-51.0.3.tgz",
- "integrity": "sha512-r49OuS9X2S/dH+lSfNmarBS2L/tgvBhzOgKHYFyDJWo+Bb5uVs7Rg/GZal/RD/NDkKFJuByGAaW1F6zHYnjZnw==",
+ "version": "51.0.4",
+ "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-51.0.4.tgz",
+ "integrity": "sha512-WmlR4rUur1TNF/F14brKCmPdX3TWf7Bno/6A1PuxnflN79LEIXpXuPKMlMWwCCChTohGB5FRniknRibblWu1ug==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"@expo/config": "~9.0.0-beta.0",
"@expo/json-file": "^8.3.0",
@@ -14952,6 +14967,7 @@
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
"integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
+ "dev": true,
"dependencies": {
"@babel/highlight": "^7.10.4"
}
@@ -14960,6 +14976,7 @@
"version": "8.3.3",
"resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz",
"integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==",
+ "dev": true,
"dependencies": {
"@babel/code-frame": "~7.10.4",
"json5": "^2.2.2",
@@ -15837,6 +15854,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/jest-watch-select-projects/-/jest-watch-select-projects-2.0.0.tgz",
"integrity": "sha512-j00nW4dXc2NiCW6znXgFLF9g8PJ0zP25cpQ1xRro/HU2GBfZQFZD0SoXnAlaoKkIY4MlfTMkKGbNXFpvCdjl1w==",
+ "dev": true,
"dependencies": {
"ansi-escapes": "^4.3.0",
"chalk": "^3.0.0",
@@ -15847,6 +15865,7 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -15861,6 +15880,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -15873,6 +15893,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
@@ -15883,12 +15904,14 @@
"node_modules/jest-watch-select-projects/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
},
"node_modules/jest-watch-select-projects/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
"engines": {
"node": ">=8"
}
@@ -15897,6 +15920,7 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -15908,6 +15932,7 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-2.2.1.tgz",
"integrity": "sha512-jYpYmUnTzysmVnwq49TAxlmtOAwp8QIqvZyoofQFn8fiWhEDZj33ZXzg3JA4nGnzWFm1hbWf3ADpteUokvXgFA==",
+ "dev": true,
"dependencies": {
"ansi-escapes": "^6.0.0",
"chalk": "^4.0.0",
@@ -15928,6 +15953,7 @@
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz",
"integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==",
+ "dev": true,
"dependencies": {
"type-fest": "^3.0.0"
},
@@ -15942,6 +15968,7 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
"engines": {
"node": ">=12"
},
@@ -15953,6 +15980,7 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -15967,6 +15995,7 @@
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -15982,6 +16011,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz",
"integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==",
+ "dev": true,
"engines": {
"node": ">=12.20"
}
@@ -15990,6 +16020,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
@@ -16000,12 +16031,14 @@
"node_modules/jest-watch-typeahead/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
},
"node_modules/jest-watch-typeahead/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
"engines": {
"node": ">=8"
}
@@ -16014,6 +16047,7 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
"integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "dev": true,
"engines": {
"node": ">=14.16"
},
@@ -16025,6 +16059,7 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz",
"integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==",
+ "dev": true,
"dependencies": {
"char-regex": "^2.0.0",
"strip-ansi": "^7.0.1"
@@ -16040,6 +16075,7 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -16054,6 +16090,7 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -16065,6 +16102,7 @@
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
"integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
+ "dev": true,
"engines": {
"node": ">=14.16"
},
@@ -16338,6 +16376,7 @@
"version": "20.0.3",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz",
"integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==",
+ "dev": true,
"dependencies": {
"abab": "^2.0.6",
"acorn": "^8.8.1",
@@ -18228,7 +18267,8 @@
"node_modules/nwsapi": {
"version": "2.2.7",
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz",
- "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ=="
+ "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==",
+ "dev": true
},
"node_modules/ob1": {
"version": "0.80.10",
@@ -18595,6 +18635,7 @@
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
"integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+ "dev": true,
"dependencies": {
"entities": "^4.4.0"
},
@@ -18606,6 +18647,7 @@
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true,
"engines": {
"node": ">=0.12"
},
@@ -19017,7 +19059,8 @@
"node_modules/psl": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
+ "dev": true
},
"node_modules/pump": {
"version": "3.0.0",
@@ -19088,7 +19131,8 @@
"node_modules/querystringify": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "dev": true
},
"node_modules/queue": {
"version": "6.0.2",
@@ -19383,25 +19427,6 @@
"resolved": "https://registry.npmjs.org/react-native-dropdown-select-list/-/react-native-dropdown-select-list-2.0.5.tgz",
"integrity": "sha512-TepbcagQVUMB6nLuIlVU2ghRpQHAECOeZWe8K04ymW6NqbKbxuczZSDFfdCiABiiQ2dFD+8Dz65y4K7/uUEqGg=="
},
- "node_modules/react-native-fs": {
- "version": "2.20.0",
- "resolved": "https://registry.npmjs.org/react-native-fs/-/react-native-fs-2.20.0.tgz",
- "integrity": "sha512-VkTBzs7fIDUiy/XajOSNk0XazFE9l+QlMAce7lGuebZcag5CnjszB+u4BdqzwaQOdcYb5wsJIsqq4kxInIRpJQ==",
- "license": "MIT",
- "dependencies": {
- "base-64": "^0.1.0",
- "utf8": "^3.0.0"
- },
- "peerDependencies": {
- "react-native": "*",
- "react-native-windows": "*"
- },
- "peerDependenciesMeta": {
- "react-native-windows": {
- "optional": true
- }
- }
- },
"node_modules/react-native-gesture-handler": {
"version": "2.16.2",
"resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.16.2.tgz",
@@ -19989,7 +20014,8 @@
"node_modules/requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+ "dev": true
},
"node_modules/resolve": {
"version": "1.22.8",
@@ -20235,6 +20261,7 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
"integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+ "dev": true,
"dependencies": {
"xmlchars": "^2.2.0"
},
@@ -20644,6 +20671,7 @@
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz",
"integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==",
+ "dev": true,
"dependencies": {
"stackframe": "^1.3.4"
}
@@ -20676,6 +20704,7 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz",
"integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==",
+ "dev": true,
"dependencies": {
"source-map": "0.5.6",
"stackframe": "^1.3.4"
@@ -20685,6 +20714,7 @@
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
"integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==",
+ "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -20693,6 +20723,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz",
"integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==",
+ "dev": true,
"dependencies": {
"error-stack-parser": "^2.0.6",
"stack-generator": "^2.0.5",
@@ -21050,7 +21081,8 @@
"node_modules/symbol-tree": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "dev": true
},
"node_modules/synckit": {
"version": "0.8.5",
@@ -21486,6 +21518,7 @@
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
"integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+ "dev": true,
"dependencies": {
"psl": "^1.1.33",
"punycode": "^2.1.1",
@@ -21500,6 +21533,7 @@
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
"integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+ "dev": true,
"engines": {
"node": ">= 4.0.0"
}
@@ -21508,6 +21542,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
"integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
+ "dev": true,
"dependencies": {
"punycode": "^2.1.1"
},
@@ -22008,6 +22043,7 @@
"version": "1.5.10",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
"integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "dev": true,
"dependencies": {
"querystringify": "^2.1.1",
"requires-port": "^1.0.0"
@@ -22098,6 +22134,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
"integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==",
+ "dev": true,
"dependencies": {
"xml-name-validator": "^4.0.0"
},
@@ -22149,6 +22186,7 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "dev": true,
"engines": {
"node": ">=12"
}
@@ -22157,6 +22195,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
"integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
+ "dev": true,
"dependencies": {
"iconv-lite": "0.6.3"
},
@@ -22168,6 +22207,7 @@
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
@@ -22184,6 +22224,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
"integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
+ "dev": true,
"engines": {
"node": ">=12"
}
@@ -22192,6 +22233,7 @@
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
"integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
+ "dev": true,
"dependencies": {
"tr46": "^3.0.0",
"webidl-conversions": "^7.0.0"
@@ -22482,6 +22524,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+ "dev": true,
"engines": {
"node": ">=12"
}
@@ -22517,7 +22560,8 @@
"node_modules/xmlchars": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "dev": true
},
"node_modules/xtend": {
"version": "4.0.2",
diff --git a/package.json b/package.json
index 0c006850..eea76329 100644
--- a/package.json
+++ b/package.json
@@ -37,7 +37,6 @@
"expo-status-bar": "~1.12.1",
"expo-updates": "~0.25.22",
"jest": "^29.2.1",
- "jest-expo": "~51.0.3",
"jest-mock-extended": "^3.0.5",
"jest-sonar": "^0.2.16",
"jest-sonar-reporter": "^2.0.0",
@@ -70,6 +69,7 @@
"better-sqlite3": "^11.2.1",
"eslint": "^8.52.0",
"eslint-config-universe": "^12.0.0",
+ "jest-expo": "^51.0.4",
"jest-sonar-reporter": "^2.0.0",
"prettier": "^3.0.3",
"typescript": "~5.3.3"
diff --git a/reports/sonar-report.xml b/reports/sonar-report.xml
index 67262e2e..687532c9 100644
--- a/reports/sonar-report.xml
+++ b/reports/sonar-report.xml
@@ -1,75 +1,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/__tests__/cadastrarIdoso.spec.tsx b/src/app/__tests__/cadastrarIdoso.spec.tsx
index 8b6029d0..df121fe1 100644
--- a/src/app/__tests__/cadastrarIdoso.spec.tsx
+++ b/src/app/__tests__/cadastrarIdoso.spec.tsx
@@ -1,9 +1,30 @@
import React from "react";
-import { render, fireEvent, act } from "@testing-library/react-native";
+import { render, fireEvent, act, waitFor } from "@testing-library/react-native";
import CadastrarIdoso from "../private/pages/cadastrarIdoso";
import AsyncStorage from "@react-native-async-storage/async-storage";
+import { router, useLocalSearchParams, useRouter } from "expo-router";
// Mock any dependencies if needed
+// Substituindo o módulo real do expo-router por uma versão mockada
+jest.mock('expo-router', () => ({
+ useLocalSearchParams: jest.fn().mockReturnValue({
+ id: "123",
+ nome: "Nome Teste",
+ foto: null,
+ }),
+ router: {
+ push: jest.fn(), // Mocka o método push para verificações de navegação
+ back: jest.fn(), // Mocka o método back para o caso de não haver a prop route
+ canGoBack: jest.fn().mockReturnValue(true), // Mocka o método canGoBack
+ },
+ useRouter: jest.fn().mockReturnValue({
+ push: jest.fn(), // Mocka novamente o push no caso do uso da função useRouter
+ back: jest.fn(),
+ canGoBack: jest.fn().mockReturnValue(true),
+ }),
+}));
+
+
// Mock AsyncStorage
jest.mock("@react-native-async-storage/async-storage", () => ({
getItem: jest.fn(),
@@ -59,7 +80,7 @@ describe("CadastrarIdoso component", () => {
fireEvent.press(cadastrar);
});
const erroTitulo = getByText(
- "O nome completo deve ter no máximo 60 caractéres.",
+ "O nome completo deve ter no máximo 60 caracteres.",
);
expect(erroTitulo).toBeTruthy();
@@ -80,7 +101,7 @@ describe("CadastrarIdoso component", () => {
const erroTitulo = getByTestId("Erro-nome");
expect(erroTitulo.props.children.props.text).toBe(
- "O nome completo deve ter pelo menos 5 caractéres.",
+ "O nome completo deve ter pelo menos 5 caracteres.",
);
});
@@ -121,4 +142,22 @@ describe("CadastrarIdoso component", () => {
"Deve estar no formato (XX)XXXXX-XXXX",
);
});
+
+ // Novo teste para verificar a navegação ao clicar no botão de voltar na tela de cadastrar idoso
+ test("Navega para a tela anterior ao clicar no botão de voltar", async () => {
+ // Renderiza o componente EditarPerfil
+ const { getByTestId } = render();
+
+ // Obtendo o botão de voltar
+ const backButton = getByTestId("back-button-pressable");
+
+ // Simula o clique no botão de voltar
+ fireEvent.press(backButton);
+
+ // Verifica se a função de navegação foi chamada corretamente e se ele navega pra tela de listar idosos
+ await waitFor(() => {
+ // expect(router.push).toHaveBeenCalledWith("/private/pages/listarIdosos");
+ expect(router.push).toHaveBeenCalledWith("/private/pages/listarIdosos");
+ });
+ });
});
diff --git a/src/app/__tests__/cadastrarRotina.spec.tsx b/src/app/__tests__/cadastrarRotina.spec.tsx
new file mode 100644
index 00000000..729cd9d0
--- /dev/null
+++ b/src/app/__tests__/cadastrarRotina.spec.tsx
@@ -0,0 +1,125 @@
+import React from "react";
+import { render, fireEvent, act, waitFor } from "@testing-library/react-native";
+import CadastrarRotina from "../private/pages/cadastrarRotina";
+import AsyncStorage from "@react-native-async-storage/async-storage";
+import { router } from "expo-router";
+import { Notifications } from "expo-notifications";
+import Toast from "react-native-toast-message";
+
+// Mock dependencies
+jest.mock("expo-router", () => ({
+ router: {
+ push: jest.fn(),
+ replace: jest.fn(),
+ },
+}));
+
+jest.mock("@react-native-async-storage/async-storage", () => ({
+ getItem: jest.fn(),
+}));
+
+jest.mock("expo-notifications", () => ({
+ getPermissionsAsync: jest.fn(),
+ requestPermissionsAsync: jest.fn(),
+ getExpoPushTokenAsync: jest.fn(),
+ setNotificationChannelAsync: jest.fn(),
+}));
+
+jest.mock("react-native-toast-message", () => ({
+ show: jest.fn(),
+}));
+
+describe("CadastrarRotina component", () => {
+ beforeEach(() => {
+ jest.clearAllMocks();
+ });
+
+ test("renders correctly", () => {
+ (AsyncStorage.getItem as jest.Mock).mockImplementation((key) => {
+ if (key === "token") {
+ return Promise.resolve("mockedToken");
+ }
+ return Promise.resolve(null);
+ });
+
+ const { getByText } = render();
+
+ const salvarButton = getByText("Salvar");
+ expect(salvarButton).toBeTruthy();
+ });
+
+ it("Mostra erro quando o título está vazio", async () => {
+ const { getByText, getByPlaceholderText, getByTestId } = render();
+
+ const titulo = getByPlaceholderText("Adicionar título");
+ const salvar = getByText("Salvar");
+
+ act(() => {
+ fireEvent.changeText(titulo, "");
+ fireEvent.press(salvar);
+ });
+
+ const erroTitulo = getByTestId("Erro-titulo");
+ expect(erroTitulo.props.children.props.text).toBe("Campo obrigatório!");
+ });
+
+ it("Mostra erro quando o título é muito longo", async () => {
+ const { getByText, getByPlaceholderText, getByTestId } = render();
+
+ const titulo = getByPlaceholderText("Adicionar título");
+ const salvar = getByText("Salvar");
+
+ act(() => {
+ fireEvent.changeText(titulo, "A".repeat(101));
+ fireEvent.press(salvar);
+ });
+
+ const erroTitulo = getByTestId("Erro-titulo");
+ expect(erroTitulo.props.children.props.text).toBe("O título deve ter no máximo 100 caracteres.");
+ });
+
+ it("Mostra erro para o formato de data incorreta", async () => {
+ const { getByText, getByPlaceholderText, getByTestId } = render();
+
+ const data = getByPlaceholderText("Data da rotina");
+ const salvar = getByText("Salvar");
+
+ act(() => {
+ fireEvent.changeText(data, "2010");
+ fireEvent.press(salvar);
+ });
+
+ const erroData = getByTestId("Erro-data");
+ expect(erroData.props.children.props.text).toBe("Data deve ser no formato dd/mm/yyyy!");
+ });
+
+ it("Mostra erro para o formato de tempo incorreto", async () => {
+ const { getByText, getByPlaceholderText, getByTestId } = render();
+
+ const hora = getByPlaceholderText("Horário de início");
+ const salvar = getByText("Salvar");
+
+ act(() => {
+ fireEvent.changeText(hora, "125:00");
+ fireEvent.press(salvar);
+ });
+
+ const erroHora = getByTestId("Erro-hora");
+ expect(erroHora.props.children.props.text).toBe("Hora deve ser no formato hh:mm!");
+ });
+
+ it("Mostra erro quando descrição é muito longa", async () => {
+ const { getByText, getByPlaceholderText, getByTestId } = render();
+
+ const descricao = getByPlaceholderText("Descrição");
+ const salvar = getByText("Salvar");
+
+ act(() => {
+ fireEvent.changeText(descricao, "A".repeat(301));
+ fireEvent.press(salvar);
+ });
+
+ const erroDescricao = getByTestId("Erro-descricao");
+ expect(erroDescricao.props.children.props.text).toBe("A descrição deve ter no máximo 300 caracteres.");
+ });
+});
diff --git a/src/app/__tests__/editarPerfil.spec.tsx b/src/app/__tests__/editarPerfil.spec.tsx
index dad737a9..323b67b9 100644
--- a/src/app/__tests__/editarPerfil.spec.tsx
+++ b/src/app/__tests__/editarPerfil.spec.tsx
@@ -1,6 +1,23 @@
import React from "react";
import { render, fireEvent, waitFor, act } from "@testing-library/react-native";
import EditarPerfil from "../private/pages/editarPerfil";
+import { router, useLocalSearchParams } from "expo-router";
+
+// Substituindo o módulo real do expo-router por uma versão mockada
+jest.mock('expo-router', () => ({
+ // função mockada com objeto de retorno especificado
+ useLocalSearchParams: jest.fn().mockReturnValue({
+ id: "123",
+ nome: "Nome Teste",
+ foto: null,
+ }),
+ // mockando o objeto router
+ router: {
+ push: jest.fn(),
+ back: jest.fn(),
+ canGoBack: jest.fn().mockReturnValue(true),
+ },
+}));
describe("EditarPerfil component", () => {
test("Atualiza nome com o input", async () => {
@@ -110,4 +127,21 @@ describe("EditarPerfil component", () => {
expect(findByText("Prosseguir com a exclusão da conta?")).toBeTruthy();
});
});
+
+ // Novo teste para verificar a navegação ao clicar no botão de voltar
+ test("Navega para a tela anterior ao clicar no botão de voltar", async () => {
+ // Renderiza o componente EditarPerfil
+ const { getByTestId } = render();
+
+ // Obtendo o botão de voltar
+ const backButton = getByTestId("back-button-pressable");
+
+ // Simula o clique no botão de voltar
+ fireEvent.press(backButton);
+
+ // Verifica se a função de navegação foi chamada corretamente
+ await waitFor(() => {
+ expect(router.push).toHaveBeenCalledWith("/private/tabs/perfil");
+ });
+ });
});
diff --git a/src/app/__tests__/reports/sonar-report.xml b/src/app/__tests__/reports/sonar-report.xml
new file mode 100644
index 00000000..8160b4f9
--- /dev/null
+++ b/src/app/__tests__/reports/sonar-report.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/db/migrations.ts b/src/app/db/migrations.ts
index 4228bd1b..44cca117 100644
--- a/src/app/db/migrations.ts
+++ b/src/app/db/migrations.ts
@@ -28,6 +28,7 @@ export default schemaMigrations({
{ name: 'telefoneResponsavel', type: 'string' },
{ name: 'descricao', type: 'string', isOptional: true },
{ name: 'user_id', type: 'string', isIndexed: true },
+ { name: 'foto', type: 'string' },
],
}),
},
diff --git a/src/app/model/Idoso.ts b/src/app/model/Idoso.ts
index d8bc8028..ee9d9956 100644
--- a/src/app/model/Idoso.ts
+++ b/src/app/model/Idoso.ts
@@ -10,6 +10,7 @@ export default class Idoso extends Model {
@field('tipoSanguineo') tipoSanguineo!: string;
@text('telefoneResponsavel') telefoneResponsavel!: string;
@text('descricao') descricao!: string;
+ @text('foto') foto!: string; // Adicione a propriedade foto aqui
@field('user_id') userId!: string;