---
# System prepended metadata

title: DeviceOn/BI Portal RD Test scenario 2021/01~2021/03
tags: [DeviceOnBI]

---

# DeviceOn/BI Portal RD Test scenario 2021/01~2021/03
---
###### tags: `DeviceOnBI`
## 2020/3/30
### Tingwei
#### [Add] Add responseMessageDialog.vue and Use it in forwardingDialog.vue

**Purpose**
1.  [Add] Add responseMessageDialog.vue and Use it in forwardingDialog.vue (only dialog, do not support combine forwarding data)
2.  [Fix] selectParameterDialog multi-lang and style (dialog-content background color)

**Test Case**
1. test server parses success and return vendor response by dev-fake-server with Url http://localhost:8080/#/index/organizationManagement?orgId=16&orgManageEditType=pageForwarding&fakeForwardingTestRes=1  in new tab
    - [x] 200 and response json object `window.fakeForwardingTestRes = {status: 200, statusText:'OK', response:{ "STATE": 1}}`
    - [x] 200 and response json string `window.fakeForwardingTestRes = {status: 200, statusText:'OK', response:"{ \"STATE\": \"json string\"}"}`
    - [x] 201 and response string `window.fakeForwardingTestRes = {status: 201, statusText:'OK', response:"Success !"}`
    - [x] 404 and response string `window.fakeForwardingTestRes = {status: 404, statusText:'Not Found', response:"404 page not found"}`
    - [x] 301 and response string `window.fakeForwardingTestRes = {status: 301, statusText:'Redirect', response:"Redirect..."}`
2. test real server with Url http://localhost:8080/#/index/organizationManagement?orgId=16&orgManageEditType=pageForwarding in new tab
    - [x] click test (will get error)
    - [x] window.testForwardingTest = 200 -> click test
    - [x] window.testForwardingTest = 500 -> click test
3. test 2
    - [x] change lang to cn -> check selectParameterDialog
    - [x] check dialog-content background color

## 2020/3/29
### Tingwei
#### [Add] select parameter dialog. (only dialog, do not support combine forwarding data)

**Purpose**
1.  [Add] select parameter dialog. (only dialog, do not support combine forwarding data)

**Test Case**
1. test 1
    - [x] add forwarding rules -> input and blur API URL -> click add parameter button -> check the select parameter dialog
    - [x] check order by object name and paramName
    - [x] check filter object name
    - [x] check filter paramName

## 2020/3/26
### Alice
#### feature/forwarding-dialog

**Purpose**
1. [pageForwarding][change] 
    1. add title bar
    2. interface switch for type
    3. add param table, forwardingInformationData, jsonEditor
2. [forwardingDialog][add] add forwardingDialog

**Test Case**
1. test show dialog with different forwarding type
2. input api url and output param build table

## 2020/3/25
### Alice
#### feature/dialog-size-API-url-fix

**Purpose**
1. [APIUrlInsert][fix] fix emit name & add input desc
2. [common][add] add dialog common size

**Test Case**
1. test for forwarding dialog
   - [x] check parameter description was shown under the input column
   - [x] check the dialog size was conformed to the design draft

### Tingwei
#### [Add]Add sqlEditor.vue, etc.

**Purpose**
1.  [Add]Add sqlEditor.vue
2.  [Fix] jsonEditor.vue $emit parameter, i.g., "a<param>a"

**Test Case**
1. test 1 by uncommenting testSqlEditor.vue in pagePlugin.vue
    - [x] body style
    - [x] props default text (API body)
    - [x] input parameter in body example and blur -> check whether $emit
    - [x] mounted $emit parameter data
    - [x] "a\<param\>a" $emit parameter "param"
2. test 2 by uncommenting testJsonEditor.vue in pagePlugin.vue
    - [x] "a\<param\>a" $emit parameter "param"

## 2020/3/24
### Tingwei
#### [Fix]Fix importing jsonEditor.vue error, etc.

**Purpose**
1.  [Fix]Fix importing jsonEditor.vue error.
2.  [Change] jsonEditor mounted() $emit parameter object.

**Test Case**
1. test 1 by uncommenting testJsonEditor.vue in pagePlugin.vue
    - [x] check default $emit parameter data

## 2020/3/23
### Tingwei
#### [Change]Change json mapping color.

**Purpose**
1.  [Change]Change json mapping color.

**Test Case**
1. test 1 by uncommenting testJsonEditor.vue in pagePlugin.vue
    - [x] check colors

### Alice
#### feature/forwarding-page-list

**Purpose**
1. [pageForwarding][add] forwarding list
2. [pageForwarding][fix] 1. fixed id&class 2. delete correct item

**Test Case**
1. test for forwarding list
 - [x] change rows per page to 100 -> scroll -> check tool bar & header fixed
 - [x] query test : search input & forwarding type mix
 - [x] pre/post page & different column sort
 - [x] after filter -> delete item -> check delete correct item

## 2020/3/22
### Tingwei
#### [Add]Add jsonEditor.vue, etc.

**Purpose**
1.  [Add]Add jsonEditor.vue
2.  [Fix][SRPDashboard] Fix Graph and Grouped bar chart x_axis_settings of subtitle

**Test Case**
1. test 1 by uncommenting testJsonEditor.vue in pagePlugin.vue
    - [x] body style
    - [x] props default text (API body)
    - [x] input parameter in body example and blur -> check whether $emit
    - [x] preview style
    - [x] select Json Mapping example style
    - [x] props default keyPath
    - [x] change keyPath
2. test 2
    - [x] Graph x_axis_settings
    - [x] Grouped Bar Chart x_axis_settings

## 2020/3/18
### Alice
#### feature/forwarding-page-list

**Purpose**
1. [pageForwarding][add] basic list
2. [pageForwarding] forwarding list ui
3. [UI style][change] height & pt pb change
4. [pageForwarding][add] action button ui

**Test Case**
1. list sort -> search

## 2020/3/16
### Alice
#### feature/api-url-component
**Purpose**
1. [Plugin&Forwarding] [add] API Url component

**Test Case**
1. test 
   - [x] input url and change query as `<param1>, <param2>...` -> blur -> emit query ParamVariableArray and APIUrl
   - [x] assign sourceString when edit

### Tingwei
#### [Fix]ifBuild is not set true, it causes "New from Designer" does not show panel component.

**Purpose**
1.  [Fix]ifBuild is not set true, it causes "New from Designer" does not show panel component.

