diff --git a/fastlane/metadata/android/ca/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/ca/images/phoneScreenshots/01 - dashboard.png new file mode 100644 index 00000000..98727fe6 Binary files /dev/null and b/fastlane/metadata/android/ca/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/ca/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/ca/images/phoneScreenshots/02 - workout detail.png new file mode 100644 index 00000000..a709535a Binary files /dev/null and b/fastlane/metadata/android/ca/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/ca/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/ca/images/phoneScreenshots/03 - gym mode.png index a5499a34..77a32ae6 100644 Binary files a/fastlane/metadata/android/ca/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/ca/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/ca/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/ca/images/phoneScreenshots/04 - measurements.png new file mode 100644 index 00000000..9962dfcb Binary files /dev/null and b/fastlane/metadata/android/ca/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/ca/images/phoneScreenshots/04 - nutritional plan.png b/fastlane/metadata/android/ca/images/phoneScreenshots/04 - nutritional plan.png deleted file mode 100644 index 13492691..00000000 Binary files a/fastlane/metadata/android/ca/images/phoneScreenshots/04 - nutritional plan.png and /dev/null differ diff --git a/fastlane/metadata/android/ca/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/ca/images/phoneScreenshots/05 - nutritional plan.png new file mode 100644 index 00000000..52416d89 Binary files /dev/null and b/fastlane/metadata/android/ca/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/ca/images/phoneScreenshots/05 - weight.png b/fastlane/metadata/android/ca/images/phoneScreenshots/05 - weight.png deleted file mode 100644 index aae07e9a..00000000 Binary files a/fastlane/metadata/android/ca/images/phoneScreenshots/05 - weight.png and /dev/null differ diff --git a/fastlane/metadata/android/ca/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/ca/images/phoneScreenshots/06 - weight.png new file mode 100644 index 00000000..6964f550 Binary files /dev/null and b/fastlane/metadata/android/ca/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/01 - dashboard.png new file mode 100644 index 00000000..50b66818 Binary files /dev/null and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/02 - workout detail.png new file mode 100644 index 00000000..39fb76ef Binary files /dev/null and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/03 - gym mode.png index 5228d44c..ec485e37 100644 Binary files a/fastlane/metadata/android/de-DE/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/04 - measurements.png new file mode 100644 index 00000000..34abbabb Binary files /dev/null and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/04 - nutritional plan.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/04 - nutritional plan.png deleted file mode 100644 index 891275f5..00000000 Binary files a/fastlane/metadata/android/de-DE/images/phoneScreenshots/04 - nutritional plan.png and /dev/null differ diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/05 - nutritional plan.png new file mode 100644 index 00000000..7054ec0f Binary files /dev/null and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/05 - weight.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/05 - weight.png deleted file mode 100644 index 6f840f7e..00000000 Binary files a/fastlane/metadata/android/de-DE/images/phoneScreenshots/05 - weight.png and /dev/null differ diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/06 - weight.png new file mode 100644 index 00000000..67276164 Binary files /dev/null and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/01 - dashboard.png new file mode 100644 index 00000000..81cc43d1 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/01 - workout plan.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/01 - workout plan.png deleted file mode 100644 index d6f10a7b..00000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/01 - workout plan.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/02 - workout detail.png new file mode 100644 index 00000000..dc4beb18 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/02 - workout log.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/02 - workout log.png deleted file mode 100644 index 7e7ebb40..00000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/02 - workout log.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/03 - gym mode.png index 36ec11c4..5657ad28 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/04 - measurements.png new file mode 100644 index 00000000..d30370ea Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/04 - nutritional plan.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/04 - nutritional plan.png deleted file mode 100644 index d789fdae..00000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/04 - nutritional plan.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/05 - nutritional plan.png new file mode 100644 index 00000000..6e7a4e28 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/05 - weight.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/05 - weight.png deleted file mode 100644 index 8e416462..00000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/05 - weight.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/06 - weight.png new file mode 100644 index 00000000..77f2fd80 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/01 - dashboard.png new file mode 100644 index 00000000..d4b3377c Binary files /dev/null and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/02 - workout detail.png new file mode 100644 index 00000000..f2329bdf Binary files /dev/null and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/03 - gym mode.png index 86fff622..1b47693b 100644 Binary files a/fastlane/metadata/android/es-ES/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/04 - measurements.png new file mode 100644 index 00000000..18c8addc Binary files /dev/null and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/04 - nutritional plan.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/04 - nutritional plan.png deleted file mode 100644 index 74f6f2f5..00000000 Binary files a/fastlane/metadata/android/es-ES/images/phoneScreenshots/04 - nutritional plan.png and /dev/null differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/05 - nutritional plan.png new file mode 100644 index 00000000..92351e1a Binary files /dev/null and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/05 - weight.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/05 - weight.png deleted file mode 100644 index 5e643abe..00000000 Binary files a/fastlane/metadata/android/es-ES/images/phoneScreenshots/05 - weight.png and /dev/null differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/06 - weight.png new file mode 100644 index 00000000..90876b7f Binary files /dev/null and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/01 - dashboard.png new file mode 100644 index 00000000..5b4d368e Binary files /dev/null and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/02 - workout detail.png new file mode 100644 index 00000000..57be41cf Binary files /dev/null and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/03 - gym mode.png index 132dfc13..dc5a15b4 100644 Binary files a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/04 - measurements.png new file mode 100644 index 00000000..ff96636b Binary files /dev/null and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/04 - nutritional plan.png b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/04 - nutritional plan.png deleted file mode 100644 index 448273ea..00000000 Binary files a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/04 - nutritional plan.png and /dev/null differ diff --git a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/05 - nutritional plan.png new file mode 100644 index 00000000..5531d10f Binary files /dev/null and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/05 - weight.png b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/05 - weight.png deleted file mode 100644 index 733e2945..00000000 Binary files a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/05 - weight.png and /dev/null differ diff --git a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/06 - weight.png new file mode 100644 index 00000000..3fc7e5f2 Binary files /dev/null and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/01 - dashboard.png new file mode 100644 index 00000000..1ad80265 Binary files /dev/null and b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/02 - workout detail.png new file mode 100644 index 00000000..8c5f8092 Binary files /dev/null and b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/03 - gym mode.png index ee9bdbff..534ea5d9 100644 Binary files a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/04 - measurements.png new file mode 100644 index 00000000..b755a51f Binary files /dev/null and b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/04 - nutritional plan.png b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/04 - nutritional plan.png deleted file mode 100644 index 82f915b2..00000000 Binary files a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/04 - nutritional plan.png and /dev/null differ diff --git a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/05 - nutritional plan.png new file mode 100644 index 00000000..fc72223c Binary files /dev/null and b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/05 - weight.png b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/05 - weight.png deleted file mode 100644 index 88dbab71..00000000 Binary files a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/05 - weight.png and /dev/null differ diff --git a/fastlane/metadata/android/hi-IN/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/06 - weight.png new file mode 100644 index 00000000..9384afeb Binary files /dev/null and b/fastlane/metadata/android/hi-IN/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/hr/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/hr/images/phoneScreenshots/01 - dashboard.png new file mode 100644 index 00000000..eea4f510 Binary files /dev/null and b/fastlane/metadata/android/hr/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/hr/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/hr/images/phoneScreenshots/02 - workout detail.png new file mode 100644 index 00000000..27d87a7c Binary files /dev/null and b/fastlane/metadata/android/hr/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/hr/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/hr/images/phoneScreenshots/03 - gym mode.png index a94a0635..81768dd5 100644 Binary files a/fastlane/metadata/android/hr/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/hr/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/hr/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/hr/images/phoneScreenshots/04 - measurements.png new file mode 100644 index 00000000..85e1ea7d Binary files /dev/null and b/fastlane/metadata/android/hr/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/hr/images/phoneScreenshots/04 - nutritional plan.png b/fastlane/metadata/android/hr/images/phoneScreenshots/04 - nutritional plan.png deleted file mode 100644 index 950ded97..00000000 Binary files a/fastlane/metadata/android/hr/images/phoneScreenshots/04 - nutritional plan.png and /dev/null differ diff --git a/fastlane/metadata/android/hr/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/hr/images/phoneScreenshots/05 - nutritional plan.png new file mode 100644 index 00000000..5f0eca56 Binary files /dev/null and b/fastlane/metadata/android/hr/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/hr/images/phoneScreenshots/05 - weight.png b/fastlane/metadata/android/hr/images/phoneScreenshots/05 - weight.png deleted file mode 100644 index 355bc81f..00000000 Binary files a/fastlane/metadata/android/hr/images/phoneScreenshots/05 - weight.png and /dev/null differ diff --git a/fastlane/metadata/android/hr/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/hr/images/phoneScreenshots/06 - weight.png new file mode 100644 index 00000000..abd6f12e Binary files /dev/null and b/fastlane/metadata/android/hr/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/it-IT/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/it-IT/images/phoneScreenshots/01 - dashboard.png new file mode 100644 index 00000000..975489c1 Binary files /dev/null and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/it-IT/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/it-IT/images/phoneScreenshots/02 - workout detail.png new file mode 100644 index 00000000..a9b40055 Binary files /dev/null and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/it-IT/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/it-IT/images/phoneScreenshots/03 - gym mode.png index 9279928d..81eed2e3 100644 Binary files a/fastlane/metadata/android/it-IT/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/it-IT/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/it-IT/images/phoneScreenshots/04 - measurements.png new file mode 100644 index 00000000..668acf81 Binary files /dev/null and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/it-IT/images/phoneScreenshots/04 - nutritional plan.png b/fastlane/metadata/android/it-IT/images/phoneScreenshots/04 - nutritional plan.png deleted file mode 100644 index 3e96d569..00000000 Binary files a/fastlane/metadata/android/it-IT/images/phoneScreenshots/04 - nutritional plan.png and /dev/null differ diff --git a/fastlane/metadata/android/it-IT/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/it-IT/images/phoneScreenshots/05 - nutritional plan.png new file mode 100644 index 00000000..07ad0aab Binary files /dev/null and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/it-IT/images/phoneScreenshots/05 - weight.png b/fastlane/metadata/android/it-IT/images/phoneScreenshots/05 - weight.png deleted file mode 100644 index 1bf193f5..00000000 Binary files a/fastlane/metadata/android/it-IT/images/phoneScreenshots/05 - weight.png and /dev/null differ diff --git a/fastlane/metadata/android/it-IT/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/it-IT/images/phoneScreenshots/06 - weight.png new file mode 100644 index 00000000..6d0bf959 Binary files /dev/null and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/01 - dashboard.png new file mode 100644 index 00000000..829e09c3 Binary files /dev/null and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/02 - workout detail.png new file mode 100644 index 00000000..b7dbe679 Binary files /dev/null and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/03 - gym mode.png index 36ec11c4..5657ad28 100644 Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/04 - measurements.png new file mode 100644 index 00000000..9163fe98 Binary files /dev/null and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/04 - nutritional plan.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/04 - nutritional plan.png deleted file mode 100644 index 4c93fcf1..00000000 Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/04 - nutritional plan.png and /dev/null differ diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/05 - nutritional plan.png new file mode 100644 index 00000000..17264a56 Binary files /dev/null and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/05 - weight.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/05 - weight.png deleted file mode 100644 index 552579db..00000000 Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/05 - weight.png and /dev/null differ diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/06 - weight.png new file mode 100644 index 00000000..b43170f0 Binary files /dev/null and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/01 - dashboard.png new file mode 100644 index 00000000..1f573101 Binary files /dev/null and b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/02 - workout detail.png new file mode 100644 index 00000000..ee559ac8 Binary files /dev/null and b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/03 - gym mode.png index 1d2c51e9..aed84b19 100644 Binary files a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/04 - measurements.png new file mode 100644 index 00000000..204dc92f Binary files /dev/null and b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/04 - nutritional plan.png b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/04 - nutritional plan.png deleted file mode 100644 index 4cbe600a..00000000 Binary files a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/04 - nutritional plan.png and /dev/null differ diff --git a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/05 - nutritional plan.png new file mode 100644 index 00000000..a594cc7e Binary files /dev/null and b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/05 - weight.png b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/05 - weight.png deleted file mode 100644 index 4068856b..00000000 Binary files a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/05 - weight.png and /dev/null differ diff --git a/fastlane/metadata/android/pl-PL/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/06 - weight.png new file mode 100644 index 00000000..cc5b0f20 Binary files /dev/null and b/fastlane/metadata/android/pl-PL/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/01 - dashboard.png new file mode 100644 index 00000000..223e5648 Binary files /dev/null and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/02 - workout detail.png new file mode 100644 index 00000000..502b5eae Binary files /dev/null and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/03 - gym mode.png index d65d2acf..fe146f8f 100644 Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/04 - measurements.png new file mode 100644 index 00000000..0652ffda Binary files /dev/null and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/04 - nutritional plan.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/04 - nutritional plan.png deleted file mode 100644 index 48ba1fb1..00000000 Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/04 - nutritional plan.png and /dev/null differ diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/05 - nutritional plan.png new file mode 100644 index 00000000..8b2e08a0 Binary files /dev/null and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/05 - weight.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/05 - weight.png deleted file mode 100644 index 3f0dba60..00000000 Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/05 - weight.png and /dev/null differ diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/06 - weight.png new file mode 100644 index 00000000..9a2a569e Binary files /dev/null and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/01 - dashboard.png new file mode 100644 index 00000000..6bc759d1 Binary files /dev/null and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/02 - workout detail.png new file mode 100644 index 00000000..acee5627 Binary files /dev/null and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/03 - gym mode.png index 4d67a221..f0ff41c8 100644 Binary files a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/04 - measurements.png new file mode 100644 index 00000000..6b6a251e Binary files /dev/null and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/04 - nutritional plan.png b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/04 - nutritional plan.png deleted file mode 100644 index bf8e14b2..00000000 Binary files a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/04 - nutritional plan.png and /dev/null differ diff --git a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/05 - nutritional plan.png new file mode 100644 index 00000000..354888b7 Binary files /dev/null and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/05 - weight.png b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/05 - weight.png deleted file mode 100644 index 085ed780..00000000 Binary files a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/05 - weight.png and /dev/null differ diff --git a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/06 - weight.png new file mode 100644 index 00000000..2637e2be Binary files /dev/null and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/01 - dashboard.png new file mode 100644 index 00000000..ded1a193 Binary files /dev/null and b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/02 - workout detail.png new file mode 100644 index 00000000..b0a07ed4 Binary files /dev/null and b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/03 - gym mode.png index c5a5c9dc..5519899a 100644 Binary files a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/04 - measurements.png new file mode 100644 index 00000000..ac6ad9b9 Binary files /dev/null and b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/04 - nutritional plan.png b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/04 - nutritional plan.png deleted file mode 100644 index 3f38e08a..00000000 Binary files a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/04 - nutritional plan.png and /dev/null differ diff --git a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/05 - nutritional plan.png new file mode 100644 index 00000000..d6ee6274 Binary files /dev/null and b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/05 - weight.png b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/05 - weight.png deleted file mode 100644 index 13418912..00000000 Binary files a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/05 - weight.png and /dev/null differ diff --git a/fastlane/metadata/android/tr-TR/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/06 - weight.png new file mode 100644 index 00000000..7909e9be Binary files /dev/null and b/fastlane/metadata/android/tr-TR/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/uk/images/phoneScreenshots/01 - dashboard.png new file mode 100644 index 00000000..cf4f93b9 Binary files /dev/null and b/fastlane/metadata/android/uk/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/uk/images/phoneScreenshots/02 - workout detail.png new file mode 100644 index 00000000..c72fdca6 Binary files /dev/null and b/fastlane/metadata/android/uk/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/uk/images/phoneScreenshots/03 - gym mode.png index c10ff6c7..013a7e11 100644 Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/uk/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/uk/images/phoneScreenshots/04 - measurements.png new file mode 100644 index 00000000..53f59ec6 Binary files /dev/null and b/fastlane/metadata/android/uk/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/04 - nutritional plan.png b/fastlane/metadata/android/uk/images/phoneScreenshots/04 - nutritional plan.png deleted file mode 100644 index 0f380080..00000000 Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/04 - nutritional plan.png and /dev/null differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/uk/images/phoneScreenshots/05 - nutritional plan.png new file mode 100644 index 00000000..ee52a888 Binary files /dev/null and b/fastlane/metadata/android/uk/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/05 - weight.png b/fastlane/metadata/android/uk/images/phoneScreenshots/05 - weight.png deleted file mode 100644 index e5c14e5f..00000000 Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/05 - weight.png and /dev/null differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/uk/images/phoneScreenshots/06 - weight.png new file mode 100644 index 00000000..e4e65b93 Binary files /dev/null and b/fastlane/metadata/android/uk/images/phoneScreenshots/06 - weight.png differ diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/01 - dashboard.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/01 - dashboard.png new file mode 100644 index 00000000..a5b9e1f3 Binary files /dev/null and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/01 - dashboard.png differ diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/02 - workout detail.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/02 - workout detail.png new file mode 100644 index 00000000..f741a2a1 Binary files /dev/null and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/02 - workout detail.png differ diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/03 - gym mode.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/03 - gym mode.png index 6be13823..2f7c43ba 100644 Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/03 - gym mode.png and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/03 - gym mode.png differ diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/04 - measurements.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/04 - measurements.png new file mode 100644 index 00000000..d7845bf5 Binary files /dev/null and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/04 - measurements.png differ diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/04 - nutritional plan.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/04 - nutritional plan.png deleted file mode 100644 index 34f8a419..00000000 Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/04 - nutritional plan.png and /dev/null differ diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/05 - nutritional plan.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/05 - nutritional plan.png new file mode 100644 index 00000000..663fbbff Binary files /dev/null and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/05 - nutritional plan.png differ diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/05 - weight.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/05 - weight.png deleted file mode 100644 index 614cf50f..00000000 Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/05 - weight.png and /dev/null differ diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/06 - weight.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/06 - weight.png new file mode 100644 index 00000000..3812a2f8 Binary files /dev/null and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/06 - weight.png differ diff --git a/integration_test/1_dashboard.dart b/integration_test/1_dashboard.dart new file mode 100644 index 00000000..314ad305 --- /dev/null +++ b/integration_test/1_dashboard.dart @@ -0,0 +1,72 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:provider/provider.dart'; +import 'package:wger/providers/body_weight.dart'; +import 'package:wger/providers/measurement.dart'; +import 'package:wger/providers/nutrition.dart'; +import 'package:wger/providers/workout_plans.dart'; +import 'package:wger/screens/dashboard.dart'; +import 'package:wger/theme/theme.dart'; + +import '../test/measurements/measurement_categories_screen_test.mocks.dart'; +import '../test/nutrition/nutritional_plan_form_test.mocks.dart'; +import '../test/workout/weight_unit_form_widget_test.mocks.dart'; +import '../test/workout/workout_form_test.mocks.dart'; +import '../test_data/body_weight.dart'; +import '../test_data/measurements.dart'; +import '../test_data/nutritional_plans.dart'; +import '../test_data/workouts.dart'; + +Widget createDashboardScreen({locale = 'en'}) { + final mockWorkoutProvider = MockWorkoutPlansProvider(); + when(mockWorkoutProvider.activePlan).thenReturn(getWorkout()); + + final Map logs = { + 'results': [ + { + 'id': 1, + 'workout': 1, + 'date': '2022-12-01', + 'impression': '3', + 'time_start': '17:00', + 'time_end': '19:00' + } + ] + }; + when(mockWorkoutProvider.fetchSessionData()).thenAnswer((a) => Future.value(logs)); + + final mockNutritionProvider = MockNutritionPlansProvider(); + when(mockNutritionProvider.currentPlan).thenAnswer((realInvocation) => getNutritionalPlan()); + when(mockNutritionProvider.items).thenReturn([getNutritionalPlan()]); + + final mockWeightProvider = MockBodyWeightProvider(); + when(mockWeightProvider.items).thenReturn(getWeightEntries()); + + final mockMeasurementProvider = MockMeasurementProvider(); + when(mockMeasurementProvider.categories).thenReturn(getMeasurementCategories()); + + return MultiProvider( + providers: [ + ChangeNotifierProvider( + create: (context) => mockWorkoutProvider, + ), + ChangeNotifierProvider( + create: (context) => mockNutritionProvider, + ), + ChangeNotifierProvider( + create: (context) => mockWeightProvider, + ), + ChangeNotifierProvider( + create: (context) => mockMeasurementProvider, + ), + ], + child: MaterialApp( + locale: Locale(locale), + localizationsDelegates: AppLocalizations.localizationsDelegates, + supportedLocales: AppLocalizations.supportedLocales, + theme: wgerTheme, + home: DashboardScreen(), + ), + ); +} diff --git a/integration_test/2_workout.dart b/integration_test/2_workout.dart new file mode 100644 index 00000000..753c2578 --- /dev/null +++ b/integration_test/2_workout.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:provider/provider.dart'; +import 'package:wger/providers/workout_plans.dart'; +import 'package:wger/screens/workout_plan_screen.dart'; +import 'package:wger/theme/theme.dart'; + +import '../test/workout/workout_form_test.mocks.dart'; +import '../test_data/workouts.dart'; + +Widget createWorkoutDetailScreen({locale = 'en'}) { + final key = GlobalKey(); + + final mockWorkoutProvider = MockWorkoutPlansProvider(); + final workout = getWorkout(); + when(mockWorkoutProvider.activePlan).thenReturn(workout); + when(mockWorkoutProvider.fetchAndSetWorkoutPlanFull(1)).thenAnswer((_) => Future.value(workout)); + + return MultiProvider( + providers: [ + ChangeNotifierProvider( + create: (context) => mockWorkoutProvider, + ), + ], + child: MaterialApp( + locale: Locale(locale), + localizationsDelegates: AppLocalizations.localizationsDelegates, + supportedLocales: AppLocalizations.supportedLocales, + theme: wgerTheme, + navigatorKey: key, + home: TextButton( + onPressed: () => key.currentState!.push( + MaterialPageRoute( + settings: RouteSettings(arguments: getWorkout()), + builder: (_) => WorkoutPlanScreen(), + ), + ), + child: const SizedBox(), + ), + ), + ); +} diff --git a/integration_test/3_gym_mode.dart b/integration_test/3_gym_mode.dart new file mode 100644 index 00000000..cc85b890 --- /dev/null +++ b/integration_test/3_gym_mode.dart @@ -0,0 +1,60 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:provider/provider.dart'; +import 'package:wger/providers/exercises.dart'; +import 'package:wger/providers/workout_plans.dart'; +import 'package:wger/screens/gym_mode.dart'; +import 'package:wger/screens/workout_plan_screen.dart'; +import 'package:wger/theme/theme.dart'; + +import '../test/other/base_provider_test.mocks.dart'; +import '../test/utils.dart'; +import '../test/workout/gym_mode_screen_test.mocks.dart'; +import '../test_data/exercises.dart'; +import '../test_data/workouts.dart'; + +Widget createGymModeScreen({locale = 'en'}) { + final key = GlobalKey(); + final client = MockClient(); + final bases = getTestExerciseBases(); + final workout = getWorkout(); + + final mockExerciseProvider = MockExercisesProvider(); + + when(mockExerciseProvider.findExerciseBaseById(1)).thenReturn(bases[0]); // bench press + when(mockExerciseProvider.findExerciseBaseById(6)).thenReturn(bases[5]); // side raises + //when(mockExerciseProvider.findExerciseBaseById(2)).thenReturn(bases[1]); // crunches + //when(mockExerciseProvider.findExerciseBaseById(3)).thenReturn(bases[2]); // dead lift + + return ChangeNotifierProvider( + create: (context) => WorkoutPlansProvider( + testAuthProvider, + mockExerciseProvider, + [workout], + client, + ), + child: ChangeNotifierProvider( + create: (context) => mockExerciseProvider, + child: MaterialApp( + locale: Locale(locale), + localizationsDelegates: AppLocalizations.localizationsDelegates, + supportedLocales: AppLocalizations.supportedLocales, + navigatorKey: key, + theme: wgerTheme, + home: TextButton( + onPressed: () => key.currentState!.push( + MaterialPageRoute( + settings: RouteSettings(arguments: workout.days.first), + builder: (_) => GymModeScreen(), + ), + ), + child: const SizedBox(), + ), + routes: { + WorkoutPlanScreen.routeName: (ctx) => WorkoutPlanScreen(), + }, + ), + ), + ); +} diff --git a/integration_test/4_measurements.dart b/integration_test/4_measurements.dart new file mode 100644 index 00000000..2df66d20 --- /dev/null +++ b/integration_test/4_measurements.dart @@ -0,0 +1,30 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:provider/provider.dart'; +import 'package:wger/providers/measurement.dart'; +import 'package:wger/screens/measurement_categories_screen.dart'; +import 'package:wger/theme/theme.dart'; + +import '../test/measurements/measurement_categories_screen_test.mocks.dart'; +import '../test_data/measurements.dart'; + +Widget createMeasurementScreen({locale = 'en'}) { + final mockMeasurementProvider = MockMeasurementProvider(); + when(mockMeasurementProvider.categories).thenReturn(getMeasurementCategories()); + + return MultiProvider( + providers: [ + ChangeNotifierProvider( + create: (context) => mockMeasurementProvider, + ), + ], + child: MaterialApp( + locale: Locale(locale), + localizationsDelegates: AppLocalizations.localizationsDelegates, + supportedLocales: AppLocalizations.supportedLocales, + theme: wgerTheme, + home: MeasurementCategoriesScreen(), + ), + ); +} diff --git a/integration_test/nutritional_plan.dart b/integration_test/5_nutritional_plan.dart similarity index 100% rename from integration_test/nutritional_plan.dart rename to integration_test/5_nutritional_plan.dart diff --git a/integration_test/weight.dart b/integration_test/6_weight.dart similarity index 100% rename from integration_test/weight.dart rename to integration_test/6_weight.dart diff --git a/integration_test/app_test.dart b/integration_test/app_test.dart index 5b7ecc96..feeeeea9 100644 --- a/integration_test/app_test.dart +++ b/integration_test/app_test.dart @@ -4,9 +4,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; -import 'gym_mode.dart'; -import 'nutritional_plan.dart'; -import 'weight.dart'; +import '1_dashboard.dart'; +import '2_workout.dart'; +import '3_gym_mode.dart'; +import '4_measurements.dart'; +import '5_nutritional_plan.dart'; +import '6_weight.dart'; Future takeScreenshot(tester, binding, String language, String name) async { if (Platform.isAndroid) { @@ -17,23 +20,35 @@ Future takeScreenshot(tester, binding, String language, String name) async .takeScreenshot('fastlane/metadata/android/$language/images/phoneScreenshots/$name.png'); } -// Available languages in weblate for the android metadata +// Available languages in weblate for the android metadata (not necessarily +// those for which the application is translated) const languages = [ + //'de-DE', + + // Note: it seems if too many languages are processed at once, some processes + // disappear and no images are written. Doing this in smaller steps works fine + + /* 'ca', 'de-DE', 'en-US', 'es-ES', 'fr-FR', + */ + /* 'hi-IN', 'hr', 'it-IT', 'pt-BR', 'nb-NO', + */ + /* 'pl-PL', 'ru-RU', 'tr-TR', 'uk', 'zh-CN' + */ ]; void main() { @@ -43,6 +58,18 @@ void main() { for (final language in languages) { final languageCode = language.split('-')[0]; + testWidgets('dashboard screen - $language', (WidgetTester tester) async { + await tester.pumpWidget(createDashboardScreen(locale: languageCode)); + await takeScreenshot(tester, binding, language, '01 - dashboard'); + }); + + testWidgets('workout detail screen - $language', (WidgetTester tester) async { + await tester.pumpWidget(createWorkoutDetailScreen(locale: languageCode)); + await tester.tap(find.byType(TextButton)); + await tester.pumpAndSettle(); + await takeScreenshot(tester, binding, language, '02 - workout detail'); + }); + testWidgets('gym mode screen - $language', (WidgetTester tester) async { await tester.pumpWidget(createGymModeScreen(locale: languageCode)); await tester.tap(find.byType(TextButton)); @@ -50,17 +77,22 @@ void main() { await takeScreenshot(tester, binding, language, '03 - gym mode'); }); + testWidgets('measurement screen - $language', (WidgetTester tester) async { + await tester.pumpWidget(createMeasurementScreen(locale: languageCode)); + await takeScreenshot(tester, binding, language, '04 - measurements'); + }); + testWidgets('nutritional plan detail - $language', (WidgetTester tester) async { await tester.pumpWidget(createNutritionalPlanScreen(locale: languageCode)); await tester.tap(find.byType(TextButton)); await tester.pumpAndSettle(); - await takeScreenshot(tester, binding, language, '04 - nutritional plan'); + await takeScreenshot(tester, binding, language, '05 - nutritional plan'); }); testWidgets('body weight screen - $language', (WidgetTester tester) async { await tester.pumpWidget(createWeightScreen(locale: languageCode)); await tester.pumpAndSettle(); - await takeScreenshot(tester, binding, language, '05 - weight'); + await takeScreenshot(tester, binding, language, '06 - weight'); }); } }); diff --git a/integration_test/gym_mode.dart b/integration_test/gym_mode.dart deleted file mode 100644 index 192deb95..00000000 --- a/integration_test/gym_mode.dart +++ /dev/null @@ -1,246 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:mockito/mockito.dart'; -import 'package:provider/provider.dart'; -import 'package:wger/models/exercises/exercise.dart'; -import 'package:wger/models/workouts/day.dart'; -import 'package:wger/models/workouts/set.dart'; -import 'package:wger/models/workouts/setting.dart'; -import 'package:wger/models/workouts/workout_plan.dart'; -import 'package:wger/providers/exercises.dart'; -import 'package:wger/providers/workout_plans.dart'; -import 'package:wger/screens/gym_mode.dart'; -import 'package:wger/screens/workout_plan_screen.dart'; -import 'package:wger/theme/theme.dart'; - -import '../test/other/base_provider_test.mocks.dart'; -import '../test/utils.dart'; -import '../test/workout/gym_mode_screen_test.mocks.dart'; -import '../test_data/exercises.dart'; -import '../test_data/workouts.dart'; - -Widget createGymModeScreen({locale = 'en'}) { - final key = GlobalKey(); - final client = MockClient(); - final bases = getTestExerciseBases(); - - final squats = bases[0]; - final squatsEn = Exercise( - id: 1, - uuid: 'uuid', - creationDate: DateTime(2021, 1, 15), - name: 'Squats', - description: 'add clever text', - baseId: tBase1.id, - language: tLanguage1, - ); - squats.exercises = [squatsEn]; - - final benchPress = bases[1]; - final benchPressEn = Exercise( - id: 1, - uuid: 'uuid', - creationDate: DateTime(2021, 1, 15), - name: 'Bench press', - description: 'add clever text', - baseId: tBase1.id, - language: tLanguage1, - ); - benchPress.exercises = [benchPressEn]; - - final deadLift = bases[2]; - final deadLiftEn = Exercise( - id: 1, - uuid: 'uuid', - creationDate: DateTime(2021, 1, 15), - name: 'Dead Lift', - description: 'add clever text', - baseId: tBase1.id, - language: tLanguage1, - ); - deadLift.exercises = [deadLiftEn]; - - final crunches = bases[3]; - final crunchesEn = Exercise( - id: 1, - uuid: 'uuid', - creationDate: DateTime(2021, 1, 15), - name: 'Crunches', - description: 'add clever text', - baseId: tBase1.id, - language: tLanguage1, - ); - crunches.exercises = [crunchesEn]; - - final mockExerciseProvider = MockExercisesProvider(); - when(mockExerciseProvider.findExerciseBaseById(1)).thenReturn(squats); - when(mockExerciseProvider.findExerciseBaseById(2)).thenReturn(benchPress); - when(mockExerciseProvider.findExerciseBaseById(3)).thenReturn(crunches); - - final setting1 = Setting( - setId: 1, - order: 1, - exerciseBaseId: 1, - repetitionUnitId: 1, - reps: 5, - weightUnitId: 1, - comment: 'ddd', - rir: '2', - ); - setting1.repetitionUnit = repetitionUnit1; - setting1.weightUnit = weightUnit1; - setting1.exerciseBase = squats; - setting1.weight = 100; - - final setting2 = Setting( - setId: 1, - order: 1, - exerciseBaseId: 2, - repetitionUnitId: 1, - reps: 6, - weightUnitId: 1, - comment: 'ddd', - rir: '1.5', - ); - setting2.repetitionUnit = repetitionUnit1; - setting2.weightUnit = weightUnit1; - setting2.exerciseBase = benchPress; - setting2.weight = 80; - - final setting2b = Setting( - setId: 1, - order: 1, - exerciseBaseId: 2, - repetitionUnitId: 1, - reps: 8, - weightUnitId: 1, - comment: 'ddd', - rir: '2', - ); - setting2b.repetitionUnit = repetitionUnit1; - setting2b.weightUnit = weightUnit1; - setting2b.exerciseBase = benchPress; - setting2b.weight = 60; - - final setting3 = Setting( - setId: 1, - order: 1, - exerciseBaseId: 2, - repetitionUnitId: 1, - reps: 20, - weightUnitId: 1, - comment: '', - rir: null, - ); - setting3.repetitionUnit = repetitionUnit1; - setting3.weightUnit = weightUnit1; - setting3.exerciseBase = crunches; - - final setting4 = Setting( - setId: 1, - order: 1, - exerciseBaseId: 2, - repetitionUnitId: 1, - reps: 8, - weightUnitId: 1, - comment: '', - rir: null, - ); - setting4.repetitionUnit = repetitionUnit1; - setting4.weightUnit = weightUnit1; - setting4.exerciseBase = deadLift; - setting4.weight = 120; - - final set1 = Set.withData( - id: 1, - day: 1, - sets: 3, - order: 1, - ); - set1.addExerciseBase(squats); - set1.settings.add(setting1); - set1.settings.add(setting1); - set1.settings.add(setting1); - set1.settings.add(setting1); - - final set2 = Set.withData( - id: 2, - day: 1, - sets: 3, - order: 1, - ); - set2.addExerciseBase(benchPress); - set2.settings.add(setting2); - set2.settings.add(setting2); - set2.settings.add(setting2b); - set2.settings.add(setting2b); - - final set3 = Set.withData( - id: 3, - day: 1, - sets: 3, - order: 1, - ); - set3.addExerciseBase(crunches); - set3.settings.add(setting3); - - final set4 = Set.withData( - id: 4, - day: 1, - sets: 3, - order: 1, - ); - set4.addExerciseBase(deadLift); - set4.settings.add(setting4); - set4.settings.add(setting4); - set4.settings.add(setting4); - set4.settings.add(setting4); - - final day1 = Day() - ..id = 1 - ..workoutId = 1 - ..description = 'test day 1' - ..daysOfWeek = [1, 2]; - day1.sets.add(set1); - day1.sets.add(set2); - day1.sets.add(set4); - day1.sets.add(set3); - - final workout = WorkoutPlan( - id: 1, - creationDate: DateTime(2021, 01, 01), - name: 'test workout 1', - days: [day1], - ); - - return ChangeNotifierProvider( - create: (context) => WorkoutPlansProvider( - testAuthProvider, - mockExerciseProvider, - [workout], - client, - ), - child: ChangeNotifierProvider( - create: (context) => mockExerciseProvider, - child: MaterialApp( - locale: Locale(locale), - localizationsDelegates: AppLocalizations.localizationsDelegates, - supportedLocales: AppLocalizations.supportedLocales, - navigatorKey: key, - theme: wgerTheme, - home: TextButton( - onPressed: () => key.currentState!.push( - MaterialPageRoute( - settings: RouteSettings(arguments: workout.days.first), - builder: (_) => GymModeScreen(), - ), - ), - child: const SizedBox(), - ), - routes: { - WorkoutPlanScreen.routeName: (ctx) => WorkoutPlanScreen(), - }, - ), - ), - ); -} diff --git a/lib/models/body_weight/weight_entry.g.dart b/lib/models/body_weight/weight_entry.g.dart index d1152d20..60ee02c9 100644 --- a/lib/models/body_weight/weight_entry.g.dart +++ b/lib/models/body_weight/weight_entry.g.dart @@ -18,7 +18,8 @@ WeightEntry _$WeightEntryFromJson(Map json) { ); } -Map _$WeightEntryToJson(WeightEntry instance) => { +Map _$WeightEntryToJson(WeightEntry instance) => + { 'id': instance.id, 'weight': numToString(instance.weight), 'date': toDate(instance.date), diff --git a/lib/models/exercises/base.g.dart b/lib/models/exercises/base.g.dart index 42f5bd9d..9e670e33 100644 --- a/lib/models/exercises/base.g.dart +++ b/lib/models/exercises/base.g.dart @@ -24,19 +24,26 @@ ExerciseBase _$ExerciseBaseFromJson(Map json) { return ExerciseBase( id: json['id'] as int?, uuid: json['uuid'] as String?, - creationDate: - json['creation_date'] == null ? null : DateTime.parse(json['creation_date'] as String), - updateDate: json['update_date'] == null ? null : DateTime.parse(json['update_date'] as String), + creationDate: json['creation_date'] == null + ? null + : DateTime.parse(json['creation_date'] as String), + updateDate: json['update_date'] == null + ? null + : DateTime.parse(json['update_date'] as String), variationId: json['variations'] as int?, ) ..categoryId = json['category'] as int - ..musclesIds = (json['muscles'] as List).map((e) => e as int).toList() - ..musclesSecondaryIds = - (json['muscles_secondary'] as List).map((e) => e as int).toList() - ..equipmentIds = (json['equipment'] as List).map((e) => e as int).toList(); + ..musclesIds = + (json['muscles'] as List).map((e) => e as int).toList() + ..musclesSecondaryIds = (json['muscles_secondary'] as List) + .map((e) => e as int) + .toList() + ..equipmentIds = + (json['equipment'] as List).map((e) => e as int).toList(); } -Map _$ExerciseBaseToJson(ExerciseBase instance) => { +Map _$ExerciseBaseToJson(ExerciseBase instance) => + { 'id': instance.id, 'uuid': instance.uuid, 'variations': instance.variationId, diff --git a/lib/models/exercises/category.g.dart b/lib/models/exercises/category.g.dart index 915120d1..19383107 100644 --- a/lib/models/exercises/category.g.dart +++ b/lib/models/exercises/category.g.dart @@ -17,7 +17,8 @@ ExerciseCategory _$ExerciseCategoryFromJson(Map json) { ); } -Map _$ExerciseCategoryToJson(ExerciseCategory instance) => { +Map _$ExerciseCategoryToJson(ExerciseCategory instance) => + { 'id': instance.id, 'name': instance.name, }; diff --git a/lib/models/exercises/exercise.g.dart b/lib/models/exercises/exercise.g.dart index c8d04954..1431c5a6 100644 --- a/lib/models/exercises/exercise.g.dart +++ b/lib/models/exercises/exercise.g.dart @@ -22,8 +22,9 @@ Exercise _$ExerciseFromJson(Map json) { return Exercise( id: json['id'] as int?, uuid: json['uuid'] as String?, - creationDate: - json['creation_date'] == null ? null : DateTime.parse(json['creation_date'] as String), + creationDate: json['creation_date'] == null + ? null + : DateTime.parse(json['creation_date'] as String), name: json['name'] as String, description: json['description'] as String, baseId: json['exercise_base'] as int?, diff --git a/lib/models/exercises/image.g.dart b/lib/models/exercises/image.g.dart index 6ef7c62e..1240dc38 100644 --- a/lib/models/exercises/image.g.dart +++ b/lib/models/exercises/image.g.dart @@ -20,7 +20,8 @@ ExerciseImage _$ExerciseImageFromJson(Map json) { ); } -Map _$ExerciseImageToJson(ExerciseImage instance) => { +Map _$ExerciseImageToJson(ExerciseImage instance) => + { 'id': instance.id, 'uuid': instance.uuid, 'exercise_base': instance.exerciseBaseId, diff --git a/lib/models/measurements/measurement_category.g.dart b/lib/models/measurements/measurement_category.g.dart index eb887b2e..ef4ebcd3 100644 --- a/lib/models/measurements/measurement_category.g.dart +++ b/lib/models/measurements/measurement_category.g.dart @@ -22,7 +22,9 @@ MeasurementCategory _$MeasurementCategoryFromJson(Map json) { ); } -Map _$MeasurementCategoryToJson(MeasurementCategory instance) => { +Map _$MeasurementCategoryToJson( + MeasurementCategory instance) => + { 'id': instance.id, 'name': instance.name, 'unit': instance.unit, diff --git a/lib/models/measurements/measurement_entry.g.dart b/lib/models/measurements/measurement_entry.g.dart index 7f6e346a..4b096960 100644 --- a/lib/models/measurements/measurement_entry.g.dart +++ b/lib/models/measurements/measurement_entry.g.dart @@ -20,7 +20,8 @@ MeasurementEntry _$MeasurementEntryFromJson(Map json) { ); } -Map _$MeasurementEntryToJson(MeasurementEntry instance) => { +Map _$MeasurementEntryToJson(MeasurementEntry instance) => + { 'id': instance.id, 'category': instance.category, 'date': toDate(instance.date), diff --git a/lib/models/nutrition/ingredient.g.dart b/lib/models/nutrition/ingredient.g.dart index 28dfe637..eaace92b 100644 --- a/lib/models/nutrition/ingredient.g.dart +++ b/lib/models/nutrition/ingredient.g.dart @@ -40,7 +40,8 @@ Ingredient _$IngredientFromJson(Map json) { ); } -Map _$IngredientToJson(Ingredient instance) => { +Map _$IngredientToJson(Ingredient instance) => + { 'id': instance.id, 'code': instance.code, 'name': instance.name, diff --git a/lib/models/nutrition/ingredient_weight_unit.g.dart b/lib/models/nutrition/ingredient_weight_unit.g.dart index f147a2ee..74b1f101 100644 --- a/lib/models/nutrition/ingredient_weight_unit.g.dart +++ b/lib/models/nutrition/ingredient_weight_unit.g.dart @@ -13,14 +13,16 @@ IngredientWeightUnit _$IngredientWeightUnitFromJson(Map json) { ); return IngredientWeightUnit( id: json['id'] as int, - weightUnit: WeightUnit.fromJson(json['weight_unit'] as Map), + weightUnit: + WeightUnit.fromJson(json['weight_unit'] as Map), ingredient: Ingredient.fromJson(json['ingredient'] as Map), grams: json['grams'] as int, amount: (json['amount'] as num).toDouble(), ); } -Map _$IngredientWeightUnitToJson(IngredientWeightUnit instance) => +Map _$IngredientWeightUnitToJson( + IngredientWeightUnit instance) => { 'id': instance.id, 'weight_unit': instance.weightUnit, diff --git a/lib/models/nutrition/log.g.dart b/lib/models/nutrition/log.g.dart index 61690155..39068768 100644 --- a/lib/models/nutrition/log.g.dart +++ b/lib/models/nutrition/log.g.dart @@ -9,7 +9,14 @@ part of 'log.dart'; Log _$LogFromJson(Map json) { $checkKeys( json, - requiredKeys: const ['id', 'plan', 'datetime', 'ingredient', 'weight_unit', 'amount'], + requiredKeys: const [ + 'id', + 'plan', + 'datetime', + 'ingredient', + 'weight_unit', + 'amount' + ], ); return Log( id: json['id'] as int?, diff --git a/lib/models/nutrition/nutritional_plan.g.dart b/lib/models/nutrition/nutritional_plan.g.dart index 661a9f47..9b10d8a5 100644 --- a/lib/models/nutrition/nutritional_plan.g.dart +++ b/lib/models/nutrition/nutritional_plan.g.dart @@ -18,7 +18,8 @@ NutritionalPlan _$NutritionalPlanFromJson(Map json) { ); } -Map _$NutritionalPlanToJson(NutritionalPlan instance) => { +Map _$NutritionalPlanToJson(NutritionalPlan instance) => + { 'id': instance.id, 'description': instance.description, 'creation_date': toDate(instance.creationDate), diff --git a/lib/models/nutrition/weight_unit.g.dart b/lib/models/nutrition/weight_unit.g.dart index 6f2b9607..74e1f0cf 100644 --- a/lib/models/nutrition/weight_unit.g.dart +++ b/lib/models/nutrition/weight_unit.g.dart @@ -17,7 +17,8 @@ WeightUnit _$WeightUnitFromJson(Map json) { ); } -Map _$WeightUnitToJson(WeightUnit instance) => { +Map _$WeightUnitToJson(WeightUnit instance) => + { 'id': instance.id, 'name': instance.name, }; diff --git a/lib/models/workouts/repetition_unit.g.dart b/lib/models/workouts/repetition_unit.g.dart index 33e6a815..115dc338 100644 --- a/lib/models/workouts/repetition_unit.g.dart +++ b/lib/models/workouts/repetition_unit.g.dart @@ -17,7 +17,8 @@ RepetitionUnit _$RepetitionUnitFromJson(Map json) { ); } -Map _$RepetitionUnitToJson(RepetitionUnit instance) => { +Map _$RepetitionUnitToJson(RepetitionUnit instance) => + { 'id': instance.id, 'name': instance.name, }; diff --git a/lib/models/workouts/session.g.dart b/lib/models/workouts/session.g.dart index 79f4fee4..e16affad 100644 --- a/lib/models/workouts/session.g.dart +++ b/lib/models/workouts/session.g.dart @@ -9,7 +9,14 @@ part of 'session.dart'; WorkoutSession _$WorkoutSessionFromJson(Map json) { $checkKeys( json, - requiredKeys: const ['id', 'workout', 'date', 'impression', 'time_start', 'time_end'], + requiredKeys: const [ + 'id', + 'workout', + 'date', + 'impression', + 'time_start', + 'time_end' + ], ); return WorkoutSession() ..id = json['id'] as int? @@ -21,7 +28,8 @@ WorkoutSession _$WorkoutSessionFromJson(Map json) { ..timeEnd = stringToTime(json['time_end'] as String?); } -Map _$WorkoutSessionToJson(WorkoutSession instance) => { +Map _$WorkoutSessionToJson(WorkoutSession instance) => + { 'id': instance.id, 'workout': instance.workoutId, 'date': toDate(instance.date), diff --git a/lib/models/workouts/weight_unit.g.dart b/lib/models/workouts/weight_unit.g.dart index 6f2b9607..74e1f0cf 100644 --- a/lib/models/workouts/weight_unit.g.dart +++ b/lib/models/workouts/weight_unit.g.dart @@ -17,7 +17,8 @@ WeightUnit _$WeightUnitFromJson(Map json) { ); } -Map _$WeightUnitToJson(WeightUnit instance) => { +Map _$WeightUnitToJson(WeightUnit instance) => + { 'id': instance.id, 'name': instance.name, }; diff --git a/lib/models/workouts/workout_plan.g.dart b/lib/models/workouts/workout_plan.g.dart index ac1d6fa9..ef156e3e 100644 --- a/lib/models/workouts/workout_plan.g.dart +++ b/lib/models/workouts/workout_plan.g.dart @@ -19,7 +19,8 @@ WorkoutPlan _$WorkoutPlanFromJson(Map json) { ); } -Map _$WorkoutPlanToJson(WorkoutPlan instance) => { +Map _$WorkoutPlanToJson(WorkoutPlan instance) => + { 'id': instance.id, 'creation_date': instance.creationDate.toIso8601String(), 'name': instance.name, diff --git a/lib/widgets/workouts/workout_plan_detail.dart b/lib/widgets/workouts/workout_plan_detail.dart index fe9f0672..cf0fbd6e 100644 --- a/lib/widgets/workouts/workout_plan_detail.dart +++ b/lib/widgets/workouts/workout_plan_detail.dart @@ -40,10 +40,6 @@ class _WorkoutPlanDetailState extends State { children: [ if (widget._workoutPlan.days.isNotEmpty) ToggleButtons( - children: const [ - Icon(Icons.table_chart_outlined), - Icon(Icons.show_chart), - ], renderBorder: false, onPressed: (int index) { if (index == 1) { @@ -51,6 +47,10 @@ class _WorkoutPlanDetailState extends State { } }, isSelected: const [true, false], + children: const [ + Icon(Icons.table_chart_outlined), + Icon(Icons.show_chart), + ], ), if (widget._workoutPlan.description != '') Padding( diff --git a/test/exercises/exercise_provider_test.dart b/test/exercises/exercise_provider_test.dart index a7def15d..eabb9e49 100644 --- a/test/exercises/exercise_provider_test.dart +++ b/test/exercises/exercise_provider_test.dart @@ -239,8 +239,8 @@ void main() { test('A muscle is selected with no search term. Should not find results', () async { // arrange - Filters tFilters = filters.copyWith( - exerciseCategories: filters.exerciseCategories.copyWith(items: {data.tCategory4: true}), + final Filters tFilters = filters.copyWith( + exerciseCategories: filters.exerciseCategories.copyWith(items: {data.tCategory5: true}), ); // act diff --git a/test/exercises/exercises_detail_widget_test.dart b/test/exercises/exercises_detail_widget_test.dart index ca2f1ebc..f5a0f59a 100644 --- a/test/exercises/exercises_detail_widget_test.dart +++ b/test/exercises/exercises_detail_widget_test.dart @@ -53,7 +53,6 @@ void main() { expect(find.text('Bench'), findsOneWidget, reason: 'Equipment'); expect(find.text('Dumbbell'), findsOneWidget, reason: 'Equipment'); - debugDumpApp(); expect(find.text('Muscles'), findsNWidgets(2), reason: 'One header, one sub header'); expect(find.text('Flutterus maximus (NOT TRANSLATED)'), findsOneWidget, reason: 'Muscles'); expect(find.text('Biceps brachii (Biceps)'), findsOneWidget, reason: 'Muscles'); @@ -66,7 +65,7 @@ void main() { ); expect(find.text('Gluteus maximus'), findsOneWidget, reason: 'Secondary muscles'); expect(find.text('Description'), findsOneWidget, reason: 'Description header'); - expect(find.text('Lorem ipsum etc'), findsOneWidget, reason: 'Description'); + expect(find.text('add clever text'), findsOneWidget, reason: 'Description'); expect(find.text('Variations'), findsNothing); }); } diff --git a/test/exercises/model_exercisebase_test.dart b/test/exercises/model_exercisebase_test.dart index 2529ec83..ba0764c4 100644 --- a/test/exercises/model_exercisebase_test.dart +++ b/test/exercises/model_exercisebase_test.dart @@ -6,16 +6,16 @@ void main() { group('Model tests', () { test('test getExercise', () async { // arrange and act - final base = getTestExerciseBases()[0]; + final base = getTestExerciseBases()[1]; // assert - expect(base.getExercise('en').id, 2); - expect(base.getExercise('en-UK').id, 2); - expect(base.getExercise('de').id, 1); - expect(base.getExercise('de-AT').id, 1); + expect(base.getExercise('en').id, 5); + expect(base.getExercise('en-UK').id, 5); + expect(base.getExercise('de').id, 4); + expect(base.getExercise('de-AT').id, 4); expect(base.getExercise('fr').id, 3); expect(base.getExercise('fr-FR').id, 3); - expect(base.getExercise('pt').id, 2); // English again + expect(base.getExercise('pt').id, 5); // English again }); }); } diff --git a/test/gallery/gallery_screen_test.mocks.dart b/test/gallery/gallery_screen_test.mocks.dart index 409cf08f..5eb63aad 100644 --- a/test/gallery/gallery_screen_test.mocks.dart +++ b/test/gallery/gallery_screen_test.mocks.dart @@ -181,7 +181,8 @@ class MockGalleryProvider extends _i1.Mock implements _i4.GalleryProvider { returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -225,7 +226,8 @@ class MockGalleryProvider extends _i1.Mock implements _i4.GalleryProvider { #fetch, [uri], ), - returnValue: _i6.Future>.value({}), + returnValue: + _i6.Future>.value({}), ) as _i6.Future>); @override _i6.Future> post( @@ -240,7 +242,8 @@ class MockGalleryProvider extends _i1.Mock implements _i4.GalleryProvider { uri, ], ), - returnValue: _i6.Future>.value({}), + returnValue: + _i6.Future>.value({}), ) as _i6.Future>); @override _i6.Future> patch( @@ -255,7 +258,8 @@ class MockGalleryProvider extends _i1.Mock implements _i4.GalleryProvider { uri, ], ), - returnValue: _i6.Future>.value({}), + returnValue: + _i6.Future>.value({}), ) as _i6.Future>); @override _i6.Future<_i3.Response> deleteRequest( diff --git a/test/measurements/measurement_categories_screen_test.mocks.dart b/test/measurements/measurement_categories_screen_test.mocks.dart index 9eda4a2f..eab13e15 100644 --- a/test/measurements/measurement_categories_screen_test.mocks.dart +++ b/test/measurements/measurement_categories_screen_test.mocks.dart @@ -23,7 +23,8 @@ import 'package:wger/providers/measurement.dart' as _i4; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvider { +class _FakeWgerBaseProvider_0 extends _i1.SmartFake + implements _i2.WgerBaseProvider { _FakeWgerBaseProvider_0( Object parent, Invocation parentInvocation, @@ -33,7 +34,8 @@ class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvi ); } -class _FakeMeasurementCategory_1 extends _i1.SmartFake implements _i3.MeasurementCategory { +class _FakeMeasurementCategory_1 extends _i1.SmartFake + implements _i3.MeasurementCategory { _FakeMeasurementCategory_1( Object parent, Invocation parentInvocation, @@ -46,7 +48,8 @@ class _FakeMeasurementCategory_1 extends _i1.SmartFake implements _i3.Measuremen /// A class which mocks [MeasurementProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockMeasurementProvider extends _i1.Mock implements _i4.MeasurementProvider { +class MockMeasurementProvider extends _i1.Mock + implements _i4.MeasurementProvider { MockMeasurementProvider() { _i1.throwOnMissingStub(this); } @@ -119,7 +122,8 @@ class MockMeasurementProvider extends _i1.Mock implements _i4.MeasurementProvide returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); @override - _i5.Future addCategory(_i3.MeasurementCategory? category) => (super.noSuchMethod( + _i5.Future addCategory(_i3.MeasurementCategory? category) => + (super.noSuchMethod( Invocation.method( #addCategory, [category], diff --git a/test/measurements/measurement_provider_test.mocks.dart b/test/measurements/measurement_provider_test.mocks.dart index 200245dd..50fd7f8b 100644 --- a/test/measurements/measurement_provider_test.mocks.dart +++ b/test/measurements/measurement_provider_test.mocks.dart @@ -102,7 +102,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { returnValueForMissingStub: null, ); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -146,7 +147,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { #fetch, [uri], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override _i5.Future> post( @@ -161,7 +163,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override _i5.Future> patch( @@ -176,7 +179,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override _i5.Future<_i3.Response> deleteRequest( diff --git a/test/nutrition/nutritional_plan_form_test.mocks.dart b/test/nutrition/nutritional_plan_form_test.mocks.dart index 2a2a0f3d..a3a1a303 100644 --- a/test/nutrition/nutritional_plan_form_test.mocks.dart +++ b/test/nutrition/nutritional_plan_form_test.mocks.dart @@ -46,7 +46,8 @@ class _FakeClient_1 extends _i1.SmartFake implements _i3.Client { ); } -class _FakeNutritionalPlan_2 extends _i1.SmartFake implements _i4.NutritionalPlan { +class _FakeNutritionalPlan_2 extends _i1.SmartFake + implements _i4.NutritionalPlan { _FakeNutritionalPlan_2( Object parent, Invocation parentInvocation, @@ -109,7 +110,8 @@ class _FakeResponse_7 extends _i1.SmartFake implements _i3.Response { /// A class which mocks [NutritionPlansProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockNutritionPlansProvider extends _i1.Mock implements _i8.NutritionPlansProvider { +class MockNutritionPlansProvider extends _i1.Mock + implements _i8.NutritionPlansProvider { MockNutritionPlansProvider() { _i1.throwOnMissingStub(this); } @@ -202,12 +204,14 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i8.NutritionPlansP returnValueForMissingStub: _i9.Future.value(), ) as _i9.Future); @override - _i9.Future<_i4.NutritionalPlan> fetchAndSetPlanSparse(int? planId) => (super.noSuchMethod( + _i9.Future<_i4.NutritionalPlan> fetchAndSetPlanSparse(int? planId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetPlanSparse, [planId], ), - returnValue: _i9.Future<_i4.NutritionalPlan>.value(_FakeNutritionalPlan_2( + returnValue: + _i9.Future<_i4.NutritionalPlan>.value(_FakeNutritionalPlan_2( this, Invocation.method( #fetchAndSetPlanSparse, @@ -216,12 +220,14 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i8.NutritionPlansP )), ) as _i9.Future<_i4.NutritionalPlan>); @override - _i9.Future<_i4.NutritionalPlan> fetchAndSetPlanFull(int? planId) => (super.noSuchMethod( + _i9.Future<_i4.NutritionalPlan> fetchAndSetPlanFull(int? planId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetPlanFull, [planId], ), - returnValue: _i9.Future<_i4.NutritionalPlan>.value(_FakeNutritionalPlan_2( + returnValue: + _i9.Future<_i4.NutritionalPlan>.value(_FakeNutritionalPlan_2( this, Invocation.method( #fetchAndSetPlanFull, @@ -230,12 +236,14 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i8.NutritionPlansP )), ) as _i9.Future<_i4.NutritionalPlan>); @override - _i9.Future<_i4.NutritionalPlan> addPlan(_i4.NutritionalPlan? planData) => (super.noSuchMethod( + _i9.Future<_i4.NutritionalPlan> addPlan(_i4.NutritionalPlan? planData) => + (super.noSuchMethod( Invocation.method( #addPlan, [planData], ), - returnValue: _i9.Future<_i4.NutritionalPlan>.value(_FakeNutritionalPlan_2( + returnValue: + _i9.Future<_i4.NutritionalPlan>.value(_FakeNutritionalPlan_2( this, Invocation.method( #addPlan, @@ -333,7 +341,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i8.NutritionPlansP )), ) as _i9.Future<_i6.MealItem>); @override - _i9.Future deleteMealItem(_i6.MealItem? mealItem) => (super.noSuchMethod( + _i9.Future deleteMealItem(_i6.MealItem? mealItem) => + (super.noSuchMethod( Invocation.method( #deleteMealItem, [mealItem], @@ -342,7 +351,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i8.NutritionPlansP returnValueForMissingStub: _i9.Future.value(), ) as _i9.Future); @override - _i9.Future<_i7.Ingredient> fetchIngredient(int? ingredientId) => (super.noSuchMethod( + _i9.Future<_i7.Ingredient> fetchIngredient(int? ingredientId) => + (super.noSuchMethod( Invocation.method( #fetchIngredient, [ingredientId], @@ -380,7 +390,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i8.NutritionPlansP returnValue: _i9.Future>.value([]), ) as _i9.Future>); @override - _i9.Future<_i7.Ingredient?> searchIngredientWithCode(String? code) => (super.noSuchMethod( + _i9.Future<_i7.Ingredient?> searchIngredientWithCode(String? code) => + (super.noSuchMethod( Invocation.method( #searchIngredientWithCode, [code], @@ -431,7 +442,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i8.NutritionPlansP returnValueForMissingStub: _i9.Future.value(), ) as _i9.Future); @override - _i9.Future fetchAndSetLogs(_i4.NutritionalPlan? plan) => (super.noSuchMethod( + _i9.Future fetchAndSetLogs(_i4.NutritionalPlan? plan) => + (super.noSuchMethod( Invocation.method( #fetchAndSetLogs, [plan], @@ -440,7 +452,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i8.NutritionPlansP returnValueForMissingStub: _i9.Future.value(), ) as _i9.Future); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -484,7 +497,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i8.NutritionPlansP #fetch, [uri], ), - returnValue: _i9.Future>.value({}), + returnValue: + _i9.Future>.value({}), ) as _i9.Future>); @override _i9.Future> post( @@ -499,7 +513,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i8.NutritionPlansP uri, ], ), - returnValue: _i9.Future>.value({}), + returnValue: + _i9.Future>.value({}), ) as _i9.Future>); @override _i9.Future> patch( @@ -514,7 +529,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i8.NutritionPlansP uri, ], ), - returnValue: _i9.Future>.value({}), + returnValue: + _i9.Future>.value({}), ) as _i9.Future>); @override _i9.Future<_i3.Response> deleteRequest( diff --git a/test/nutrition/nutritional_plan_screen_test.dart b/test/nutrition/nutritional_plan_screen_test.dart index 796f11af..407514cd 100644 --- a/test/nutrition/nutritional_plan_screen_test.dart +++ b/test/nutrition/nutritional_plan_screen_test.dart @@ -69,7 +69,7 @@ void main() { await tester.pumpAndSettle(); // PLan description - expect(find.text('lots and lots of mass'), findsOneWidget); + expect(find.text('Less fat, more protein'), findsOneWidget); // Ingredients expect(find.text('100g Water'), findsOneWidget); diff --git a/test/other/base_provider_test.mocks.dart b/test/other/base_provider_test.mocks.dart index d5c998c8..5483f2a0 100644 --- a/test/other/base_provider_test.mocks.dart +++ b/test/other/base_provider_test.mocks.dart @@ -31,7 +31,8 @@ class _FakeResponse_0 extends _i1.SmartFake implements _i2.Response { ); } -class _FakeStreamedResponse_1 extends _i1.SmartFake implements _i2.StreamedResponse { +class _FakeStreamedResponse_1 extends _i1.SmartFake + implements _i2.StreamedResponse { _FakeStreamedResponse_1( Object parent, Invocation parentInvocation, @@ -236,12 +237,14 @@ class MockClient extends _i1.Mock implements _i2.Client { returnValue: _i3.Future<_i5.Uint8List>.value(_i5.Uint8List(0)), ) as _i3.Future<_i5.Uint8List>); @override - _i3.Future<_i2.StreamedResponse> send(_i2.BaseRequest? request) => (super.noSuchMethod( + _i3.Future<_i2.StreamedResponse> send(_i2.BaseRequest? request) => + (super.noSuchMethod( Invocation.method( #send, [request], ), - returnValue: _i3.Future<_i2.StreamedResponse>.value(_FakeStreamedResponse_1( + returnValue: + _i3.Future<_i2.StreamedResponse>.value(_FakeStreamedResponse_1( this, Invocation.method( #send, diff --git a/test/workout/gym_mode_screen_test.dart b/test/workout/gym_mode_screen_test.dart index 175c2b36..d06aa7b6 100644 --- a/test/workout/gym_mode_screen_test.dart +++ b/test/workout/gym_mode_screen_test.dart @@ -48,8 +48,7 @@ void main() { final bases = getTestExerciseBases(); when(mockExerciseProvider.findExerciseBaseById(1)).thenReturn(bases[0]); - when(mockExerciseProvider.findExerciseBaseById(2)).thenReturn(bases[1]); - when(mockExerciseProvider.findExerciseBaseById(3)).thenReturn(bases[2]); + when(mockExerciseProvider.findExerciseBaseById(6)).thenReturn(bases[5]); return ChangeNotifierProvider( create: (context) => WorkoutPlansProvider( @@ -92,7 +91,8 @@ void main() { // expect(find.byType(StartPage), findsOneWidget); expect(find.text('Your workout today'), findsOneWidget); - expect(find.text('test exercise 2'), findsOneWidget); + expect(find.text('Bench press'), findsOneWidget); + expect(find.text('Side raises'), findsOneWidget); expect(find.byIcon(Icons.close), findsOneWidget); expect(find.byIcon(Icons.menu), findsOneWidget); expect(find.byIcon(Icons.chevron_left), findsNothing); @@ -101,9 +101,9 @@ void main() { await tester.pumpAndSettle(); // - // Exercise overview page + // Bench press - exercise overview page // - expect(find.text('test exercise 2'), findsOneWidget); + expect(find.text('Bench press'), findsOneWidget); expect(find.byType(ExerciseOverview), findsOneWidget); expect(find.byIcon(Icons.close), findsOneWidget); expect(find.byIcon(Icons.menu), findsOneWidget); @@ -113,15 +113,15 @@ void main() { await tester.pumpAndSettle(); // - // Log + // Bench press - Log // - expect(find.text('test exercise 2'), findsOneWidget); + expect(find.text('Bench press'), findsOneWidget); expect(find.byType(LogPage), findsOneWidget); expect(find.byType(Form), findsOneWidget); expect(find.byType(ListTile), findsNWidgets(3), reason: 'Two logs and the switch tile'); expect(find.text('10 × 10 kg (1.5 RiR)'), findsOneWidget); expect(find.text('12 × 10 kg (2 RiR)'), findsOneWidget); - expect(find.text('Important to do exercises correctly'), findsOneWidget, reason: 'Set comment'); + expect(find.text('Make sure to warm up'), findsOneWidget, reason: 'Set comment'); expect(find.byIcon(Icons.close), findsOneWidget); expect(find.byIcon(Icons.menu), findsOneWidget); expect(find.byIcon(Icons.chevron_left), findsOneWidget); @@ -144,9 +144,9 @@ void main() { await tester.pumpAndSettle(); // - // Pause + // Bench press - pause // - expect(find.text('0:01'), findsOneWidget); + expect(find.text('Pause'), findsOneWidget); expect(find.byType(TimerWidget), findsOneWidget); expect(find.byIcon(Icons.close), findsOneWidget); expect(find.byIcon(Icons.menu), findsOneWidget); @@ -156,9 +156,9 @@ void main() { await tester.pumpAndSettle(); // - // Log + // Bench press - log // - expect(find.text('test exercise 2'), findsOneWidget); + expect(find.text('Bench press'), findsOneWidget); expect(find.byType(LogPage), findsOneWidget); expect(find.byType(Form), findsOneWidget); await tester.drag(find.byType(LogPage), const Offset(-500.0, 0.0)); @@ -167,7 +167,7 @@ void main() { // // Pause // - expect(find.text('0:01'), findsOneWidget); + expect(find.text('Pause'), findsOneWidget); expect(find.byType(TimerWidget), findsOneWidget); expect(find.byIcon(Icons.chevron_left), findsOneWidget); expect(find.byIcon(Icons.close), findsOneWidget); @@ -175,6 +175,42 @@ void main() { await tester.tap(find.byIcon(Icons.chevron_right)); await tester.pumpAndSettle(); + // + // Side raises - exercise overview page + // + expect(find.text('Side raises'), findsOneWidget); + expect(find.byType(ExerciseOverview), findsOneWidget); + await tester.tap(find.byIcon(Icons.chevron_right)); + await tester.pumpAndSettle(); + + // + // Side raises - log + // + expect(find.byType(LogPage), findsOneWidget); + await tester.tap(find.byIcon(Icons.chevron_right)); + await tester.pumpAndSettle(); + + // + // Side raises - timer + // + expect(find.byType(TimerWidget), findsOneWidget); + await tester.tap(find.byIcon(Icons.chevron_right)); + await tester.pumpAndSettle(); + + // + // Side raises - log + // + expect(find.byType(LogPage), findsOneWidget); + await tester.tap(find.byIcon(Icons.chevron_right)); + await tester.pumpAndSettle(); + + // + // Side raises - timer + // + expect(find.byType(TimerWidget), findsOneWidget); + await tester.tap(find.byIcon(Icons.chevron_right)); + await tester.pumpAndSettle(); + // // Session // diff --git a/test/workout/gym_mode_screen_test.mocks.dart b/test/workout/gym_mode_screen_test.mocks.dart index 63fb4e2f..362ca2e8 100644 --- a/test/workout/gym_mode_screen_test.mocks.dart +++ b/test/workout/gym_mode_screen_test.mocks.dart @@ -26,7 +26,8 @@ import 'package:wger/providers/exercises.dart' as _i8; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvider { +class _FakeWgerBaseProvider_0 extends _i1.SmartFake + implements _i2.WgerBaseProvider { _FakeWgerBaseProvider_0( Object parent, Invocation parentInvocation, @@ -46,7 +47,8 @@ class _FakeExerciseBase_1 extends _i1.SmartFake implements _i3.ExerciseBase { ); } -class _FakeExerciseCategory_2 extends _i1.SmartFake implements _i4.ExerciseCategory { +class _FakeExerciseCategory_2 extends _i1.SmartFake + implements _i4.ExerciseCategory { _FakeExerciseCategory_2( Object parent, Invocation parentInvocation, @@ -103,7 +105,8 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider { ), ) as _i2.WgerBaseProvider); @override - set exerciseBases(List<_i3.ExerciseBase>? exercisesBases) => super.noSuchMethod( + set exerciseBases(List<_i3.ExerciseBase>? exercisesBases) => + super.noSuchMethod( Invocation.setter( #exerciseBases, exercisesBases, @@ -116,7 +119,8 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider { returnValue: <_i3.ExerciseBase>[], ) as List<_i3.ExerciseBase>); @override - set filteredExerciseBases(List<_i3.ExerciseBase>? newFilteredExercises) => super.noSuchMethod( + set filteredExerciseBases(List<_i3.ExerciseBase>? newFilteredExercises) => + super.noSuchMethod( Invocation.setter( #filteredExerciseBases, newFilteredExercises, @@ -124,7 +128,8 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider { returnValueForMissingStub: null, ); @override - Map> get exerciseBasesByVariation => (super.noSuchMethod( + Map> get exerciseBasesByVariation => + (super.noSuchMethod( Invocation.getter(#exerciseBasesByVariation), returnValue: >{}, ) as Map>); @@ -321,7 +326,8 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider { returnValueForMissingStub: _i9.Future.value(), ) as _i9.Future); @override - _i9.Future<_i3.ExerciseBase> fetchAndSetExerciseBase(int? exerciseBaseId) => (super.noSuchMethod( + _i9.Future<_i3.ExerciseBase> fetchAndSetExerciseBase(int? exerciseBaseId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetExerciseBase, [exerciseBaseId], @@ -335,7 +341,8 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider { )), ) as _i9.Future<_i3.ExerciseBase>); @override - _i3.ExerciseBase readExerciseBaseFromBaseInfo(dynamic baseData) => (super.noSuchMethod( + _i3.ExerciseBase readExerciseBaseFromBaseInfo(dynamic baseData) => + (super.noSuchMethod( Invocation.method( #readExerciseBaseFromBaseInfo, [baseData], @@ -379,7 +386,8 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider { languageCode, ], ), - returnValue: _i9.Future>.value(<_i3.ExerciseBase>[]), + returnValue: + _i9.Future>.value(<_i3.ExerciseBase>[]), ) as _i9.Future>); @override void addListener(_i10.VoidCallback? listener) => super.noSuchMethod( diff --git a/test/workout/set_model_test.dart b/test/workout/set_model_test.dart index 9a7234a5..dfd4b0e8 100644 --- a/test/workout/set_model_test.dart +++ b/test/workout/set_model_test.dart @@ -27,7 +27,7 @@ void main() { final set = workout.days.first.sets.first; final exercise1 = set.exerciseBasesObj[0]; - expect(set.getSmartTextRepr(exercise1), '2 × 10 kg (2 RiR)'); + expect(set.getSmartTextRepr(exercise1), '6 × 80 kg (3 RiR)'); }); }); } diff --git a/test/workout/weight_unit_form_widget_test.dart b/test/workout/weight_unit_form_widget_test.dart index d956bbc1..8fbe987a 100644 --- a/test/workout/weight_unit_form_widget_test.dart +++ b/test/workout/weight_unit_form_widget_test.dart @@ -19,16 +19,19 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:provider/provider.dart'; import 'package:wger/models/workouts/setting.dart'; import 'package:wger/models/workouts/weight_unit.dart'; +import 'package:wger/providers/body_weight.dart'; import 'package:wger/providers/workout_plans.dart'; import 'package:wger/screens/workout_plan_screen.dart'; import 'package:wger/widgets/workouts/forms.dart'; import './workout_form_test.mocks.dart'; +@GenerateMocks([BodyWeightProvider]) void main() { var mockWorkoutPlans = MockWorkoutPlansProvider(); diff --git a/test/workout/weight_unit_form_widget_test.mocks.dart b/test/workout/weight_unit_form_widget_test.mocks.dart new file mode 100644 index 00000000..149662e6 --- /dev/null +++ b/test/workout/weight_unit_form_widget_test.mocks.dart @@ -0,0 +1,334 @@ +// Mocks generated by Mockito 5.3.2 from annotations +// in wger/test/workout/weight_unit_form_widget_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i6; +import 'dart:ui' as _i7; + +import 'package:http/http.dart' as _i3; +import 'package:mockito/mockito.dart' as _i1; +import 'package:wger/models/body_weight/weight_entry.dart' as _i4; +import 'package:wger/providers/auth.dart' as _i2; +import 'package:wger/providers/body_weight.dart' as _i5; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeAuthProvider_0 extends _i1.SmartFake implements _i2.AuthProvider { + _FakeAuthProvider_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeClient_1 extends _i1.SmartFake implements _i3.Client { + _FakeClient_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeWeightEntry_2 extends _i1.SmartFake implements _i4.WeightEntry { + _FakeWeightEntry_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeUri_3 extends _i1.SmartFake implements Uri { + _FakeUri_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeResponse_4 extends _i1.SmartFake implements _i3.Response { + _FakeResponse_4( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [BodyWeightProvider]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockBodyWeightProvider extends _i1.Mock + implements _i5.BodyWeightProvider { + MockBodyWeightProvider() { + _i1.throwOnMissingStub(this); + } + + @override + List<_i4.WeightEntry> get items => (super.noSuchMethod( + Invocation.getter(#items), + returnValue: <_i4.WeightEntry>[], + ) as List<_i4.WeightEntry>); + @override + _i2.AuthProvider get auth => (super.noSuchMethod( + Invocation.getter(#auth), + returnValue: _FakeAuthProvider_0( + this, + Invocation.getter(#auth), + ), + ) as _i2.AuthProvider); + @override + set auth(_i2.AuthProvider? _auth) => super.noSuchMethod( + Invocation.setter( + #auth, + _auth, + ), + returnValueForMissingStub: null, + ); + @override + _i3.Client get client => (super.noSuchMethod( + Invocation.getter(#client), + returnValue: _FakeClient_1( + this, + Invocation.getter(#client), + ), + ) as _i3.Client); + @override + set client(_i3.Client? _client) => super.noSuchMethod( + Invocation.setter( + #client, + _client, + ), + returnValueForMissingStub: null, + ); + @override + bool get hasListeners => (super.noSuchMethod( + Invocation.getter(#hasListeners), + returnValue: false, + ) as bool); + @override + void clear() => super.noSuchMethod( + Invocation.method( + #clear, + [], + ), + returnValueForMissingStub: null, + ); + @override + _i4.WeightEntry findById(int? id) => (super.noSuchMethod( + Invocation.method( + #findById, + [id], + ), + returnValue: _FakeWeightEntry_2( + this, + Invocation.method( + #findById, + [id], + ), + ), + ) as _i4.WeightEntry); + @override + _i4.WeightEntry? findByDate(DateTime? date) => + (super.noSuchMethod(Invocation.method( + #findByDate, + [date], + )) as _i4.WeightEntry?); + @override + _i6.Future> fetchAndSetEntries() => (super.noSuchMethod( + Invocation.method( + #fetchAndSetEntries, + [], + ), + returnValue: + _i6.Future>.value(<_i4.WeightEntry>[]), + ) as _i6.Future>); + @override + _i6.Future<_i4.WeightEntry> addEntry(_i4.WeightEntry? entry) => + (super.noSuchMethod( + Invocation.method( + #addEntry, + [entry], + ), + returnValue: _i6.Future<_i4.WeightEntry>.value(_FakeWeightEntry_2( + this, + Invocation.method( + #addEntry, + [entry], + ), + )), + ) as _i6.Future<_i4.WeightEntry>); + @override + _i6.Future editEntry(_i4.WeightEntry? entry) => (super.noSuchMethod( + Invocation.method( + #editEntry, + [entry], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + @override + _i6.Future deleteEntry(int? id) => (super.noSuchMethod( + Invocation.method( + #deleteEntry, + [id], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + @override + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( + Invocation.method( + #getDefaultHeaders, + [], + {#includeAuth: includeAuth}, + ), + returnValue: {}, + ) as Map); + @override + Uri makeUrl( + String? path, { + int? id, + String? objectMethod, + Map? query, + }) => + (super.noSuchMethod( + Invocation.method( + #makeUrl, + [path], + { + #id: id, + #objectMethod: objectMethod, + #query: query, + }, + ), + returnValue: _FakeUri_3( + this, + Invocation.method( + #makeUrl, + [path], + { + #id: id, + #objectMethod: objectMethod, + #query: query, + }, + ), + ), + ) as Uri); + @override + _i6.Future> fetch(Uri? uri) => (super.noSuchMethod( + Invocation.method( + #fetch, + [uri], + ), + returnValue: + _i6.Future>.value({}), + ) as _i6.Future>); + @override + _i6.Future> post( + Map? data, + Uri? uri, + ) => + (super.noSuchMethod( + Invocation.method( + #post, + [ + data, + uri, + ], + ), + returnValue: + _i6.Future>.value({}), + ) as _i6.Future>); + @override + _i6.Future> patch( + Map? data, + Uri? uri, + ) => + (super.noSuchMethod( + Invocation.method( + #patch, + [ + data, + uri, + ], + ), + returnValue: + _i6.Future>.value({}), + ) as _i6.Future>); + @override + _i6.Future<_i3.Response> deleteRequest( + String? url, + int? id, + ) => + (super.noSuchMethod( + Invocation.method( + #deleteRequest, + [ + url, + id, + ], + ), + returnValue: _i6.Future<_i3.Response>.value(_FakeResponse_4( + this, + Invocation.method( + #deleteRequest, + [ + url, + id, + ], + ), + )), + ) as _i6.Future<_i3.Response>); + @override + void addListener(_i7.VoidCallback? listener) => super.noSuchMethod( + Invocation.method( + #addListener, + [listener], + ), + returnValueForMissingStub: null, + ); + @override + void removeListener(_i7.VoidCallback? listener) => super.noSuchMethod( + Invocation.method( + #removeListener, + [listener], + ), + returnValueForMissingStub: null, + ); + @override + void dispose() => super.noSuchMethod( + Invocation.method( + #dispose, + [], + ), + returnValueForMissingStub: null, + ); + @override + void notifyListeners() => super.noSuchMethod( + Invocation.method( + #notifyListeners, + [], + ), + returnValueForMissingStub: null, + ); +} diff --git a/test/workout/workout_form_test.mocks.dart b/test/workout/workout_form_test.mocks.dart index 7f967cd8..adb552a6 100644 --- a/test/workout/workout_form_test.mocks.dart +++ b/test/workout/workout_form_test.mocks.dart @@ -41,7 +41,8 @@ class _FakeWeightUnit_0 extends _i1.SmartFake implements _i2.WeightUnit { ); } -class _FakeRepetitionUnit_1 extends _i1.SmartFake implements _i3.RepetitionUnit { +class _FakeRepetitionUnit_1 extends _i1.SmartFake + implements _i3.RepetitionUnit { _FakeRepetitionUnit_1( Object parent, Invocation parentInvocation, @@ -111,7 +112,8 @@ class _FakeSetting_7 extends _i1.SmartFake implements _i9.Setting { ); } -class _FakeWorkoutSession_8 extends _i1.SmartFake implements _i10.WorkoutSession { +class _FakeWorkoutSession_8 extends _i1.SmartFake + implements _i10.WorkoutSession { _FakeWorkoutSession_8( Object parent, Invocation parentInvocation, @@ -154,7 +156,8 @@ class _FakeResponse_11 extends _i1.SmartFake implements _i5.Response { /// A class which mocks [WorkoutPlansProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockWorkoutPlansProvider extends _i1.Mock implements _i12.WorkoutPlansProvider { +class MockWorkoutPlansProvider extends _i1.Mock + implements _i12.WorkoutPlansProvider { MockWorkoutPlansProvider() { _i1.throwOnMissingStub(this); } @@ -292,7 +295,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i12.WorkoutPlansProv returnValueForMissingStub: _i13.Future.value(), ) as _i13.Future); @override - _i13.Future<_i6.WorkoutPlan> fetchAndSetPlanSparse(int? planId) => (super.noSuchMethod( + _i13.Future<_i6.WorkoutPlan> fetchAndSetPlanSparse(int? planId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetPlanSparse, [planId], @@ -306,7 +310,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i12.WorkoutPlansProv )), ) as _i13.Future<_i6.WorkoutPlan>); @override - _i13.Future<_i6.WorkoutPlan> fetchAndSetWorkoutPlanFull(int? workoutId) => (super.noSuchMethod( + _i13.Future<_i6.WorkoutPlan> fetchAndSetWorkoutPlanFull(int? workoutId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetWorkoutPlanFull, [workoutId], @@ -320,7 +325,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i12.WorkoutPlansProv )), ) as _i13.Future<_i6.WorkoutPlan>); @override - _i13.Future<_i6.WorkoutPlan> addWorkout(_i6.WorkoutPlan? workout) => (super.noSuchMethod( + _i13.Future<_i6.WorkoutPlan> addWorkout(_i6.WorkoutPlan? workout) => + (super.noSuchMethod( Invocation.method( #addWorkout, [workout], @@ -334,7 +340,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i12.WorkoutPlansProv )), ) as _i13.Future<_i6.WorkoutPlan>); @override - _i13.Future editWorkout(_i6.WorkoutPlan? workout) => (super.noSuchMethod( + _i13.Future editWorkout(_i6.WorkoutPlan? workout) => + (super.noSuchMethod( Invocation.method( #editWorkout, [workout], @@ -364,7 +371,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i12.WorkoutPlansProv exercise, ], ), - returnValue: _i13.Future>.value({}), + returnValue: + _i13.Future>.value({}), ) as _i13.Future>); @override _i13.Future fetchAndSetRepetitionUnits() => (super.noSuchMethod( @@ -474,7 +482,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i12.WorkoutPlansProv returnValue: _i13.Future>.value(<_i8.Set>[]), ) as _i13.Future>); @override - _i13.Future fetchComputedSettings(_i8.Set? workoutSet) => (super.noSuchMethod( + _i13.Future fetchComputedSettings(_i8.Set? workoutSet) => + (super.noSuchMethod( Invocation.method( #fetchComputedSettings, [workoutSet], @@ -507,7 +516,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i12.WorkoutPlansProv returnValueForMissingStub: _i13.Future.value(), ) as _i13.Future); @override - _i13.Future<_i9.Setting> addSetting(_i9.Setting? workoutSetting) => (super.noSuchMethod( + _i13.Future<_i9.Setting> addSetting(_i9.Setting? workoutSetting) => + (super.noSuchMethod( Invocation.method( #addSetting, [workoutSetting], @@ -529,12 +539,14 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i12.WorkoutPlansProv returnValue: _i13.Future.value(), ) as _i13.Future); @override - _i13.Future<_i10.WorkoutSession> addSession(_i10.WorkoutSession? session) => (super.noSuchMethod( + _i13.Future<_i10.WorkoutSession> addSession(_i10.WorkoutSession? session) => + (super.noSuchMethod( Invocation.method( #addSession, [session], ), - returnValue: _i13.Future<_i10.WorkoutSession>.value(_FakeWorkoutSession_8( + returnValue: + _i13.Future<_i10.WorkoutSession>.value(_FakeWorkoutSession_8( this, Invocation.method( #addSession, @@ -566,7 +578,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i12.WorkoutPlansProv returnValueForMissingStub: _i13.Future.value(), ) as _i13.Future); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -610,7 +623,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i12.WorkoutPlansProv #fetch, [uri], ), - returnValue: _i13.Future>.value({}), + returnValue: + _i13.Future>.value({}), ) as _i13.Future>); @override _i13.Future> post( @@ -625,7 +639,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i12.WorkoutPlansProv uri, ], ), - returnValue: _i13.Future>.value({}), + returnValue: + _i13.Future>.value({}), ) as _i13.Future>); @override _i13.Future> patch( @@ -640,7 +655,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i12.WorkoutPlansProv uri, ], ), - returnValue: _i13.Future>.value({}), + returnValue: + _i13.Future>.value({}), ) as _i13.Future>); @override _i13.Future<_i5.Response> deleteRequest( diff --git a/test/workout/workout_plan_screen_test.dart b/test/workout/workout_plan_screen_test.dart index 7f909d98..4fc31fc5 100644 --- a/test/workout/workout_plan_screen_test.dart +++ b/test/workout/workout_plan_screen_test.dart @@ -61,9 +61,9 @@ void main() { await tester.tap(find.byType(TextButton)); await tester.pumpAndSettle(); - expect(find.text('test workout 1'), findsOneWidget); - expect(find.text('test day 1'), findsOneWidget); - expect(find.text('test day 2'), findsOneWidget); + expect(find.text('3 day workout'), findsOneWidget); + expect(find.text('chest, shoulders'), findsOneWidget); + expect(find.text('legs'), findsOneWidget); expect(find.byType(Dismissible), findsNWidgets(2)); }); diff --git a/test/workout/workout_set_form_test.mocks.dart b/test/workout/workout_set_form_test.mocks.dart index a87bd4e3..c66ac24b 100644 --- a/test/workout/workout_set_form_test.mocks.dart +++ b/test/workout/workout_set_form_test.mocks.dart @@ -26,7 +26,8 @@ import 'package:wger/providers/exercises.dart' as _i8; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvider { +class _FakeWgerBaseProvider_0 extends _i1.SmartFake + implements _i2.WgerBaseProvider { _FakeWgerBaseProvider_0( Object parent, Invocation parentInvocation, @@ -46,7 +47,8 @@ class _FakeExerciseBase_1 extends _i1.SmartFake implements _i3.ExerciseBase { ); } -class _FakeExerciseCategory_2 extends _i1.SmartFake implements _i4.ExerciseCategory { +class _FakeExerciseCategory_2 extends _i1.SmartFake + implements _i4.ExerciseCategory { _FakeExerciseCategory_2( Object parent, Invocation parentInvocation, @@ -103,7 +105,8 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider { ), ) as _i2.WgerBaseProvider); @override - set exerciseBases(List<_i3.ExerciseBase>? exercisesBases) => super.noSuchMethod( + set exerciseBases(List<_i3.ExerciseBase>? exercisesBases) => + super.noSuchMethod( Invocation.setter( #exerciseBases, exercisesBases, @@ -116,7 +119,8 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider { returnValue: <_i3.ExerciseBase>[], ) as List<_i3.ExerciseBase>); @override - set filteredExerciseBases(List<_i3.ExerciseBase>? newFilteredExercises) => super.noSuchMethod( + set filteredExerciseBases(List<_i3.ExerciseBase>? newFilteredExercises) => + super.noSuchMethod( Invocation.setter( #filteredExerciseBases, newFilteredExercises, @@ -124,7 +128,8 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider { returnValueForMissingStub: null, ); @override - Map> get exerciseBasesByVariation => (super.noSuchMethod( + Map> get exerciseBasesByVariation => + (super.noSuchMethod( Invocation.getter(#exerciseBasesByVariation), returnValue: >{}, ) as Map>); @@ -321,7 +326,8 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider { returnValueForMissingStub: _i9.Future.value(), ) as _i9.Future); @override - _i9.Future<_i3.ExerciseBase> fetchAndSetExerciseBase(int? exerciseBaseId) => (super.noSuchMethod( + _i9.Future<_i3.ExerciseBase> fetchAndSetExerciseBase(int? exerciseBaseId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetExerciseBase, [exerciseBaseId], @@ -335,7 +341,8 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider { )), ) as _i9.Future<_i3.ExerciseBase>); @override - _i3.ExerciseBase readExerciseBaseFromBaseInfo(dynamic baseData) => (super.noSuchMethod( + _i3.ExerciseBase readExerciseBaseFromBaseInfo(dynamic baseData) => + (super.noSuchMethod( Invocation.method( #readExerciseBaseFromBaseInfo, [baseData], @@ -379,7 +386,8 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider { languageCode, ], ), - returnValue: _i9.Future>.value(<_i3.ExerciseBase>[]), + returnValue: + _i9.Future>.value(<_i3.ExerciseBase>[]), ) as _i9.Future>); @override void addListener(_i10.VoidCallback? listener) => super.noSuchMethod( diff --git a/test_data/body_weight.dart b/test_data/body_weight.dart index 409a1abd..8cec705c 100644 --- a/test_data/body_weight.dart +++ b/test_data/body_weight.dart @@ -20,3 +20,7 @@ import 'package:wger/models/body_weight/weight_entry.dart'; final weightEntry1 = WeightEntry(id: 1, weight: 80, date: DateTime(2021, 01, 01)); final weightEntry2 = WeightEntry(id: 2, weight: 81, date: DateTime(2021, 01, 10)); + +List getWeightEntries() { + return [weightEntry1, weightEntry2]; +} diff --git a/test_data/exercises.dart b/test_data/exercises.dart index 88257463..7b891d39 100644 --- a/test_data/exercises.dart +++ b/test_data/exercises.dart @@ -35,12 +35,13 @@ const tCategory1 = ExerciseCategory(id: 1, name: 'Arms'); const tCategory2 = ExerciseCategory(id: 2, name: 'Legs'); const tCategory3 = ExerciseCategory(id: 3, name: 'Abs'); const tCategory4 = ExerciseCategory(id: 4, name: 'Shoulders'); +const tCategory5 = ExerciseCategory(id: 5, name: 'Calves'); const tEquipment1 = Equipment(id: 1, name: 'Bench'); const tEquipment2 = Equipment(id: 1, name: 'Dumbbell'); const tEquipment3 = Equipment(id: 2, name: 'Matress'); -final tBase1 = ExerciseBase( +final benchPress = ExerciseBase( id: 1, uuid: '364f196c-881b-4839-8bfc-9e8f651521b6', creationDate: DateTime(2021, 09, 01), @@ -51,7 +52,7 @@ final tBase1 = ExerciseBase( musclesSecondary: const [tMuscle3], ); -final tBase2 = ExerciseBase( +final crunches = ExerciseBase( id: 2, uuid: '82415754-fc4c-49ea-8ca7-1516dd36d5a0', creationDate: DateTime(2021, 08, 01), @@ -62,7 +63,7 @@ final tBase2 = ExerciseBase( musclesSecondary: const [tMuscle2], ); -final tBase3 = ExerciseBase( +final deadLift = ExerciseBase( id: 3, uuid: 'ca84e2c5-5608-4d6d-ba57-6d4b6b5e7acd', creationDate: DateTime(2021, 08, 01), @@ -73,7 +74,7 @@ final tBase3 = ExerciseBase( musclesSecondary: const [tMuscle2], ); -final tBase4 = ExerciseBase( +final curls = ExerciseBase( id: 4, uuid: '361f024c-fdf8-4146-b7d7-0c1b67c58141', creationDate: DateTime(2021, 08, 01), @@ -83,75 +84,127 @@ final tBase4 = ExerciseBase( muscles: const [tMuscle1], musclesSecondary: const [tMuscle2], ); +final squats = ExerciseBase( + id: 5, + uuid: '361f024c-fdf8-4146-b7d7-0c1b67c58141', + creationDate: DateTime(2021, 08, 01), + updateDate: DateTime(2021, 08, 01), + category: tCategory3, + equipment: const [tEquipment2], + muscles: const [tMuscle1], + musclesSecondary: const [tMuscle2], +); +final sideRaises = ExerciseBase( + id: 6, + uuid: '721ff972-c568-41e3-8cf5-cf1e5c5c801c', + creationDate: DateTime(2022, 11, 01), + updateDate: DateTime(2022, 11, 01), + category: tCategory4, + equipment: const [tEquipment2], + muscles: const [tMuscle1], + musclesSecondary: const [tMuscle2], +); -final tExercise1 = Exercise( +final benchPressDe = Exercise( id: 1, uuid: 'f4cc326b-e497-4bd7-a71d-0eb1db522743', creationDate: DateTime(2021, 1, 15), - name: 'test exercise 1', + name: 'Bankdrücken', description: 'add clever text', - baseId: tBase1.id, + baseId: benchPress.id, + language: tLanguage1, +); +final benchPressEn = Exercise( + id: 7, + uuid: 'f4cc326b-e497-4bd7-a71d-0eb1db522743', + creationDate: DateTime(2021, 1, 15), + name: 'Bench press', + description: 'add clever text', + baseId: benchPress.id, language: tLanguage1, ); -final tExercise2 = Exercise( +final deadLiftEn = Exercise( id: 2, uuid: 'b7f51a1a-0368-4dfc-a03c-d629a4089b4a', creationDate: DateTime(2021, 1, 15), - name: 'test exercise 2', + name: 'Dead Lift', description: 'Lorem ipsum etc', - baseId: tBase2.id, + baseId: crunches.id, language: tLanguage2, ); -final tExercise3 = Exercise( +final crunchesFr = Exercise( id: 3, uuid: 'd83f572d-add5-48dc-89cf-75f6770284f1', creationDate: DateTime(2021, 4, 1), - name: 'test exercise 3', + name: 'Crunches', description: 'The man in black fled across the desert, and the gunslinger followed', - baseId: tBase3.id, + baseId: deadLift.id, language: tLanguage3, ); -final tExercise4 = Exercise( +final crunchesDe = Exercise( id: 4, uuid: 'a3e96c1d-b35f-4b0e-9cf4-ca37666cf521', creationDate: DateTime(2021, 4, 1), - name: 'test exercise 4', + name: 'Crunches', description: 'The story so far: in the beginning, the universe was created', - baseId: tBase3.id, + baseId: deadLift.id, language: tLanguage1, ); -final tExercise5 = Exercise( +final crunchesEn = Exercise( id: 5, uuid: '8c49a816-2247-4116-94bb-b5c0ce09c609', creationDate: DateTime(2021, 4, 1), name: 'test exercise 5', description: 'I am an invisible man', - baseId: tBase3.id, + baseId: deadLift.id, language: tLanguage2, ); -final tExercise6 = Exercise( +final curlsEn = Exercise( id: 6, uuid: '259a637e-957f-4fe1-b61b-f56e3793ebcd', creationDate: DateTime(2021, 4, 1), - name: 'test exercise 6', + name: 'Curls', description: 'It was a bright cold day in April, and the clocks were striking thirteen', - baseId: tBase3.id, + baseId: curls.id, + language: tLanguage2, +); + +final squatsEn = Exercise( + id: 8, + uuid: '259a637e-957f-4fe1-b61b-f56e3793ebcd', + creationDate: DateTime(2021, 4, 1), + name: 'Squats', + description: 'It was a bright cold day in April, and the clocks were striking thirteen', + baseId: curls.id, + language: tLanguage2, +); + +final sideRaisesEn = Exercise( + id: 9, + uuid: '6bf89ad0-5a43-4e98-91d3-a8c6886c9712', + creationDate: DateTime(2022, 11, 1), + name: 'Side raises', + description: 'It was a bright cold day in April, and the clocks were striking thirteen', + baseId: curls.id, language: tLanguage2, ); List getTestExercises() { - return [tExercise1, tExercise2, tExercise3]; + return [benchPressDe, deadLiftEn, crunchesFr]; } List getTestExerciseBases() { - tBase1.exercises = [tExercise1, tExercise2, tExercise3]; - tBase2.exercises = [tExercise4, tExercise5]; - tBase3.exercises = [tExercise6]; + benchPress.exercises = [benchPressEn, benchPressDe]; + crunches.exercises = [crunchesEn, crunchesDe, crunchesFr]; + deadLift.exercises = [deadLiftEn]; + curls.exercises = [curlsEn]; + squats.exercises = [squatsEn]; + sideRaises.exercises = [sideRaisesEn]; - return [tBase1, tBase2, tBase3, tBase4]; + return [benchPress, crunches, deadLift, curls, squats, sideRaises]; } diff --git a/test_data/measurements.dart b/test_data/measurements.dart new file mode 100644 index 00000000..87c524eb --- /dev/null +++ b/test_data/measurements.dart @@ -0,0 +1,34 @@ +/* + * This file is part of wger Workout Manager . + * Copyright (C) 2020, 2021 wger Team + * + * wger Workout Manager is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * wger Workout Manager is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import 'package:wger/models/measurements/measurement_category.dart'; +import 'package:wger/models/measurements/measurement_entry.dart'; + +final e1 = MeasurementEntry(id: 1, category: 1, date: DateTime(2022, 9, 10), value: 30, notes: ''); +final e2 = MeasurementEntry(id: 2, category: 1, date: DateTime(2022, 10, 5), value: 25, notes: ''); +final e3 = MeasurementEntry(id: 3, category: 1, date: DateTime(2022, 10, 10), value: 17, notes: ''); +final e4 = MeasurementEntry(id: 4, category: 1, date: DateTime(2022, 11, 1), value: 17, notes: ''); +final e5 = MeasurementEntry(id: 5, category: 1, date: DateTime(2022, 11, 10), value: 20, notes: ''); +final e6 = MeasurementEntry(id: 6, category: 1, date: DateTime(2022, 11, 15), value: 23, notes: ''); + +List getMeasurementCategories() { + final entries = [e1, e2, e3, e4, e5, e6]; + final category = MeasurementCategory(id: 1, name: 'Body fat', unit: '%', entries: entries); + + return [category]; +} diff --git a/test_data/nutritional_plans.dart b/test_data/nutritional_plans.dart index 3a39a664..8df73438 100644 --- a/test_data/nutritional_plans.dart +++ b/test_data/nutritional_plans.dart @@ -103,7 +103,7 @@ NutritionalPlan getNutritionalPlan() { final NutritionalPlan plan = NutritionalPlan( id: 1, - description: 'lots and lots of mass', + description: 'Less fat, more protein', creationDate: DateTime(2021, 5, 23), ); plan.meals = [meal1, meal2]; diff --git a/test_data/workouts.dart b/test_data/workouts.dart index a7a59fd6..229e3a47 100644 --- a/test_data/workouts.dart +++ b/test_data/workouts.dart @@ -35,21 +35,6 @@ const RepetitionUnit repetitionUnit2 = RepetitionUnit(id: 2, name: 'Hours'); WorkoutPlan getWorkout() { final testBases = getTestExerciseBases(); - final setting1 = Setting( - setId: 1, - order: 1, - exerciseBaseId: 1, - repetitionUnitId: 1, - reps: 2, - weightUnitId: 1, - comment: 'ddd', - rir: '2', - ); - setting1.repetitionUnit = repetitionUnit1; - setting1.weightUnit = weightUnit1; - setting1.exerciseBase = testBases[0]; - setting1.weight = 10; - final log1 = Log.empty() ..id = 1 ..weight = 10 @@ -83,36 +68,104 @@ WorkoutPlan getWorkout() { log3.weightUnit = weightUnit1; log3.repetitionUnit = repetitionUnit1; - final set1 = Set.withData( + final settingBenchPress = Setting( + setId: 1, + order: 1, + exerciseBaseId: 1, + repetitionUnitId: 1, + reps: 6, + weightUnitId: 1, + comment: 'ddd', + rir: '3', + ); + settingBenchPress.repetitionUnit = repetitionUnit1; + settingBenchPress.weightUnit = weightUnit1; + settingBenchPress.exerciseBase = testBases[0]; + settingBenchPress.weight = 80; + + final setBenchPress = Set.withData( id: 1, day: 1, sets: 3, order: 1, - comment: 'Important to do exercises correctly', + comment: 'Make sure to warm up', ); - set1.addExerciseBase(testBases[0]); - set1.settings.add(setting1); - set1.settingsComputed = [setting1, setting1]; + setBenchPress.addExerciseBase(testBases[0]); + setBenchPress.settings.add(settingBenchPress); + setBenchPress.settingsComputed = [settingBenchPress, settingBenchPress]; - final day1 = Day() + final settingSquat = Setting( + setId: 2, + order: 1, + exerciseBaseId: 8, + repetitionUnitId: 1, + reps: 8, + weightUnitId: 1, + comment: 'ddd', + rir: '2', + ); + settingSquat.repetitionUnit = repetitionUnit1; + settingSquat.weightUnit = weightUnit1; + settingSquat.exerciseBase = testBases[4]; + settingSquat.weight = 120; + + final setSquat = Set.withData( + id: 2, + day: 1, + sets: 3, + order: 1, + ); + setSquat.addExerciseBase(testBases[4]); + setSquat.settings.add(settingSquat); + setSquat.settingsComputed = [settingSquat, settingSquat]; + + final settingSideRaises = Setting( + setId: 2, + order: 1, + exerciseBaseId: 8, + repetitionUnitId: 1, + reps: 12, + weightUnitId: 1, + comment: 'ddd', + rir: '', + ); + settingSideRaises.repetitionUnit = repetitionUnit1; + settingSideRaises.weightUnit = weightUnit1; + settingSideRaises.exerciseBase = testBases[5]; + settingSideRaises.weight = 6; + + final setSideRaises = Set.withData( + id: 3, + day: 1, + sets: 3, + order: 1, + ); + setSideRaises.addExerciseBase(testBases[5]); + setSideRaises.settings.add(settingSideRaises); + setSideRaises.settingsComputed = [settingSideRaises, settingSideRaises]; + + final dayChestShoulders = Day() ..id = 1 ..workoutId = 1 - ..description = 'test day 1' + ..description = 'chest, shoulders' ..daysOfWeek = [1, 2]; - day1.sets.add(set1); + dayChestShoulders.sets.add(setBenchPress); + dayChestShoulders.sets.add(setSideRaises); - final day2 = Day() + final dayLegs = Day() ..id = 2 ..workoutId = 1 - ..description = 'test day 2' + ..description = 'legs' ..daysOfWeek = [4]; + dayLegs.sets.add(setSquat); final workout = WorkoutPlan( - id: 1, - creationDate: DateTime(2021, 01, 01), - name: 'test workout 1', - days: [day1, day2], - logs: [log1, log2, log3]); + id: 1, + creationDate: DateTime(2021, 01, 01), + name: '3 day workout', + days: [dayChestShoulders, dayLegs], + logs: [log1, log2, log3], + ); return workout; }