From e1145dc92831381689f3d722a60e8848a6fd4f7b Mon Sep 17 00:00:00 2001
From: Timotej Ecimovic <timotej.ecimovic@silabs.com>
Date: Wed, 19 Jan 2022 14:15:41 -0500
Subject: [PATCH] Add a unit test for new reporting policy, and fix some loader
 issues that the unit test discovered.

---
 src-electron/zcl/zcl-loader-silabs.js | 4 +++-
 src-shared/db-enum.js                 | 7 +++++--
 test/gen-meta.test.js                 | 1 +
 test/resource/meta/test1.xml          | 4 ++--
 test/resource/meta/test1.zapt         | 5 +++++
 5 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/src-electron/zcl/zcl-loader-silabs.js b/src-electron/zcl/zcl-loader-silabs.js
index be21ec2d..414a7b6e 100644
--- a/src-electron/zcl/zcl-loader-silabs.js
+++ b/src-electron/zcl/zcl-loader-silabs.js
@@ -91,6 +91,9 @@ async function collectDataFromJsonFile(metadataFile, data) {
   // Default reportability.
   // `defaultReportable` was old thing that could be true or false.
   // We still honor it.
+  returnObject.defaultReportingPolicy =
+    dbEnum.reportingPolicy.defaultReportingPolicy
+
   if ('defaultReportable' in obj) {
     returnObject.defaultReportingPolicy = obj.defaultReportable
       ? dbEnum.reportingPolicy.suggested
@@ -103,7 +106,6 @@ async function collectDataFromJsonFile(metadataFile, data) {
       obj.defaultReportingPolicy
     )
   }
-
   returnObject.version = obj.version
   returnObject.supportCustomZclDevice = obj.supportCustomZclDevice
 
diff --git a/src-shared/db-enum.js b/src-shared/db-enum.js
index d3adb921..71b7bee4 100644
--- a/src-shared/db-enum.js
+++ b/src-shared/db-enum.js
@@ -116,11 +116,12 @@ exports.sessionOption = {
   profileCodes: 'profileCodes',
 }
 
-exports.reportingPolicy = {
+const reportingPolicy = {
   mandatory: 'mandatory',
   suggested: 'suggested',
   optional: 'optional',
   prohibited: 'prohibited',
+  defaultReportingPolicy: 'optional',
   resolve: (txt) => {
     switch (txt) {
       case reportingPolicy.mandatory:
@@ -130,11 +131,13 @@ exports.reportingPolicy = {
         return txt
       default:
         // Default
-        return reportingPolicy.optional
+        return reportingPolicy.defaultReportingPolicy
     }
   },
 }
 
+exports.reportingPolicy = reportingPolicy
+
 // When SDK supports a custom device, these are the default values for it.
 exports.customDevice = {
   domain: 'Custom',
diff --git a/test/gen-meta.test.js b/test/gen-meta.test.js
index a7250883..b8adbb70 100644
--- a/test/gen-meta.test.js
+++ b/test/gen-meta.test.js
@@ -208,6 +208,7 @@ test(
     let epc = genResult.content['test1.out']
     expect(epc).not.toBeNull()
     expect(epc).toContain('Test1 template.')
+    expect(epc).toContain('- attribute: at2 => true => mandatory')
 
     epc = genResult.content['out/test1.out']
     expect(epc).not.toBeNull()
diff --git a/test/resource/meta/test1.xml b/test/resource/meta/test1.xml
index c3d514a0..08d81d88 100644
--- a/test/resource/meta/test1.xml
+++ b/test/resource/meta/test1.xml
@@ -33,7 +33,7 @@ limitations under the License.
       <description>at1</description>
       <access op="write" role="manage" modifier="fabric-scoped"/>
     </attribute>
-    <attribute side="server" code="0x0001" define="AT2" type="INT16U" writable="false" optional="true" isNullable="true">
+    <attribute side="server" code="0x0001" define="AT2" type="INT16U" writable="false" optional="true" isNullable="true" reportingPolicy="mandatory">
       <description>at2</description>
       <access modifier="fabric-sensitive"/>
     </attribute>
@@ -62,7 +62,7 @@ limitations under the License.
       <description>at1</description>
       <access op="write" role="manage" modifier="fabric-scoped"/>
     </attribute>
-    <attribute side="server" code="0x0001" define="AT2" type="INT16U" writable="false" optional="true" isNullable="true">
+    <attribute side="server" code="0x0001" define="AT2" type="INT16U" writable="false" optional="true" isNullable="true" reportingPolicy="prohibited">
       <description>at2</description>
       <access modifier="fabric-sensitive"/>
     </attribute>
diff --git a/test/resource/meta/test1.zapt b/test/resource/meta/test1.zapt
index f209b5f1..200da6ba 100644
--- a/test/resource/meta/test1.zapt
+++ b/test/resource/meta/test1.zapt
@@ -42,4 +42,9 @@ Attributes [{{endpoint_attribute_count}}]:
 
 {{/endpoint_config}}
 
+Reporting policy:
+{{#zcl_attributes}}
+  - attribute: {{name}} => {{isReportable}} => {{reportingPolicy}}
+{{/zcl_attributes}}
+
 {{/zcl_clusters}}
\ No newline at end of file
-- 
GitLab