**Test Case**
1. test 1, check whether panel component show
    - [x] New from Designer
    - [x] New from Template
    - [x] New from Existing
    - [x] edit dashboard

## 2020/3/15
### Tingwei
#### [Fix] Fix import/delete srpframe Authorization

**Purpose**
1. [Fix] Fix import/delete srpframe Authorization

**Test Case**
1. test 1
    - [x] add srpframe
    - [x] delete srpframe

## 2020/3/11
### Tingwei
#### [Add][SRPDashboard] Add Graph

**Purpose**
1. [Add][SRPDashboard] Add Graph.

**Test Case**
1. test 1
    - [x] add Graph
    - [x] add left Y item
    - [x] edit left Y Axis - Label
    - [x] edit left Y Axis - Unit
    - [x] edit left Y Axis - Decimals
    - [x] edit left Y Axis - Max
    - [x] edit left Y Axis - Min
    - [x] add Right Y item
    - [x] edit Right Y Axis - Label
    - [x] edit Right Y Axis - Unit
    - [x] edit Right Y Axis - Decimals
    - [x] edit Right Y Axis - Max
    - [x] edit Right Y Axis - Min
    - [x] X Axis
    - [x] duplicate display name 
    - [x] Y item - solid line
    - [x] Y item - dashed line
    - [x] Y item - dotted line
    - [x] Y item - solid line (shadow)
    - [x] Y item - dashed line (shadow)
    - [x] Y item - dotted line (shadow)
    - [x] Y item - points
    - [x] Y item - color
    - [x] Y item - data type
    - [x] Y item - function type
    - [x] set unit, decimals, spanLow, spanHigh when left Y item saves
    - [x] set unit, decimals, spanLow, spanHigh when right Y item saves
    - [x] if the first item of left Y is discrete, set left Y decimals to 0
    - [x] if the first item of right Y is discrete, set right Y decimals to 0
    - [x] delete left Y item
    - [x] delete right Y item
    - [x] show customSetting option when line style mismatch

## 2020/3/9
### Alice
### feature/hide-gbc-decimals-tip

**Purpose**
1. [SRPDashboard][change] hide decimals tooltip when the first datasource's data type is not
2. [SRPDashboard][fix] group bar chart x axis style & id fix

**Test Case**
1. test for GBC panel
    - [x] go to object page -> edit object -> add primitive parameter (datatype discrete) -> go to dashboard page -> add new blank -> add GBC panel -> select datasource (just build) -> check y axis decimals show the tool tips

### feature/null-data-content-install

**Purpose**
1. [CommonComponent][add] add null data content component
2. [Plugin][add] add pagePlugin
3. [Inspection][change] remove extra code
4. [pagePlugin] page almost done
5. [Component][change] done the component
6. [change] remove extra code
7. [Plugin][add] add actions column
8. [Component][change] add show mode, remove length props
9. [pagePlugin][change] change to show mode
10. [pageObject] [change] use null data content component
11. [pageDashboard][change] add null data content component
12. [pageEvent][change] add null data content component
13. [pageUsers][change] add null data content component
14. [pageEvent][pagePlugin][pageObject][fix] tool bar bottom border (show for no data)
15. [pageArchiving][change] add null data content component
16. [pageNotification][change] add null data content component
17. [Device][change] add null data content component
18. [pagePlugin][fix] disabled pagePlugin

**Test Case**
1. test for null data content component:
    1. enter the keywords that don't exist in the datas name -> check the table was changed to tip page
    2. change data list as empty array for test -> check the table was changed to tip page and the toolbar is also hidden
    - [x] pageObject
    - [x] pageDashboard
    - [x] pageEvent
    - [x] pageNotification
    - [x] pagePlugin
    - [x] pageArchiving
    - [x] pageUsers
    - [x] pageDevices
    - [x] pageMonitor
    - [x] pageEvent
    - [x] pageFirmware
    - [x] pageApplications
    - [x] pageConfigure
2. pagePlugin prototype

## 2020/2/26
### Tingwei
#### [Fix][Devices] Delete a device, its model type is unique in the list. The device was deleted but the model type filter did not update.

**Purpose**
1. [Fix][Devices] Delete a device, its model type is unique in the list. The device was deleted but the model type filter did not update.

**Test Case**
1. test 1
    - [x] Delete a device, its model type is unique in the list. -> check model type filter

**Purpose**
1. Refer to the title
2. [Change] No need to send "machine/fineone/[mapCardObjectId]" when we visit index/organizationManagement.

**Test Case**
1. test 1
    - [x] cick the account button of the header from the desktop device
    - [x] touch the account button of the header from the iphoneX of devTool
2. test 2
    - [x] visit index/organizationManagement -> check network

### Alice
#### feature/multistat datasource update

**Purpose**
1. [SRPDashboard][fix] fix multistat unit select datasource list title render no update

**Test Case**
1. test for dashboard template
    - [x] edit datasource -> select parameter -> change unit1/unit2 -> save -> check list update -> edit -> change unit1/unit2 -> save -> check list update

## 2021/2/25
### Tingwei
#### [Fix] state.hiddenLangTypeList does not update after the router changed.

**Purpose**
1. [Fix] state.hiddenLangTypeList does not update after the router changed.

**Test Case**
1.  test 1
    - [x] go to "index/deviceManagement" -> change language to hidden language -> add device -> save -> check whether device name of hidden language show


## 2021/2/24
### Tingwei
#### [Fix] Fix console error: "deviceNameWidth" is not defined on the instance but referenced during render. The error shows when we visit "deviceManagement -> Event", etc.

**Purpose**
1. [Fix] Fix console error: "deviceNameWidth" is not defined on the instance but referenced during render. The error shows when we visit "deviceManagement -> Event".
2. [Fix] Fix console error: "GET https://portal-deviceon-bi-develop-eks002.hz.wise-paas.com.cn/subscribe-proxy/subscription/orginfo/ 404 ". The error shows when we visit index/OrganizationManagement under no orgId query string and no "localStorage.selectedNodeId" condition.
3. [Change] When object profile dialog shows, no need to update "/alarmlevel" and "/alarmcategory".
4. [Fix] "changeLog.vue" or "Markdown.vue" overwrites device status font-color css.

**Test Case**
1.  test 1
    - [x] go to "index/organizationManagement" -> Event -> check Console
2.  test 2
    - [x] under no orgId query string and no "localStorage.selectedNodeId" condition, visit "index/organizationManagement" by new tab -> check Console
