- App.tsx: full navigation (Auth stack + Main tabs with 5 screens) - Auth: LoginScreen, RegisterScreen, ForgotPasswordScreen - HomeScreen: dashboard with IoT metrics, weather widget, alerts, quick actions, sensors - MapScreen: interactive map with layer toggles (6 layers) - MarketplaceScreen: categories (6), products (5), search - ChatScreen: AI chat with quick prompts (4), bot responses - ProfileScreen: user info, stats, menu (9 items), logout - AlertsScreen: alert list with severity, acknowledge - SensorsScreen: sensor list with type filters (6 types), search - ZonesScreen: zone cards with stats - SettingsScreen: language picker (FR/EN/ES/DE), privacy, about - Stores: iotStore (sensors, zones, alerts), notificationStore, uiStore + i18n - Hooks: useSensors, useAlerts, useNotifications, useLocation - Components: Card, Button, LoadingSpinner, ErrorBoundary, Header - Services: iotService, notificationService (with axios API client) - Utils: formatters (temp, AQI, noise, dates), validators (email, password, IBAN) - Theme: colors.ts with full design system (Blue Ocean palette) - Ditto: fixed MongoDB connection, new JWT secrets, official gateway image
71 lines
1.7 KiB
JavaScript
71 lines
1.7 KiB
JavaScript
"use strict";
|
|
|
|
const generate = require("@babel/generator").default;
|
|
const { toMatchSnapshot } = require("jest-snapshot");
|
|
const generateOptions = {
|
|
concise: true,
|
|
sourceType: "module",
|
|
};
|
|
const codeFromAst = (ast) => generate(ast, generateOptions).code;
|
|
const comparableCode = (code) => code.trim().replace(/\s+/g, " ");
|
|
function toEqualComparableCode(received, expected) {
|
|
const comparableExpected = comparableCode(expected);
|
|
const pass = received === comparableExpected;
|
|
const options = {
|
|
isNot: this.isNot,
|
|
promise: this.promise,
|
|
};
|
|
const message = pass
|
|
? () =>
|
|
this.utils.matcherHint(
|
|
"toEqualComparableCode",
|
|
undefined,
|
|
undefined,
|
|
options
|
|
) +
|
|
"\n\n" +
|
|
`Expected: not ${this.utils.printExpected(comparableExpected)}\n` +
|
|
`Received: ${this.utils.printReceived(received)}`
|
|
: () => {
|
|
const diffString = this.utils.printDiffOrStringify(
|
|
comparableExpected,
|
|
received,
|
|
"expected",
|
|
"received",
|
|
this.expand
|
|
);
|
|
return (
|
|
this.utils.matcherHint(
|
|
"toEqualComparableCode",
|
|
undefined,
|
|
undefined,
|
|
options
|
|
) +
|
|
"\n\n" +
|
|
diffString
|
|
);
|
|
};
|
|
return {
|
|
actual: received,
|
|
message,
|
|
pass,
|
|
};
|
|
}
|
|
const ANSI_PATTERN = /\x1b\[[0-9;]*m/g;
|
|
function trimANSICodes(input) {
|
|
return input.replace(ANSI_PATTERN, "");
|
|
}
|
|
function toMatchCodeFrameSnapshot(received) {
|
|
return toMatchSnapshot.call(
|
|
this,
|
|
trimANSICodes(received),
|
|
"toMatchCodeFrameSnapshot"
|
|
);
|
|
}
|
|
module.exports = {
|
|
codeFromAst,
|
|
comparableCode,
|
|
toEqualComparableCode,
|
|
toMatchCodeFrameSnapshot,
|
|
};
|