@hedia/recommendation-screen 1.8.2 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/.github/workflows/ci.yml +0 -0
  2. package/.github/workflows/publish.yml +48 -0
  3. package/.github/workflows/version-check.yml +45 -0
  4. package/.linguirc +0 -0
  5. package/.npmpackagejsonlintrc.json +0 -0
  6. package/.prettierignore +0 -0
  7. package/.prettierrc +0 -0
  8. package/App.d.ts +4 -5
  9. package/App.jsx +23 -34
  10. package/App.tsx +36 -41
  11. package/Changelog.md +0 -0
  12. package/README.md +0 -0
  13. package/android/app/BUCK +0 -0
  14. package/android/app/build.gradle +0 -0
  15. package/android/app/build_defs.bzl +0 -0
  16. package/android/app/debug.keystore +0 -0
  17. package/android/app/proguard-rules.pro +0 -0
  18. package/android/app/src/debug/AndroidManifest.xml +0 -0
  19. package/android/app/src/debug/java/com/hediarecommendationscreen/ReactNativeFlipper.java +0 -0
  20. package/android/app/src/main/AndroidManifest.xml +0 -0
  21. package/android/app/src/main/assets/fonts/AntDesign.ttf +0 -0
  22. package/android/app/src/main/assets/fonts/Entypo.ttf +0 -0
  23. package/android/app/src/main/assets/fonts/EvilIcons.ttf +0 -0
  24. package/android/app/src/main/assets/fonts/Feather.ttf +0 -0
  25. package/android/app/src/main/assets/fonts/FontAwesome.ttf +0 -0
  26. package/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf +0 -0
  27. package/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf +0 -0
  28. package/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf +0 -0
  29. package/android/app/src/main/assets/fonts/Foundation.ttf +0 -0
  30. package/android/app/src/main/assets/fonts/Ionicons.ttf +0 -0
  31. package/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf +0 -0
  32. package/android/app/src/main/assets/fonts/MaterialIcons.ttf +0 -0
  33. package/android/app/src/main/assets/fonts/Octicons.ttf +0 -0
  34. package/android/app/src/main/assets/fonts/Roboto-Black.ttf +0 -0
  35. package/android/app/src/main/assets/fonts/Roboto-BlackItalic.ttf +0 -0
  36. package/android/app/src/main/assets/fonts/Roboto-Bold.ttf +0 -0
  37. package/android/app/src/main/assets/fonts/Roboto-BoldItalic.ttf +0 -0
  38. package/android/app/src/main/assets/fonts/Roboto-Italic.ttf +0 -0
  39. package/android/app/src/main/assets/fonts/Roboto-Light.ttf +0 -0
  40. package/android/app/src/main/assets/fonts/Roboto-LightItalic.ttf +0 -0
  41. package/android/app/src/main/assets/fonts/Roboto-Medium.ttf +0 -0
  42. package/android/app/src/main/assets/fonts/Roboto-MediumItalic.ttf +0 -0
  43. package/android/app/src/main/assets/fonts/Roboto-Regular.ttf +0 -0
  44. package/android/app/src/main/assets/fonts/Roboto-Thin.ttf +0 -0
  45. package/android/app/src/main/assets/fonts/Roboto-ThinItalic.ttf +0 -0
  46. package/android/app/src/main/assets/fonts/SimpleLineIcons.ttf +0 -0
  47. package/android/app/src/main/assets/fonts/Zocial.ttf +0 -0
  48. package/android/app/src/main/java/com/hediarecommendationscreen/MainActivity.java +0 -0
  49. package/android/app/src/main/java/com/hediarecommendationscreen/MainApplication.java +0 -0
  50. package/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  51. package/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  52. package/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  53. package/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  54. package/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  55. package/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  56. package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  57. package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  58. package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  59. package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  60. package/android/app/src/main/res/values/color.xml +0 -0
  61. package/android/app/src/main/res/values/strings.xml +0 -0
  62. package/android/app/src/main/res/values/styles.xml +0 -0
  63. package/android/build.gradle +0 -0
  64. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  65. package/android/gradle/wrapper/gradle-wrapper.properties +0 -0
  66. package/android/gradle.properties +0 -0
  67. package/android/gradlew.bat +0 -0
  68. package/android/settings.gradle +0 -0
  69. package/app.json +0 -0
  70. package/assets/fonts/Roboto/LICENSE.txt +0 -0
  71. package/assets/fonts/Roboto/Roboto-Black.ttf +0 -0
  72. package/assets/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
  73. package/assets/fonts/Roboto/Roboto-Bold.ttf +0 -0
  74. package/assets/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
  75. package/assets/fonts/Roboto/Roboto-Italic.ttf +0 -0
  76. package/assets/fonts/Roboto/Roboto-Light.ttf +0 -0
  77. package/assets/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
  78. package/assets/fonts/Roboto/Roboto-Medium.ttf +0 -0
  79. package/assets/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
  80. package/assets/fonts/Roboto/Roboto-Regular.ttf +0 -0
  81. package/assets/fonts/Roboto/Roboto-Thin.ttf +0 -0
  82. package/assets/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
  83. package/babel.config.js +0 -0
  84. package/ignore-git.sh +1 -1
  85. package/ignore-publish.sh +2 -1
  86. package/index.d.ts +2 -2
  87. package/index.js +2 -3
  88. package/index.ts +2 -2
  89. package/ios/HediaRecommendationScreen/AppDelegate.h +0 -0
  90. package/ios/HediaRecommendationScreen/AppDelegate.m +0 -0
  91. package/ios/HediaRecommendationScreen/Base.lproj/LaunchScreen.xib +0 -0
  92. package/ios/HediaRecommendationScreen/Images.xcassets/AppIcon.appiconset/Contents.json +0 -0
  93. package/ios/HediaRecommendationScreen/Images.xcassets/Contents.json +0 -0
  94. package/ios/HediaRecommendationScreen/Info.plist +0 -0
  95. package/ios/HediaRecommendationScreen/main.m +0 -0
  96. package/ios/HediaRecommendationScreen-tvOS/Info.plist +0 -0
  97. package/ios/HediaRecommendationScreen-tvOSTests/Info.plist +0 -0
  98. package/ios/HediaRecommendationScreen.xcodeproj/project.pbxproj +0 -0
  99. package/ios/HediaRecommendationScreen.xcodeproj/xcshareddata/xcschemes/HediaRecommendationScreen-tvOS.xcscheme +0 -0
  100. package/ios/HediaRecommendationScreen.xcodeproj/xcshareddata/xcschemes/HediaRecommendationScreen.xcscheme +0 -0
  101. package/ios/HediaRecommendationScreen.xcworkspace/contents.xcworkspacedata +0 -0
  102. package/ios/HediaRecommendationScreen.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  103. package/ios/HediaRecommendationScreenTests/HediaRecommendationScreenTests.m +0 -0
  104. package/ios/HediaRecommendationScreenTests/Info.plist +0 -0
  105. package/ios/Podfile +0 -0
  106. package/ios/Podfile.lock +0 -0
  107. package/jest.config.js +0 -0
  108. package/jest.mock.js +0 -0
  109. package/metro.config.js +0 -0
  110. package/package.json +8 -10
  111. package/react-native.config.js +0 -0
  112. package/src/RecommendationScreen.d.ts +18 -20
  113. package/src/RecommendationScreen.jsx +26 -15
  114. package/src/RecommendationScreen.tsx +60 -37
  115. package/src/__tests__/RecommendationScreen.test.d.ts +0 -0
  116. package/src/__tests__/RecommendationScreen.test.jsx +163 -138
  117. package/src/__tests__/RecommendationScreen.test.tsx +256 -159
  118. package/src/__tests__/RecommendationUtils.test.d.ts +0 -0
  119. package/src/__tests__/RecommendationUtils.test.js +30 -39
  120. package/src/__tests__/RecommendationUtils.test.ts +38 -43
  121. package/src/__tests__/Translate.test.d.ts +0 -0
  122. package/src/__tests__/Translate.test.jsx +13 -12
  123. package/src/__tests__/Translate.test.tsx +15 -14
  124. package/src/__tests__/Utils.test.d.ts +0 -0
  125. package/src/__tests__/Utils.test.js +22 -20
  126. package/src/__tests__/Utils.test.ts +32 -21
  127. package/src/__tests__/Validations.test.d.ts +0 -0
  128. package/src/__tests__/Validations.test.js +59 -33
  129. package/src/__tests__/Validations.test.ts +83 -41
  130. package/src/__tests__/components/Activity.test.d.ts +0 -0
  131. package/src/__tests__/components/Activity.test.jsx +39 -18
  132. package/src/__tests__/components/Activity.test.tsx +99 -45
  133. package/src/__tests__/components/Emotion.test.d.ts +0 -0
  134. package/src/__tests__/components/Emotion.test.jsx +34 -25
  135. package/src/__tests__/components/Emotion.test.tsx +41 -24
  136. package/src/__tests__/components/Header.test.d.ts +0 -0
  137. package/src/__tests__/components/Header.test.jsx +10 -9
  138. package/src/__tests__/components/Header.test.tsx +12 -11
  139. package/src/__tests__/components/InfoBars.test.d.ts +0 -0
  140. package/src/__tests__/components/InfoBars.test.jsx +1 -0
  141. package/src/__tests__/components/InfoBars.test.tsx +7 -6
  142. package/src/__tests__/components/InvisibleNumberInput.test.d.ts +0 -0
  143. package/src/__tests__/components/InvisibleNumberInput.test.jsx +40 -24
  144. package/src/__tests__/components/InvisibleNumberInput.test.tsx +41 -17
  145. package/src/__tests__/components/LimitationMessage.test.d.ts +0 -0
  146. package/src/__tests__/components/LimitationMessage.test.jsx +11 -30
  147. package/src/__tests__/components/LimitationMessage.test.tsx +15 -13
  148. package/src/__tests__/components/MoodIcon.test.d.ts +0 -0
  149. package/src/__tests__/components/MoodIcon.test.jsx +12 -8
  150. package/src/__tests__/components/MoodIcon.test.tsx +13 -5
  151. package/src/__tests__/components/RecommendationModal.test.d.ts +0 -0
  152. package/src/__tests__/components/RecommendationModal.test.jsx +22 -21
  153. package/src/__tests__/components/RecommendationModal.test.tsx +29 -27
  154. package/src/__tests__/components/RecommendedCarbs.test.d.ts +0 -0
  155. package/src/__tests__/components/RecommendedCarbs.test.jsx +7 -10
  156. package/src/__tests__/components/RecommendedCarbs.test.tsx +9 -10
  157. package/src/__tests__/components/RecommendedInsulin.test.d.ts +0 -0
  158. package/src/__tests__/components/RecommendedInsulin.test.jsx +57 -41
  159. package/src/__tests__/components/RecommendedInsulin.test.tsx +57 -31
  160. package/src/__tests__/components/Remeasure.test.d.ts +0 -0
  161. package/src/__tests__/components/Remeasure.test.jsx +7 -3
  162. package/src/__tests__/components/Remeasure.test.tsx +11 -3
  163. package/src/__tests__/components/TransferToLogbook.test.d.ts +0 -0
  164. package/src/__tests__/components/TransferToLogbook.test.jsx +2 -2
  165. package/src/__tests__/components/TransferToLogbook.test.tsx +2 -2
  166. package/src/__tests__/components/TwoOptionModal.test.d.ts +0 -0
  167. package/src/__tests__/components/TwoOptionModal.test.jsx +5 -4
  168. package/src/__tests__/components/TwoOptionModal.test.tsx +6 -4
  169. package/src/__tests__/utils.d.ts +7 -2
  170. package/src/__tests__/utils.jsx +59 -15
  171. package/src/__tests__/utils.tsx +63 -16
  172. package/src/assets/activity/Cyclist.png +0 -0
  173. package/src/assets/activity/Other.png +0 -0
  174. package/src/assets/activity/Runner.png +0 -0
  175. package/src/assets/activity/Swimmer.png +0 -0
  176. package/src/assets/activity/Walk.png +0 -0
  177. package/src/assets/mood/happy.png +0 -0
  178. package/src/assets/mood/happy_active.png +0 -0
  179. package/src/assets/mood/neutral.png +0 -0
  180. package/src/assets/mood/neutral_active.png +0 -0
  181. package/src/assets/mood/sad.png +0 -0
  182. package/src/assets/mood/sad_active.png +0 -0
  183. package/src/assets/mood/semi_happy.png +0 -0
  184. package/src/assets/mood/semi_happy_active.png +0 -0
  185. package/src/assets/mood/semi_sad.png +0 -0
  186. package/src/assets/mood/semi_sad_active.png +0 -0
  187. package/src/components/Header.d.ts +0 -0
  188. package/src/components/Header.jsx +2 -1
  189. package/src/components/Header.tsx +2 -1
  190. package/src/components/Icon.js +0 -0
  191. package/src/components/InfoBars.d.ts +1 -1
  192. package/src/components/InfoBars.jsx +0 -0
  193. package/src/components/InfoBars.tsx +1 -1
  194. package/src/components/InvisibleNumberInput.d.ts +2 -1
  195. package/src/components/InvisibleNumberInput.jsx +7 -2
  196. package/src/components/InvisibleNumberInput.tsx +10 -3
  197. package/src/components/LimitationMessage.d.ts +1 -1
  198. package/src/components/LimitationMessage.jsx +3 -2
  199. package/src/components/LimitationMessage.tsx +3 -1
  200. package/src/components/LineSeparator.d.ts +0 -0
  201. package/src/components/LineSeparator.jsx +0 -0
  202. package/src/components/LineSeparator.tsx +0 -0
  203. package/src/components/RecentInsulin.d.ts +0 -0
  204. package/src/components/RecentInsulin.jsx +3 -2
  205. package/src/components/RecentInsulin.tsx +3 -0
  206. package/src/components/RecommendationModal.d.ts +4 -4
  207. package/src/components/RecommendationModal.jsx +10 -9
  208. package/src/components/RecommendationModal.tsx +19 -8
  209. package/src/components/RecommendedCarbs.d.ts +4 -3
  210. package/src/components/RecommendedCarbs.jsx +12 -9
  211. package/src/components/RecommendedCarbs.tsx +31 -16
  212. package/src/components/RecommendedInsulin.d.ts +7 -7
  213. package/src/components/RecommendedInsulin.jsx +11 -7
  214. package/src/components/RecommendedInsulin.tsx +24 -12
  215. package/src/components/Remeasure.d.ts +2 -2
  216. package/src/components/Remeasure.jsx +7 -2
  217. package/src/components/Remeasure.tsx +10 -4
  218. package/src/components/TransferToLogbook.d.ts +0 -0
  219. package/src/components/TransferToLogbook.jsx +2 -1
  220. package/src/components/TransferToLogbook.tsx +2 -0
  221. package/src/components/TwoOptionModal.d.ts +5 -3
  222. package/src/components/TwoOptionModal.jsx +44 -13
  223. package/src/components/TwoOptionModal.tsx +50 -14
  224. package/src/components/activity/Activity.d.ts +2 -3
  225. package/src/components/activity/Activity.jsx +5 -2
  226. package/src/components/activity/Activity.tsx +7 -5
  227. package/src/components/activity/ActivityIcon.d.ts +1 -1
  228. package/src/components/activity/ActivityIcon.jsx +9 -8
  229. package/src/components/activity/ActivityIcon.tsx +12 -10
  230. package/src/components/activity/ActivityIntensity.d.ts +1 -1
  231. package/src/components/activity/ActivityIntensity.jsx +2 -8
  232. package/src/components/activity/ActivityIntensity.tsx +3 -12
  233. package/src/components/mood/Emotion.d.ts +5 -4
  234. package/src/components/mood/Emotion.jsx +4 -3
  235. package/src/components/mood/Emotion.tsx +9 -7
  236. package/src/components/mood/MoodIcon.d.ts +2 -2
  237. package/src/components/mood/MoodIcon.jsx +3 -2
  238. package/src/components/mood/MoodIcon.tsx +4 -2
  239. package/src/locale/CleanLanguage.ts +0 -0
  240. package/src/locale/da/messages.js +1 -1
  241. package/src/locale/da/messages.po +115 -107
  242. package/src/locale/de/messages.js +1 -1
  243. package/src/locale/de/messages.po +115 -107
  244. package/src/locale/en/messages.js +1 -1
  245. package/src/locale/en/messages.po +118 -110
  246. package/src/locale/es/messages.js +1 -1
  247. package/src/locale/es/messages.po +112 -104
  248. package/src/locale/fr/messages.js +1 -1
  249. package/src/locale/fr/messages.po +111 -103
  250. package/src/locale/i18nUtils.d.ts +3 -4
  251. package/src/locale/i18nUtils.js +13 -12
  252. package/src/locale/i18nUtils.ts +14 -14
  253. package/src/locale/it/messages.js +1 -1
  254. package/src/locale/it/messages.po +113 -105
  255. package/src/types/enum.d.ts +52 -44
  256. package/src/types/enum.js +67 -56
  257. package/src/types/enum.ts +58 -34
  258. package/src/types/types.d.ts +9 -23
  259. package/src/types/types.js +0 -0
  260. package/src/types/types.ts +9 -25
  261. package/src/utils/AttentionMessages.d.ts +1 -4
  262. package/src/utils/AttentionMessages.jsx +8 -30
  263. package/src/utils/AttentionMessages.tsx +11 -16
  264. package/src/utils/Constants.d.ts +0 -0
  265. package/src/utils/Constants.js +0 -0
  266. package/src/utils/Constants.ts +0 -0
  267. package/src/utils/RecommendationError.d.ts +2 -0
  268. package/src/utils/RecommendationError.jsx +45 -40
  269. package/src/utils/RecommendationError.tsx +17 -4
  270. package/src/utils/RecommendationUtils.d.ts +7 -8
  271. package/src/utils/RecommendationUtils.js +15 -7
  272. package/src/utils/RecommendationUtils.ts +24 -14
  273. package/src/utils/Translations.d.ts +2 -0
  274. package/src/utils/Translations.js +10 -0
  275. package/src/utils/Translations.ts +9 -0
  276. package/src/utils/Utils.d.ts +4 -5
  277. package/src/utils/Utils.js +6 -5
  278. package/src/utils/Utils.ts +10 -8
  279. package/src/utils/Validations.d.ts +10 -9
  280. package/src/utils/Validations.js +61 -65
  281. package/src/utils/Validations.ts +76 -81
  282. package/tsconfig.json +2 -2
  283. package/tslint.json +0 -0
