import 'package:flutter_test/flutter_test.dart'; import 'package:sysfarma_mobile/src/core/access/module_access.dart'; import 'package:sysfarma_mobile/src/core/models/tenant_session.dart'; TenantSession _sessionWithModules(List? modules) => TenantSession( baseUrl: 'https://demo.sysfarma.pe', token: 'token', userType: 'seller', moduleValues: modules, ); void main() { group('TenantSession.hasModule', () { test('respeta la lista de modulos cuando no esta vacia', () { final session = _sessionWithModules(['documents', 'pos']); expect(session.hasModule('documents'), isTrue); expect(session.hasModule('purchases'), isFalse); }); test('sesion sin lista (null) se trata como "todos habilitados"', () { final session = _sessionWithModules(null); expect(session.hasModule('purchases'), isTrue); expect(session.hasModule('items'), isTrue); }); test('lista vacia se trata como "todos habilitados" (mismo fallback que la web)', () { final session = _sessionWithModules(const []); expect(session.hasModule('inventory'), isTrue); }); }); group('ModuleAccess.routeAllowed', () { test('bloquea una ruta con modulo requerido que el usuario no tiene', () { final session = _sessionWithModules(['documents']); expect(ModuleAccess.routeAllowed('/purchases', session), isFalse); }); test('permite una ruta cuyo modulo si esta en la lista', () { final session = _sessionWithModules(['documents']); expect(ModuleAccess.routeAllowed('/sales-history', session), isTrue); }); test('permite subrutas del mismo prefijo (ej. /reports/general)', () { final session = _sessionWithModules(['reports']); expect(ModuleAccess.routeAllowed('/reports/general', session), isTrue); }); test('rutas sin requisito de modulo (home, scanner, stocktake) siempre pasan', () { final session = _sessionWithModules(['documents']); expect(ModuleAccess.routeAllowed('/home', session), isTrue); expect(ModuleAccess.routeAllowed('/scanner', session), isTrue); expect(ModuleAccess.routeAllowed('/stocktake', session), isTrue); }); }); }