Files
tripz-llc/apps/rider/packages/get/test/instance/get_instance_test.dart
T
Hamza-AyedandClaude Opus 5 4d8414c96b feat: استيراد كود سيرو إلى تريبز (سيرو @ecfe7568) — بلا تعديل
قرار المالك 2026-07-27: باك إند سيرو PHP هو المعتمد، وتطبيقاته المجرّبة
ميدانياً تحل محل إعادة البناء المؤرشفة. سيرو نفسه لم يُمسّ.

الخريطة:
  backend · payment_server · loction_server · ride_server ·
  passenger_server · docker · dashboard · stress_test  → الجذر
  siro_rider  → apps/rider          siro_driver  → apps/driver
  siro_admin  → dashboards/admin    siro_service → dashboards/service
  android_bot → apps/android_bot    socialBot    → apps/socialBot

نُسخ المتعقَّب في git سيرو فقط عبر `git archive` (3,198 ملفاً / ~169 م.ب)
لا `cp -r` — فاستُثنيت مخلفات البناء تلقائياً. بلا أي تعديل محتوى عمداً:
كل ما يلي يصير فرقاً مقروءاً مقابل المصدر.

لم يُستورد وسببه: siromove.com (الموقع التسويقي يبقى marketing/ في تريبز،
سيرو فيه 8 ملفات) · docs و planning (تريبز له docs/ الخاص) · deploy.sh
(ليس نشراً على سيرفر بل `git add . && git push origin --all` — فخّ في
مستودع آخر) · transit_dashboard (بانتظار قرار مصير backend-transit و
dashboards/transit-web).

⚠️ لا يبني بعد — ثلاثة نواقص متوقعة ومقصودة:
1. `.env` و `lib/env/env.g.dart` غير متعقَّبين في سيرو (أسرار لكل مستأجر):
   كل تطبيق فلاتر يحتاج .env خاصاً ثم توليد env.g.dart بـ build_runner.
2. إعدادات Firebase (9 ملفات google-services.json و GoogleService-Info.plist)
   يستبعدها .gitignore تريبز — ولكل مستأجر مشروع Firebase خاص أصلاً.
3. apps/driver في سيرو يشير إلى `../../Intaleq/packages/get` خارج المستودع →
   يجب ضمّ الحزم داخله أسوة بـ apps/rider.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 05:14:13 +03:00

285 lines
8.6 KiB
Dart

// ignore_for_file: avoid_classes_with_only_static_members
import 'package:flutter_test/flutter_test.dart';
import 'package:get/get.dart';
import 'util/matcher.dart' as m;
class Mock {
static Future<String> test() async {
await Future.delayed(Duration.zero);
return 'test';
}
}
abstract class MyController extends GetLifeCycle {}
class DisposableController extends MyController {}
// ignore: one_member_abstracts
abstract class Service {
String post();
}
class Api implements Service {
@override
String post() {
return 'test';
}
}
void main() {
test('Get.putAsync test', () async {
await Get.putAsync<String>(Mock.test);
expect('test', Get.find<String>());
Get.reset();
});
test('Get.put test', () async {
final instance = Get.put<Controller>(Controller());
expect(instance, Get.find<Controller>());
Get.reset();
});
test('Get start and delete called just one time', () async {
Get
..put(Controller())
..put(Controller());
final controller = Get.find<Controller>();
expect(controller.init, 1);
Get
..delete<Controller>()
..delete<Controller>();
expect(controller.close, 1);
Get.reset();
});
test('Get.put tag test', () async {
final instance = Get.put<Controller>(Controller(), tag: 'one');
final instance2 = Get.put<Controller>(Controller(), tag: 'two');
expect(instance == instance2, false);
expect(Get.find<Controller>(tag: 'one') == Get.find<Controller>(tag: 'two'),
false);
expect(Get.find<Controller>(tag: 'one') == Get.find<Controller>(tag: 'one'),
true);
expect(Get.find<Controller>(tag: 'two') == Get.find<Controller>(tag: 'two'),
true);
Get.reset();
});
test('Get.lazyPut tag test', () async {
Get.lazyPut<Controller>(Controller.new, tag: 'one');
Get.lazyPut<Controller>(Controller.new, tag: 'two');
expect(Get.find<Controller>(tag: 'one') == Get.find<Controller>(tag: 'two'),
false);
expect(Get.find<Controller>(tag: 'one') == Get.find<Controller>(tag: 'one'),
true);
expect(Get.find<Controller>(tag: 'two') == Get.find<Controller>(tag: 'two'),
true);
Get.reset();
});
test('Get.lazyPut test', () async {
final controller = Controller();
Get.lazyPut<Controller>(() => controller);
final ct1 = Get.find<Controller>();
expect(ct1, controller);
Get.reset();
});
test('Get.lazyPut fenix test', () async {
Get.lazyPut<Controller>(Controller.new, fenix: true);
Get.find<Controller>().increment();
expect(Get.find<Controller>().count, 1);
Get.delete<Controller>();
expect(Get.find<Controller>().count, 0);
Get.reset();
});
test('Get.lazyPut without fenix', () async {
Get.lazyPut<Controller>(Controller.new);
Get.find<Controller>().increment();
expect(Get.find<Controller>().count, 1);
Get.delete<Controller>();
expect(
() => Get.find<Controller>(), throwsA(const m.TypeMatcher<String>()));
Get.reset();
});
test('Get.reloadInstance test', () async {
Get.lazyPut<Controller>(Controller.new);
var ct1 = Get.find<Controller>();
ct1.increment();
expect(ct1.count, 1);
ct1 = Get.find<Controller>();
expect(ct1.count, 1);
GetInstance().reload<Controller>();
ct1 = Get.find<Controller>();
expect(ct1.count, 0);
Get.reset();
});
test('GetxService test', () async {
Get.lazyPut<PermanentService>(PermanentService.new);
var sv1 = Get.find<PermanentService>();
var sv2 = Get.find<PermanentService>();
expect(sv1, sv2);
expect(Get.isRegistered<PermanentService>(), true);
Get.delete<PermanentService>();
expect(Get.isRegistered<PermanentService>(), true);
Get.delete<PermanentService>(force: true);
expect(Get.isRegistered<PermanentService>(), false);
Get.reset();
});
test('Get.lazyPut with abstract class test', () async {
final api = Api();
Get.lazyPut<Service>(() => api);
final ct1 = Get.find<Service>();
expect(ct1, api);
Get.reset();
});
test('Get.create with abstract class test', () async {
Get.create<Service>(Api.new);
final ct1 = Get.find<Service>();
final ct2 = Get.find<Service>();
// expect(ct1 is Service, true);
// expect(ct2 is Service, true);
expect(ct1 == ct2, false);
Get.reset();
});
group('test put, delete and check onInit execution', () {
tearDownAll(Get.reset);
test('Get.put test with init check', () async {
final instance = Get.put(DisposableController());
expect(instance, Get.find<DisposableController>());
expect(instance.initialized, true);
});
test('Get.delete test with disposable controller', () async {
// Get.put(DisposableController());
expect(await Get.delete<DisposableController>(), true);
expect(() => Get.find<DisposableController>(),
throwsA(const m.TypeMatcher<String>()));
});
test('Get.put test after delete with disposable controller and init check',
() async {
final instance = Get.put<DisposableController>(DisposableController());
expect(instance, Get.find<DisposableController>());
expect(instance.initialized, true);
});
});
group('Get.replace test for replacing parent instance that is', () {
tearDown(Get.reset);
test('temporary', () async {
Get.put(DisposableController());
Get.replace<DisposableController>(Controller());
final instance = Get.find<DisposableController>();
expect(instance is Controller, isTrue);
expect((instance as Controller).init, greaterThan(0));
});
test('permanent', () async {
Get.put(DisposableController(), permanent: true);
Get.replace<DisposableController>(Controller());
final instance = Get.find<DisposableController>();
expect(instance is Controller, isTrue);
expect((instance as Controller).init, greaterThan(0));
});
test('tagged temporary', () async {
const tag = 'tag';
Get.put(DisposableController(), tag: tag);
Get.replace<DisposableController>(Controller(), tag: tag);
final instance = Get.find<DisposableController>(tag: tag);
expect(instance is Controller, isTrue);
expect((instance as Controller).init, greaterThan(0));
});
test('tagged permanent', () async {
const tag = 'tag';
Get.put(DisposableController(), permanent: true, tag: tag);
Get.replace<DisposableController>(Controller(), tag: tag);
final instance = Get.find<DisposableController>(tag: tag);
expect(instance is Controller, isTrue);
expect((instance as Controller).init, greaterThan(0));
});
test('a generic parent type', () async {
const tag = 'tag';
Get.put<MyController>(DisposableController(), permanent: true, tag: tag);
Get.replace<MyController>(Controller(), tag: tag);
final instance = Get.find<MyController>(tag: tag);
expect(instance is Controller, isTrue);
expect((instance as Controller).init, greaterThan(0));
});
});
group('Get.lazyReplace replaces parent instance', () {
tearDown(Get.reset);
test('without fenix', () async {
Get.put(DisposableController());
Get.lazyReplace<DisposableController>(Controller.new);
final instance = Get.find<DisposableController>();
expect(instance, isA<Controller>());
expect((instance as Controller).init, greaterThan(0));
});
test('with fenix', () async {
Get.put(DisposableController());
Get.lazyReplace<DisposableController>(Controller.new, fenix: true);
expect(Get.find<DisposableController>(), isA<Controller>());
(Get.find<DisposableController>() as Controller).increment();
expect((Get.find<DisposableController>() as Controller).count, 1);
Get.delete<DisposableController>();
expect((Get.find<DisposableController>() as Controller).count, 0);
});
test('with fenix when parent is permanent', () async {
Get.put(DisposableController(), permanent: true);
Get.lazyReplace<DisposableController>(Controller.new);
final instance = Get.find<DisposableController>();
expect(instance, isA<Controller>());
(instance as Controller).increment();
expect((Get.find<DisposableController>() as Controller).count, 1);
Get.delete<DisposableController>();
expect((Get.find<DisposableController>() as Controller).count, 0);
});
});
}
class PermanentService extends GetxService {}
class Controller extends DisposableController {
int init = 0;
int close = 0;
int count = 0;
@override
void onInit() {
init++;
super.onInit();
}
@override
void onClose() {
close++;
super.onClose();
}
void increment() {
count++;
}
}