import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; import 'package:please_pay_me/core/config/app_config.dart'; import 'package:please_pay_me/core/config/env_file.dart'; void main() { group('parseEnvFile', () { test('reads keys, comments and quoted values', () { const source = ''' # comment PPM_API_BASE_URL=https://please-pay-me.ru/ PPM_WEB_URL="https://please-pay-me.ru" PPM_DEMO=false EMPTY= '''; final values = parseEnvFile(source); expect(values['PPM_API_BASE_URL'], 'https://please-pay-me.ru/'); expect(values['PPM_WEB_URL'], 'https://please-pay-me.ru'); expect(values['PPM_DEMO'], 'false'); expect(values.containsKey('EMPTY'), isTrue); expect(values['EMPTY'], ''); }); }); group('AppConfig.fromMap', () { test('strips a trailing slash and defaults the cabinet URL', () { final config = AppConfig.fromMap({ 'PPM_API_BASE_URL': 'https://please-pay-me.ru/', }); expect(config.apiBaseUrl, 'https://please-pay-me.ru'); expect(config.webCabinetUrl, 'https://please-pay-me.ru'); expect(config.demoMode, isFalse); }); test('empty map uses the production cabinet', () { final config = AppConfig.fromMap(const {}); expect(config.apiBaseUrl, AppConfig.productionOrigin); expect(config.webCabinetUrl, AppConfig.productionOrigin); expect(config.demoMode, isFalse); }); test('PPM_DEMO=true forces demo even when a URL is set', () { final config = AppConfig.fromMap({ 'PPM_API_BASE_URL': 'https://please-pay-me.ru', 'PPM_DEMO': 'true', }); expect(config.demoMode, isTrue); expect(config.apiBaseUrl, 'https://please-pay-me.ru'); }); }); test('.env.example stays in sync with the parser', () { final text = File('.env.example').readAsStringSync(); final values = parseEnvFile(text); final config = AppConfig.fromMap(values); expect(values.containsKey('PPM_API_BASE_URL'), isTrue); expect(config.apiBaseUrl, isNotEmpty); expect(config.demoMode, isFalse); }); }