Skip to content

Commit 56272df

Browse files
committed
Mock DateTime.now() using InstaDateTime
1 parent 69975f4 commit 56272df

File tree

3 files changed

+34
-7
lines changed

3 files changed

+34
-7
lines changed

lib/APM.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'dart:io';
66
import 'package:flutter/services.dart';
77
import 'package:instabug_flutter/models/network_data.dart';
88
import 'package:instabug_flutter/models/trace.dart';
9+
import 'package:instabug_flutter/utils/insta_date_time.dart';
910

1011
enum LogLevel {
1112
none,
@@ -47,14 +48,14 @@ class APM {
4748
/// Starts an execution trace.
4849
/// [String] name of the trace.
4950
static Future<Trace> startExecutionTrace(String name) async {
50-
final DateTime id = DateTime.now();
51-
final List<dynamic> params = <dynamic>[name.toString(), id.toString()];
51+
final DateTime id = InstaDateTime.instance.now();
52+
final List<dynamic> params = <dynamic>[name, id.toString()];
5253
final traceId =
5354
await _channel.invokeMethod<String?>('startExecutionTrace:id:', params);
5455

5556
if (traceId == null) {
5657
return Future.error(
57-
"Execution trace $name wasn't created. Please make sure to enable APM first by following"
58+
"Execution trace $name wasn't created. Please make sure to enable APM first by following "
5859
'the instructions at this link: https://docs.instabug.com/reference#enable-or-disable-apm',
5960
);
6061
}

lib/utils/insta_date_time.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import 'package:meta/meta.dart';
2+
3+
/// Mockable [DateTime] class.
4+
class InstaDateTime {
5+
InstaDateTime._();
6+
7+
static InstaDateTime _instance = InstaDateTime._();
8+
static InstaDateTime get instance => _instance;
9+
10+
@visibleForTesting
11+
static void setInstance(InstaDateTime instance) {
12+
_instance = instance;
13+
}
14+
15+
DateTime now() => DateTime.now();
16+
}

test/instabug_flutter_test.dart

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import 'package:instabug_flutter/models/crash_data.dart';
2020
import 'package:instabug_flutter/models/exception_data.dart';
2121
import 'package:instabug_flutter/models/network_data.dart';
2222
import 'package:instabug_flutter/models/trace.dart' as execution_trace;
23+
import 'package:instabug_flutter/utils/insta_date_time.dart';
2324
import 'package:instabug_flutter/utils/platform_manager.dart';
2425
import 'package:mockito/annotations.dart';
2526
import 'package:mockito/mockito.dart';
@@ -29,6 +30,7 @@ import 'instabug_flutter_test.mocks.dart';
2930

3031
@GenerateMocks([
3132
PlatformManager,
33+
InstaDateTime,
3234
])
3335
void main() {
3436
TestWidgetsFlutterBinding.ensureInitialized();
@@ -84,6 +86,8 @@ void main() {
8486
switch (methodCall.method) {
8587
case 'getTags':
8688
return <String>['tag1', 'tag2'];
89+
case 'startExecutionTrace:id:':
90+
return methodCall.arguments[0];
8791
case 'getUserAttributeForKey:':
8892
return userAttribute;
8993
case 'getUserAttributes':
@@ -1083,17 +1087,23 @@ void main() {
10831087
});
10841088

10851089
test('startExecutionTrace: Test', () async {
1086-
const String name = 'test_trace';
1090+
const String name = 'test-trace';
10871091
final DateTime timestamp = DateTime.now();
1088-
final List<dynamic> args = <dynamic>[name.toString(), timestamp.toString()];
1092+
final List<dynamic> args = <dynamic>[name, timestamp.toString()];
1093+
1094+
final mockDateTime = MockInstaDateTime();
1095+
InstaDateTime.setInstance(mockDateTime);
1096+
when(mockDateTime.now()).thenAnswer((_) => timestamp);
1097+
10891098
await APM.startExecutionTrace(name);
1099+
10901100
expect(log, <Matcher>[
10911101
isMethodCall(
10921102
'startExecutionTrace:id:',
10931103
arguments: args,
10941104
)
10951105
]);
1096-
}, skip: 'TODO: mock timestamp');
1106+
});
10971107

10981108
test('setExecutionTraceAttribute: Test', () async {
10991109
const String name = 'test_trace';
@@ -1109,7 +1119,7 @@ void main() {
11091119
arguments: args,
11101120
)
11111121
]);
1112-
}, skip: 'TODO: mock timestamp');
1122+
});
11131123

11141124
test('setCrashReportingEnabled: Test', () async {
11151125
const bool isEnabled = false;

0 commit comments

Comments
 (0)