• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

wger-project / flutter / 12964636053

25 Jan 2025 11:45AM UTC coverage: 51.777% (+0.06%) from 51.721%
12964636053

push

github

rolandgeider
Use log levels when logging to console

25 of 37 new or added lines in 9 files covered. (67.57%)

4 existing lines in 2 files now uncovered.

4326 of 8355 relevant lines covered (51.78%)

1.52 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

28.21
/lib/database/exercises/exercise_database.dart
1
import 'dart:io';
2

3
import 'package:drift/drift.dart';
4
import 'package:drift/native.dart';
5
import 'package:logging/logging.dart';
6
import 'package:path/path.dart' as p;
7
import 'package:path_provider/path_provider.dart';
8
import 'package:wger/database/exercises/type_converters.dart';
9
import 'package:wger/models/exercises/category.dart';
10
import 'package:wger/models/exercises/equipment.dart';
11
import 'package:wger/models/exercises/language.dart';
12
import 'package:wger/models/exercises/muscle.dart';
13

14
part 'exercise_database.g.dart';
15

16
@DataClassName('ExerciseTable')
17
class Exercises extends Table {
18
  const Exercises();
3✔
19

20
  IntColumn get id => integer()();
×
21

22
  TextColumn get data => text()();
×
23

24
  // TextColumn get data => text().map(const ExerciseBaseConverter())();
25

26
  DateTimeColumn get lastUpdate => dateTime()();
×
27

28
  /// The date when the exercise was last fetched from the API. While we know
29
  /// when the exercise itself was last updated in `lastUpdate`, we can save
30
  /// ourselves a lot of requests if we don't check too often
31
  DateTimeColumn get lastFetched => dateTime()();
×
32
}
33

34
@DataClassName('MuscleTable')
35
class Muscles extends Table {
36
  const Muscles();
3✔
37

38
  IntColumn get id => integer()();
×
39

40
  TextColumn get data => text().map(const MuscleConverter())();
×
41
}
42

43
@DataClassName('CategoryTable')
44
class Categories extends Table {
45
  const Categories();
3✔
46

47
  IntColumn get id => integer()();
×
48

49
  TextColumn get data => text().map(const ExerciseCategoryConverter())();
×
50
}
51

52
@DataClassName('LanguagesTable')
53
class Languages extends Table {
54
  const Languages();
3✔
55

56
  IntColumn get id => integer()();
×
57

58
  TextColumn get data => text().map(const LanguageConverter())();
×
59
}
60

61
@DataClassName('EquipmentTable')
62
class Equipments extends Table {
63
  const Equipments();
3✔
64

65
  IntColumn get id => integer()();
×
66

67
  TextColumn get data => text().map(const EquipmentConverter())();
×
68
}
69

70
@DriftDatabase(tables: [Exercises, Muscles, Equipments, Categories, Languages])
71
class ExerciseDatabase extends _$ExerciseDatabase {
72
  final _logger = Logger('ExerciseDatabase');
73

UNCOV
74
  ExerciseDatabase() : super(_openConnection());
×
75

76
  // Named constructor for creating in-memory database
77
  ExerciseDatabase.inMemory(super.e);
6✔
78

79
  /// Note that this needs to be bumped if the JSON response from the server changes
80
  @override
3✔
81
  int get schemaVersion => 1;
82

83
  /// There is not really a migration strategy. If we bump the version
84
  /// number, delete everything and recreate the new tables. The provider
85
  /// will fetch everything as needed from the server
86
  @override
3✔
87
  MigrationStrategy get migration => MigrationStrategy(
3✔
88
        onUpgrade: (m, from, to) async {
×
89
          // no-op, but needs to be defined
90
          return;
91
        },
92
        beforeOpen: (openingDetails) async {
3✔
93
          if (openingDetails.hadUpgrade) {
3✔
94
            final m = createMigrator();
×
95
            for (final table in allTables) {
×
96
              await m.deleteTable(table.actualTableName);
×
97
              await m.createTable(table);
×
98
            }
99
          }
100
        },
101
      );
102

103
  Future<void> deleteEverything() {
×
104
    return transaction(() async {
×
105
      for (final table in allTables) {
×
NEW
106
        _logger.info('Deleting db cache table ${table.actualTableName}');
×
UNCOV
107
        await delete(table).go();
×
108
      }
109
    });
110
  }
111
}
112

113
LazyDatabase _openConnection() {
×
114
  return LazyDatabase(() async {
×
115
    final dbFolder = await getApplicationCacheDirectory();
×
116
    final file = File(p.join(dbFolder.path, 'exercises.sqlite'));
×
117
    return NativeDatabase.createInBackground(file);
×
118
  });
119
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc