forked from BasedHardware/omi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmemories_provider_load_failure_test.dart
More file actions
86 lines (70 loc) · 2.82 KB
/
Copy pathmemories_provider_load_failure_test.dart
File metadata and controls
86 lines (70 loc) · 2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:omi/backend/http/api/memories.dart';
import 'package:omi/backend/preferences.dart';
import 'package:omi/backend/schema/memory.dart';
import 'package:omi/providers/memories_provider.dart';
GetMemoriesResult _failedFetch() =>
const GetMemoriesResult([], true, statusCode: 503, failureReason: MemoriesFetchFailureReason.httpError);
Memory _memory() => Memory(
id: 'mem-1',
uid: 'memories-load-failure-user',
content: 'A real memory',
category: MemoryCategory.manual,
createdAt: DateTime(2026, 8, 17),
updatedAt: DateTime(2026, 8, 17),
visibility: MemoryVisibility.private,
);
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
setUp(() async {
SharedPreferences.setMockInitialValues({'uid': 'memories-load-failure-user'});
await SharedPreferencesUtil.init();
});
test('a failed fetch is a load error, not an empty memories list', () async {
final provider = MemoriesProvider(
fetchMemoriesRequest: ({int limit = 100, int offset = 0, bool thisDeviceOnly = false}) async => _failedFetch(),
);
addTearDown(provider.dispose);
await provider.loadMemories();
expect(provider.loadFailed, isTrue);
expect(provider.showLoadError, isTrue);
expect(provider.memories, isEmpty);
expect(provider.loading, isFalse);
});
test('a failed refresh keeps previously loaded memories instead of wiping them', () async {
var fail = false;
final memory = _memory();
final provider = MemoriesProvider(
fetchMemoriesRequest: ({int limit = 100, int offset = 0, bool thisDeviceOnly = false}) async {
if (fail) return _failedFetch();
return GetMemoriesResult([memory], true);
},
);
addTearDown(provider.dispose);
await provider.loadMemories();
expect(provider.memories.map((item) => item.id), [memory.id]);
fail = true;
await provider.loadMemories();
expect(provider.loadFailed, isTrue);
expect(provider.showLoadError, isFalse, reason: 'stale memories must still be shown');
expect(provider.memories.map((item) => item.id), [memory.id]);
});
test('a later successful fetch clears the load-error state', () async {
var fail = true;
final provider = MemoriesProvider(
fetchMemoriesRequest: ({int limit = 100, int offset = 0, bool thisDeviceOnly = false}) async {
if (fail) return _failedFetch();
return const GetMemoriesResult([], true);
},
);
addTearDown(provider.dispose);
await provider.loadMemories();
expect(provider.showLoadError, isTrue);
fail = false;
await provider.loadMemories();
expect(provider.loadFailed, isFalse);
expect(provider.showLoadError, isFalse);
expect(provider.memories, isEmpty);
});
}