feat(proj): init

This commit is contained in:
vl.arkhangelskii
2026-09-21 04:06:43 +03:00
commit c956b94983
1076 changed files with 50876 additions and 0 deletions
+68
View File
@@ -0,0 +1,68 @@
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);
});
}