@eohjsc/react-native-smart-city 0.2.97 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -14
- package/package.json +4 -2
- package/src/commons/Action/ItemQuickAction.js +5 -2
- package/src/commons/ActionGroup/ColorPickerTemplate.js +1 -1
- package/src/commons/ActionGroup/CurtainButtonTemplate.js +10 -5
- package/src/commons/ActionGroup/NumberUpDownActionTemplate.js +12 -4
- package/src/commons/ActionGroup/OnOffSmartLock/AutoLock/__test__/index.test.js +4 -0
- package/src/commons/ActionGroup/OnOffSmartLock/OnOffSmartLock.js +7 -4
- package/src/commons/ActionGroup/OnOffSmartLock/PasscodeList/ItemPasscode.js +1 -1
- package/src/commons/ActionGroup/OnOffSmartLock/PasscodeList/__test__/ItemPasscode.test.js +24 -0
- package/src/commons/ActionGroup/OnOffSmartLock/SetupGeneratePasscode/__test__/index.test.js +14 -0
- package/src/commons/ActionGroup/OnOffSmartLock/SetupGeneratePasscode/index.js +1 -0
- package/src/commons/ActionGroup/OnOffTemplate/OnOffSimpleTemplate.js +10 -10
- package/src/commons/ActionGroup/OnOffTemplate/index.js +18 -15
- package/src/commons/ActionGroup/OptionsDropdownActionTemplate.js +9 -3
- package/src/commons/ActionGroup/SliderRangeTemplate.js +1 -1
- package/src/commons/ActionGroup/SmartTiviActionTemplate/SmartTiviActionTemplate.js +4 -1
- package/src/commons/ActionGroup/StatesGridActionTemplate.js +22 -8
- package/src/commons/ActionGroup/TimerActionTemplate.js +11 -3
- package/src/commons/ActionGroup/TwoButtonTemplate/index.js +13 -9
- package/src/commons/ActionGroup/__test__/CurtainButtonTemplate.test.js +53 -4
- package/src/commons/ActionGroup/__test__/OnOffButtonTemplate.test.js +14 -14
- package/src/commons/ActionGroup/__test__/OnOffTemplate.test.js +53 -78
- package/src/commons/ActionGroup/__test__/OneBigButtonTemplate.test.js +36 -20
- package/src/commons/ActionGroup/__test__/StatesGridActionTemplate.test.js +77 -0
- package/src/commons/ActionGroup/__test__/TimerActionTemplate.test.js +58 -6
- package/src/commons/ActionGroup/__test__/TwoButtonTemplate.test.js +49 -1
- package/src/commons/ActionGroup/__test__/index.test.js +135 -0
- package/src/commons/Auth/AccountList.js +1 -1
- package/src/commons/Automate/ItemAutomate.js +1 -3
- package/src/commons/Calendar/__test__/Calendar.test.js +33 -0
- package/src/commons/Connecting/__test__/Connecting.test.js +19 -2
- package/src/commons/ConnectingProcess/__test__/Connecting.test.js +136 -3
- package/src/commons/ConnectingProcess/index.js +1 -1
- package/src/commons/Dashboard/MyPinnedSharedUnit/__test__/MyPinnedSharedUnit.test.js +16 -13
- package/src/commons/Dashboard/MyPinnedSharedUnit/index.js +1 -1
- package/src/commons/Dashboard/MyUnit/__test__/MyUnit.test.js +0 -5
- package/src/commons/Device/Hanet/ItemHanetDevice.test.js +58 -0
- package/src/commons/Device/HistoryChart.js +4 -0
- package/src/commons/Device/LinearChart.js +15 -0
- package/src/commons/Device/PMSensor/PMSensorIndicatior.js +16 -12
- package/src/commons/Device/PMSensor/PMSensorIndicatorStyles.js +3 -0
- package/src/commons/Device/WaterQualitySensor/ListQualityIndicator.js +1 -0
- package/src/commons/Explore/__test__/CityItem.test.js +33 -54
- package/src/commons/FieldTemplate/ChooseUserField/ChooseFieldStyles.js +25 -0
- package/src/commons/FieldTemplate/ChooseUserField/ChoosePopup.js +96 -0
- package/src/commons/FieldTemplate/ChooseUserField/ChoosePopupStyles.js +39 -0
- package/src/commons/FieldTemplate/ChooseUserField/__test__/index.test.js +118 -0
- package/src/commons/FieldTemplate/ChooseUserField/index.js +62 -0
- package/src/commons/FieldTemplate/PasscodeField/PasscodeFieldStyles.js +30 -0
- package/src/commons/FieldTemplate/PasscodeField/__test__/index.test.js +90 -0
- package/src/commons/FieldTemplate/PasscodeField/index.js +43 -0
- package/src/commons/FieldTemplate/ScheduleField/ScheduleFieldStyles.js +13 -0
- package/src/commons/FieldTemplate/ScheduleField/__test__/index.test.js +179 -0
- package/src/commons/FieldTemplate/ScheduleField/index.js +176 -0
- package/src/commons/FullLoading/index.js +2 -1
- package/src/commons/MenuActionAddnew/index.js +1 -0
- package/src/commons/MenuActionList/index.js +1 -0
- package/src/commons/MenuActionMore/index.js +1 -1
- package/src/commons/PreventAccess/__test__/PreventAccess.test.js +62 -0
- package/src/commons/PreventAccess/index.js +9 -1
- package/src/commons/Sharing/__test__/DevicePermissionsCheckbox.test.js +0 -1
- package/src/commons/SubUnit/OneTap/__test__/SubUnitAutomate.test.js +8 -35
- package/src/commons/SubUnit/OneTap/index.js +1 -2
- package/src/commons/Unit/SharedUnit.js +1 -0
- package/src/commons/Unit/__test__/SharedUnit.test.js +38 -183
- package/src/commons/WheelDateTimePicker/index.js +2 -1
- package/src/configs/API.js +87 -138
- package/src/configs/Constants.js +27 -1
- package/src/configs/SCConfig.js +2 -0
- package/src/iot/RemoteControl/__test__/GoogleHome.test.js +8 -30
- package/src/iot/RemoteControl/__test__/Internet.test.js +18 -7
- package/src/iot/RemoteControl/__test__/LgThinq.test.js +36 -177
- package/src/navigations/UnitStack.js +8 -0
- package/src/screens/AQIGuide/index.js +1 -1
- package/src/screens/ActivityLog/FilterPopup.js +2 -0
- package/src/screens/ActivityLog/__test__/index.test.js +38 -23
- package/src/screens/ActivityLog/hooks/__test__/index.test.js +51 -90
- package/src/screens/ActivityLog/index.js +2 -2
- package/src/screens/AddCommon/SelectSubUnit.js +1 -0
- package/src/screens/AddCommon/SelectUnit.js +1 -0
- package/src/screens/AddCommon/__test__/SelectSubUnit.test.js +13 -24
- package/src/screens/AddCommon/__test__/SelectUnit.test.js +9 -33
- package/src/screens/AddLocationMaps/index.js +4 -1
- package/src/screens/AddNewAction/SelectSensorDevices.js +8 -2
- package/src/screens/AddNewAction/__test__/SelectAction.test.js +10 -91
- package/src/screens/AddNewAction/__test__/SelectSensorDevices.test.js +40 -26
- package/src/screens/AddNewAutoSmart/__test__/AddNewAutoSmart.test.js +3 -1
- package/src/screens/AddNewAutoSmart/index.js +5 -2
- package/src/screens/AddNewDevice/ConnectingDevices.js +3 -3
- package/src/screens/AddNewDevice/__test__/AddNewDevice.test.js +34 -33
- package/src/screens/AddNewDevice/__test__/ConnectDevices.test.js +0 -4
- package/src/screens/AddNewDevice/__test__/ConnectingDevices.test.js +21 -21
- package/src/screens/AddNewDevice/index.js +1 -0
- package/src/screens/AddNewGateway/PlugAndPlay/GatewayWifiList.js +4 -1
- package/src/screens/AddNewGateway/SelectGateway.js +1 -0
- package/src/screens/AddNewGateway/SetupGatewayWifi.js +1 -0
- package/src/screens/AddNewGateway/__test__/AddNewGateway.test.js +4 -6
- package/src/screens/AddNewGateway/__test__/ConnectedGateway.test.js +0 -4
- package/src/screens/AddNewGateway/__test__/ConnectingGateway.test.js +5 -29
- package/src/screens/AddNewGateway/__test__/SelectGateway.test.js +0 -4
- package/src/screens/AddNewGateway/__test__/SetupGateway.test.js +0 -4
- package/src/screens/AddNewGateway/index.js +1 -0
- package/src/screens/AddNewOneTap/__test__/AddNewOneTap.test.js +10 -24
- package/src/screens/AddNewOneTap/index.js +3 -2
- package/src/screens/Automate/__test__/MultiUnits.test.js +6 -9
- package/src/screens/Automate/__test__/index.test.js +7 -12
- package/src/screens/Automate/index.js +2 -0
- package/src/screens/ConfirmUnitDeletion/__test__/ConfirmUnitDeletion.test.js +36 -8
- package/src/screens/ConfirmUnitDeletion/index.js +7 -1
- package/src/screens/Device/EditDevice/__test__/EditDevice.test.js +71 -22
- package/src/screens/Device/__test__/detail.test.js +23 -84
- package/src/screens/Device/detail.js +31 -8
- package/src/screens/Device/hooks/useFavoriteDevice.js +5 -9
- package/src/screens/DeviceInfo/__test__/index.test.js +0 -2
- package/src/screens/EmergencyContacts/EmergencyContactsSelectContacts.js +6 -3
- package/src/screens/EmergencyContacts/__test__/EmergencyContactAddNew.test.js +7 -19
- package/src/screens/EmergencyContacts/__test__/EmergencyContactList.test.js +20 -2
- package/src/screens/EmergencyContacts/__test__/EmergencyContactsSelectContacts.test.js +40 -23
- package/src/screens/EmergencySetting/index.js +4 -1
- package/src/screens/EnterPassword/__test__/EnterPassword.test.js +41 -25
- package/src/screens/Explore/index.js +2 -0
- package/src/screens/GuestInfo/__test__/index.test.js +14 -41
- package/src/screens/GuestInfo/components/RecurringDetail.js +1 -0
- package/src/screens/GuestInfo/components/TemporaryDetail.js +2 -2
- package/src/screens/HanetCamera/__test__/CaptureFaceID.test.js +8 -12
- package/src/screens/HanetCamera/__test__/Detail.test.js +27 -42
- package/src/screens/HanetCamera/__test__/ManageAccess.test.js +8 -5
- package/src/screens/HanetCamera/__test__/MemberInfo.test.js +10 -32
- package/src/screens/HanetCamera/hooks/__test__/useHanetCheckinData.test.js +43 -35
- package/src/screens/HanetCamera/hooks/__test__/useHanetPlaceMembers.test.js +10 -21
- package/src/screens/ManageAccess/__test__/ManageAccess.test.js +33 -22
- package/src/screens/ManageAccess/hooks/__test__/useManageAccess.test.js +44 -45
- package/src/screens/ManageAccess/index.js +2 -1
- package/src/screens/MoveToAnotherSubUnit/__test__/index.test.js +35 -12
- package/src/screens/MoveToAnotherSubUnit/index.js +5 -5
- package/src/screens/Notification/__test__/Notification.test.js +14 -25
- package/src/screens/Notification/__test__/NotificationItem.test.js +4 -3
- package/src/screens/PlayBackCamera/__test__/index.test.js +87 -2
- package/src/screens/PlayBackCamera/index.js +19 -3
- package/src/screens/ScanChipQR/__test__/ScanChipQR.test.js +7 -20
- package/src/screens/ScanChipQR/components/QRScan/index.js +1 -0
- package/src/screens/ScanSensorQR/__test__/ScanSensorQR.test.js +8 -24
- package/src/screens/ScriptDetail/__test__/index.test.js +17 -86
- package/src/screens/ScriptDetail/index.js +5 -4
- package/src/screens/SelectUnit/__test__/index.test.js +12 -55
- package/src/screens/SelectUnit/index.js +5 -2
- package/src/screens/SetSchedule/index.js +6 -2
- package/src/screens/SharedUnit/__test__/TabHeader.test.js +0 -2
- package/src/screens/SharedUnit/index.js +2 -0
- package/src/screens/Sharing/InfoMemberUnit.js +1 -1
- package/src/screens/Sharing/MemberList.js +12 -11
- package/src/screens/Sharing/SelectPermission.js +107 -70
- package/src/screens/Sharing/__test__/InfoMemberUnit.test.js +47 -29
- package/src/screens/Sharing/__test__/MemberList.test.js +13 -127
- package/src/screens/Sharing/__test__/MemberList2.test.js +80 -0
- package/src/screens/Sharing/__test__/SelectPermission.test.js +28 -38
- package/src/screens/Sharing/__test__/SelectUser.test.js +17 -38
- package/src/screens/Sharing/hooks/index.js +3 -0
- package/src/screens/SideMenuDetail/SideMenuDetailStyles.js +28 -0
- package/src/screens/SideMenuDetail/__test__/index.test.js +154 -0
- package/src/screens/SideMenuDetail/index.js +149 -0
- package/src/screens/SmartIr/components/SelectBrand.js +1 -1
- package/src/screens/SubUnit/ManageSubUnit.js +1 -0
- package/src/screens/SubUnit/__test__/AddSubUnit.test.js +21 -67
- package/src/screens/SubUnit/__test__/Detail.test.js +31 -8
- package/src/screens/SubUnit/__test__/EditSubUnit.test.js +21 -89
- package/src/screens/SubUnit/hooks/__test__/useManageSubUnit.test.js +47 -44
- package/src/screens/SyncLGDevice/AddLGDevice.js +1 -0
- package/src/screens/SyncLGDevice/__test__/AddLGDevice.test.js +14 -90
- package/src/screens/TDSGuide/index.js +4 -1
- package/src/screens/UVIndexGuide/index.js +1 -1
- package/src/screens/Unit/ChooseLocation.js +1 -1
- package/src/screens/Unit/ManageUnit.js +1 -0
- package/src/screens/Unit/SelectAddress.js +4 -1
- package/src/screens/Unit/Station/index.js +1 -0
- package/src/screens/Unit/Summaries.js +1 -1
- package/src/screens/Unit/__test__/CheckSendEmail.test.js +15 -28
- package/src/screens/Unit/__test__/ChooseLocation.test.js +27 -14
- package/src/screens/Unit/__test__/Detail.test.js +83 -185
- package/src/screens/Unit/__test__/ManageUnit.test.js +18 -42
- package/src/screens/Unit/__test__/SelectAddress.test.js +13 -39
- package/src/screens/Unit/__test__/SmartAccount.test.js +17 -9
- package/src/screens/Unit/__test__/SmartAccountItem.test.js +0 -1
- package/src/screens/Unit/components/MyAllUnit/__test__/MyAllUnit.test.js +36 -0
- package/src/screens/Unit/components/MyAllUnit/__test__/index.test.js +54 -0
- package/src/screens/Unit/components/SharedUnit/index.js +1 -0
- package/src/screens/Unit/components/__test__/SharedUnit.test.js +31 -34
- package/src/screens/UnitSummary/__test__/index.test.js +38 -31
- package/src/screens/UnitSummary/components/PowerConsumeHistoryChart/__test__/index.test.js +7 -4
- package/src/screens/UnitSummary/components/PowerConsumption/__test__/PowerConsumption.test.js +14 -16
- package/src/screens/WaterQualityGuide/index.js +1 -1
- package/src/utils/Apis/axios.js +37 -13
- package/src/utils/I18n/translations/en.json +1 -0
- package/src/utils/I18n/translations/vi.json +1 -0
- package/src/utils/Route/index.js +1 -0
- package/src/utils/Utils.js +6 -6
|
@@ -14,9 +14,9 @@ import { Colors } from '../../configs';
|
|
|
14
14
|
import { useConfigGlobalState } from '../../iot/states';
|
|
15
15
|
import BottomScrollPicker from '../BottomScrollPicker';
|
|
16
16
|
|
|
17
|
-
const TimerActionTemplate = ({ actionGroup, doAction, sensor }) => {
|
|
17
|
+
const TimerActionTemplate = ({ actionGroup = {}, doAction, sensor = {} }) => {
|
|
18
18
|
const t = useTranslations();
|
|
19
|
-
const { configuration, title } = actionGroup;
|
|
19
|
+
const { configuration = {}, title } = actionGroup;
|
|
20
20
|
const [showTime, setShowTime] = useState(false);
|
|
21
21
|
const [showHour, setShowHour] = useState(false);
|
|
22
22
|
|
|
@@ -94,6 +94,7 @@ const TimerActionTemplate = ({ actionGroup, doAction, sensor }) => {
|
|
|
94
94
|
if (sensor.is_managed_by_backend) {
|
|
95
95
|
hour !== undefined &&
|
|
96
96
|
minute !== undefined &&
|
|
97
|
+
sensor.device_type !== 'GOOGLE_HOME' &&
|
|
97
98
|
watchMultiConfigs([
|
|
98
99
|
configuration.config_hour,
|
|
99
100
|
configuration.config_minute,
|
|
@@ -106,13 +107,17 @@ const TimerActionTemplate = ({ actionGroup, doAction, sensor }) => {
|
|
|
106
107
|
configuration.config_minute,
|
|
107
108
|
doAction,
|
|
108
109
|
sensor.is_managed_by_backend,
|
|
110
|
+
sensor.device_type,
|
|
109
111
|
]
|
|
110
112
|
);
|
|
111
113
|
|
|
112
114
|
const doActionHour = useCallback(
|
|
113
115
|
(hour) => {
|
|
114
116
|
doAction(configuration.action_data, hour);
|
|
115
|
-
if (
|
|
117
|
+
if (
|
|
118
|
+
sensor.is_managed_by_backend &&
|
|
119
|
+
sensor.device_type !== 'GOOGLE_HOME'
|
|
120
|
+
) {
|
|
116
121
|
hour && watchMultiConfigs([configuration.config_hour]);
|
|
117
122
|
}
|
|
118
123
|
},
|
|
@@ -121,6 +126,7 @@ const TimerActionTemplate = ({ actionGroup, doAction, sensor }) => {
|
|
|
121
126
|
configuration.config_hour,
|
|
122
127
|
doAction,
|
|
123
128
|
sensor.is_managed_by_backend,
|
|
129
|
+
sensor.device_type,
|
|
124
130
|
]
|
|
125
131
|
);
|
|
126
132
|
|
|
@@ -201,6 +207,8 @@ const TimerActionTemplate = ({ actionGroup, doAction, sensor }) => {
|
|
|
201
207
|
onConfirm={onConfirmTime}
|
|
202
208
|
onCancel={onHideTime}
|
|
203
209
|
display="spinner"
|
|
210
|
+
cancelTextIOS={t('cancel')}
|
|
211
|
+
confirmTextIOS={t('confirm')}
|
|
204
212
|
/>
|
|
205
213
|
<BottomScrollPicker
|
|
206
214
|
min={configuration.min}
|
|
@@ -28,16 +28,18 @@ const TwoButtonTemplate = memo(({ actionGroup, doAction, sensor }) => {
|
|
|
28
28
|
[actionGroup?.title, sensor?.name]
|
|
29
29
|
);
|
|
30
30
|
|
|
31
|
-
const triggerAction1 = useCallback(() => {
|
|
31
|
+
const triggerAction1 = useCallback(async () => {
|
|
32
32
|
if (button1?.action_on_data && button1?.action_off_data) {
|
|
33
33
|
if (isOn) {
|
|
34
|
-
doAction(button1?.action_off_data, null, actionName('off'));
|
|
34
|
+
await doAction(button1?.action_off_data, null, actionName('off'));
|
|
35
35
|
} else {
|
|
36
|
-
doAction(button1?.action_on_data, null, actionName('on'));
|
|
36
|
+
await doAction(button1?.action_on_data, null, actionName('on'));
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
if (sensor?.is_managed_by_backend) {
|
|
40
|
-
configuration.config &&
|
|
40
|
+
configuration.config &&
|
|
41
|
+
sensor.device_type !== 'GOOGLE_HOME' &&
|
|
42
|
+
watchMultiConfigs([configuration.config]);
|
|
41
43
|
}
|
|
42
44
|
}, [
|
|
43
45
|
actionName,
|
|
@@ -46,17 +48,18 @@ const TwoButtonTemplate = memo(({ actionGroup, doAction, sensor }) => {
|
|
|
46
48
|
doAction,
|
|
47
49
|
isOn,
|
|
48
50
|
sensor?.is_managed_by_backend,
|
|
51
|
+
sensor?.device_type,
|
|
49
52
|
]);
|
|
50
53
|
|
|
51
|
-
const triggerAction2 = useCallback(() => {
|
|
54
|
+
const triggerAction2 = useCallback(async () => {
|
|
52
55
|
if (button2?.action_on_data && button2?.action_off_data) {
|
|
53
56
|
if (isStart) {
|
|
54
|
-
doAction(button2?.action_off_data, null, actionName('stop'));
|
|
57
|
+
await doAction(button2?.action_off_data, null, actionName('stop'));
|
|
55
58
|
} else {
|
|
56
|
-
doAction(button2?.action_on_data, null, actionName('start'));
|
|
59
|
+
await doAction(button2?.action_on_data, null, actionName('start'));
|
|
57
60
|
}
|
|
58
61
|
}
|
|
59
|
-
if (sensor?.is_managed_by_backend) {
|
|
62
|
+
if (sensor?.is_managed_by_backend && sensor.device_type !== 'GOOGLE_HOME') {
|
|
60
63
|
configuration.config && watchMultiConfigs([configuration.config]);
|
|
61
64
|
}
|
|
62
65
|
}, [
|
|
@@ -67,6 +70,7 @@ const TwoButtonTemplate = memo(({ actionGroup, doAction, sensor }) => {
|
|
|
67
70
|
doAction,
|
|
68
71
|
isStart,
|
|
69
72
|
sensor?.is_managed_by_backend,
|
|
73
|
+
sensor?.device_type,
|
|
70
74
|
]);
|
|
71
75
|
|
|
72
76
|
useEffect(() => {
|
|
@@ -98,7 +102,7 @@ const TwoButtonTemplate = memo(({ actionGroup, doAction, sensor }) => {
|
|
|
98
102
|
if (sensor?.device_type === DEVICE_TYPE.LG_THINQ) {
|
|
99
103
|
return;
|
|
100
104
|
}
|
|
101
|
-
if (sensor?.is_managed_by_backend) {
|
|
105
|
+
if (sensor?.is_managed_by_backend && sensor.device_type !== 'GOOGLE_HOME') {
|
|
102
106
|
watchMultiConfigs([configuration.config]);
|
|
103
107
|
}
|
|
104
108
|
}, [sensor, configuration.config]);
|
|
@@ -1,20 +1,37 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import renderer, { act } from 'react-test-renderer';
|
|
3
|
-
import { TouchableOpacity } from 'react-native';
|
|
3
|
+
import { TouchableOpacity, Switch } from 'react-native';
|
|
4
4
|
|
|
5
5
|
import CurtainButtonTemplate from '../CurtainButtonTemplate';
|
|
6
6
|
import { SCProvider } from '../../../context';
|
|
7
7
|
import { mockSCStore } from '../../../context/mockStore';
|
|
8
8
|
|
|
9
|
-
const
|
|
9
|
+
const mockDoAction = jest.fn();
|
|
10
|
+
const mockActionOffData = jest.fn();
|
|
11
|
+
const mockActionOnData = jest.fn();
|
|
12
|
+
const mockCloseActionData = jest.fn();
|
|
13
|
+
|
|
14
|
+
const wrapComponent = (actionGroup = {}, sensor = {}) => (
|
|
10
15
|
<SCProvider initState={mockSCStore({})}>
|
|
11
|
-
<CurtainButtonTemplate
|
|
16
|
+
<CurtainButtonTemplate
|
|
17
|
+
actionGroup={actionGroup}
|
|
18
|
+
doAction={mockDoAction}
|
|
19
|
+
sensor={sensor}
|
|
20
|
+
/>
|
|
12
21
|
</SCProvider>
|
|
13
22
|
);
|
|
14
23
|
|
|
15
24
|
describe('Test CurtainButtonTemplate', () => {
|
|
25
|
+
const sensor = {
|
|
26
|
+
name: 'test',
|
|
27
|
+
};
|
|
16
28
|
const actionGroup = {
|
|
17
29
|
configuration: {
|
|
30
|
+
text_open: 'open',
|
|
31
|
+
is_display_lock: true,
|
|
32
|
+
action_off_data: mockActionOffData,
|
|
33
|
+
action_on_data: mockActionOnData,
|
|
34
|
+
close_action_data: mockCloseActionData,
|
|
18
35
|
action1: '2b949045-8e03-4c07-a855-7794ade2e69c',
|
|
19
36
|
action1_data: {
|
|
20
37
|
color: '#00979D',
|
|
@@ -61,12 +78,44 @@ describe('Test CurtainButtonTemplate', () => {
|
|
|
61
78
|
|
|
62
79
|
let wrapper;
|
|
63
80
|
|
|
81
|
+
test('render without params', async () => {
|
|
82
|
+
await act(() => {
|
|
83
|
+
wrapper = renderer.create(wrapComponent());
|
|
84
|
+
});
|
|
85
|
+
const instance = wrapper.root;
|
|
86
|
+
const touchableOpacities = instance.findAllByType(TouchableOpacity);
|
|
87
|
+
expect(touchableOpacities.length).toEqual(3);
|
|
88
|
+
});
|
|
89
|
+
|
|
64
90
|
test('render CurtainButtonTemplate', async () => {
|
|
65
91
|
await act(() => {
|
|
66
|
-
wrapper = renderer.create(wrapComponent(actionGroup));
|
|
92
|
+
wrapper = renderer.create(wrapComponent(actionGroup, sensor));
|
|
67
93
|
});
|
|
68
94
|
const instance = wrapper.root;
|
|
69
95
|
const touchableOpacities = instance.findAllByType(TouchableOpacity);
|
|
70
96
|
expect(touchableOpacities.length).toEqual(3);
|
|
97
|
+
await touchableOpacities[0].props.onPress();
|
|
98
|
+
await touchableOpacities[1].props.onPress();
|
|
99
|
+
await touchableOpacities[2].props.onPress();
|
|
100
|
+
expect(mockDoAction).toBeCalledWith(
|
|
101
|
+
mockCloseActionData,
|
|
102
|
+
null,
|
|
103
|
+
sensor?.name + ' undefined'
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
const Switchs = instance.findAllByType(Switch);
|
|
107
|
+
expect(Switchs).toHaveLength(1);
|
|
108
|
+
await Switchs[0].props.onValueChange();
|
|
109
|
+
expect(mockDoAction).toBeCalledWith(
|
|
110
|
+
mockActionOnData,
|
|
111
|
+
null,
|
|
112
|
+
`${sensor.name} lock`
|
|
113
|
+
);
|
|
114
|
+
await Switchs[0].props.onValueChange();
|
|
115
|
+
expect(mockDoAction).toBeCalledWith(
|
|
116
|
+
mockActionOffData,
|
|
117
|
+
null,
|
|
118
|
+
`${sensor.name} unlock`
|
|
119
|
+
);
|
|
71
120
|
});
|
|
72
121
|
});
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
2
|
import { act, create } from 'react-test-renderer';
|
|
3
|
-
import
|
|
3
|
+
import OnOffTemplate from '../OnOffTemplate';
|
|
4
|
+
import { mockSCStore } from '../../../context/mockStore';
|
|
5
|
+
import { SCProvider } from '../../../context';
|
|
6
|
+
|
|
7
|
+
const wrapComponent = (actionGroup, mockDoAction) => (
|
|
8
|
+
<SCProvider initState={mockSCStore({})}>
|
|
9
|
+
<OnOffTemplate actionGroup={actionGroup} doAction={mockDoAction} />
|
|
10
|
+
</SCProvider>
|
|
11
|
+
);
|
|
4
12
|
|
|
5
13
|
jest.mock('react', () => ({
|
|
6
14
|
...jest.requireActual('react'),
|
|
@@ -49,21 +57,15 @@ describe('Test OneBigButtonTemplate', () => {
|
|
|
49
57
|
const assertRender = (state, text) => {
|
|
50
58
|
useState.mockImplementationOnce((init) => [state, setState]);
|
|
51
59
|
const mockDoAction = jest.fn();
|
|
60
|
+
|
|
52
61
|
act(() => {
|
|
53
|
-
wrapper = create(
|
|
54
|
-
<Index actionGroup={actionGroup} doAction={mockDoAction} />
|
|
55
|
-
);
|
|
62
|
+
wrapper = create(wrapComponent(actionGroup, mockDoAction));
|
|
56
63
|
});
|
|
57
64
|
|
|
58
65
|
const renderJson = wrapper.toJSON();
|
|
59
66
|
|
|
60
|
-
expect(renderJson?.
|
|
61
|
-
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
expect(
|
|
65
|
-
renderJson?.children[0].children[0].children[1].children
|
|
66
|
-
).not.toEqual([text]);
|
|
67
|
+
expect(renderJson?.props?.visible).toEqual(false);
|
|
68
|
+
expect(renderJson?.type).toEqual('Modal');
|
|
67
69
|
};
|
|
68
70
|
|
|
69
71
|
test('render state on', () => {
|
|
@@ -78,9 +80,7 @@ describe('Test OneBigButtonTemplate', () => {
|
|
|
78
80
|
useState.mockImplementationOnce((init) => [state, setState]);
|
|
79
81
|
const mockDoAction = jest.fn();
|
|
80
82
|
act(() => {
|
|
81
|
-
wrapper = create(
|
|
82
|
-
<Index actionGroup={actionGroup} doAction={mockDoAction} />
|
|
83
|
-
);
|
|
83
|
+
wrapper = create(wrapComponent(actionGroup, mockDoAction));
|
|
84
84
|
});
|
|
85
85
|
|
|
86
86
|
expect(mockDoAction).not.toHaveBeenCalled();
|
|
@@ -1,11 +1,25 @@
|
|
|
1
|
+
/* eslint-disable promise/prefer-await-to-callbacks */
|
|
1
2
|
import { TESTID } from '../../../configs/Constants';
|
|
2
3
|
import { watchMultiConfigs } from '../../../iot/Monitor';
|
|
3
4
|
import React from 'react';
|
|
4
5
|
import { View } from 'react-native';
|
|
6
|
+
import { useSelector } from 'react-redux';
|
|
5
7
|
import { act, create } from 'react-test-renderer';
|
|
6
8
|
import OnOffTemplate from '../OnOffTemplate';
|
|
7
9
|
import OnOffButtonTemplate from '../OnOffTemplate/OnOffButtonTemplate';
|
|
8
10
|
import OnOffSimpleTemplate from '../OnOffTemplate/OnOffSimpleTemplate';
|
|
11
|
+
import { mockSCStore } from '../../../context/mockStore';
|
|
12
|
+
import { SCProvider } from '../../../context';
|
|
13
|
+
|
|
14
|
+
const wrapComponent = (actionGroup, mockDoAction, sensor) => (
|
|
15
|
+
<SCProvider initState={mockSCStore({})}>
|
|
16
|
+
<OnOffTemplate
|
|
17
|
+
actionGroup={actionGroup}
|
|
18
|
+
doAction={mockDoAction}
|
|
19
|
+
sensor={sensor}
|
|
20
|
+
/>
|
|
21
|
+
</SCProvider>
|
|
22
|
+
);
|
|
9
23
|
|
|
10
24
|
jest.mock('../../../iot/Monitor');
|
|
11
25
|
|
|
@@ -13,9 +27,15 @@ jest.mock('../../../iot/states', () => ({
|
|
|
13
27
|
useConfigGlobalState: () => [{ 5: 2 }, null],
|
|
14
28
|
}));
|
|
15
29
|
|
|
30
|
+
jest.mock('react-redux', () => ({
|
|
31
|
+
...jest.requireActual('react-redux'),
|
|
32
|
+
useSelector: jest.fn(),
|
|
33
|
+
}));
|
|
34
|
+
|
|
16
35
|
describe('Test OnOffTemplate', () => {
|
|
17
|
-
let wrapper;
|
|
18
36
|
let actionGroup;
|
|
37
|
+
let tree;
|
|
38
|
+
let sensor;
|
|
19
39
|
|
|
20
40
|
const action_data = {
|
|
21
41
|
color: '#00979D',
|
|
@@ -62,20 +82,23 @@ describe('Test OnOffTemplate', () => {
|
|
|
62
82
|
},
|
|
63
83
|
title: 'Turn on / off',
|
|
64
84
|
};
|
|
85
|
+
|
|
86
|
+
sensor = { name: 'Sensor' };
|
|
87
|
+
|
|
88
|
+
const localState = {
|
|
89
|
+
isOnSwich: false,
|
|
90
|
+
};
|
|
91
|
+
useSelector.mockImplementation((cb) => {
|
|
92
|
+
return cb(localState);
|
|
93
|
+
});
|
|
65
94
|
});
|
|
66
95
|
|
|
67
96
|
test('render with template OnOffSimpleActionTemplate', async () => {
|
|
68
97
|
const mockDoAction = jest.fn();
|
|
69
98
|
await act(async () => {
|
|
70
|
-
|
|
71
|
-
<OnOffTemplate
|
|
72
|
-
actionGroup={actionGroup}
|
|
73
|
-
doAction={mockDoAction}
|
|
74
|
-
sensor={{}}
|
|
75
|
-
/>
|
|
76
|
-
);
|
|
99
|
+
tree = await create(wrapComponent(actionGroup, mockDoAction, {}));
|
|
77
100
|
});
|
|
78
|
-
const instance =
|
|
101
|
+
const instance = tree.root;
|
|
79
102
|
const template = instance.findAllByType(OnOffSimpleTemplate);
|
|
80
103
|
expect(template).toHaveLength(1);
|
|
81
104
|
});
|
|
@@ -84,15 +107,9 @@ describe('Test OnOffTemplate', () => {
|
|
|
84
107
|
actionGroup.template = 'on_off_button_action_template';
|
|
85
108
|
const mockDoAction = jest.fn();
|
|
86
109
|
await act(async () => {
|
|
87
|
-
|
|
88
|
-
<OnOffTemplate
|
|
89
|
-
actionGroup={actionGroup}
|
|
90
|
-
doAction={mockDoAction}
|
|
91
|
-
sensor={{}}
|
|
92
|
-
/>
|
|
93
|
-
);
|
|
110
|
+
tree = await create(wrapComponent(actionGroup, mockDoAction, {}));
|
|
94
111
|
});
|
|
95
|
-
const instance =
|
|
112
|
+
const instance = tree.root;
|
|
96
113
|
const template = instance.findAllByType(OnOffButtonTemplate);
|
|
97
114
|
expect(template).toHaveLength(0);
|
|
98
115
|
});
|
|
@@ -101,15 +118,9 @@ describe('Test OnOffTemplate', () => {
|
|
|
101
118
|
actionGroup.template = 'wrong_template';
|
|
102
119
|
const mockDoAction = jest.fn();
|
|
103
120
|
await act(async () => {
|
|
104
|
-
|
|
105
|
-
<OnOffTemplate
|
|
106
|
-
actionGroup={actionGroup}
|
|
107
|
-
doAction={mockDoAction}
|
|
108
|
-
sensor={{}}
|
|
109
|
-
/>
|
|
110
|
-
);
|
|
121
|
+
tree = await create(wrapComponent(actionGroup, mockDoAction, {}));
|
|
111
122
|
});
|
|
112
|
-
const instance =
|
|
123
|
+
const instance = tree.root;
|
|
113
124
|
|
|
114
125
|
const templateOnOffButton = instance.findAll(
|
|
115
126
|
(el) =>
|
|
@@ -125,32 +136,20 @@ describe('Test OnOffTemplate', () => {
|
|
|
125
136
|
test('render with template OnOffSimpleActionTemplate with is_managed_by_backend', async () => {
|
|
126
137
|
const mockDoAction = jest.fn();
|
|
127
138
|
await act(async () => {
|
|
128
|
-
|
|
129
|
-
<OnOffTemplate
|
|
130
|
-
actionGroup={actionGroup}
|
|
131
|
-
doAction={mockDoAction}
|
|
132
|
-
sensor={{ is_managed_by_backend: true }}
|
|
133
|
-
/>
|
|
134
|
-
);
|
|
139
|
+
tree = await create(wrapComponent(actionGroup, mockDoAction, {}));
|
|
135
140
|
});
|
|
136
|
-
const instance =
|
|
141
|
+
const instance = tree.root;
|
|
137
142
|
const template = instance.findAllByType(OnOffSimpleTemplate);
|
|
138
143
|
expect(template).toHaveLength(1);
|
|
139
|
-
expect(watchMultiConfigs).toBeCalledTimes(
|
|
144
|
+
expect(watchMultiConfigs).toBeCalledTimes(0);
|
|
140
145
|
});
|
|
141
146
|
|
|
142
147
|
test('template OnOffSimpleActionTemplate doAction with is_on_value, match configValue', async () => {
|
|
143
148
|
const mockDoAction = jest.fn();
|
|
144
149
|
await act(async () => {
|
|
145
|
-
|
|
146
|
-
<OnOffTemplate
|
|
147
|
-
actionGroup={actionGroup}
|
|
148
|
-
doAction={mockDoAction}
|
|
149
|
-
sensor={{ name: 'Sensor name' }}
|
|
150
|
-
/>
|
|
151
|
-
);
|
|
150
|
+
tree = await create(wrapComponent(actionGroup, mockDoAction, sensor));
|
|
152
151
|
});
|
|
153
|
-
const instance =
|
|
152
|
+
const instance = tree.root;
|
|
154
153
|
const template = instance.findByType(OnOffSimpleTemplate);
|
|
155
154
|
expect(template.props.isOn).toEqual(true);
|
|
156
155
|
|
|
@@ -160,7 +159,7 @@ describe('Test OnOffTemplate', () => {
|
|
|
160
159
|
expect(mockDoAction).toHaveBeenCalledWith(
|
|
161
160
|
action_off_data,
|
|
162
161
|
null,
|
|
163
|
-
'Sensor
|
|
162
|
+
'Sensor turn on / off off'
|
|
164
163
|
);
|
|
165
164
|
expect(watchMultiConfigs).toBeCalledTimes(0);
|
|
166
165
|
});
|
|
@@ -169,15 +168,9 @@ describe('Test OnOffTemplate', () => {
|
|
|
169
168
|
actionGroup.configuration.is_on_value = [1];
|
|
170
169
|
const mockDoAction = jest.fn();
|
|
171
170
|
await act(async () => {
|
|
172
|
-
|
|
173
|
-
<OnOffTemplate
|
|
174
|
-
actionGroup={actionGroup}
|
|
175
|
-
doAction={mockDoAction}
|
|
176
|
-
sensor={{ name: 'Sensor name' }}
|
|
177
|
-
/>
|
|
178
|
-
);
|
|
171
|
+
tree = await create(wrapComponent(actionGroup, mockDoAction, sensor));
|
|
179
172
|
});
|
|
180
|
-
const instance =
|
|
173
|
+
const instance = tree.root;
|
|
181
174
|
const template = instance.findByType(OnOffSimpleTemplate);
|
|
182
175
|
expect(template.props.isOn).toEqual(false);
|
|
183
176
|
|
|
@@ -187,22 +180,16 @@ describe('Test OnOffTemplate', () => {
|
|
|
187
180
|
expect(mockDoAction).toHaveBeenCalledWith(
|
|
188
181
|
action_on_data,
|
|
189
182
|
null,
|
|
190
|
-
'Sensor
|
|
183
|
+
'Sensor turn on / off on'
|
|
191
184
|
);
|
|
192
185
|
});
|
|
193
186
|
|
|
194
187
|
test('template OnOffSimpleActionTemplate doAction with is_on_value and is_managed_by_backend', async () => {
|
|
195
188
|
const mockDoAction = jest.fn();
|
|
196
189
|
await act(async () => {
|
|
197
|
-
|
|
198
|
-
<OnOffTemplate
|
|
199
|
-
actionGroup={actionGroup}
|
|
200
|
-
doAction={mockDoAction}
|
|
201
|
-
sensor={{ name: 'Sensor name', is_managed_by_backend: true }}
|
|
202
|
-
/>
|
|
203
|
-
);
|
|
190
|
+
tree = await create(wrapComponent(actionGroup, mockDoAction, sensor));
|
|
204
191
|
});
|
|
205
|
-
const instance =
|
|
192
|
+
const instance = tree.root;
|
|
206
193
|
const template = instance.findByType(OnOffSimpleTemplate);
|
|
207
194
|
expect(template.props.isOn).toEqual(true);
|
|
208
195
|
|
|
@@ -212,9 +199,9 @@ describe('Test OnOffTemplate', () => {
|
|
|
212
199
|
expect(mockDoAction).toHaveBeenCalledWith(
|
|
213
200
|
action_off_data,
|
|
214
201
|
null,
|
|
215
|
-
'Sensor
|
|
202
|
+
'Sensor turn on / off off'
|
|
216
203
|
);
|
|
217
|
-
expect(watchMultiConfigs).toBeCalledTimes(
|
|
204
|
+
expect(watchMultiConfigs).toBeCalledTimes(0);
|
|
218
205
|
});
|
|
219
206
|
|
|
220
207
|
test('render with template OnOffSimpleActionTemplate with just action_data', async () => {
|
|
@@ -230,15 +217,9 @@ describe('Test OnOffTemplate', () => {
|
|
|
230
217
|
};
|
|
231
218
|
const mockDoAction = jest.fn();
|
|
232
219
|
await act(async () => {
|
|
233
|
-
|
|
234
|
-
<OnOffTemplate
|
|
235
|
-
actionGroup={actionGroup}
|
|
236
|
-
doAction={mockDoAction}
|
|
237
|
-
sensor={{ is_managed_by_backend: true }}
|
|
238
|
-
/>
|
|
239
|
-
);
|
|
220
|
+
tree = await create(wrapComponent(actionGroup, mockDoAction, {}));
|
|
240
221
|
});
|
|
241
|
-
const instance =
|
|
222
|
+
const instance = tree.root;
|
|
242
223
|
const template = instance.findAllByType(OnOffSimpleTemplate);
|
|
243
224
|
expect(template).toHaveLength(1);
|
|
244
225
|
expect(template[0].props.disabled).toBeFalsy();
|
|
@@ -261,15 +242,9 @@ describe('Test OnOffTemplate', () => {
|
|
|
261
242
|
};
|
|
262
243
|
const mockDoAction = jest.fn();
|
|
263
244
|
await act(async () => {
|
|
264
|
-
|
|
265
|
-
<OnOffTemplate
|
|
266
|
-
actionGroup={actionGroup}
|
|
267
|
-
doAction={mockDoAction}
|
|
268
|
-
sensor={{ is_managed_by_backend: true }}
|
|
269
|
-
/>
|
|
270
|
-
);
|
|
245
|
+
tree = await create(wrapComponent(actionGroup, mockDoAction, {}));
|
|
271
246
|
});
|
|
272
|
-
const instance =
|
|
247
|
+
const instance = tree.root;
|
|
273
248
|
const template = instance.findAllByType(OnOffSimpleTemplate);
|
|
274
249
|
expect(template).toHaveLength(1);
|
|
275
250
|
expect(template[0].props.disabled).toBeTruthy();
|
|
@@ -1,8 +1,27 @@
|
|
|
1
|
+
/* eslint-disable promise/prefer-await-to-callbacks */
|
|
1
2
|
import React from 'react';
|
|
2
3
|
import { create, act } from 'react-test-renderer';
|
|
3
4
|
import { TouchableOpacity } from 'react-native';
|
|
5
|
+
import { useSelector } from 'react-redux';
|
|
4
6
|
|
|
5
7
|
import OneBigButtonTemplate from '../OneBigButtonTemplate';
|
|
8
|
+
import { mockSCStore } from '../../../context/mockStore';
|
|
9
|
+
import { SCProvider } from '../../../context';
|
|
10
|
+
|
|
11
|
+
const wrapComponent = (actionGroup, mockDoAction, sensor) => (
|
|
12
|
+
<SCProvider initState={mockSCStore({})}>
|
|
13
|
+
<OneBigButtonTemplate
|
|
14
|
+
actionGroup={actionGroup}
|
|
15
|
+
doAction={mockDoAction}
|
|
16
|
+
sensor={sensor}
|
|
17
|
+
/>
|
|
18
|
+
</SCProvider>
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
jest.mock('react-redux', () => ({
|
|
22
|
+
...jest.requireActual('react-redux'),
|
|
23
|
+
useSelector: jest.fn(),
|
|
24
|
+
}));
|
|
6
25
|
|
|
7
26
|
describe('Test OneBigButtonTemplate', () => {
|
|
8
27
|
const action_data = {
|
|
@@ -23,24 +42,25 @@ describe('Test OneBigButtonTemplate', () => {
|
|
|
23
42
|
text: 'UP',
|
|
24
43
|
},
|
|
25
44
|
};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
};
|
|
29
|
-
let wrapper;
|
|
45
|
+
let tree;
|
|
46
|
+
let sensor;
|
|
30
47
|
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
doAction={mockDoAction}
|
|
38
|
-
sensor={sensor}
|
|
39
|
-
/>
|
|
40
|
-
);
|
|
48
|
+
beforeEach(() => {
|
|
49
|
+
const localState = {
|
|
50
|
+
isOnSwich: false,
|
|
51
|
+
};
|
|
52
|
+
useSelector.mockImplementation((cb) => {
|
|
53
|
+
return cb(localState);
|
|
41
54
|
});
|
|
55
|
+
sensor = { name: 'Sensor' };
|
|
56
|
+
});
|
|
42
57
|
|
|
43
|
-
|
|
58
|
+
test('render OneBigButtonTemplate', async () => {
|
|
59
|
+
const mockDoAction = jest.fn();
|
|
60
|
+
await act(async () => {
|
|
61
|
+
tree = await create(wrapComponent(actionGroup, mockDoAction, sensor));
|
|
62
|
+
});
|
|
63
|
+
const instance = tree.root;
|
|
44
64
|
const buttons = instance.findAllByType(TouchableOpacity);
|
|
45
65
|
expect(buttons.length).toEqual(1);
|
|
46
66
|
|
|
@@ -49,10 +69,6 @@ describe('Test OneBigButtonTemplate', () => {
|
|
|
49
69
|
});
|
|
50
70
|
|
|
51
71
|
expect(mockDoAction).toHaveBeenCalledTimes(1);
|
|
52
|
-
expect(mockDoAction).toHaveBeenCalledWith(
|
|
53
|
-
action_data,
|
|
54
|
-
null,
|
|
55
|
-
'Sensor name up'
|
|
56
|
-
);
|
|
72
|
+
expect(mockDoAction).toHaveBeenCalledWith(action_data, null, 'Sensor up');
|
|
57
73
|
});
|
|
58
74
|
});
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { TouchableOpacity } from 'react-native';
|
|
3
|
+
import { act, create } from 'react-test-renderer';
|
|
4
|
+
import Text from '../../Text';
|
|
5
|
+
import StatesGridActionTemplate from '../StatesGridActionTemplate';
|
|
6
|
+
|
|
7
|
+
const mockDoAction = jest.fn();
|
|
8
|
+
const mockActionData = jest.fn();
|
|
9
|
+
|
|
10
|
+
describe('Test StatesGridActionTemplate', () => {
|
|
11
|
+
let tree;
|
|
12
|
+
const actionGroup = {
|
|
13
|
+
configuration: {
|
|
14
|
+
options: [
|
|
15
|
+
{
|
|
16
|
+
config: true,
|
|
17
|
+
active: false,
|
|
18
|
+
text: 'item 1',
|
|
19
|
+
icon_kit_data: 'icon_kit_data',
|
|
20
|
+
icon: '123',
|
|
21
|
+
icon_outlined: 'icon_outlined',
|
|
22
|
+
action_data: mockActionData,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
config: false,
|
|
26
|
+
active: true,
|
|
27
|
+
text: 'item 2',
|
|
28
|
+
icon_kit_data: 'icon_kit_data',
|
|
29
|
+
icon: 'icon',
|
|
30
|
+
icon_outlined: 'icon_outlined',
|
|
31
|
+
action_data: mockActionData,
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
is_on_value: true,
|
|
35
|
+
},
|
|
36
|
+
title: 'Title',
|
|
37
|
+
};
|
|
38
|
+
const sensor = {
|
|
39
|
+
is_managed_by_backend: true,
|
|
40
|
+
device_type: '',
|
|
41
|
+
name: 'Sensor name',
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
test('test render without params', async () => {
|
|
45
|
+
await act(async () => {
|
|
46
|
+
tree = await create(<StatesGridActionTemplate />);
|
|
47
|
+
});
|
|
48
|
+
const instance = tree.root;
|
|
49
|
+
const Texts = instance.findAllByType(Text);
|
|
50
|
+
expect(Texts).toHaveLength(1);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test('test render with params', async () => {
|
|
54
|
+
await act(async () => {
|
|
55
|
+
tree = await create(
|
|
56
|
+
<StatesGridActionTemplate
|
|
57
|
+
doAction={mockDoAction}
|
|
58
|
+
sensor={sensor}
|
|
59
|
+
actionGroup={actionGroup}
|
|
60
|
+
/>
|
|
61
|
+
);
|
|
62
|
+
});
|
|
63
|
+
const instance = tree.root;
|
|
64
|
+
const Texts = instance.findAllByType(Text);
|
|
65
|
+
expect(Texts).toHaveLength(3);
|
|
66
|
+
const TouchableOpacities = instance.findAllByType(TouchableOpacity);
|
|
67
|
+
expect(TouchableOpacities).toHaveLength(2);
|
|
68
|
+
await TouchableOpacities[0].props.onPress();
|
|
69
|
+
expect(mockDoAction).toBeCalledWith(
|
|
70
|
+
mockActionData,
|
|
71
|
+
null,
|
|
72
|
+
`${sensor.name} ${actionGroup.title.toLowerCase()} ${
|
|
73
|
+
actionGroup.configuration.options[0].text
|
|
74
|
+
}`
|
|
75
|
+
);
|
|
76
|
+
});
|
|
77
|
+
});
|