3.  test 3
    - [x] go to "index/profileManagement" -> create object profile -> check whether "/alarmlevel" and "/alarmcategory" were not sent.
4.  test 4
    - [x] go to "index/systemSetting" -> "index/deviceManagement" -> check whether all font-color of device status are correct.
    - [x] go to "version" -> "index/deviceManagement" -> check whether all font-color of device status are correct.

#### [Change] Only navigating to organizationManagement and systemSetting updates licenseSetting(orgnode/all/licenseinfo).

**Purpose**
1. [Change] Only navigating to organizationManagement and systemSetting updates licenseSetting(orgnode/all/licenseinfo).

**Test Case**
1.  test 1
    - [x] go to "index/organizationManagement" -> check whether licenseSetting(orgnode/all/licenseinfo) sends
    - [x] go to "index/systemSetting" -> check whether licenseSetting(orgnode/all/licenseinfo) sends
    - [x] go to "/home" -> check whether licenseSetting(orgnode/all/licenseinfo) doesn't send
    - [x] go to "/deviceManagement" -> check whether licenseSetting(orgnode/all/licenseinfo) doesn't send

## 2021/2/23
### Tingwei
#### [Change]"/langtype" and "/langtype/dynamic" send only when we launch the web, etc.

**Purpose**
1. [Change] Delete the redundant "dashboard/all" which sends when navigating to "index/organization".
2. [Change] "/langtype" and "/langtype/dynamic" send only when we launch the web.
3. [Change] "/langtype" and "/langtype/dynamic" take ver when sending.
4. [Change] No need to check whether store.state.langUserInfo and store.state.dynamicLang exists and get "/langtype" and "/langtype/dynamic" in the components.
5. [Change] Delete "FETCH_STATIC_LANG_RESOURCE", "FETCH_DYNAMIC_LANGUAGETYPE", "FETCH_LANG_TYPE" and their relative codes. They move to "store/index.js" from "store/mosules/common.js" because their response data bind to the main store..
6. [Change] Delete unused "src/util/data-format/types.js".
7. [Fix] Under no orgId queryString and no localStorage.selectedNodeId condition, activate the user-bound and enabled Org if found it. or, activate the first Org.

**Test Case**
1.  test 1
    - [x] go to "index/organization" -> check whether only Dashboard send "dashboard/all"
2.  test 2 - 5
    - [x] launch web -> check whether "/langtype" and "/langtype/dynamic" take ver.
    - [x] -> go to deviceManagement -> check whether "/langtype" and "/langtype/dynamic" send
3.  test 7
    - [x] visit index/organization with an account that doesn't bind the first org

## 2021/2/22
### Alice
#### feature/notification-obj-param-multilang

**Purpose**
1. [Notification][fix] Add/Edit Notification Group > Others... > Object & Parameter item show with locallang

**Test Case**
1.  test for notification group
    - [x] add object -> enter the object names in the corresponding language -> add parameter enter names in the corresponding language -> save parameter -> save object -> change to notification page -> notification group -> click create notification group icon -> click others... -> click group -> click object -> check object & parameter is shown the correct language name 


## 2021/2/20
### Tingwei
#### [Change] Dynamic import page components in organizationManagement, etc.

**Purpose**
1. [Change] Dynamic import page components in organizationManagement
2. [Change] Dynamic import UploadProfileWorker and UploadAlarmCodeWorker
3. [Add] dynamicImport.js, dynamicImportError.vue and dynamicImportLoading.vue
4. [Change] Comment unused XLSX and types.FETCH_ALARM_CODE_FILE in src/store/modules/profile.js. XLSX will exclude from chunk.vendors~app.xxx.js
5. [Fix] Delete the redundant border at the left of pagination in slotParameterToolbar. It shows in the older version slotParameterToolbar (the parameter list, etc.).

**Test Case**
1.  test 1 ~ 4 by `npm run prod-test-report`, and run `npm run prod-test` in portal_mplse_release
    - [x] check the report 
    - [x] page Object -> refresh
    - [x] -> page Dashboard -> refresh
    - [x] -> page Inspection -> refresh
    - [x] -> page Event -> refresh
    - [x] -> page Notification -> refresh
    - [x] -> page Archiving -> refresh
    - [x] -> page Users -> refresh
    - [x] -> page Object -> refresh
    - [x] upload a alarm code excel in the object dialog
    - [x] -> download a alarm code excel
    - [x] upload a object profile excel
    - [x] upload a alarm code excel in the profile dialog
    - [x] -> download a alarm code excel
    - [x] -> change those file name -> refresh -> check the error message
    - [x] use network speed "fast 4G" -> refresh -> check the loading in pageDashboard
2.  test 5
    - [x] check whether the redundant border at the left of pagination does not show in parameter list of object profile dialog

#### [Change] Only navigating to deviceManagement, organizationManagement, systemSetting or profileManagement updates alarmLevel and alarmCategory, etc.

**Purpose**
1. [Change] Only navigating to deviceManagement, organizationManagement, systemSetting or profileManagement updates alarmLevel("/alarmlevel/all") and alarmCategory("/alarmcategory/all").
2. [Change] Only navigating to organizationManagement or profileManagement updates functionList("/machine/calcfunction/all").

**Test Case**
1. go to page and check those api network
    - [x] go to deviceManagement, check whether alarmLevel and alarmCategory update.
    - [x] go to systemSetting, check whether alarmLevel and alarmCategory update.
    - [x] go to systemSetting with not space management, check whether alarmLevel, alarmCategory update and functionList update when redirect to organizationManagement.
    - [x] go to organizationManagement, check whether alarmLevel, alarmCategory update and functionList update.
    - [x] go to profileManagement, check whether alarmLevel, alarmCategory update and functionList update.
    - [x] go to userManagement, check whether those api do not update
    - [x] go to menuManagement, check whether those api do not update
    - [x] go to home, check whether those api do not update

## 2021/2/18
### Alice
#### feature/profile-recording-rate

**Purpose**
1. [Profile][change] parameter default saveFreq: 60 sec -> 0 sec

**Test Case**
1. test for create & edit profile
    - [x] create profile -> add 2 parameter(one recording rate is 'Do not record', the other is 10 min) -> check default recording rate is 'Do not record' -> save parameter -> edit parameter -> check recording rate value -> save parameter -> save profile
    - [x] edit profile -> edit parameter -> checking recording rates is same as save result

#### feature/panel-type-compatibility

