Files
encoach_backend_new_v2/odoo/addons/web/static/tests/reactivity.test.js
Yamen Ahmad 3e83d8d7d5 feat: add complete EnCoach backend — Odoo 19 + all addons
Includes:
- Odoo 19 framework (odoo/)
- 27 custom EnCoach addons (new_project/custom_addons/)
  - encoach_core, encoach_api, encoach_lms_api, encoach_adaptive_api
  - encoach_exam, encoach_taxonomy, encoach_adaptive, encoach_assignment
  - encoach_ai, encoach_ai_grading, encoach_ai_generation, encoach_ai_media
  - encoach_courseware, encoach_communication, encoach_subscription
  - encoach_notification, encoach_approval, encoach_branding
  - encoach_classroom, encoach_registration, encoach_stats
  - encoach_faq, encoach_ticket, encoach_training, encoach_resources
  - encoach_adaptive_ai, encoach_sis
- 21 OpenEduCat Enterprise modules (new_project/enterprise-19/)
- 14 OpenEduCat Community modules (new_project/openeducat_erp-19.0/)
- Configuration: odoo.conf, requirements.txt, scripts
- 200+ REST API endpoints with JWT authentication
- SRS and test documentation

Made-with: Cursor
2026-04-01 17:10:04 +04:00

43 lines
1.3 KiB
JavaScript

import { describe, expect, test } from "@odoo/hoot";
import { reactive, toRaw } from "@odoo/owl";
const {
DateTime,
Duration,
FixedOffsetZone,
IANAZone,
Info,
Interval,
InvalidZone,
Settings,
SystemZone,
Zone,
} = luxon;
describe.current.tags("headless");
test(`Luxon objects can't be made reactive`, async () => {
const obj = reactive({
DateTime: DateTime.now(),
Duration: Duration.fromObject({ seconds: 10 }),
FixedOffsetZone: FixedOffsetZone.instance(0),
IANAZone: IANAZone.create("CET"),
Info: Info,
Interval: Interval.before(DateTime.now(), { seconds: 10 }),
InvalidZone: new InvalidZone("invalid"),
Settings: new Settings(),
SystemZone: new SystemZone(),
Zone: new Zone(),
});
expect(obj.DateTime).toBe(toRaw(obj.DateTime));
expect(obj.Duration).toBe(toRaw(obj.Duration));
expect(obj.FixedOffsetZone).toBe(toRaw(obj.FixedOffsetZone));
expect(obj.IANAZone).toBe(toRaw(obj.IANAZone));
expect(obj.Info).toBe(toRaw(obj.Info));
expect(obj.Interval).toBe(toRaw(obj.Interval));
expect(obj.InvalidZone).toBe(toRaw(obj.InvalidZone));
expect(obj.Settings).toBe(toRaw(obj.Settings));
expect(obj.SystemZone).toBe(toRaw(obj.SystemZone));
expect(obj.Zone).toBe(toRaw(obj.Zone));
});