From 16603f00bd19cf8a926a2ea24306c3d2610c30e7 Mon Sep 17 00:00:00 2001 From: bossanyit Date: Sun, 7 May 2023 10:47:00 +0200 Subject: [PATCH] v1.27 membership improvement --- .gitignore | 4 +-- lib/model/membership.dart | 47 ++++++++++++++++++++----------- pubspec.yaml | 2 +- test/model/membership_test.dart | 50 +++++++++++++++++++++++++++++++++ 4 files changed, 84 insertions(+), 19 deletions(-) create mode 100644 test/model/membership_test.dart diff --git a/.gitignore b/.gitignore index 649b9f9..5b6cfad 100644 --- a/.gitignore +++ b/.gitignore @@ -28,5 +28,5 @@ migrate_working_dir/ .packages build/ .dart_tool/ -/.flutter-plugins -/.flutter-plugins-dependencies \ No newline at end of file +.flutter-plugins +.flutter-plugins-dependencies \ No newline at end of file diff --git a/lib/model/membership.dart b/lib/model/membership.dart index 9eaeeaa..20661b0 100644 --- a/lib/model/membership.dart +++ b/lib/model/membership.dart @@ -1,36 +1,51 @@ +enum DurationType { free, subscription, lifetime, limited } + +extension DurationTypeExt on DurationType { + String enumToString() => toString().split(".").last; + DurationType getType(String type) => DurationType.values.firstWhere((e) => e.enumToString() == type); +} + +enum DurationUnit { day, week, month, year } + +extension DurationUnitExt on DurationUnit { + String enumToString() => toString().split(".").last; + DurationUnit getType(String type) => DurationUnit.values.firstWhere((e) => e.enumToString() == type); +} + class Membership { late int membershipId; late String name; String? description; late int duration; - late String durationType; - late String durationUnit; + late DurationType durationType; + late DurationUnit durationUnit; int? trainingPlanId; String? trainingPlanDayIds; + Membership(); Membership.fromJson(Map json) { membershipId = json['membershipId']; name = json['name']; description = json['description'] ?? ""; duration = json['duration']; - durationUnit = json['durationUnit']; - durationType = json['durationType']; + durationType = DurationType.free.getType(json['durationType']); + durationUnit = DurationUnit.day.getType(json['durationUnit']); trainingPlanId = json['trainingPlanId'] ?? 0; trainingPlanDayIds = json['trainingPlanDayIds'] ?? ""; } -Map toJson() => { - "membershipId": membershipId, - "name": name, - "description": description, - "duration": duration, - "durationUnit": durationUnit, - "durationType": durationType, - "trainingPlanId": trainingPlanId, - "trainingPlanDayIds": trainingPlanDayIds, - }; + Map toJson() => { + "membershipId": membershipId, + "name": name, + "description": description, + "duration": duration, + 'durationType': durationType.enumToString(), + 'durationUnit': durationUnit.enumToString(), + "trainingPlanId": trainingPlanId, + "trainingPlanDayIds": trainingPlanDayIds, + }; @override - String toString() => toJson().toString(); -} \ No newline at end of file + String toString() => toJson().toString(); +} diff --git a/pubspec.yaml b/pubspec.yaml index e84f4d1..60368fc 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: workouttest_util description: Workout Test app and web functions. -version: 1.0.26 +version: 1.0.27 environment: sdk: ">=2.18.6 <3.0.0" diff --git a/test/model/membership_test.dart b/test/model/membership_test.dart new file mode 100644 index 0000000..2c6abb1 --- /dev/null +++ b/test/model/membership_test.dart @@ -0,0 +1,50 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:workouttest_util/model/membership.dart'; + +void main() { + group('Membership', () { + test('fromJson() correctly sets properties', () { + final json = { + 'membershipId': 1, + 'name': 'Basic Membership', + 'description': 'This is a basic membership', + 'duration': 30, + 'durationType': 'subscription', + 'durationUnit': 'day', + 'trainingPlanId': null, + 'trainingPlanDayIds': null, + }; + final membership = Membership.fromJson(json); + expect(membership.membershipId, 1); + expect(membership.name, 'Basic Membership'); + expect(membership.description, 'This is a basic membership'); + expect(membership.duration, 30); + expect(membership.durationType, DurationType.subscription); + expect(membership.durationUnit, DurationUnit.day); + expect(membership.trainingPlanId, 0); + expect(membership.trainingPlanDayIds, ''); + }); + + test('toJson() correctly returns a Map', () { + final membership = Membership() + ..membershipId = 1 + ..name = 'Basic Membership' + ..description = 'This is a basic membership' + ..duration = 30 + ..durationType = DurationType.subscription + ..durationUnit = DurationUnit.day + ..trainingPlanId = null + ..trainingPlanDayIds = null; + + final json = membership.toJson(); + expect(json['membershipId'], 1); + expect(json['name'], 'Basic Membership'); + expect(json['description'], 'This is a basic membership'); + expect(json['duration'], 30); + expect(json['durationType'], 'subscription'); + expect(json['durationUnit'], 'day'); + expect(json['trainingPlanId'], null); + expect(json['trainingPlanDayIds'], null); + }); + }); +}