**Purpose**
1. [SRPDashboard] add panelType when no panelType, compatibility for old version dashboard

**Test Case**
1. test for edit dashboard
    - [x] edit old dashboard -> checking that the panel item  panel type was loaded

### Tingwei
#### [Add][organizationManagement] Assign orgId and orgManageEditType to the query strings and use them... etc

**Purpose**
1. [Add][organizationManagement] Assign orgId and orgManageEditType to the query strings and use them.
2. [Add][organizationManagement] Assign orgId to localStorage and use it.
3. [Add][deviceManagement] Assign deviceManageEditType to the query strings and use it.
4. [Fix][organizationManagement] Not fullscreen loading covers the nav(the org list) when the object list table is loading.
5. [Fix]Close the nav(the org list) when click the Logo.
6. [Fix][organizationManagement] Don't close the fullscreen loading when the timing between creating org successfully to selecting the new org.
7. [Fix][deviceManagement] The current tab name in the header(My Device / xxx) does not translation.
8. [Fix][organizationManagement] Multiple Lang keys (no_object _desc) are mistakenly use no_dashboard_desc in ObjectList.vue and pageArchiving.vue.

**Test Case**
1. test the query string and setLoadingEnd by refreshing page and changing tab - organizationManagemant
    - [x] page Object -> refresh
    - [x] -> page Dashboard -> refresh
    - [x] -> page Inspection -> refresh
    - [x] -> page Event -> refresh
    - [x] -> page Notification -> refresh
    - [x] -> page Archiving -> refresh
    - [x] -> page Users -> refresh
    - [x] -> page Object -> refresh
    - [x] -> change org -> refresh page
2. test the query string for purpose changing route - Organization Managemant
    - [x] -> click logo -> check whether the query string has orgId -> click Object Management at '/home'
    - [x] from profileManagement to organizationManagemant
    - [x] logout -> login -> go to Origanization Management
    - [x] create children group
    - [x] delete children group
    - [x] create root org
    - [x] delete root org
3. test the invalid query string - Organization Managemant
    - [x] input invalid orgId in url
    - [x] start from the new tab of browser with invalid orgId in url
    - [x] input invalid orgManageEditType in url
    - [x] start from the new tab of browser with invalid orgManageEditType in url
    - [x] start from the new tab of browser with invalid objectId in url
4. test localStorage selectedNodeId(id) - Organization Managemant
    - [x] start from the new tab of browser with a valid selectedNodeId and no query string
    - [x] start from the new tab of browser with a invalid selectedNodeId and no query string
    - [x] start from the new tab of browser with a no selectedNodeId and no query string
5. test changing role  - Organization Managemant
    - [x] changing admin org to enginner org in pageUsers by click the nav
    - [x] start from the new tab of browser with to enginner org in pageUsers by the query string
6. test the query string by refreshing page and changing tab - deviceManagemant
    - [x] page Devices -> check the header(My Device / xxx) translation -> refresh
    - [x] -> page Monitor -> check the header(My Device / xxx) translation -> refresh
    - [x] -> page Event -> check the header(My Device / xxx) translation -> refresh
    - [x] -> page Firmware -> check the header(My Device / xxx) translation -> refresh
    - [x] -> page Application -> check the header(My Device / xxx) translation -> refresh
    - [x] -> page Config -> check the header(My Device / xxx) translation -> refresh

### Alice
#### feature/designer add panel type

**Purpose**
1. [SRPDashboard]
    - [add] add panel type comparison list
    - [fix] fix readonly & disabled value string console error

**Test Case**
1. test for dashboard designer
    - [x] add new blank -> add donut chart -> check panel type same as title & readonly & disabled -> save
    - [x] edit the dashboard that just saved -> check panel type
    - [x] change panel title -> save -> edit -> check panel type

* This feature only supports panels that added after version 1.00.007 and above

## 2021/2/9
### Alice
#### feature/inspection bug fix

**Purpose**
1. [Inspection][add] add home, overview tab
2. [Inspection][fix] let inspection tab available when add org

**Test Case**
1. test for inspection page
    - [x] click inspection tab -> tab active home/overview
    - [x] add root org -> check inspection tab was available(only root org and when it is added)

## 2021/2/8
### Alice
#### feature/el-select-no-render

**Purpose**
1. [Center Portal][fix][Front-end] after backspace, el-select is no render, fix with reload when tab is 'cloud'.

**Test Case**
1. test for sign in page
    -[x] input username -> input wrong password -> select domain -> remember me -> sing in ->  click forget password/sign up -> backspace -> check domain was selected and render label at input
    
## 2021/2/5
### tingwei
#### [Fix] Replace email and change the description to * in the device's existing condition, etc

**Purpose**
1. [Fix] Replace email and change the description to * in the device's existing condition.
2. [Change] If from manual, click BACK to go back, else click SCAN AGAIN to go to the scan QR Code page.


**Test Case**
1. test 1 ＆ 2
    - [x] visit by key in 'mobile/device/addDevice?mac=00-D0-C9-F8-9E-53&modelType=UNO-137' -> check user list and the description
    - [x] -> click SCAN AGAIN
    - [x] scan existing device QR Code from iphone camera -> check user list and the description
    - [x] -> click SCAN AGAIN
    - [x] Add manually -> submit existing device -> click BACK
    

## 2021/2/4
#### Tingwei
#### [Fix] Fix below error logs... etc

**Purpose**
1. [Fix] Fix below error logs
    a .Invalid prop: type check failed for prop "searchPlaceholderDefaultText". Expected String with value "User Group Name", got Array .
    b .Invalid prop: type check failed for prop "searchPlaceholderDefaultText". Expected String with value "Notification Group Name", got Array .
    c .Cannot read property '0' of undefined.

2. [Fix] Fix logo is center when in 'index/organizationManagement' and window width < 657px.


**Test Case**
1. test 1 in index/organizationManagement
   - [x] test a & b -> go to Notification -> check Console
   - [x] test c -> when Tabs are not fixed at the top -> change window size -> check Console
2. test 2 in index/organizationManagement
   - [x] change window width < 657px -> check logo
    


## 2021/2/3
#### Alice
#### [Center Portal][change][Front-end] remove input radius & -webkit-appearance

**Purpose**
1. [Center Portal][change][Front-end] remove input radius & -webkit-appearance
2. [Center Portal][fix][Front-end] error message fix
3. [Center Portal][fix][Front-end] router query error message fix

**Test Case**
1. test for mobile
   - [x] mobile scan -> check input style
   - [x] input wrong password/username -> submit -> check error message

### Tingwei
#### [change]In tablet or mobile device, the header dropdown hide "Advanced setting", "Help", "Home" and "Account".

**Purpose**
1. In tablet or mobile device, the header dropdown hide "Advanced setting", "Help", "Home" and "Account".

**Test Case**
1. test 1 by chrome devtool, changing device need to refresh page 
   - [x] iphone x
   - [x] iPad
   - [x] desktop

#### [Fix] Fix util.js translation wrong.

**Purpose**
1. [Fix] Fix util.js translation wrong.

**Test Case**
1. go to https://localhost:8080/#/mobile/device/addDevice/manual, test below error message
   - [x] ja required
   - [x] zh_tw length
   - [x] ja length

#### [change][Devices] Editing success (only EdgeLink and SCADA) and Deleting success no need to reset Current Page, Rows Per Page, Search Keyword...etc

**Purpose**
1. [change][Devices] Editing success (only EdgeLink and SCADA) and Deleting success no need to reset Current Page, Rows Per Page, Search Keyword  
2. [Fix][Devices] Deleting Device success no need to setLoadingEnd
3. [Fix][Devices] Fix dropdown of "Rows Per Page" is cover by the fixed right columns

**Test Case**
1. test edit
   - [x] go to 2+ page & Rows Per Page is 20 -> edit device -> save
   - [x] search -> edit device -> save
2. test delete
   - [x] go to 2+ page & Rows Per Page is 20 & 2+ device in this page -> delete device -> save
   - [x] go to 2+ page & Rows Per Page is 20 & only 1 device in this page -> delete device -> save
   - [x] search & more than 2 device in this page -> delete device -> save
   - [x] search & only 1 device in this page -> delete device -> save
3. test purpose 3 in 1360px
   - [x] Devices -> check dropdown of "Rows Per Page"

## 2021/2/2
### Alice 
#### feature/gzip build

**Purpose**
1. [Center Portal][change][Front & Back -end]
    - build gzip
2. [Center Portal][change][Front-end]
    - sign in only when res data status === 'deviceon-bi'
3. [Center Portal][change][Back-end] 
    - sign in check mode
4. [Center Portal][change][Front-end] 
    - action url tweak, exclude the possibility of exceptions, like url.com/#/login

**Test Case**
1. test for build
   - [x] build -> network file response headers content encoding is gzip
2. test for domain api
   - [x] submit https://api-portal...... -> response body status is 'deviceon-bi'-> submit action redirect
3. test for domain api
   - [x] click forget password or sign up -> working
