@hedia/recommendation-screen 2.1.34-alpha.9 → 2.1.34
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.
- package/{src → dist/src}/RecommendationScreen.d.ts +3 -3
- package/{src → dist/src}/RecommendationScreen.js +6 -6
- package/{src → dist/src}/locale/da/messages.po +92 -92
- package/{src → dist/src}/locale/de/messages.po +92 -92
- package/{src → dist/src}/locale/en/messages.po +92 -92
- package/{src → dist/src}/locale/es/messages.js +1 -1
- package/{src → dist/src}/locale/es/messages.po +92 -92
- package/{src → dist/src}/locale/fr/messages.po +92 -92
- package/{src → dist/src}/locale/it/messages.po +92 -92
- package/package.json +22 -21
- package/.flowconfig +0 -65
- package/.github/pull_request_template.md +0 -6
- package/.github/workflows/ci.yaml +0 -17
- package/.github/workflows/publish-release-package.yaml +0 -17
- package/.github/workflows/validate-pr-title.yaml +0 -20
- package/.linguirc +0 -6
- package/.npmpackagejsonlintrc.json +0 -12
- package/.prettierignore +0 -2
- package/.prettierrc +0 -25
- package/Changelog.md +0 -9
- package/android/app/BUCK +0 -55
- package/android/app/build.gradle +0 -228
- package/android/app/build_defs.bzl +0 -19
- package/android/app/debug.keystore +0 -0
- package/android/app/proguard-rules.pro +0 -10
- package/android/app/src/debug/AndroidManifest.xml +0 -13
- package/android/app/src/debug/java/com/hediarecommendationscreen/ReactNativeFlipper.java +0 -72
- package/android/app/src/main/AndroidManifest.xml +0 -25
- package/android/app/src/main/assets/fonts/AntDesign.ttf +0 -0
- package/android/app/src/main/assets/fonts/Entypo.ttf +0 -0
- package/android/app/src/main/assets/fonts/EvilIcons.ttf +0 -0
- package/android/app/src/main/assets/fonts/Feather.ttf +0 -0
- package/android/app/src/main/assets/fonts/FontAwesome.ttf +0 -0
- package/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf +0 -0
- package/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf +0 -0
- package/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf +0 -0
- package/android/app/src/main/assets/fonts/Fontisto.ttf +0 -0
- package/android/app/src/main/assets/fonts/Foundation.ttf +0 -0
- package/android/app/src/main/assets/fonts/Ionicons.ttf +0 -0
- package/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf +0 -0
- package/android/app/src/main/assets/fonts/MaterialIcons.ttf +0 -0
- package/android/app/src/main/assets/fonts/Octicons.ttf +0 -0
- package/android/app/src/main/assets/fonts/Roboto-Black.ttf +0 -0
- package/android/app/src/main/assets/fonts/Roboto-BlackItalic.ttf +0 -0
- package/android/app/src/main/assets/fonts/Roboto-Bold.ttf +0 -0
- package/android/app/src/main/assets/fonts/Roboto-BoldItalic.ttf +0 -0
- package/android/app/src/main/assets/fonts/Roboto-Italic.ttf +0 -0
- package/android/app/src/main/assets/fonts/Roboto-Light.ttf +0 -0
- package/android/app/src/main/assets/fonts/Roboto-LightItalic.ttf +0 -0
- package/android/app/src/main/assets/fonts/Roboto-Medium.ttf +0 -0
- package/android/app/src/main/assets/fonts/Roboto-MediumItalic.ttf +0 -0
- package/android/app/src/main/assets/fonts/Roboto-Regular.ttf +0 -0
- package/android/app/src/main/assets/fonts/Roboto-Thin.ttf +0 -0
- package/android/app/src/main/assets/fonts/Roboto-ThinItalic.ttf +0 -0
- package/android/app/src/main/assets/fonts/SimpleLineIcons.ttf +0 -0
- package/android/app/src/main/assets/fonts/Zocial.ttf +0 -0
- package/android/app/src/main/java/com/hediarecommendationscreen/MainActivity.java +0 -15
- package/android/app/src/main/java/com/hediarecommendationscreen/MainApplication.java +0 -80
- package/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/values/color.xml +0 -3
- package/android/app/src/main/res/values/strings.xml +0 -3
- package/android/app/src/main/res/values/styles.xml +0 -11
- package/android/build.gradle +0 -38
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +0 -5
- package/android/gradle.properties +0 -28
- package/android/gradlew +0 -185
- package/android/gradlew.bat +0 -89
- package/android/settings.gradle +0 -3
- package/assets/fonts/Roboto/LICENSE.txt +0 -202
- package/assets/fonts/Roboto/Roboto-Black.ttf +0 -0
- package/assets/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
- package/assets/fonts/Roboto/Roboto-Bold.ttf +0 -0
- package/assets/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
- package/assets/fonts/Roboto/Roboto-Italic.ttf +0 -0
- package/assets/fonts/Roboto/Roboto-Light.ttf +0 -0
- package/assets/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
- package/assets/fonts/Roboto/Roboto-Medium.ttf +0 -0
- package/assets/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
- package/assets/fonts/Roboto/Roboto-Regular.ttf +0 -0
- package/assets/fonts/Roboto/Roboto-Thin.ttf +0 -0
- package/assets/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
- package/babel.config.js +0 -18
- package/ignore-git.sh +0 -46
- package/ignore-publish.sh +0 -33
- package/index-git.sh +0 -5
- package/ios/HediaRecommendationScreen/AppDelegate.h +0 -8
- package/ios/HediaRecommendationScreen/AppDelegate.m +0 -61
- package/ios/HediaRecommendationScreen/Images.xcassets/AppIcon.appiconset/Contents.json +0 -38
- package/ios/HediaRecommendationScreen/Images.xcassets/Contents.json +0 -6
- package/ios/HediaRecommendationScreen/Info.plist +0 -90
- package/ios/HediaRecommendationScreen/LaunchScreen.storyboard +0 -47
- package/ios/HediaRecommendationScreen/main.m +0 -9
- package/ios/HediaRecommendationScreen.xcodeproj/project.pbxproj +0 -778
- package/ios/HediaRecommendationScreen.xcodeproj/xcshareddata/xcschemes/HediaRecommendationScreen-tvOS.xcscheme +0 -88
- package/ios/HediaRecommendationScreen.xcodeproj/xcshareddata/xcschemes/HediaRecommendationScreen.xcscheme +0 -88
- package/ios/HediaRecommendationScreen.xcworkspace/contents.xcworkspacedata +0 -10
- package/ios/HediaRecommendationScreen.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/ios/HediaRecommendationScreenTests/HediaRecommendationScreenTests.m +0 -65
- package/ios/HediaRecommendationScreenTests/Info.plist +0 -24
- package/ios/Podfile +0 -32
- package/ios/Podfile.lock +0 -544
- package/jest.config.js +0 -197
- package/jest.mock.js +0 -1
- package/metro.config.js +0 -17
- package/react-native.config.js +0 -7
- package/src/__tests__/RecommendationScreen.test.d.ts +0 -1
- package/src/__tests__/RecommendationScreen.test.js +0 -965
- package/src/__tests__/RecommendationUtils.test.d.ts +0 -1
- package/src/__tests__/RecommendationUtils.test.js +0 -216
- package/src/__tests__/Translate.test.d.ts +0 -1
- package/src/__tests__/Translate.test.js +0 -27
- package/src/__tests__/Utils.test.d.ts +0 -1
- package/src/__tests__/Utils.test.js +0 -66
- package/src/__tests__/Validations.test.d.ts +0 -1
- package/src/__tests__/Validations.test.js +0 -465
- package/src/__tests__/components/Activity.test.d.ts +0 -1
- package/src/__tests__/components/Activity.test.js +0 -86
- package/src/__tests__/components/Emotion.test.d.ts +0 -1
- package/src/__tests__/components/Emotion.test.js +0 -70
- package/src/__tests__/components/Header.test.d.ts +0 -1
- package/src/__tests__/components/Header.test.js +0 -36
- package/src/__tests__/components/InfoBars.test.d.ts +0 -1
- package/src/__tests__/components/InfoBars.test.js +0 -130
- package/src/__tests__/components/InvisibleNumberInput.test.d.ts +0 -1
- package/src/__tests__/components/InvisibleNumberInput.test.js +0 -160
- package/src/__tests__/components/LimitationMessage.test.d.ts +0 -1
- package/src/__tests__/components/LimitationMessage.test.js +0 -47
- package/src/__tests__/components/MoodIcon.test.d.ts +0 -1
- package/src/__tests__/components/MoodIcon.test.js +0 -30
- package/src/__tests__/components/RecommendationModal.test.d.ts +0 -1
- package/src/__tests__/components/RecommendationModal.test.js +0 -98
- package/src/__tests__/components/RecommendedCarbs.test.d.ts +0 -1
- package/src/__tests__/components/RecommendedCarbs.test.js +0 -120
- package/src/__tests__/components/RecommendedInsulin.test.d.ts +0 -1
- package/src/__tests__/components/RecommendedInsulin.test.js +0 -154
- package/src/__tests__/components/Remeasure.test.d.ts +0 -1
- package/src/__tests__/components/Remeasure.test.js +0 -78
- package/src/__tests__/components/TransferToLogbook.test.d.ts +0 -1
- package/src/__tests__/components/TransferToLogbook.test.js +0 -30
- package/src/__tests__/components/TwoOptionModal.test.d.ts +0 -1
- package/src/__tests__/components/TwoOptionModal.test.js +0 -65
- package/src/__tests__/utils.d.ts +0 -16
- package/src/__tests__/utils.js +0 -126
- package/tsconfig.json +0 -72
- package/tslint.json +0 -193
- package/typedoc.json +0 -13
- /package/{index.d.ts → dist/index.d.ts} +0 -0
- /package/{index.js → dist/index.js} +0 -0
- /package/{src → dist/src}/assets/activity/Cyclist.png +0 -0
- /package/{src → dist/src}/assets/activity/Other.png +0 -0
- /package/{src → dist/src}/assets/activity/Runner.png +0 -0
- /package/{src → dist/src}/assets/activity/Swimmer.png +0 -0
- /package/{src → dist/src}/assets/activity/Walk.png +0 -0
- /package/{src → dist/src}/assets/mood/happy.png +0 -0
- /package/{src → dist/src}/assets/mood/happy_active.png +0 -0
- /package/{src → dist/src}/assets/mood/neutral.png +0 -0
- /package/{src → dist/src}/assets/mood/neutral_active.png +0 -0
- /package/{src → dist/src}/assets/mood/sad.png +0 -0
- /package/{src → dist/src}/assets/mood/sad_active.png +0 -0
- /package/{src → dist/src}/assets/mood/semi_happy.png +0 -0
- /package/{src → dist/src}/assets/mood/semi_happy_active.png +0 -0
- /package/{src → dist/src}/assets/mood/semi_sad.png +0 -0
- /package/{src → dist/src}/assets/mood/semi_sad_active.png +0 -0
- /package/{src → dist/src}/components/Header.d.ts +0 -0
- /package/{src → dist/src}/components/Header.js +0 -0
- /package/{src → dist/src}/components/Icon.d.ts +0 -0
- /package/{src → dist/src}/components/Icon.js +0 -0
- /package/{src → dist/src}/components/InfoBars.d.ts +0 -0
- /package/{src → dist/src}/components/InfoBars.js +0 -0
- /package/{src → dist/src}/components/InvisibleNumberInput.d.ts +0 -0
- /package/{src → dist/src}/components/InvisibleNumberInput.js +0 -0
- /package/{src → dist/src}/components/LimitationMessage.d.ts +0 -0
- /package/{src → dist/src}/components/LimitationMessage.js +0 -0
- /package/{src → dist/src}/components/LineSeparator.d.ts +0 -0
- /package/{src → dist/src}/components/LineSeparator.js +0 -0
- /package/{src → dist/src}/components/RecentInsulin.d.ts +0 -0
- /package/{src → dist/src}/components/RecentInsulin.js +0 -0
- /package/{src → dist/src}/components/RecommendationModal.d.ts +0 -0
- /package/{src → dist/src}/components/RecommendationModal.js +0 -0
- /package/{src → dist/src}/components/RecommendedCarbs.d.ts +0 -0
- /package/{src → dist/src}/components/RecommendedCarbs.js +0 -0
- /package/{src → dist/src}/components/RecommendedInsulin.d.ts +0 -0
- /package/{src → dist/src}/components/RecommendedInsulin.js +0 -0
- /package/{src → dist/src}/components/Remeasure.d.ts +0 -0
- /package/{src → dist/src}/components/Remeasure.js +0 -0
- /package/{src → dist/src}/components/TransferToLogbook.d.ts +0 -0
- /package/{src → dist/src}/components/TransferToLogbook.js +0 -0
- /package/{src → dist/src}/components/TwoOptionModal.d.ts +0 -0
- /package/{src → dist/src}/components/TwoOptionModal.js +0 -0
- /package/{src → dist/src}/components/activity/Activity.d.ts +0 -0
- /package/{src → dist/src}/components/activity/Activity.js +0 -0
- /package/{src → dist/src}/components/activity/ActivityIcon.d.ts +0 -0
- /package/{src → dist/src}/components/activity/ActivityIcon.js +0 -0
- /package/{src → dist/src}/components/activity/ActivityIntensity.d.ts +0 -0
- /package/{src → dist/src}/components/activity/ActivityIntensity.js +0 -0
- /package/{src → dist/src}/components/mood/Emotion.d.ts +0 -0
- /package/{src → dist/src}/components/mood/Emotion.js +0 -0
- /package/{src → dist/src}/components/mood/MoodIcon.d.ts +0 -0
- /package/{src → dist/src}/components/mood/MoodIcon.js +0 -0
- /package/{src → dist/src}/locale/da/messages.js +0 -0
- /package/{src → dist/src}/locale/de/messages.js +0 -0
- /package/{src → dist/src}/locale/en/messages.js +0 -0
- /package/{src → dist/src}/locale/fr/messages.js +0 -0
- /package/{src → dist/src}/locale/i18nUtils.d.ts +0 -0
- /package/{src → dist/src}/locale/i18nUtils.js +0 -0
- /package/{src → dist/src}/locale/it/messages.js +0 -0
- /package/{src → dist/src}/types/enum.d.ts +0 -0
- /package/{src → dist/src}/types/enum.js +0 -0
- /package/{src → dist/src}/types/types.d.ts +0 -0
- /package/{src → dist/src}/types/types.js +0 -0
- /package/{src → dist/src}/utils/AttentionMessages.d.ts +0 -0
- /package/{src → dist/src}/utils/AttentionMessages.js +0 -0
- /package/{src → dist/src}/utils/Constants.d.ts +0 -0
- /package/{src → dist/src}/utils/Constants.js +0 -0
- /package/{src → dist/src}/utils/RecommendationError.d.ts +0 -0
- /package/{src → dist/src}/utils/RecommendationError.js +0 -0
- /package/{src → dist/src}/utils/RecommendationUtils.d.ts +0 -0
- /package/{src → dist/src}/utils/RecommendationUtils.js +0 -0
- /package/{src → dist/src}/utils/Translations.d.ts +0 -0
- /package/{src → dist/src}/utils/Translations.js +0 -0
- /package/{src → dist/src}/utils/Utils.d.ts +0 -0
- /package/{src → dist/src}/utils/Utils.js +0 -0
- /package/{src → dist/src}/utils/Validations.d.ts +0 -0
- /package/{src → dist/src}/utils/Validations.js +0 -0
|
@@ -1,465 +0,0 @@
|
|
|
1
|
-
import { Activity, BloodGlucoseUnit, BloodKetonesUnit, BolusCalculator, Languages, Milliseconds, UserSettings, } from "@hedia/types";
|
|
2
|
-
import { FOUR_HOURS_SECONDS } from "../utils/Constants";
|
|
3
|
-
import * as Errors from "../utils/RecommendationError";
|
|
4
|
-
import * as Validations from "../utils/Validations";
|
|
5
|
-
import { generateDefaultActivitySettings, generateDefaultLogbook } from "./utils";
|
|
6
|
-
const ActivityEnum = Activity.Enums.ActivityEnum;
|
|
7
|
-
const ActivityIntensity = Activity.Enums.ActivityIntensity;
|
|
8
|
-
const InjectionMethod = UserSettings.Enums.InjectionMethod;
|
|
9
|
-
const { light, moderate, hard } = ActivityIntensity;
|
|
10
|
-
describe(`Test validations functions for the recommendation props`, () => {
|
|
11
|
-
test.each `
|
|
12
|
-
validInjectionMethod
|
|
13
|
-
${InjectionMethod.PenHalf}
|
|
14
|
-
${InjectionMethod.PenWhole}
|
|
15
|
-
${InjectionMethod.Pump}
|
|
16
|
-
`(`Validation checking on treatment types $validInjectionMethod `, ({ validInjectionMethod }) => {
|
|
17
|
-
expect(() => Validations.checkInjectionMethod(validInjectionMethod)).not.toThrowError(Errors.InjectionMethodError());
|
|
18
|
-
});
|
|
19
|
-
test.each `
|
|
20
|
-
invalidInjectionMethod
|
|
21
|
-
${`Pen`}
|
|
22
|
-
${`Injection`}
|
|
23
|
-
${`Hedia`}
|
|
24
|
-
`(`Validation checking on treatment types $invalidInjectionMethod throws error`, (invalidInjectionMethod) => {
|
|
25
|
-
expect(() => Validations.checkInjectionMethod(invalidInjectionMethod)).toThrowError(Errors.InjectionMethodError());
|
|
26
|
-
});
|
|
27
|
-
test.each `
|
|
28
|
-
validUnit
|
|
29
|
-
${BloodGlucoseUnit.MG_DL}
|
|
30
|
-
${BloodGlucoseUnit.MMOL_L}
|
|
31
|
-
`(`Validation checking on blood glucose unit types $validUnit`, ({ validUnit }) => {
|
|
32
|
-
expect(() => Validations.checkBGLUnit(validUnit)).not.toThrowError(Errors.BloodGlucoseUnitError());
|
|
33
|
-
});
|
|
34
|
-
test.each `
|
|
35
|
-
invalidUnit
|
|
36
|
-
${`Kilogram`}
|
|
37
|
-
${`Litre`}
|
|
38
|
-
${`MMOL`}
|
|
39
|
-
`(`Validation checking on invalid blood glucose unit types $invalidUnit throws error`, ({ invalidUnit }) => {
|
|
40
|
-
expect(() => Validations.checkBGLUnit(invalidUnit)).toThrowError(Errors.BloodGlucoseUnitError());
|
|
41
|
-
});
|
|
42
|
-
test.each `
|
|
43
|
-
validKetoneProps
|
|
44
|
-
${{ bloodKetoneUnit: BloodKetonesUnit.MG_DL, currentBKL: 0 }}
|
|
45
|
-
${{ bloodKetoneUnit: BloodKetonesUnit.MMOL_L, currentBKL: null }}
|
|
46
|
-
${{ bloodKetoneUnit: null, currentBKL: null }}
|
|
47
|
-
`(`Validation checking on valid blood ketones props $validKetoneProps`, ({ validKetoneProps }) => {
|
|
48
|
-
const { bloodKetoneUnit, currentBKL } = validKetoneProps;
|
|
49
|
-
expect(() => Validations.checkBKProps(bloodKetoneUnit, currentBKL)).not.toThrowError(Errors.BloodKetonePropsError());
|
|
50
|
-
});
|
|
51
|
-
test.each `
|
|
52
|
-
invalidKetoneProps
|
|
53
|
-
${{ bloodKetoneUnit: null, currentBKL: 0 }}
|
|
54
|
-
${{ bloodKetoneUnit: null, currentBKL: 8 }}
|
|
55
|
-
`(`Validation checking on invalid blood ketones props $invalidKetoneProps`, ({ invalidKetoneProps }) => {
|
|
56
|
-
const { bloodKetoneUnit, currentBKL } = invalidKetoneProps;
|
|
57
|
-
expect(() => Validations.checkBKProps(bloodKetoneUnit, currentBKL)).toThrowError(Errors.BloodKetonePropsError());
|
|
58
|
-
});
|
|
59
|
-
test.each `
|
|
60
|
-
validUnit
|
|
61
|
-
${BloodKetonesUnit.MG_DL}
|
|
62
|
-
${BloodKetonesUnit.MMOL_L}
|
|
63
|
-
${null}
|
|
64
|
-
`(`Validation checking on blood ketones unit types $validUnit`, ({ validUnit }) => {
|
|
65
|
-
expect(() => Validations.checkBKLUnit(validUnit)).not.toThrowError(Errors.BloodKetoneUnitError());
|
|
66
|
-
});
|
|
67
|
-
test.each `
|
|
68
|
-
invalidUnit
|
|
69
|
-
${`Kilogram`}
|
|
70
|
-
${`Litre`}
|
|
71
|
-
${`MMOL`}
|
|
72
|
-
`(`Validation checking on invalid blood ketones unit types $invalidUnit throws error`, ({ invalidUnit }) => {
|
|
73
|
-
expect(() => Validations.checkBKLUnit(invalidUnit)).toThrowError(Errors.BloodKetoneUnitError());
|
|
74
|
-
});
|
|
75
|
-
test.each `
|
|
76
|
-
validLanguage
|
|
77
|
-
${Languages.da}
|
|
78
|
-
${Languages.en}
|
|
79
|
-
${Languages.de}
|
|
80
|
-
${Languages.es}
|
|
81
|
-
${Languages.it}
|
|
82
|
-
${Languages.fr}
|
|
83
|
-
`(`Validation checking on supported languages types $validLanguage`, ({ validLanguage }) => {
|
|
84
|
-
expect(() => Validations.checkLanguage(validLanguage)).not.toThrowError(Errors.LanguageError());
|
|
85
|
-
});
|
|
86
|
-
test.each `
|
|
87
|
-
invalidLanguage
|
|
88
|
-
${`Polish`}
|
|
89
|
-
${`Danish`}
|
|
90
|
-
${`Dansk`}
|
|
91
|
-
${`Deutsch`}
|
|
92
|
-
`(`Validation checking on supported languages types $invalidLanguage throws error`, (invalidLanguage) => {
|
|
93
|
-
expect(() => Validations.checkLanguage(invalidLanguage)).toThrowError(Errors.LanguageError());
|
|
94
|
-
});
|
|
95
|
-
it.each `
|
|
96
|
-
validLatestLogbookFrom6Hours
|
|
97
|
-
${generateDefaultLogbook()}
|
|
98
|
-
${null}
|
|
99
|
-
${{ ...generateDefaultLogbook(), blood_glucose_millimolar: null }}
|
|
100
|
-
`(`Validation checking on the latest logbook from the latest 6 hours with a valid logbook`, ({ validLatestLogbookFrom6Hours }) => {
|
|
101
|
-
expect(() => Validations.checkLatestLogbook6Hours(validLatestLogbookFrom6Hours)).not.toThrowError(Errors.LatestLogbook6HoursBGLError());
|
|
102
|
-
});
|
|
103
|
-
it.each `
|
|
104
|
-
invalidLatestLogbookFrom6Hours
|
|
105
|
-
${undefined}
|
|
106
|
-
${{}}
|
|
107
|
-
${[]}
|
|
108
|
-
${{ ...generateDefaultLogbook(), blood_glucose_millimolar: 1 }}
|
|
109
|
-
${{ ...generateDefaultLogbook(), blood_glucose_millimolar: 33.4 }}
|
|
110
|
-
`(`Validation checking on the latest logbook from the latest 6 hours with an invalid logbook `, ({ invalidLatestLogbookFrom6Hours }) => {
|
|
111
|
-
expect(() => Validations.checkLatestLogbook6Hours(invalidLatestLogbookFrom6Hours)).toThrowError(Errors.LatestLogbook6HoursBGLError());
|
|
112
|
-
});
|
|
113
|
-
test.each `
|
|
114
|
-
validActivityType
|
|
115
|
-
${ActivityEnum.Walk}
|
|
116
|
-
${ActivityEnum.Swim}
|
|
117
|
-
${ActivityEnum.Run}
|
|
118
|
-
${ActivityEnum.Other}
|
|
119
|
-
${ActivityEnum.Cycling}
|
|
120
|
-
`(`Validation checking on activity types $validActivityType `, ({ validActivityType }) => {
|
|
121
|
-
expect(() => Validations.checkActivityType(validActivityType)).not.toThrowError(Errors.ActivityTypeError());
|
|
122
|
-
});
|
|
123
|
-
test.each `
|
|
124
|
-
invalidActivityType
|
|
125
|
-
${`Dance`}
|
|
126
|
-
${`Walking`}
|
|
127
|
-
${`Swimming`}
|
|
128
|
-
${`Running`}
|
|
129
|
-
${`Cycle`}
|
|
130
|
-
`(`Validation checking on activity types $invalidActivityType throws error`, (invalidActivityType) => {
|
|
131
|
-
expect(() => Validations.checkActivityType(invalidActivityType)).toThrowError(Errors.ActivityTypeError());
|
|
132
|
-
});
|
|
133
|
-
test.each `
|
|
134
|
-
validUserReminder
|
|
135
|
-
${0}
|
|
136
|
-
${6}
|
|
137
|
-
${3}
|
|
138
|
-
${4.5}
|
|
139
|
-
`(`Validation checking on the user reminder value $validUserReminder`, ({ validUserReminder: validUserReminder }) => {
|
|
140
|
-
expect(() => Validations.checkUserReminder(validUserReminder)).not.toThrowError(Errors.UserReminderError());
|
|
141
|
-
});
|
|
142
|
-
test.each `
|
|
143
|
-
invalidUserReminder
|
|
144
|
-
${-1}
|
|
145
|
-
${null}
|
|
146
|
-
${undefined}
|
|
147
|
-
${7}
|
|
148
|
-
`(`Validation checking on the user reminder value $invalidUserReminder throws error`, ({ invalidUserReminder }) => {
|
|
149
|
-
expect(() => Validations.checkUserReminder(invalidUserReminder)).toThrowError(Errors.UserReminderError());
|
|
150
|
-
});
|
|
151
|
-
});
|
|
152
|
-
describe(`Test validations for the calculator parameters`, () => {
|
|
153
|
-
test.each `
|
|
154
|
-
validDuration
|
|
155
|
-
${1}
|
|
156
|
-
${60}
|
|
157
|
-
${34}
|
|
158
|
-
${5.555}
|
|
159
|
-
`(`Validation checking on activity $validDuration `, ({ validDuration }) => {
|
|
160
|
-
expect(() => Validations.checkActivityDuration(validDuration)).not.toThrowError(Errors.ActivityDurationError());
|
|
161
|
-
});
|
|
162
|
-
test.each `
|
|
163
|
-
invalidDuration
|
|
164
|
-
${0}
|
|
165
|
-
${61}
|
|
166
|
-
${undefined}
|
|
167
|
-
${null}
|
|
168
|
-
`(`Validation checking on activity $invalidDuration throws error`, (invalidDuration) => {
|
|
169
|
-
expect(() => Validations.checkActivityDuration(invalidDuration)).toThrowError(Errors.ActivityDurationError());
|
|
170
|
-
});
|
|
171
|
-
test.each `
|
|
172
|
-
validIntensity
|
|
173
|
-
${hard}
|
|
174
|
-
${light}
|
|
175
|
-
${moderate}
|
|
176
|
-
`(`Validation checking on activity $validIntensity`, ({ validIntensity }) => {
|
|
177
|
-
expect(() => Validations.checkActivityIntensity(validIntensity)).not.toThrowError(Errors.ActivityIntensityError());
|
|
178
|
-
});
|
|
179
|
-
/**
|
|
180
|
-
* Gets an string and returns the string with the first letter capitalized
|
|
181
|
-
* @param text to capitalize
|
|
182
|
-
*/
|
|
183
|
-
const capitalizeFirstLetter = (text) => {
|
|
184
|
-
return `${text.charAt(0).toUpperCase()}${text.slice(1)}`;
|
|
185
|
-
};
|
|
186
|
-
test.each `
|
|
187
|
-
invalidIntensity
|
|
188
|
-
${`bingo`}
|
|
189
|
-
${`easy`}
|
|
190
|
-
${undefined}
|
|
191
|
-
${null}
|
|
192
|
-
${`Low`}
|
|
193
|
-
${capitalizeFirstLetter(moderate)}
|
|
194
|
-
`(`Validation checking on activity $invalidIntensity throws error`, ({ invalidIntensity }) => {
|
|
195
|
-
expect(() => Validations.checkActivityIntensity(invalidIntensity)).toThrowError(Errors.ActivityIntensityError());
|
|
196
|
-
});
|
|
197
|
-
const validActivitySettings1 = generateDefaultActivitySettings();
|
|
198
|
-
const validActivitySettings2 = {
|
|
199
|
-
...validActivitySettings1,
|
|
200
|
-
hard: { fromZero: 1, fromThirty: 0.99, fromFortysix: null },
|
|
201
|
-
};
|
|
202
|
-
const validActivitySettings3 = {
|
|
203
|
-
...validActivitySettings1,
|
|
204
|
-
hard: { fromZero: 0, fromThirty: 0, fromFortysix: 0 },
|
|
205
|
-
};
|
|
206
|
-
const invalidActivitySettings1 = {
|
|
207
|
-
...validActivitySettings1,
|
|
208
|
-
// @ts-ignore Purposefully invalid settings
|
|
209
|
-
hard: { fromZero: 0, fromThirty: null, fromFortysix: null },
|
|
210
|
-
};
|
|
211
|
-
const invalidActivitySettings2 = {
|
|
212
|
-
...validActivitySettings1,
|
|
213
|
-
// @ts-ignore Purposefully invalid settings
|
|
214
|
-
light: { fromZero: undefined, fromThirty: 0.99, fromFortysix: 0.25 },
|
|
215
|
-
};
|
|
216
|
-
const invalidActivitySettings3 = {
|
|
217
|
-
...validActivitySettings1,
|
|
218
|
-
hard: { fromZero: 1, fromThirty: 0.99, fromFortysix: 1.1 },
|
|
219
|
-
};
|
|
220
|
-
const validActivity1 = {
|
|
221
|
-
activityDate: new Date(Date.now() - Milliseconds.Hour * 5 - Milliseconds.Minute * 9.9),
|
|
222
|
-
activityDuration: 60,
|
|
223
|
-
activityIntensity: moderate,
|
|
224
|
-
activitySettings: validActivitySettings1,
|
|
225
|
-
};
|
|
226
|
-
const validActivity2 = {
|
|
227
|
-
...validActivity1,
|
|
228
|
-
activityDate: new Date(Date.now() - Milliseconds.Hour * 4.5 - Milliseconds.Minute * 9.9),
|
|
229
|
-
activityDuration: 30,
|
|
230
|
-
};
|
|
231
|
-
const invalidActivity1 = {
|
|
232
|
-
...validActivity1,
|
|
233
|
-
activityDate: new Date(Date.now() - Milliseconds.Hour * 4.5 - Milliseconds.Minute * 10),
|
|
234
|
-
activityDuration: 30,
|
|
235
|
-
};
|
|
236
|
-
const invalidActivity2 = {
|
|
237
|
-
...validActivity1,
|
|
238
|
-
activityDate: new Date(Date.now() - Milliseconds.Hour * 4.25 - Milliseconds.Minute * 10),
|
|
239
|
-
activityDuration: 15,
|
|
240
|
-
};
|
|
241
|
-
test(`Can call checkActivity with a valid activity`, () => {
|
|
242
|
-
expect(() => Validations.checkActivity(validActivity1)).not.toThrow();
|
|
243
|
-
});
|
|
244
|
-
test(`Can call checkActivity with an invalid activity and throw error`, () => {
|
|
245
|
-
expect(() => Validations.checkActivity(invalidActivity1)).toThrow();
|
|
246
|
-
});
|
|
247
|
-
test.each `
|
|
248
|
-
validActivity
|
|
249
|
-
${validActivity1}
|
|
250
|
-
${validActivity2}
|
|
251
|
-
`(`Validation checking on activity date $validActivity.activityDate`, ({ validActivity }) => {
|
|
252
|
-
expect(() => Validations.checkActivityDate(validActivity)).not.toThrowError(Errors.ActivityDateError());
|
|
253
|
-
});
|
|
254
|
-
test.each `
|
|
255
|
-
invalidActivity
|
|
256
|
-
${invalidActivity1}
|
|
257
|
-
${invalidActivity2}
|
|
258
|
-
`(`Validation checking on invalid activity $invalidActivity.activityDate throws error`, ({ invalidActivity }) => {
|
|
259
|
-
expect(() => Validations.checkActivityDate(invalidActivity)).toThrowError(Errors.ActivityDateError());
|
|
260
|
-
});
|
|
261
|
-
test.each `
|
|
262
|
-
validActivitySettings
|
|
263
|
-
${validActivitySettings1}
|
|
264
|
-
${validActivitySettings2}
|
|
265
|
-
${validActivitySettings3}
|
|
266
|
-
`(`Validation checking on validActivitySettings`, ({ validActivitySettings }) => {
|
|
267
|
-
expect(() => Validations.checkActivitySettings(validActivitySettings)).not.toThrowError(Errors.ActivitySettingsError());
|
|
268
|
-
});
|
|
269
|
-
test.each `
|
|
270
|
-
invalidActivitySettings
|
|
271
|
-
${invalidActivitySettings1}
|
|
272
|
-
${invalidActivitySettings2}
|
|
273
|
-
${invalidActivitySettings3}
|
|
274
|
-
`(`Validation checking on invalidActivitySettings throws error`, ({ invalidActivitySettings }) => {
|
|
275
|
-
expect(() => Validations.checkActivitySettings(invalidActivitySettings)).toThrowError(Errors.ActivitySettingsError());
|
|
276
|
-
});
|
|
277
|
-
test.each `
|
|
278
|
-
validActivityTargetBGL
|
|
279
|
-
${5}
|
|
280
|
-
${13.9}
|
|
281
|
-
${8}
|
|
282
|
-
${10}
|
|
283
|
-
`(`Validation checking on $validActivityTargetBGL `, ({ validActivityTargetBGL }) => {
|
|
284
|
-
expect(() => Validations.checkActivityTargetBGL(validActivityTargetBGL)).not.toThrowError(Errors.ActivityTargetBGLError());
|
|
285
|
-
});
|
|
286
|
-
test.each `
|
|
287
|
-
invalidActivityTargetBGL
|
|
288
|
-
${4.99}
|
|
289
|
-
${null}
|
|
290
|
-
${undefined}
|
|
291
|
-
${13.91}
|
|
292
|
-
`(`Validation checking on $invalidActivityTargetBGL throws error`, ({ invalidActivityTargetBGL }) => {
|
|
293
|
-
expect(() => Validations.checkActivityTargetBGL(invalidActivityTargetBGL)).toThrowError(Errors.ActivityTargetBGLError());
|
|
294
|
-
});
|
|
295
|
-
test.each `
|
|
296
|
-
validTargetBGL
|
|
297
|
-
${5}
|
|
298
|
-
${13.9}
|
|
299
|
-
${8}
|
|
300
|
-
${10}
|
|
301
|
-
`(`Validation checking on $validTargetBGL `, ({ validTargetBGL }) => {
|
|
302
|
-
expect(() => Validations.checkTargetBGL(validTargetBGL)).not.toThrowError(Errors.TargetBGLError());
|
|
303
|
-
});
|
|
304
|
-
test.each `
|
|
305
|
-
invalidTargetBGL
|
|
306
|
-
${4.99}
|
|
307
|
-
${null}
|
|
308
|
-
${undefined}
|
|
309
|
-
${13.91}
|
|
310
|
-
`(`Validation checking on $invalidTargetBGL throws error `, ({ invalidTargetBGL }) => {
|
|
311
|
-
expect(() => Validations.checkTargetBGL(invalidTargetBGL)).toThrowError(Errors.TargetBGLError());
|
|
312
|
-
});
|
|
313
|
-
test.each `
|
|
314
|
-
validCarbohydrates
|
|
315
|
-
${0}
|
|
316
|
-
${100}
|
|
317
|
-
${300}
|
|
318
|
-
${10}
|
|
319
|
-
`(`Validation checking on provided $validCarbohydrates `, ({ validCarbohydrates }) => {
|
|
320
|
-
expect(() => Validations.checkCarbohydrates(validCarbohydrates)).not.toThrowError(Errors.CarbohydrateLimitError());
|
|
321
|
-
});
|
|
322
|
-
test.each `
|
|
323
|
-
invalidCarbohydrates
|
|
324
|
-
${-2}
|
|
325
|
-
${null}
|
|
326
|
-
${undefined}
|
|
327
|
-
${301}
|
|
328
|
-
`(`Validation checking on provided $invalidCarbohydrates throws error`, ({ invalidCarbohydrates }) => {
|
|
329
|
-
expect(() => Validations.checkCarbohydrates(invalidCarbohydrates)).toThrowError(Errors.CarbohydrateLimitError());
|
|
330
|
-
});
|
|
331
|
-
test.each `
|
|
332
|
-
validCurrentBGL
|
|
333
|
-
${1.1}
|
|
334
|
-
${33.3}
|
|
335
|
-
${null}
|
|
336
|
-
${10}
|
|
337
|
-
`(`Validation checking on $validCurrentBGL `, ({ validCurrentBGL }) => {
|
|
338
|
-
expect(() => Validations.checkCurrentBGL(validCurrentBGL)).not.toThrowError(Errors.CurrentBGLError());
|
|
339
|
-
});
|
|
340
|
-
test.each `
|
|
341
|
-
invalidCurrentBGL
|
|
342
|
-
${1}
|
|
343
|
-
${33.31}
|
|
344
|
-
${undefined}
|
|
345
|
-
${0}
|
|
346
|
-
`(`Validation checking on $invalidCurrentBGL throws error`, ({ invalidCurrentBGL }) => {
|
|
347
|
-
expect(() => Validations.checkCurrentBGL(invalidCurrentBGL)).toThrowError(Errors.CurrentBGLError());
|
|
348
|
-
});
|
|
349
|
-
test.each `
|
|
350
|
-
validRatio
|
|
351
|
-
${1}
|
|
352
|
-
${50}
|
|
353
|
-
${25}
|
|
354
|
-
${49.99}
|
|
355
|
-
`(`Validation checking on IC $validRatio `, ({ validRatio }) => {
|
|
356
|
-
expect(() => Validations.checkInsulinToCarbRatio(validRatio)).not.toThrowError(Errors.InsulinToCarbsRatioError());
|
|
357
|
-
});
|
|
358
|
-
test.each `
|
|
359
|
-
invalidRatio
|
|
360
|
-
${0}
|
|
361
|
-
${null}
|
|
362
|
-
${undefined}
|
|
363
|
-
${51}
|
|
364
|
-
`(`Validation checking on IC $invalidRatio throws error`, ({ invalidRatio }) => {
|
|
365
|
-
expect(() => Validations.checkInsulinToCarbRatio(invalidRatio)).toThrowError(Errors.InsulinToCarbsRatioError());
|
|
366
|
-
});
|
|
367
|
-
test.each `
|
|
368
|
-
validInsulinSensitivity
|
|
369
|
-
${0.3}
|
|
370
|
-
${10}
|
|
371
|
-
${5}
|
|
372
|
-
${4.44}
|
|
373
|
-
`(`Validation checking on $validInsulinSensitivity `, ({ validInsulinSensitivity }) => {
|
|
374
|
-
expect(() => Validations.checkInsulinSensitivity(validInsulinSensitivity)).not.toThrowError(Errors.InsulinSensitivityError());
|
|
375
|
-
});
|
|
376
|
-
test.each `
|
|
377
|
-
invalidInsulinSensitivity
|
|
378
|
-
${0}
|
|
379
|
-
${null}
|
|
380
|
-
${undefined}
|
|
381
|
-
${10.01}
|
|
382
|
-
`(`Validation checking on $invalidInsulinSensitivity throws error`, (invalidInsulinSensitivity) => {
|
|
383
|
-
expect(() => Validations.checkInsulinSensitivity(invalidInsulinSensitivity)).toThrowError(Errors.InsulinSensitivityError());
|
|
384
|
-
});
|
|
385
|
-
const validBolus1 = {
|
|
386
|
-
insulinDose: 0,
|
|
387
|
-
secondsPassed: 1,
|
|
388
|
-
};
|
|
389
|
-
const validBolus2 = {
|
|
390
|
-
insulinDose: 50,
|
|
391
|
-
secondsPassed: FOUR_HOURS_SECONDS,
|
|
392
|
-
};
|
|
393
|
-
const invalidBolus1 = {
|
|
394
|
-
// @ts-ignore Forcefully incorrect.
|
|
395
|
-
insulinDose: null,
|
|
396
|
-
// @ts-ignore Forcefully incorrect.
|
|
397
|
-
secondsPassed: null,
|
|
398
|
-
};
|
|
399
|
-
const invalidBolus2 = {
|
|
400
|
-
// @ts-ignore Forcefully incorrect.
|
|
401
|
-
insulinDose: undefined,
|
|
402
|
-
secondsPassed: FOUR_HOURS_SECONDS + 1,
|
|
403
|
-
};
|
|
404
|
-
const invalidBolus3 = {
|
|
405
|
-
insulinDose: BolusCalculator.Constants.SAFETY_INSULIN_LIMIT + 1,
|
|
406
|
-
secondsPassed: -1,
|
|
407
|
-
};
|
|
408
|
-
test.each `
|
|
409
|
-
validRecentBoluses
|
|
410
|
-
${[validBolus1, validBolus2]}
|
|
411
|
-
${[validBolus2]}
|
|
412
|
-
${[]}
|
|
413
|
-
`(`Validation checking on Recent Boluses - insulin dose`, ({ validRecentBoluses }) => {
|
|
414
|
-
expect(() => Validations.checkRecentBolusesInsulinDose(validRecentBoluses)).not.toThrow();
|
|
415
|
-
});
|
|
416
|
-
test.each `
|
|
417
|
-
invalidRecentBoluses
|
|
418
|
-
${[validBolus1, invalidBolus1]}
|
|
419
|
-
${[invalidBolus2]}
|
|
420
|
-
${[validBolus2, invalidBolus3]}
|
|
421
|
-
`(`Validation checking on Recent Boluses insulin - dose throws error`, ({ invalidRecentBoluses }) => {
|
|
422
|
-
expect(() => Validations.checkRecentBolusesInsulinDose(invalidRecentBoluses)).toThrowError(Errors.BolusInsulinDoseError());
|
|
423
|
-
});
|
|
424
|
-
test.each `
|
|
425
|
-
validRecentBoluses
|
|
426
|
-
${[validBolus1, validBolus2]}
|
|
427
|
-
${[validBolus2]}
|
|
428
|
-
${[]}
|
|
429
|
-
`(`Validation checking on Recent Boluses seconds passed`, ({ validRecentBoluses }) => {
|
|
430
|
-
expect(() => Validations.checkRecentBolusesSecondsPassed(validRecentBoluses)).not.toThrowError(Errors.BolusInsulinSecondsPassedError());
|
|
431
|
-
});
|
|
432
|
-
test.each `
|
|
433
|
-
invalidRecentBoluses
|
|
434
|
-
${[validBolus1, invalidBolus1]}
|
|
435
|
-
${[validBolus2, invalidBolus2]}
|
|
436
|
-
${[validBolus2, invalidBolus3]}
|
|
437
|
-
`(`Validation checking on Recent Boluses seconds passed throws error`, ({ invalidRecentBoluses }) => {
|
|
438
|
-
expect(() => Validations.checkRecentBolusesSecondsPassed(invalidRecentBoluses)).toThrowError(Errors.BolusInsulinSecondsPassedError());
|
|
439
|
-
});
|
|
440
|
-
test.each `
|
|
441
|
-
invalidRecentBoluses
|
|
442
|
-
${null}
|
|
443
|
-
${undefined}
|
|
444
|
-
`(`Validation checking on Recent Boluses: null and undefined throws error`, ({ invalidRecentBoluses }) => {
|
|
445
|
-
expect(() => Validations.checkRecentBolus(invalidRecentBoluses)).toThrowError(Errors.RecentBolusError());
|
|
446
|
-
});
|
|
447
|
-
test.each `
|
|
448
|
-
validCurrentBKL
|
|
449
|
-
${0}
|
|
450
|
-
${8}
|
|
451
|
-
${null}
|
|
452
|
-
${5}
|
|
453
|
-
`(`Validation checking on $validCurrentBKL `, ({ validCurrentBKL }) => {
|
|
454
|
-
expect(() => Validations.checkBloodKetoneLevel(validCurrentBKL)).not.toThrowError(Errors.CurrentBKLError());
|
|
455
|
-
});
|
|
456
|
-
test.each `
|
|
457
|
-
invalidCurrentBKL
|
|
458
|
-
${-0.1}
|
|
459
|
-
${8.01}
|
|
460
|
-
${undefined}
|
|
461
|
-
${NaN}
|
|
462
|
-
`(`Validation checking on $invalidCurrentBKL throws error`, ({ invalidCurrentBKL }) => {
|
|
463
|
-
expect(() => Validations.checkBloodKetoneLevel(invalidCurrentBKL)).toThrowError(Errors.CurrentBKLError());
|
|
464
|
-
});
|
|
465
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { Activity, Languages } from "@hedia/types";
|
|
2
|
-
import { I18nProvider } from "@lingui/react";
|
|
3
|
-
import React from "react";
|
|
4
|
-
import { cleanup, render } from "react-native-testing-library";
|
|
5
|
-
import { default as ActivityComponent } from "../../components/activity/Activity";
|
|
6
|
-
import { i18n } from "../../locale/i18nUtils";
|
|
7
|
-
import { Testing } from "../../types/enum";
|
|
8
|
-
import { ActivityIntensityTranslations } from "../../utils/Translations";
|
|
9
|
-
import { expectTextExists, generateActivityProps, getRecommendationProps, i18nProvided, queryTextFromComponent, } from "../utils";
|
|
10
|
-
const ActivityIntensity = Activity.Enums.ActivityIntensity;
|
|
11
|
-
const { light, moderate, hard } = ActivityIntensity;
|
|
12
|
-
describe(`Activity - Component`, () => {
|
|
13
|
-
afterEach(cleanup);
|
|
14
|
-
beforeEach(() => {
|
|
15
|
-
i18n.activate(Languages.en);
|
|
16
|
-
});
|
|
17
|
-
test.each `
|
|
18
|
-
activityIntensity
|
|
19
|
-
${light}
|
|
20
|
-
${moderate}
|
|
21
|
-
${hard}
|
|
22
|
-
`(`Renders $activityIntensity`, ({ activityIntensity }) => {
|
|
23
|
-
const { activityDisplayProps } = getRecommendationProps();
|
|
24
|
-
const activity = generateActivityProps();
|
|
25
|
-
const wrapper = render(i18nProvided(<ActivityComponent activity={{ ...activity, activityIntensity }} activityType={activityDisplayProps?.activityType ?? null} activityTitle={activityDisplayProps?.activityTitle ?? null} activityReduction={0}/>));
|
|
26
|
-
expectTextExists(wrapper, `Activity`);
|
|
27
|
-
expectTextExists(wrapper, `30`);
|
|
28
|
-
expectTextExists(wrapper, `min`);
|
|
29
|
-
expectTextExists(wrapper, `Based on the selected activity your insulin recommendation is reduced by:`);
|
|
30
|
-
expectTextExists(wrapper, ActivityIntensityTranslations[activityIntensity]());
|
|
31
|
-
});
|
|
32
|
-
test.each `
|
|
33
|
-
reduction
|
|
34
|
-
${0}
|
|
35
|
-
${0.25}
|
|
36
|
-
${0.33}
|
|
37
|
-
${0.5}
|
|
38
|
-
${0.8}
|
|
39
|
-
`(`Renders activity reduction from decimal: $reduction to percentage`, ({ reduction }) => {
|
|
40
|
-
const { activityDisplayProps } = getRecommendationProps();
|
|
41
|
-
const activity = generateActivityProps();
|
|
42
|
-
const wrapper = render(i18nProvided(<ActivityComponent activity={activity} activityType={activityDisplayProps?.activityType ?? null} activityReduction={reduction} activityTitle={activityDisplayProps?.activityTitle ?? null}/>));
|
|
43
|
-
expectTextExists(wrapper, `${reduction * 100}%`);
|
|
44
|
-
});
|
|
45
|
-
test(`Renders activity reduction as 0 when null is passed`, () => {
|
|
46
|
-
const { activityDisplayProps } = getRecommendationProps();
|
|
47
|
-
const activity = generateActivityProps();
|
|
48
|
-
const reduction = null;
|
|
49
|
-
const wrapper = render(i18nProvided(<ActivityComponent activity={activity} activityType={activityDisplayProps?.activityType ?? null} activityReduction={reduction} activityTitle={activityDisplayProps?.activityTitle ?? null}/>));
|
|
50
|
-
const text = queryTextFromComponent(wrapper, Testing.Id.ActivityTestIds.ActivityReduction);
|
|
51
|
-
expect(text).toBe(`0%`);
|
|
52
|
-
});
|
|
53
|
-
test(`Can render activity title`, () => {
|
|
54
|
-
const { activityDisplayProps } = getRecommendationProps();
|
|
55
|
-
const activity = generateActivityProps();
|
|
56
|
-
const wrapper = render(i18nProvided(<ActivityComponent activity={{ ...activity }} activityType={activityDisplayProps?.activityType ?? null} activityTitle={activityDisplayProps?.activityTitle ?? null} activityReduction={0}/>));
|
|
57
|
-
expectTextExists(wrapper, activityDisplayProps?.activityTitle);
|
|
58
|
-
});
|
|
59
|
-
test.each `
|
|
60
|
-
language | locale | message
|
|
61
|
-
${`English`} | ${Languages.en} | ${`Activity`}
|
|
62
|
-
${`Danish`} | ${Languages.da} | ${`Aktivitet`}
|
|
63
|
-
${`German`} | ${Languages.de} | ${`Aktivität`}
|
|
64
|
-
${`Spanish`} | ${Languages.es} | ${`Actividad`}
|
|
65
|
-
${`Italian`} | ${Languages.it} | ${`Attività fisica`}
|
|
66
|
-
${`French`} | ${Languages.fr} | ${`Activité`}
|
|
67
|
-
`(`Can render in $language`, ({ message, locale }) => {
|
|
68
|
-
const { activityDisplayProps } = getRecommendationProps();
|
|
69
|
-
const activity = generateActivityProps();
|
|
70
|
-
i18n.activate(locale);
|
|
71
|
-
const wrapper = render(<I18nProvider language={locale} i18n={i18n}>
|
|
72
|
-
<ActivityComponent activity={activity} activityType={activityDisplayProps?.activityType ?? null} activityTitle={activityDisplayProps?.activityTitle ?? null} activityReduction={0}/>
|
|
73
|
-
</I18nProvider>);
|
|
74
|
-
expectTextExists(wrapper, message);
|
|
75
|
-
});
|
|
76
|
-
test(`ActivityIcon defaults to other if activityType is null`, () => {
|
|
77
|
-
const { activityDisplayProps } = getRecommendationProps();
|
|
78
|
-
const activity = generateActivityProps();
|
|
79
|
-
const wrapper = render(i18nProvided(<ActivityComponent activity={{ ...activity }} activityType={null} activityTitle={activityDisplayProps?.activityTitle ?? null} activityReduction={0}/>));
|
|
80
|
-
expectTextExists(wrapper, activityDisplayProps?.activityTitle);
|
|
81
|
-
const existingLabel = `${Activity.Enums.ActivityEnum[Activity.Enums.ActivityEnum.Other]}_activity`;
|
|
82
|
-
const nonExistingLabel = `${Activity.Enums.ActivityEnum[Activity.Enums.ActivityEnum.Run]}_activity`;
|
|
83
|
-
expect(wrapper.queryByA11yLabel(existingLabel)).not.toBeNull();
|
|
84
|
-
expect(wrapper.queryByA11yLabel(nonExistingLabel)).toBeNull();
|
|
85
|
-
});
|
|
86
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { Languages, Logbook } from "@hedia/types";
|
|
2
|
-
import React from "react";
|
|
3
|
-
import { cleanup, fireEvent, render } from "react-native-testing-library";
|
|
4
|
-
import Emotion from "../../components/mood/Emotion";
|
|
5
|
-
import { i18n } from "../../locale/i18nUtils";
|
|
6
|
-
import { expectTextExists, getIcon, i18nProvided } from "../utils";
|
|
7
|
-
const MoodEnum = Logbook.Enums.MoodEnum;
|
|
8
|
-
describe(`Emotion - Component`, () => {
|
|
9
|
-
afterEach(cleanup);
|
|
10
|
-
beforeEach(() => {
|
|
11
|
-
i18n.activate(Languages.en);
|
|
12
|
-
});
|
|
13
|
-
test(`Can mount component in `, () => {
|
|
14
|
-
const mockSelected = jest.fn();
|
|
15
|
-
const wrapper = render(i18nProvided(<Emotion moodSelected={mockSelected} currentMood={null}/>));
|
|
16
|
-
expectTextExists(wrapper, `How are you feeling?`);
|
|
17
|
-
});
|
|
18
|
-
test.each `
|
|
19
|
-
mood | moodName | preselected | preselectedName
|
|
20
|
-
${MoodEnum.Happy} | ${MoodEnum[MoodEnum.Happy]} | ${MoodEnum.Sad} | ${MoodEnum[MoodEnum.Sad]}
|
|
21
|
-
${MoodEnum.SemiHappy} | ${MoodEnum[MoodEnum.SemiHappy]} | ${MoodEnum.Happy} | ${MoodEnum[MoodEnum.Happy]}
|
|
22
|
-
${MoodEnum.Neutral} | ${MoodEnum[MoodEnum.Neutral]} | ${MoodEnum.SemiHappy} | ${MoodEnum[MoodEnum.SemiHappy]}
|
|
23
|
-
${MoodEnum.SemiSad} | ${MoodEnum[MoodEnum.SemiSad]} | ${MoodEnum.Neutral} | ${MoodEnum[MoodEnum.Neutral]}
|
|
24
|
-
${MoodEnum.Sad} | ${MoodEnum[MoodEnum.Sad]} | ${MoodEnum.SemiSad} | ${MoodEnum[MoodEnum.SemiSad]}
|
|
25
|
-
`(`Pressing on $moodName icon deselects others`, ({ mood, moodName, preselected, preselectedName, }) => {
|
|
26
|
-
let mockedStateMood = preselected;
|
|
27
|
-
const mockSelected = jest.fn((selectedMood) => (mockedStateMood = selectedMood));
|
|
28
|
-
const wrapper = render(<Emotion moodSelected={mockSelected} currentMood={mockedStateMood}/>);
|
|
29
|
-
const preIcon = getIcon(wrapper, preselectedName, true);
|
|
30
|
-
if (preIcon === null) {
|
|
31
|
-
return fail(`No icon found for queryByA11yLabel: ${preselectedName}_${true}`);
|
|
32
|
-
}
|
|
33
|
-
const newIcon = getIcon(wrapper, moodName, false);
|
|
34
|
-
if (newIcon === null) {
|
|
35
|
-
return fail(`No icon found for queryByA11yLabel: ${moodName}_${false}`);
|
|
36
|
-
}
|
|
37
|
-
// Select a different mood
|
|
38
|
-
fireEvent(newIcon, `onPress`);
|
|
39
|
-
expect(mockedStateMood).toBe(mood);
|
|
40
|
-
wrapper.update(<Emotion moodSelected={mockSelected} currentMood={mockedStateMood}/>);
|
|
41
|
-
const moodValues = Object.values(MoodEnum).filter((value) => typeof value === `string`);
|
|
42
|
-
moodValues.forEach((value) => {
|
|
43
|
-
if (moodName === value) {
|
|
44
|
-
expect(getIcon(wrapper, value, true)).not.toBeNull();
|
|
45
|
-
expect(getIcon(wrapper, value, false)).toBeNull();
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
expect(getIcon(wrapper, value, false)).not.toBeNull();
|
|
49
|
-
expect(getIcon(wrapper, value, true)).toBeNull();
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
test(`Deselecting selected icon by pressing it again`, () => {
|
|
54
|
-
let mockedStateMood = MoodEnum.Happy;
|
|
55
|
-
const mockSelected = jest.fn((newMood) => (mockedStateMood = newMood));
|
|
56
|
-
const mood = MoodEnum[mockedStateMood];
|
|
57
|
-
const wrapper = render(<Emotion moodSelected={mockSelected} currentMood={mockedStateMood}/>);
|
|
58
|
-
// current mood has already been selected: Happy
|
|
59
|
-
expect(getIcon(wrapper, mood, true)).not.toBeNull();
|
|
60
|
-
expect(getIcon(wrapper, mood, false)).toBeNull();
|
|
61
|
-
const icon = getIcon(wrapper, mood, true);
|
|
62
|
-
if (icon === null) {
|
|
63
|
-
return fail(`No icon found for queryByA11yLabel: ${mood}_${true}`);
|
|
64
|
-
}
|
|
65
|
-
fireEvent(icon, `onPress`);
|
|
66
|
-
wrapper.update(<Emotion moodSelected={mockSelected} currentMood={mockedStateMood}/>);
|
|
67
|
-
expect(getIcon(wrapper, mood, true)).toBeNull();
|
|
68
|
-
expect(getIcon(wrapper, mood, false)).not.toBeNull();
|
|
69
|
-
});
|
|
70
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { cleanup, fireEvent, render } from "react-native-testing-library";
|
|
3
|
-
import { expectTextExists, getRecommendationProps } from "../utils";
|
|
4
|
-
import { I18nProvider } from "@lingui/react";
|
|
5
|
-
import Header from "../../components/Header";
|
|
6
|
-
import { Languages } from "@hedia/types";
|
|
7
|
-
import { i18n } from "../../locale/i18nUtils";
|
|
8
|
-
import { Testing } from "../../types/enum";
|
|
9
|
-
describe(`Header Component`, () => {
|
|
10
|
-
afterEach(cleanup);
|
|
11
|
-
test(`Exit button calls exitCallback`, () => {
|
|
12
|
-
const props = getRecommendationProps();
|
|
13
|
-
const { getByTestId } = render(<Header exitCallback={props.exitCallback}/>);
|
|
14
|
-
expect(props.exitCallback).not.toBeCalled();
|
|
15
|
-
fireEvent.press(getByTestId(Testing.Id.HeaderTestIds.ExitCalculation));
|
|
16
|
-
expect(props.exitCallback).toBeCalled();
|
|
17
|
-
});
|
|
18
|
-
test.each `
|
|
19
|
-
language | locale | header
|
|
20
|
-
${`English`} | ${Languages.en} | ${`INSULIN\nRECOMMENDATION`}
|
|
21
|
-
${`Danish`} | ${Languages.da} | ${`INSULIN\nANBEFALING`}
|
|
22
|
-
${`German`} | ${Languages.de} | ${`INSULIN\nEMPFEHLUNG`}
|
|
23
|
-
${`Spanish`} | ${Languages.es} | ${`RECOMENDACIÓN\nDE INSULINA`}
|
|
24
|
-
${`Italian`} | ${Languages.it} | ${`PRESCRIZIONE DI\nINSULINA`}
|
|
25
|
-
${`French`} | ${Languages.fr} | ${`RECOMMANDATION\nD’INSULINE`}
|
|
26
|
-
`(`Header is translated to $language`, ({ header, locale }) => {
|
|
27
|
-
const props = getRecommendationProps({
|
|
28
|
-
language: locale,
|
|
29
|
-
});
|
|
30
|
-
i18n.activate(locale);
|
|
31
|
-
const wrapper = render(<I18nProvider language={locale} i18n={i18n}>
|
|
32
|
-
<Header exitCallback={props.exitCallback}/>
|
|
33
|
-
</I18nProvider>);
|
|
34
|
-
expectTextExists(wrapper, header);
|
|
35
|
-
});
|
|
36
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|