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;