@@ -14,23 +14,26 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
14
14
  var __importStar = (this && this.__importStar) || function (mod) {
15
15
  if (mod && mod.__esModule) return mod;
16
16
  var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
18
  __setModuleDefault(result, mod);
19
19
  return result;
20
20
  };
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
- const RecommendationCalculator_1 = require("@hedia/recommendation-calculator/src/RecommendationCalculator");
23
22
  const types_1 = require("@hedia/types");
24
- const enum_1 = require("../types/enum");
25
23
  const Constants_1 = require("../utils/Constants");
26
24
  const Errors = __importStar(require("../utils/RecommendationError"));
27
25
  const Validations = __importStar(require("../utils/Validations"));
26
+ const utils_1 = require("./utils");
27
+ const ActivityEnum = types_1.Activity.Enums.ActivityEnum;
28
+ const ActivityIntensity = types_1.Activity.Enums.ActivityIntensity;
29
+ const InjectionMethod = types_1.UserSettings.Enums.InjectionMethod;
30
+ const { light, moderate, hard } = ActivityIntensity;
28
31
  describe(`Test validations functions for the recommendation props`, () => {
29
32
  test.each `
30
33
  validInjectionMethod
31
- ${enum_1.InjectionMethod.PenHalf}
32
- ${enum_1.InjectionMethod.PenWhole}
33
- ${enum_1.InjectionMethod.Pump}
34
+ ${InjectionMethod.PenHalf}
35
+ ${InjectionMethod.PenWhole}
36
+ ${InjectionMethod.Pump}
34
37
  `(`Validation checking on treatment types $validInjectionMethod `, ({ validInjectionMethod }) => {
35
38
  expect(() => Validations.checkInjectionMethod(validInjectionMethod)).not.toThrowError(Errors.InjectionMethodError());
36
39
  });
@@ -74,12 +77,12 @@ describe(`Test validations functions for the recommendation props`, () => {
74
77
  });
75
78
  test.each `
76
79
  validLanguage
77
- ${enum_1.Language.da}
78
- ${enum_1.Language.en}
79
- ${enum_1.Language.de}
80
- ${enum_1.Language.es}
81
- ${enum_1.Language.it}
82
- ${enum_1.Language.fr}
80
+ ${types_1.Languages.da}
81
+ ${types_1.Languages.en}
82
+ ${types_1.Languages.de}
83
+ ${types_1.Languages.es}
84
+ ${types_1.Languages.it}
85
+ ${types_1.Languages.fr}
83
86
  `(`Validation checking on supported languages types $validLanguage`, ({ validLanguage }) => {
84
87
  expect(() => Validations.checkLanguage(validLanguage)).not.toThrowError(Errors.LanguageError());
85
88
  });
@@ -92,13 +95,30 @@ describe(`Test validations functions for the recommendation props`, () => {
92
95
  `(`Validation checking on supported languages types $invalidLanguage throws error`, (invalidLanguage) => {
93
96
  expect(() => Validations.checkLanguage(invalidLanguage)).toThrowError(Errors.LanguageError());
94
97
  });
98
+ it.each `
99
+ validLatestLogbookFrom6Hours
100
+ ${utils_1.generateDefaultLogbook()}
101
+ ${null}
102
+ `(`Validation checking on the latest logbook from the latest 6 hours with a valid logbook`, ({ validLatestLogbookFrom6Hours }) => {
103
+ expect(() => Validations.checkLatestLogbook6Hours(validLatestLogbookFrom6Hours)).not.toThrowError(Errors.LatestLogbook6HoursBGLError());
104
+ });
105
+ it.each `
106
+ invalidLatestLogbookFrom6Hours
107
+ ${undefined}
108
+ ${{}}
109
+ ${[]}
110
+ ${{ ...utils_1.generateDefaultLogbook(), blood_glucose_millimolar: 1 }}
111
+ ${{ ...utils_1.generateDefaultLogbook(), blood_glucose_millimolar: 33.4 }}
112
+ `(`Validation checking on the latest logbook from the latest 6 hours with an invalid logbook `, ({ invalidLatestLogbookFrom6Hours }) => {
113
+ expect(() => Validations.checkLatestLogbook6Hours(invalidLatestLogbookFrom6Hours)).toThrowError(Errors.LatestLogbook6HoursBGLError());
114
+ });
95
115
  test.each `
96
116
  validActivityType
97
- ${enum_1.ActivityEnum.Walk}
98
- ${enum_1.ActivityEnum.Swim}
99
- ${enum_1.ActivityEnum.Run}
100
- ${enum_1.ActivityEnum.Other}
101
- ${enum_1.ActivityEnum.Cycling}
117
+ ${ActivityEnum.Walk}
118
+ ${ActivityEnum.Swim}
119
+ ${ActivityEnum.Run}
120
+ ${ActivityEnum.Other}
121
+ ${ActivityEnum.Cycling}
102
122
  `(`Validation checking on activity types $validActivityType `, ({ validActivityType }) => {
103
123
  expect(() => Validations.checkActivityType(validActivityType)).not.toThrowError(Errors.ActivityTypeError());
104
124
  });
@@ -152,28 +172,22 @@ describe(`Test validations for the calculator parameters`, () => {
152
172
  });
153
173
  test.each `
154
174
  validIntensity
155
- ${RecommendationCalculator_1.ActivityIntensity.Hard}
156
- ${RecommendationCalculator_1.ActivityIntensity.Light}
157
- ${RecommendationCalculator_1.ActivityIntensity.Moderate}
175
+ ${hard}
176
+ ${light}
177
+ ${moderate}
158
178
  `(`Validation checking on activity $validIntensity`, ({ validIntensity }) => {
159
179
  expect(() => Validations.checkActivityIntensity(validIntensity)).not.toThrowError(Errors.ActivityIntensityError());
160
180
  });
161
181
  test.each `
162
182
  invalidIntensity
163
- ${`hard`}
183
+ ${`Hard`}
164
184
  ${`easy`}
165
185
  ${undefined}
166
186
  ${null}
167
187
  `(`Validation checking on activity $invalidIntensity throws error`, ({ invalidIntensity }) => {
168
188
  expect(() => Validations.checkActivityIntensity(invalidIntensity)).toThrowError(Errors.ActivityIntensityError());
169
189
  });
170
- const validActivitySettings1 = {
171
- light: { fromZero: 0.25, fromThirty: 0.9, fromFortysix: 0.25 },
172
- moderate: { fromZero: 0.25, fromThirty: 0.99, fromFortysix: 0.25 },
173
- hard: { fromZero: 0.25, fromThirty: 0.9, fromFortysix: 1 },
174
- post: { fromZero: 0, fromThirty: 0, fromFortysix: 0.25 },
175
- target: 8.3,
176
- };
190
+ const validActivitySettings1 = utils_1.generateDefaultActivitySettings();
177
191
  const validActivitySettings2 = {
178
192
  ...validActivitySettings1,
179
193
  hard: { fromZero: 1, fromThirty: 0.99, fromFortysix: null },
@@ -184,10 +198,12 @@ describe(`Test validations for the calculator parameters`, () => {
184
198
  };
185
199
  const invalidActivitySettings1 = {
186
200
  ...validActivitySettings1,
201
+ // @ts-ignore Purposefully invalid settings
187
202
  hard: { fromZero: 0, fromThirty: null, fromFortysix: null },
188
203
  };
189
204
  const invalidActivitySettings2 = {
190
205
  ...validActivitySettings1,
206
+ // @ts-ignore Purposefully invalid settings
191
207
  light: { fromZero: undefined, fromThirty: 0.99, fromFortysix: 0.25 },
192
208
  };
193
209
  const invalidActivitySettings3 = {
@@ -195,24 +211,24 @@ describe(`Test validations for the calculator parameters`, () => {
195
211
  hard: { fromZero: 1, fromThirty: 0.99, fromFortysix: 1.1 },
196
212
  };
197
213
  const validActivity1 = {
198
- activityDate: new Date(Date.now() - enum_1.Milliseconds.Hour * 5 - enum_1.Milliseconds.Minute * 9.9),
214
+ activityDate: new Date(Date.now() - types_1.Milliseconds.Hour * 5 - types_1.Milliseconds.Minute * 9.9),
199
215
  activityDuration: 60,
200
- activityIntensity: RecommendationCalculator_1.ActivityIntensity.Moderate,
216
+ activityIntensity: moderate,
201
217
  activitySettings: validActivitySettings1,
202
218
  };
203
219
  const validActivity2 = {
204
220
  ...validActivity1,
205
- activityDate: new Date(Date.now() - enum_1.Milliseconds.Hour * 4.5 - enum_1.Milliseconds.Minute * 9.9),
221
+ activityDate: new Date(Date.now() - types_1.Milliseconds.Hour * 4.5 - types_1.Milliseconds.Minute * 9.9),
206
222
  activityDuration: 30,
207
223
  };
208
224
  const invalidActivity1 = {
209
225
  ...validActivity1,
210
- activityDate: new Date(Date.now() - enum_1.Milliseconds.Hour * 4.5 - enum_1.Milliseconds.Minute * 10),
226
+ activityDate: new Date(Date.now() - types_1.Milliseconds.Hour * 4.5 - types_1.Milliseconds.Minute * 10),
211
227
  activityDuration: 30,
212
228
  };
213
229
  const invalidActivity2 = {
214
230
  ...validActivity1,
215
- activityDate: new Date(Date.now() - enum_1.Milliseconds.Hour * 4.25 - enum_1.Milliseconds.Minute * 10),
231
+ activityDate: new Date(Date.now() - types_1.Milliseconds.Hour * 4.25 - types_1.Milliseconds.Minute * 10),
216
232
  activityDuration: 15,
217
233
  };
218
234
  test(`Can call checkActivity with a valid activity`, () => {
@@ -368,10 +384,13 @@ describe(`Test validations for the calculator parameters`, () => {
368
384
  secondsPassed: Constants_1.FOUR_HOURS_SECONDS,
369
385
  };
370
386
  const invalidBolus1 = {
387
+ // @ts-ignore Forcefully incorrect.
371
388
  insulinDose: null,
389
+ // @ts-ignore Forcefully incorrect.
372
390
  secondsPassed: null,
373
391
  };
374
392
  const invalidBolus2 = {
393
+ // @ts-ignore Forcefully incorrect.
375
394
  insulinDose: undefined,
376
395
  secondsPassed: Constants_1.FOUR_HOURS_SECONDS + 1,
377
396
  };
@@ -411,6 +430,13 @@ describe(`Test validations for the calculator parameters`, () => {
411
430
  `(`Validation checking on Recent Boluses seconds passed throws error`, ({ invalidRecentBoluses }) => {
412
431
  expect(() => Validations.checkRecentBolusesSecondsPassed(invalidRecentBoluses)).toThrowError(Errors.BolusInsulinSecondsPassedError());
413
432
  });
433
+ test.each `
434
+ invalidRecentBoluses
435
+ ${null}
436
+ ${undefined}
437
+ `(`Validation checking on Recent Boluses: null and undefined throws error`, ({ invalidRecentBoluses }) => {
438
+ expect(() => Validations.checkRecentBolus(invalidRecentBoluses)).toThrowError(Errors.RecentBolusError());
439
+ });
414
440
  test.each `
415
441
  validCurrentBKL
416
442
  ${0}
@@ -1,14 +1,15 @@
1
- import {
2
- ActivityIntensity,
3
- IActivityParams,
4
- IActivitySettings,
5
- IRecentBolus,
6
- } from "@hedia/recommendation-calculator/src/RecommendationCalculator";
7
- import { BloodGlucoseUnit, BloodKetonesUnit } from "@hedia/types";
8
- import { ActivityEnum, InjectionMethod, Language, Milliseconds } from "../types/enum";
1
+ import { Activity, BloodGlucoseUnit, BloodKetonesUnit, Languages, Milliseconds, UserSettings } from "@hedia/types";
2
+ import { ActivitySettings, IActivityParams, IRecentBolus, logbookEntry } from "../types/types";
9
3
  import { FOUR_HOURS_SECONDS } from "../utils/Constants";
10
4
  import * as Errors from "../utils/RecommendationError";
11
5
  import * as Validations from "../utils/Validations";
6
+ import { generateDefaultActivitySettings, generateDefaultLogbook } from "./utils";
7
+
8
+ const ActivityEnum = Activity.Enums.ActivityEnum;
9
+ const ActivityIntensity = Activity.Enums.ActivityIntensity;
10
+ const InjectionMethod = UserSettings.Enums.InjectionMethod;
11
+
12
+ const { light, moderate, hard } = ActivityIntensity;
12
13
 
13
14
  describe(`Test validations functions for the recommendation props`, (): void => {
14
15
  test.each`
@@ -18,7 +19,7 @@ describe(`Test validations functions for the recommendation props`, (): void =>
18
19
  ${InjectionMethod.Pump}
19
20
  `(
20
21
  `Validation checking on treatment types $validInjectionMethod `,
21
- ({ validInjectionMethod }: { validInjectionMethod: InjectionMethod }): void => {
22
+ ({ validInjectionMethod }: { validInjectionMethod: UserSettings.Enums.InjectionMethod }): void => {
22
23
  expect((): void => Validations.checkInjectionMethod(validInjectionMethod)).not.toThrowError(
23
24
  Errors.InjectionMethodError(),
24
25
  );
@@ -32,7 +33,7 @@ describe(`Test validations functions for the recommendation props`, (): void =>
32
33
  ${`Hedia`}
33
34
  `(
34
35
  `Validation checking on treatment types $invalidInjectionMethod throws error`,
35
- (invalidInjectionMethod: InjectionMethod): void => {
36
+ (invalidInjectionMethod: UserSettings.Enums.InjectionMethod): void => {
36
37
  expect((): void => Validations.checkInjectionMethod(invalidInjectionMethod)).toThrowError(
37
38
  Errors.InjectionMethodError(),
38
39
  );
@@ -86,15 +87,15 @@ describe(`Test validations functions for the recommendation props`, (): void =>
86
87
 
87
88
  test.each`
88
89
  validLanguage
89
- ${Language.da}
90
- ${Language.en}
91
- ${Language.de}
92
- ${Language.es}
93
- ${Language.it}
94
- ${Language.fr}
90
+ ${Languages.da}
91
+ ${Languages.en}
92
+ ${Languages.de}
93
+ ${Languages.es}
94
+ ${Languages.it}
95
+ ${Languages.fr}
95
96
  `(
96
97
  `Validation checking on supported languages types $validLanguage`,
97
- ({ validLanguage }: { validLanguage: Language }): void => {
98
+ ({ validLanguage }: { validLanguage: Languages }): void => {
98
99
  expect((): void => Validations.checkLanguage(validLanguage)).not.toThrowError(Errors.LanguageError());
99
100
  },
100
101
  );
@@ -107,11 +108,39 @@ describe(`Test validations functions for the recommendation props`, (): void =>
107
108
  ${`Deutsch`}
108
109
  `(
109
110
  `Validation checking on supported languages types $invalidLanguage throws error`,
110
- (invalidLanguage: Language): void => {
111
+ (invalidLanguage: Languages): void => {
111
112
  expect((): void => Validations.checkLanguage(invalidLanguage)).toThrowError(Errors.LanguageError());
112
113
  },
113
114
  );
114
115
 
116
+ it.each`
117
+ validLatestLogbookFrom6Hours
118
+ ${generateDefaultLogbook()}
119
+ ${null}
120
+ `(
121
+ `Validation checking on the latest logbook from the latest 6 hours with a valid logbook`,
122
+ ({ validLatestLogbookFrom6Hours }: { validLatestLogbookFrom6Hours: logbookEntry }): void => {
123
+ expect((): void => Validations.checkLatestLogbook6Hours(validLatestLogbookFrom6Hours)).not.toThrowError(
124
+ Errors.LatestLogbook6HoursBGLError(),
125
+ );
126
+ },
127
+ );
128
+ it.each`
129
+ invalidLatestLogbookFrom6Hours
130
+ ${undefined}
131
+ ${{}}
132
+ ${[]}
133
+ ${{ ...generateDefaultLogbook(), blood_glucose_millimolar: 1 }}
134
+ ${{ ...generateDefaultLogbook(), blood_glucose_millimolar: 33.4 }}
135
+ `(
136
+ `Validation checking on the latest logbook from the latest 6 hours with an invalid logbook `,
137
+ ({ invalidLatestLogbookFrom6Hours }: { invalidLatestLogbookFrom6Hours: logbookEntry }): void => {
138
+ expect((): void => Validations.checkLatestLogbook6Hours(invalidLatestLogbookFrom6Hours)).toThrowError(
139
+ Errors.LatestLogbook6HoursBGLError(),
140
+ );
141
+ },
142
+ );
143
+
115
144
  test.each`
116
145
  validActivityType
117
146
  ${ActivityEnum.Walk}
@@ -121,7 +150,7 @@ describe(`Test validations functions for the recommendation props`, (): void =>
121
150
  ${ActivityEnum.Cycling}
122
151
  `(
123
152
  `Validation checking on activity types $validActivityType `,
124
- ({ validActivityType }: { validActivityType: ActivityEnum }): void => {
153
+ ({ validActivityType }: { validActivityType: Activity.Enums.ActivityEnum }): void => {
125
154
  expect((): void => Validations.checkActivityType(validActivityType)).not.toThrowError(
126
155
  Errors.ActivityTypeError(),
127
156
  );
@@ -137,7 +166,7 @@ describe(`Test validations functions for the recommendation props`, (): void =>
137
166
  ${`Cycle`}
138
167
  `(
139
168
  `Validation checking on activity types $invalidActivityType throws error`,
140
- (invalidActivityType: ActivityEnum): void => {
169
+ (invalidActivityType: Activity.Enums.ActivityEnum): void => {
141
170
  expect((): void => Validations.checkActivityType(invalidActivityType)).toThrowError(
142
171
  Errors.ActivityTypeError(),
143
172
  );
@@ -201,12 +230,12 @@ describe(`Test validations for the calculator parameters`, (): void => {
201
230
 
202
231
  test.each`
203
232
  validIntensity
204
- ${ActivityIntensity.Hard}
205
- ${ActivityIntensity.Light}
206
- ${ActivityIntensity.Moderate}
233
+ ${hard}
234
+ ${light}
235
+ ${moderate}
207
236
  `(
208
237
  `Validation checking on activity $validIntensity`,
209
- ({ validIntensity }: { validIntensity: ActivityIntensity }): void => {
238
+ ({ validIntensity }: { validIntensity: Activity.Enums.ActivityIntensity }): void => {
210
239
  expect((): void => Validations.checkActivityIntensity(validIntensity)).not.toThrowError(
211
240
  Errors.ActivityIntensityError(),
212
241
  );
@@ -215,48 +244,44 @@ describe(`Test validations for the calculator parameters`, (): void => {
215
244
 
216
245
  test.each`
217
246
  invalidIntensity
218
- ${`hard`}
247
+ ${`Hard`}
219
248
  ${`easy`}
220
249
  ${undefined}
221
250
  ${null}
222
251
  `(
223
252
  `Validation checking on activity $invalidIntensity throws error`,
224
- ({ invalidIntensity }: { invalidIntensity: ActivityIntensity }): void => {
253
+ ({ invalidIntensity }: { invalidIntensity: Activity.Enums.ActivityIntensity }): void => {
225
254
  expect((): void => Validations.checkActivityIntensity(invalidIntensity)).toThrowError(
226
255
  Errors.ActivityIntensityError(),
227
256
  );
228
257
  },
229
258
  );
230
259
 
231
- const validActivitySettings1: IActivitySettings = {
232
- light: { fromZero: 0.25, fromThirty: 0.9, fromFortysix: 0.25 },
233
- moderate: { fromZero: 0.25, fromThirty: 0.99, fromFortysix: 0.25 },
234
- hard: { fromZero: 0.25, fromThirty: 0.9, fromFortysix: 1 },
235
- post: { fromZero: 0, fromThirty: 0, fromFortysix: 0.25 },
236
- target: 8.3,
237
- };
260
+ const validActivitySettings1: ActivitySettings = generateDefaultActivitySettings();
238
261
 
239
- const validActivitySettings2: IActivitySettings = {
262
+ const validActivitySettings2: ActivitySettings = {
240
263
  ...validActivitySettings1,
241
264
  hard: { fromZero: 1, fromThirty: 0.99, fromFortysix: null },
242
265
  };
243
266
 
244
- const validActivitySettings3: IActivitySettings = {
267
+ const validActivitySettings3: ActivitySettings = {
245
268
  ...validActivitySettings1,
246
269
  hard: { fromZero: 0, fromThirty: 0, fromFortysix: 0 },
247
270
  };
248
271
 
249
- const invalidActivitySettings1: IActivitySettings = {
272
+ const invalidActivitySettings1: ActivitySettings = {
250
273
  ...validActivitySettings1,
274
+ // @ts-ignore Purposefully invalid settings
251
275
  hard: { fromZero: 0, fromThirty: null, fromFortysix: null },
252
276
  };
253
277
 
254
- const invalidActivitySettings2: IActivitySettings = {
278
+ const invalidActivitySettings2: ActivitySettings = {
255
279
  ...validActivitySettings1,
280
+ // @ts-ignore Purposefully invalid settings
256
281
  light: { fromZero: undefined, fromThirty: 0.99, fromFortysix: 0.25 },
257
282
  };
258
283
 
259
- const invalidActivitySettings3: IActivitySettings = {
284
+ const invalidActivitySettings3: ActivitySettings = {
260
285
  ...validActivitySettings1,
261
286
  hard: { fromZero: 1, fromThirty: 0.99, fromFortysix: 1.1 },
262
287
  };
@@ -264,7 +289,7 @@ describe(`Test validations for the calculator parameters`, (): void => {
264
289
  const validActivity1: IActivityParams = {
265
290
  activityDate: new Date(Date.now() - Milliseconds.Hour * 5 - Milliseconds.Minute * 9.9),
266
291
  activityDuration: 60,
267
- activityIntensity: ActivityIntensity.Moderate,
292
+ activityIntensity: moderate,
268
293
  activitySettings: validActivitySettings1,
269
294
  };
270
295
 
@@ -325,7 +350,7 @@ describe(`Test validations for the calculator parameters`, (): void => {
325
350
  ${validActivitySettings3}
326
351
  `(
327
352
  `Validation checking on validActivitySettings`,
328
- ({ validActivitySettings }: { validActivitySettings: IActivitySettings }): void => {
353
+ ({ validActivitySettings }: { validActivitySettings: ActivitySettings }): void => {
329
354
  expect((): void => Validations.checkActivitySettings(validActivitySettings)).not.toThrowError(
330
355
  Errors.ActivitySettingsError(),
331
356
  );
@@ -339,7 +364,7 @@ describe(`Test validations for the calculator parameters`, (): void => {
339
364
  ${invalidActivitySettings3}
340
365
  `(
341
366
  `Validation checking on invalidActivitySettings throws error`,
342
- ({ invalidActivitySettings }: { invalidActivitySettings: IActivitySettings }): void => {
367
+ ({ invalidActivitySettings }: { invalidActivitySettings: ActivitySettings }): void => {
343
368
  expect((): void => Validations.checkActivitySettings(invalidActivitySettings)).toThrowError(
344
369
  Errors.ActivitySettingsError(),
345
370
  );
@@ -512,10 +537,13 @@ describe(`Test validations for the calculator parameters`, (): void => {
512
537
  secondsPassed: FOUR_HOURS_SECONDS,
513
538
  };
514
539
  const invalidBolus1: IRecentBolus = {
540
+ // @ts-ignore Forcefully incorrect.
515
541
  insulinDose: null,
542
+ // @ts-ignore Forcefully incorrect.
516
543
  secondsPassed: null,
517
544
  };
518
545
  const invalidBolus2: IRecentBolus = {
546
+ // @ts-ignore Forcefully incorrect.
519
547
  insulinDose: undefined,
520
548
  secondsPassed: FOUR_HOURS_SECONDS + 1,
521
549
  };
@@ -577,6 +605,20 @@ describe(`Test validations for the calculator parameters`, (): void => {
577
605
  );
578
606
  },
579
607
  );
608
+
609
+ test.each`
610
+ invalidRecentBoluses
611
+ ${null}
612
+ ${undefined}
613
+ `(
614
+ `Validation checking on Recent Boluses: null and undefined throws error`,
615
+ ({ invalidRecentBoluses }: { invalidRecentBoluses: Array<IRecentBolus> }): void => {
616
+ expect((): void => Validations.checkRecentBolus(invalidRecentBoluses)).toThrowError(
617
+ Errors.RecentBolusError(),
618
+ );
619
+ },
620
+ );
621
+
580
622
  test.each`
581
623
  validCurrentBKL
582
624
  ${0}
File without changes
@@ -3,33 +3,36 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const RecommendationCalculator_1 = require("@hedia/recommendation-calculator/src/RecommendationCalculator");
6
+ const types_1 = require("@hedia/types");
7
7
  const react_1 = require("@lingui/react");
8
8
  const react_2 = __importDefault(require("react"));
9
9
  const react_native_testing_library_1 = require("react-native-testing-library");
10
10
  const Activity_1 = __importDefault(require("../../components/activity/Activity"));
11
11
  const i18nUtils_1 = require("../../locale/i18nUtils");
12
12
  const enum_1 = require("../../types/enum");
13
+ const Translations_1 = require("../../utils/Translations");
13
14
  const utils_1 = require("../utils");
15
+ const ActivityIntensity = types_1.Activity.Enums.ActivityIntensity;
16
+ const { light, moderate, hard } = ActivityIntensity;
14
17
  describe(`Activity - Component`, () => {
15
18
  afterEach(react_native_testing_library_1.cleanup);
16
19
  beforeEach(() => {
17
- i18nUtils_1.i18n.activate(`en`);
20
+ i18nUtils_1.i18n.activate(types_1.Languages.en);
18
21
  });
19
22
  test.each `
20
23
  activityIntensity
21
- ${RecommendationCalculator_1.ActivityIntensity.Light}
22
- ${RecommendationCalculator_1.ActivityIntensity.Moderate}
23
- ${RecommendationCalculator_1.ActivityIntensity.Hard}
24
+ ${light}
25
+ ${moderate}
26
+ ${hard}
24
27
  `(`Renders $activityIntensity`, ({ activityIntensity }) => {
25
28
  const { activityDisplayProps } = utils_1.getRecommendationProps();
26
29
  const activity = utils_1.generateActivityProps();
27
- const wrapper = react_native_testing_library_1.render(utils_1.i18nProvided(<Activity_1.default activity={{ ...activity, activityIntensity }} activityType={activityDisplayProps.activityType} activityTitle={activityDisplayProps.activityTitle} activityReduction={0}/>));
30
+ const wrapper = react_native_testing_library_1.render(utils_1.i18nProvided(<Activity_1.default activity={{ ...activity, activityIntensity }} activityType={activityDisplayProps?.activityType ?? null} activityTitle={activityDisplayProps?.activityTitle ?? null} activityReduction={0}/>));
28
31
  utils_1.expectTextExists(wrapper, `Activity`);
29
32
  utils_1.expectTextExists(wrapper, `30`);
30
33
  utils_1.expectTextExists(wrapper, `min`);
31
34
  utils_1.expectTextExists(wrapper, `Based on the selected activity your insulin recommendation is reduced by:`);
32
- utils_1.expectTextExists(wrapper, activityIntensity);
35
+ utils_1.expectTextExists(wrapper, Translations_1.ActivityIntensityTranslations[activityIntensity]());
33
36
  });
34
37
  test.each `
35
38
  reduction
@@ -41,30 +44,48 @@ describe(`Activity - Component`, () => {
41
44
  `(`Renders activity reduction from decimal: $reduction to percentage`, ({ reduction }) => {
42
45
  const { activityDisplayProps } = utils_1.getRecommendationProps();
43
46
  const activity = utils_1.generateActivityProps();
44
- const wrapper = react_native_testing_library_1.render(utils_1.i18nProvided(<Activity_1.default activity={activity} activityType={activityDisplayProps.activityType} activityReduction={reduction} activityTitle={activityDisplayProps.activityTitle}/>));
47
+ const wrapper = react_native_testing_library_1.render(utils_1.i18nProvided(<Activity_1.default activity={activity} activityType={activityDisplayProps?.activityType ?? null} activityReduction={reduction} activityTitle={activityDisplayProps?.activityTitle ?? null}/>));
45
48
  utils_1.expectTextExists(wrapper, `${reduction * 100}%`);
46
49
  });
50
+ test(`Renders activity reduction as 0 when null is passed`, () => {
51
+ const { activityDisplayProps } = utils_1.getRecommendationProps();
52
+ const activity = utils_1.generateActivityProps();
53
+ const reduction = null;
54
+ const wrapper = react_native_testing_library_1.render(utils_1.i18nProvided(<Activity_1.default activity={activity} activityType={activityDisplayProps?.activityType ?? null} activityReduction={reduction} activityTitle={activityDisplayProps?.activityTitle ?? null}/>));
55
+ const text = utils_1.queryTextFromComponent(wrapper, enum_1.ActivityTestIds.ActivityReduction);
56
+ expect(text).toBe(`0%`);
57
+ });
47
58
  test(`Can render activity title`, () => {
48
59
  const { activityDisplayProps } = utils_1.getRecommendationProps();
49
60
  const activity = utils_1.generateActivityProps();
50
- const wrapper = react_native_testing_library_1.render(utils_1.i18nProvided(<Activity_1.default activity={{ ...activity }} activityType={activityDisplayProps.activityType} activityTitle={activityDisplayProps.activityTitle} activityReduction={0}/>));
51
- utils_1.expectTextExists(wrapper, activityDisplayProps.activityTitle);
61
+ const wrapper = react_native_testing_library_1.render(utils_1.i18nProvided(<Activity_1.default activity={{ ...activity }} activityType={activityDisplayProps?.activityType ?? null} activityTitle={activityDisplayProps?.activityTitle ?? null} activityReduction={0}/>));
62
+ utils_1.expectTextExists(wrapper, activityDisplayProps?.activityTitle);
52
63
  });
53
64
  test.each `
54
- language | locale | message
55
- ${`English`} | ${enum_1.Language.en} | ${`Activity`}
56
- ${`Danish`} | ${enum_1.Language.da} | ${`Aktivitet`}
57
- ${`German`} | ${enum_1.Language.de} | ${`Aktivität`}
58
- ${`Spanish`} | ${enum_1.Language.es} | ${`Actividad`}
59
- ${`Italian`} | ${enum_1.Language.it} | ${`Attività fisica`}
60
- ${`French`} | ${enum_1.Language.fr} | ${`Activité`}
65
+ language | locale | message
66
+ ${`English`} | ${types_1.Languages.en} | ${`Activity`}
67
+ ${`Danish`} | ${types_1.Languages.da} | ${`Aktivitet`}
68
+ ${`German`} | ${types_1.Languages.de} | ${`Aktivität`}
69
+ ${`Spanish`} | ${types_1.Languages.es} | ${`Actividad`}
70
+ ${`Italian`} | ${types_1.Languages.it} | ${`Attività fisica`}
71
+ ${`French`} | ${types_1.Languages.fr} | ${`Activité`}
61
72
  `(`Can render in $language`, ({ message, locale }) => {
62
73
  const { activityDisplayProps } = utils_1.getRecommendationProps();
63
74
  const activity = utils_1.generateActivityProps();
64
75
  i18nUtils_1.i18n.activate(locale);
65
76
  const wrapper = react_native_testing_library_1.render(<react_1.I18nProvider language={locale} i18n={i18nUtils_1.i18n}>
66
- <Activity_1.default activity={activity} activityType={activityDisplayProps.activityType} activityTitle={activityDisplayProps.activityTitle} activityReduction={0}/>
77
+ <Activity_1.default activity={activity} activityType={activityDisplayProps?.activityType ?? null} activityTitle={activityDisplayProps?.activityTitle ?? null} activityReduction={0}/>
67
78
  </react_1.I18nProvider>);
68
79
  utils_1.expectTextExists(wrapper, message);
69
80
  });
81
+ test(`ActivityIcon defaults to other if activityType is null`, () => {
82
+ const { activityDisplayProps } = utils_1.getRecommendationProps();
83
+ const activity = utils_1.generateActivityProps();
84
+ const wrapper = react_native_testing_library_1.render(utils_1.i18nProvided(<Activity_1.default activity={{ ...activity }} activityType={null} activityTitle={activityDisplayProps?.activityTitle ?? null} activityReduction={0}/>));
85
+ utils_1.expectTextExists(wrapper, activityDisplayProps?.activityTitle);
86
+ const existingLabel = `${types_1.Activity.Enums.ActivityEnum[types_1.Activity.Enums.ActivityEnum.Other]}_activity`;
87
+ const nonExistingLabel = `${types_1.Activity.Enums.ActivityEnum[types_1.Activity.Enums.ActivityEnum.Run]}_activity`;
88
+ expect(wrapper.queryByA11yLabel(existingLabel)).not.toBeNull();
89
+ expect(wrapper.queryByA11yLabel(nonExistingLabel)).toBeNull();
90
+ });
70
91
  });