4. test for submit action url
   - [x] input url that has postfix(ex. http://xxxx.xxxx.com/#/login) -> submit -> work correctly

### Tingwei 
#### [Fix]When we redirect to /login from new tab with not /login URL, "Session Timeout" is no need to show...etc

**Purpose**
1. [Fix]When we redirect to /login from new tab with not /login URL, "Session Timeout" is no need to show...etc
2. [Fix]Fix opacity is 0 when not login and key in not /login URL(i.g., /index/deviceManagement) at /login page.

**test**
1. Test 1
    - [x] Login -> delete Token -> go to /index/deviceManagement
    - [x] -> visit https://localhost:8080/#/index/deviceManagement from a new tab
2. Test 2
    - [x] -> in login page and not login -> key in https://localhost:8080/#/index/deviceManagement

#### [Fix][Mobile Device] Add device manually, when select connector device, hide mac field... etc

**Purpose**
1. [Fix][Mobile Device] Add device manually, when select connector device, hide mac field.
2. [Change][Mobile Device] If the device is a connector device, formatSerialNoLabel return "Edge ID".
3. [Change][Mobile Device] Add device by scan QR code, format mac address when initAddDevice.

**test**
1. Test 1
    - [x] Add -> Manually Input -> select device "WISE -> LoRaWAN -> NS Service" -> save
2. Test 2
    - [x] check "NS Service" device in mobile/device/deviceList
3. Test 3
    - [x] scan qrcode which contains lowercase MAC Address -> check whether mac Address is uppercase in input

#### [Fix] Hide outline when click dropdown button of header and "Add"... etc

**Purpose**
1. [Fix] Fix "this.selectedProduct.name.indexOf('Connector')" to "this.getConnectorNameEnum.indexOf(this.selectedProduct.name)" for product "WISE -> LoRaWAN -> NS Service".
2. [Change] Move "createDeviceCredentialKey" ('/device/create/credentialkey/connector') from handleProductModuleChange() to saveNewDevice() to make sure Promise.
3. [Fix] multiLangSource.scan_device_QR_code and multiLangSource.mobile_add_new_device_header_content
4. [Fix] Hide outline when click dropdown button of header and "Add"

**test**
1. Test 1 & 2
    - [x] select device "WISE -> LoRaWAN -> NS Service" -> save -> edit it in deviceManagement
2. Test 3
    - [x] Add -> check "Scan Device QR Code"
    - [x] Add -> Manually Input -> check "Please fill in the following fields to add device."
3. Test 4
    - [x] click Add -> check whether outline hides
    - [x] click Gear Icon of header -> check whether outline hides
    - [x] click User Icon of header -> check whether outline hides

## 2021/1/29
### Alice 
#### feature/test and bug fix

**Purpose**
1. [Center Portal][add][Back-end]
    - POST api - domainStatus
2. [Center Portal][add][Front-end] 
    - domainStatus POST api connect
    - use window.open replace href url
    - add url pointer
3. [Center Portal][change][Back-end]
    - add POST api - domainStatus
    - remove extra code and sync the back-end code
4. [Center Portal][change][Front-end]
    - window.open url must be _self not _blank

**Test Case**
1. correct sign in (cloud/edge)
2. test for username error(empty/format error/invalid username)
3. test for password error(empty/length not enough/invalid password)
4. test for domain error(empty/forget password/sign in/sign up/invalid domain url)
5. domain input slash(/) test
6. after select station, clear error message (cloud)
7. remember me -> store username, current tab, domain
8. test url status before redirect(sign up/sign in/forget password)
9. preventDefault action event before url status check
10. window.open url by _self(sign up/forget password)
11. after redirect clear the password field
12. \<a> and \<button> cursor pointer change

- test url: https://wise-deviceon-bi.azurewebsites.net/#/login

### Tingwei 
#### [Change] Apply timeoutHandler on mobileMain.vue... etc

**Purpose**
1. [Add] Extract timeoutHandler from index.vue and create a mixin component: "components/_extend_mixin/timeoutHandler.js".
2. [Change] Apply timeoutHandler on index.vue and mobileMain.vue.
3. [Change] If isMobile and has valid token, visit page by domain directly will redirect to mobile/device/deviceList 

**Test Case**
1. Test 1 & 2 by using safari connect iphone by develop tool od safari
   - [x] mobile/device/deviceList -> change "refreshTokenFlag" in localStorage to "1" -> touch iphone -> check whether refreshToken in network
   - [x] mobile/device/deviceList -> delete "EIToken" and change "refreshTokenFlag" in localStorage to "1" -> touch iphone -> check whether Logout
   - [x] mobile/device/deviceList -> change to other App or web page -> delete "EIToken" and change "refreshTokenFlagTimerTimestamp" in localStorage to "0" -> turn back to our page -> check whether Logout
2. Test 1 & 2 by using desktop chrome
   - [x] organizationManagement -> change "refreshTokenFlag" in localStorage to "1" -> scroll -> check whether refreshToken in network
   - [x] organizationManagement -> delete "EIToken" and change "refreshTokenFlag" in localStorage to "1" -> click -> check whether Logout
   - [x] organizationManagement -> change to web page -> delete "EIToken" and change "refreshTokenFlagTimerTimestamp" in localStorage to "0" -> check whether Logout
3. Test 3
   - [x] login in iphone -> visit page by domain directly -> check whether redirect to mobile/device/deviceList
   - [x] login in desktop -> visit page by domain directly -> check whether redirect to organizationManagement

## 2021/1/28
### Tingwei
#### [Add] Add Device manually...etc

**Purpose**
1. [Add][Mobile Device] Add Device manually
2. [Add][Mobile Device] validate modelType and mac Address 

**Test Case**
1. Test 1
   - [x] Manually input -> name successfully
2. Test 2
   - [x] add by scan qrcode -> modelType length > 32
   - [x] add by scan qrcode -> invalid modelType (unsupported product)
   - [x] Manually input -> mac address length < 15
   - [x] Manually input -> mac address exists

### [Fix]Profiles hide when no any org bind.

**Purpose**
1. [Fix]Profiles hide when no any org bind.

**Test Case**
1. Test 1
   - [x] visit profileManagement in user who binds no any org

## 2021/1/27
### Tingwei
#### [Add][Mobile Device] Add error page... etc

**Purpose**
1. [Add][Mobile Device] Add error page
2. [Add]Avoid view zoom in when focus input

**Test Case**
1. Test by `npm run dev-https0000` in mac, using iphone connect local server by IP in the same network. 
   - [x] scan unsupported model type
   - [x] -> scan again -> scan exist device 
   - [x] -> scan again -> scan no mac 
   - [x] -> scan again -> scan no modelType
   - [x] -> scan again -> scan no both mac and modelType
   - [x] -> scan again -> in "Access the Camera dialog" click cancel(block camera)
   - [x] use company PC(no camera) -> add -> scan device qrcode -> check "No Camera Found"
   - [x] visit by http and not localhost -> add -> scan device qrcode
   - [x] My iphone or PC does't occur "NotReadableError", so test word by runing below code in Console of devtool `document.getElementById('app').__vue__.$store.state.deviceModule.errorPageData.type = 'scanQRCode_initError_NotReadableError';
document.getElementById('app').__vue__.$router.push({path: '/mobile/device/error'})` 
   - [x] My iphone or PC does't occur "OverconstrainedError", so test word by runing below code in Console of devtool`document.getElementById('app').__vue__.$store.state.deviceModule.errorPageData.type = 'scanQRCode_initError_OverconstrainedError';
document.getElementById('app').__vue__.$router.push({path: '/mobile/device/error'})`  
   - [x] My iphone or PC does't occur "StreamApiNotSupportedError", so test word by runing below code in Console of devtool`document.getElementById('app').__vue__.$store.state.deviceModule.errorPageData.type = 'scanQRCode_initError_StreamApiNotSupportedError';
document.getElementById('app').__vue__.$router.push({path: '/mobile/device/error'})`  
   - [x] test other uncategary init error word by runing below code in Console of devtool`document.getElementById('app').__vue__.$store.state.deviceModule.errorPageData.type = 'scanQRCode_initError_other';
document.getElementById('app').__vue__.$router.push({path: '/mobile/device/error'})`  
2. Test 2 by my iphone
   - [x] go to /login -> click User Name

####[Change] If device is Mobile/Pad, login to /mobile/device/deviceList. Otherwise, login to /home.... etc

**Purpose**
1. [Change] If device is Mobile/Pad, login to /mobile/device/deviceList. Otherwise, login to /home.
2. [Add] Add new package, "mobile-device-detect". Set isMobile into store.state when web initializes.
3. [Change] When going to /mobile/device/addDevice, in no both mac and modelType condition, if device is Mobile/Pad redirect to /mobile/device/deviceList, Otherwise, redirect to /home.
4. [Change] "vue-qrcode-reader": "^2.3.15"
5. [Change] In /mobile/device/addDevice, mac and model are editable.

**Test Case**
1. Test purpose 1 & 2
   - [x] mobile login by iphone -> /mobile/device/deviceList
   - [x] ipad login by chrome devtool "iPad Pro" -> /mobile/device/deviceList
   - [x] desktop login -> /home
2. Test purpose 3
   - [x] mobile, url input /mobile/device/addDevice -> /mobile/device/deviceList
   - [x] ipad, url input /mobile/device/addDevice -> /mobile/device/deviceList
   - [x] desktop, url input /mobile/device/addDevice -> /mobile/device/deviceList
3. Test purpose 5
   - [x] go to https://localhost:8080/#/mobile/device/addDevice?mac=00-D0-C9-F8-9E-55&modelType=UNO-137 -> check whether mac address and model type are editable.




## 2021/1/22
### Tingwei
#### [Add][Mobile Device] Add description into pageMobileAddDevice and PageMobileDeviceList... etc

**Purpose**
1. [Add][Mobile Device] Add description into pageMobileAddDevice and PageMobileDeviceList
2. [Add][Mobile Device] Scroll to top when page change.

**Test Case**
1. Test 1 & 2
   - [x] go to https://localhost:8080/#/mobile/device/addDevice?mac=32-D3-FB-E8-46-9F&modelType=UNO-137 -> fill desc which has length > 200 -> submit
   - [x] valid desc -> submit
   - [x] no desc -> scroll down to the bottom of page -> submit
   - [x] -> check whether scroll to top and check desc deviceList

### Alice
#### feature/fix sso login box size

**Purpose**
1. [SSO][fix] fix size same as cloud center

**Test Case**
1. add new login box size when page size change
   - [x] 1440 - 1920
   - [x] 1920 - 2560

#### feature/center portal file update

**Purpose**
1. [Center Portal][Front-end][add] 
  - api connect
  - store multilang
2. [Center Portal][Front-end] [change]
  - error msg & forget url fix
  - remember only username
  - validate timing change
  - login box size change
  - detect the domain last char is '/'
  - update ver
  - add maximum & minimum scale for mobile
3. [Center Portal][Back-end][change]
  - add CORS
  - update ver
4. [Center Portal][change] 
  - remove useless file & code
**Test Case**
1. test for cloud center page
   - [x] get station list from /api/stationList -> select option -> sign in
   - [x] get language from store -> detect bowser language -> check label and placeholder correct
   - [x] click the forget url -> jump to the correct station that forgot password page
   - [x] check remember me before sign in -> sign error go back this page -> username must be kept
   - [x] username blur only check username (validate input fields independently)
   - [x] test difference resolution
      - 320 x 568
      - 375 x 667
      - 414 x 736
      - 375 x 812
      - 768 x 1024
      - 1024 x 1366
      - 1366 x 768
      - 1440 x 1920
      - 1920 x 2560
      - 2560 ↑

## 2021/1/21
### Tingwei
#### [Add][Mobile Device] pageMobileScanDeviceQRCode.vue ... etc

**Purpose**
1. [Add][Mobile Device] pageMobileScanDeviceQRCode.vue
2. [Add][Device] close button of sideBar of My Device add hover and active icon

**Test Case**
1. Test 1 by `npm run dev-https0000` in mac, using iphone connect local server by IP in the same network. 
   - [x] go to mobile/device/deviceList -> click Add -> click "Scan Device QR Code" -> scan valid QR Code -> add device (iphone safari and chrome)
   - [x] scan invalid QR Code(i.g., ejdoawiejdoi)
   - [x] go to mobile/device/deviceList -> click Add -> click "Scan Device QR Code" -> do not allow camera
2. Test 2
   - [x] go to Devices -> click any device name -> mouse hovers close button -> click close button



## 2021/1/20
### Alice
#### feature/center portal file update

**Purpose**
[Center Portal][add] update docker file branch

## 2021/1/19
### Alice
#### feature/fix-notification-select-variable

**Purpose**
1. [Notification][fix] select variable dialog path, object item add ellipsis

**Test Case**
1. test for notification select variable dialog
   - [x] text over path/content with text ellipsis


#### feature/center-portal-file-update

**Purpose**
1. [Center Portal][add] 
    - file upload (update package version)
2. [Center Portal][add]
    - front-end, back-end
3. [Center Portal][add]
    - front-end, back-end update for build
4. [Center Portal][add] 
    - redirect to login
    - /bi/auth/login form action test
5. [Center Portal][add] 
    - add store for could center
    - build and test
    - remove dist data
6. [Center Portal][add]
    - remove old sso css
    - change cloud center page struct
    - add new scss for cloud center
    - add new color variables
7. [Center Portal][add]
    - clear style and reduce unuseful html tag
    - value & style name format
    - api url add
8. [Center Portal][add]
    - error tips
    - username, password, domain check
    - preventDefault redirect when error
9. [Center Portal][Back-end][add] 
    - edit docker file

**Test Case**
1. test for build
   - [x] npm run prod-test make the dist -> move to back-end npm run prod-test -> check server listen at http://localhost:8080 is work
   - [x] check username, password, domain empty/doesn't match format
   - [x] singup/forget password link
   - [x] rwd
   - [x] correct form data post and redirect url
   - [x] get back end error and show

## 2021/1/18
### Tingwei
#### [change]Close if Flag: get account not by Cookies when "process.env.NODE_ENV !== 'production' || window.location.host.indexOf(Conf.testAPIForLocal) > -1)"

**Purpose**
1. [change]Close if Flag: get account not by Cookies when "process.env.NODE_ENV !== 'production' || window.location.host.indexOf(Conf.testAPIForLocal) > -1)"
2. [change]logout delete cookies "EIToken" and "WISEUser".

**Test Case**
1.  test 1 with `npm run dev`
    - [x] go to #/login
    - [X] -> login
    - [x] go to #/index/organizationManagement
    - [x] logout -> login again

### [Add]pageMobileDeviceList...etc

**Purpose**
1. [Add]pageMobileDeviceList
2. [Fix][Mobile Device] CredentialKey should not be delete after adding device success
3. [Fix][Mobile Device] Add device success message new style

**Test Case**
1.  test 1 with `npm run dev`
    - [x] go to #/mobile/device/deviceList -> check image, Name, Model Type, MAC Address(or SCADA ID or IMEI Code)
    - [x] click Add -> click -> Scan Device QR Code
    - [x] click Add -> click -> Manually Input
2.  test 2 ~ 3
    - [x] #/mobile/device/addDevice?mac=4A-FA-52-48-F3-3E&modelType=UNO-137 -> add a new device -> check success message style 
    - [x] -> after page changes to #/mobile/device/deviceList ->check whether CredentialKey deleted in network(or You can delete the device from #/index/deviceManagement. If no CredentialKey, deleting will show an error. )

## 2021/1/15
### Tingwei
#### [Change]on-primises hide "Sign up", "Activate Account " and "subscribe Now" ... etc

**Purpose**
1. [Change] on-primises hide "Sign up", "Activate Account " and "subscribe Now"
2. [Change] change "product/module" APII
3. [Fix] Fix only mac or modelType change bug.

**Test Case**
1.  test 1 with changing `prod.config.js -> testAPIForLocal to e100-ensaas.isghpc.wise-paas.com, and npm run dev`
    - [x] go to #/login
2.  test 2 & 3 with changing `prod.config.js -> testAPIForLocal to develop-eks002.hz.wise-paas.com.cn, and npm run dev`
    - [x] go to #/mobile/device/addDevice?mac=4A-FA-52-48-F3-3A&modelType=ADAM-6017
    - [x] -> change value of modelType to GG in url field of browser and press enter

## 2021/01/14
### Tingwei
#### [Add][mobile] page Add Device

**Purpose**
1. pageAddDevice
2. Submit
3. Cancel
4. validation: no mac, no modelType, no both, unsupported modelType, mac exist, duplicate device name.
5. channel

**Test Case**
1.  test after login
    - [x] go to /mobile/device/addDevice?mac=4A-FA-52-48-F3-3E&modelType=ADAM-6017 -> check whether device exists
    - [x] go to /mobile/device/addDevice?mac=4A-FA-52-48-F3-3E&modelType= -> check whether no modelType
    - [x] go to /mobile/device/addDevice?mac=&modelType=ADAM-6017 -> check whether no mac
    - [x] go to /mobile/device/addDevice?mac=&modelType= -> check whether go to device list
    - [x] go to /mobile/device/addDevice -> check whether go to device list
    - [x] go to /mobile/device/addDevice?mac=4A-FA-52-48-F3-3E&modelType=GG -> unsupported
    - [x] go to /mobile/device/addDevice?mac=4A-FA-52-48-F3-3E&modelType=ADAM-6017 -> input deplicate name -> submit
    - [x] -> change correct name -> submit -> check whether success
    - [x] check device(ADAM-6017) created from index/deviceManagemant -> whether the default I/O Channels exist
    - [x] test iphone safari, wechat, chrome, line
    - Android will test in the future

## 2021/01/07
### Tingwei
#### [Change][Devices]Device list fixed actions column in the right side.

**Purpose**
1. [Change][Devices]Device list fixed actions column in the right side.

**Test Case**
1.  test purpose 1 
    - [x] check fixed actions

## 2021/01/06
### Tingwei
#### [Add] Support profile server api in on-premises space...etc

**Purpose**
1. [Add] Support profile server api in on-premises space.
2. [Fix] systemInfo and license are reset when Logout.
3. [change] Separate "systemState" from defaultState. "systemState" will not reset when "setLogOut". "defaultState" will reset when "setLogOut".
4. [Delete] Delete unused src/axios/axios.js

**Test Case**
1.  test purpose 1 in http://portal-deviceon-bi-e100-ensaas.isghpc.wise-paas.com/
    - [x] go to profileManagement -> create a profile
    - [x] -> edit profile -> upload a alarm code excel
    - [x] delete a profile
    - [x] create object from profile
2. test purpose 1 in http://portal-deviceon-bi-develop-eks002.hz.wise-paas.com.cn
    - [x] go to profileManagement
3. test purpose 2~3 in http://portal-deviceon-bi-develop-eks002.hz.wise-paas.com.cn
    - [x] login -> logout -> open chrome devtool -> open Console and input `document.getElementById('app').__vue__.$store.state.systemInfo` chech whether systemInfo is not empty object
4. test purpose 4 in localhost:8080
    - [x] login -> go to profileManagement -> logout


#### [Fix][Devices][tagInfoList] Fix bug, in sidebar tab is "Dependent Resources" condition, tag total count does not update after user change selected device...etc

**Purpose**
1. [Fix][Devices][tagInfoList] Fix bug, in sidebar tab is "Dependent Resources" condition, tag total count does not update after user change selected device.
2. [Fix][Devices][tagInfoList] Fix error when dataType is null.
3. [Fix][Device List] Fix checkbox count does not reset when fetchDeviceInfoList (i.g., edit and save a device)
4. [Fix] Fix Blue background always keep even through sidebar close.
5. [Change][My Devices]Change showing sidebar timing from click a row to click the device name. 
6. [Add] hyperlink.scss

**Test Case**
1.  test 1 & 2, change testAPIForLocal to 'trace-eks002.hz.wise-paas.com.cn' in prod.env.js, login with 'xiaochen.shi@advantech.com.cn' account
    - [x] go to devices -> click a device -> click 'dependent Resources' -> change device -> check tags total count
    - [x] -> click Tags in the tabs of sidebar -> select 'childDev' device -> check tag table
2.  test 3
    - [x] open pageDevices.vue -> change isShowCheckbox to 'true' -> go to browser -> go to Devices -> check 3 checkbox -> edit a device -> save the device -> check a checkbox -> check whether chechbox total count is 1
3.  test 4
    - [x] sidebar show -> shide bar close -> check the row background color
4.  test 5 & 6 in My Devices page
    - [x] tab Devices -> click device name -> change device
    - [x] tab Devices -> click row
    - [x] tab Monitor -> click device name -> change device
    - [x] tab Monitor -> click row
    - [x] tab Alarm -> click device name -> change device
    - [x] tab Alarm -> click row
    - [x] tab Firmware -> click device name -> change device
    - [x] tab Firmware -> click row
    - [x] tab Configure -> click device name -> change device
    - [x] tab Configure -> click row

### Alice
#### feature/clear-refresh-value

**Purpose**
1. [SRPDashboard] update refresh value as ""

**Test Case**
1. test for add from template
    - [x] save the dashboard that add from template -> preview (need database also change the default refresh value)

## 2021/01/04
### Alice
#### feature/panael-discrete-decimal0

**Purpose**
[SRPDashboard] 
1. detect Group Bar Chart first target's data type for disabled decimal
2. change decimal to 0
3. add tips after the decimal label
4. log chart panel no decimal value can be setting yet

**Test Case**
1. test for dashboard add blank
    - [x] add a grouped bar chart panel -> add a parameter that data type is discrete -> edit Y Axis -> check decimal was disabled -> check the tips that after label
    - [x] delete/change the parameter -> edit Y Axis -> check decimal was able to change

#### feature/inspection tab double click

**Purpose**
1. [Inspection] prevent user double-click the tab, lead to same page be refreshed
2. [Inspection] add tab icon (open inspection page in _blank)
3. [Inspection] update tab icon

**Test Case**
1. test for Inspection
    - [x] click the actived tab -> check page isn't refreshed
    - [x] click the tab -> open the inspection page in new tab page

### Tingwei
#### [Fix] Translation text of the delete device dialog change to replacing {keyword}.

**Purpose**
1. [Fix] Translation text of the delete device dialog change to replacing {keyword}.
2. [Fix] Fix tw translation text

**Test Case**
1. test purpose 1
    - [x] tw -> check delete device dialog text
    - [x] en -> check delete device dialog text
    - [x] cn -> check delete device dialog text
    - [x] jp -> check delete device dialog text
2. test purpose 2
    - [x] check https://docs.google.com/spreadsheets/d/11nZyjyBx9ewp7I964hN1H492V0q9Hyo0EGo8Oa_ucCA/edit#gid=2125294650