mirror of
https://github.com/block/buzz.git
synced 2026-10-28 13:01:10 +00:00
153 lines
4.9 KiB
Dart
153 lines
4.9 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
import 'package:sprout_mobile/shared/workspace/workspace.dart';
|
|
import 'package:sprout_mobile/shared/workspace/workspace_provider.dart';
|
|
import 'package:sprout_mobile/shared/workspace/workspace_storage.dart';
|
|
|
|
import 'workspace_storage_test.dart';
|
|
|
|
void main() {
|
|
late FakeSecureStorage fakeSecure;
|
|
late WorkspaceStorage workspaceStorage;
|
|
late ProviderContainer container;
|
|
|
|
setUp(() {
|
|
fakeSecure = FakeSecureStorage();
|
|
workspaceStorage = WorkspaceStorage(secure: fakeSecure);
|
|
});
|
|
|
|
tearDown(() => container.dispose());
|
|
|
|
ProviderContainer createContainer() {
|
|
return ProviderContainer(
|
|
overrides: [workspaceStorageProvider.overrideWithValue(workspaceStorage)],
|
|
);
|
|
}
|
|
|
|
group('WorkspaceListNotifier', () {
|
|
test('loads empty list initially', () async {
|
|
container = createContainer();
|
|
final workspaces = await container.read(workspaceListProvider.future);
|
|
expect(workspaces, isEmpty);
|
|
});
|
|
|
|
test('addWorkspace adds to list', () async {
|
|
container = createContainer();
|
|
await container.read(workspaceListProvider.future);
|
|
|
|
final ws = Workspace.create(
|
|
name: 'Test',
|
|
relayUrl: 'https://test.example.com',
|
|
);
|
|
await container.read(workspaceListProvider.notifier).addWorkspace(ws);
|
|
|
|
final workspaces = await container.read(workspaceListProvider.future);
|
|
expect(workspaces, hasLength(1));
|
|
expect(workspaces.first.name, 'Test');
|
|
});
|
|
|
|
test('removeWorkspace removes from list', () async {
|
|
container = createContainer();
|
|
await container.read(workspaceListProvider.future);
|
|
|
|
final ws = Workspace.create(
|
|
name: 'Test',
|
|
relayUrl: 'https://test.example.com',
|
|
);
|
|
await container.read(workspaceListProvider.notifier).addWorkspace(ws);
|
|
await container
|
|
.read(workspaceListProvider.notifier)
|
|
.removeWorkspace(ws.id);
|
|
|
|
final workspaces = await container.read(workspaceListProvider.future);
|
|
expect(workspaces, isEmpty);
|
|
});
|
|
|
|
test('renameWorkspace updates name', () async {
|
|
container = createContainer();
|
|
await container.read(workspaceListProvider.future);
|
|
|
|
final ws = Workspace.create(
|
|
name: 'Original',
|
|
relayUrl: 'https://test.example.com',
|
|
);
|
|
await container.read(workspaceListProvider.notifier).addWorkspace(ws);
|
|
await container
|
|
.read(workspaceListProvider.notifier)
|
|
.renameWorkspace(ws.id, 'Renamed');
|
|
|
|
final workspaces = await container.read(workspaceListProvider.future);
|
|
expect(workspaces.first.name, 'Renamed');
|
|
});
|
|
|
|
test('switchWorkspace updates active ID', () async {
|
|
container = createContainer();
|
|
await container.read(workspaceListProvider.future);
|
|
|
|
final ws1 = Workspace.create(
|
|
name: 'One',
|
|
relayUrl: 'https://one.example.com',
|
|
);
|
|
final ws2 = Workspace.create(
|
|
name: 'Two',
|
|
relayUrl: 'https://two.example.com',
|
|
);
|
|
|
|
final notifier = container.read(workspaceListProvider.notifier);
|
|
await notifier.addWorkspace(ws1);
|
|
await notifier.addWorkspace(ws2);
|
|
await notifier.switchWorkspace(ws2.id);
|
|
|
|
final activeId = await workspaceStorage.loadActiveId();
|
|
expect(activeId, ws2.id);
|
|
});
|
|
});
|
|
|
|
group('activeWorkspaceProvider', () {
|
|
test('returns null when no workspaces', () async {
|
|
container = createContainer();
|
|
final active = await container.read(activeWorkspaceProvider.future);
|
|
expect(active, isNull);
|
|
});
|
|
|
|
test('returns workspace matching active ID', () async {
|
|
container = createContainer();
|
|
await container.read(workspaceListProvider.future);
|
|
|
|
final ws = Workspace.create(
|
|
name: 'Test',
|
|
relayUrl: 'https://test.example.com',
|
|
);
|
|
final notifier = container.read(workspaceListProvider.notifier);
|
|
await notifier.addWorkspace(ws);
|
|
await notifier.switchWorkspace(ws.id);
|
|
|
|
final active = await container.read(activeWorkspaceProvider.future);
|
|
expect(active, isNotNull);
|
|
expect(active!.id, ws.id);
|
|
expect(active.name, 'Test');
|
|
});
|
|
|
|
test('falls back to first workspace if active ID is invalid', () async {
|
|
container = createContainer();
|
|
await container.read(workspaceListProvider.future);
|
|
|
|
final ws = Workspace.create(
|
|
name: 'Fallback',
|
|
relayUrl: 'https://test.example.com',
|
|
);
|
|
final notifier = container.read(workspaceListProvider.notifier);
|
|
await notifier.addWorkspace(ws);
|
|
|
|
// Set an invalid active ID.
|
|
await workspaceStorage.saveActiveId('nonexistent-id');
|
|
|
|
// Re-read — should fall back.
|
|
container.invalidate(activeWorkspaceProvider);
|
|
final active = await container.read(activeWorkspaceProvider.future);
|
|
expect(active, isNotNull);
|
|
expect(active!.id, ws.id);
|
|
});
|
|
});
|
|
}
|