11package parser
22
33import (
4+ "github.com/ChargePi/chargeflow/pkg/ocpp"
5+ "github.com/pkg/errors"
6+ "go.uber.org/zap"
47 "testing"
58
69 "github.com/stretchr/testify/suite"
@@ -11,7 +14,83 @@ type parserTestSuite struct {
1114}
1215
1316func (s * parserTestSuite ) TestParseMessage () {
17+ logger , _ := zap .NewDevelopment ()
18+ tests := []struct {
19+ name string
20+ data string
21+ expectedMessage ocpp.Message
22+ expectedResult * Result
23+ expectedError error
24+ }{
25+ {
26+ name : "Valid Request" ,
27+ data : `[2,"1234", "BootNotification", {"chargePointVendor": "TestVendor", "chargePointModel": "TestModel"}]` ,
28+ expectedMessage : & ocpp.Call {
29+ MessageTypeId : ocpp .CALL ,
30+ UniqueId : "1234" ,
31+ Payload : map [string ]interface {}{"chargePointVendor" : "TestVendor" , "chargePointModel" : "TestModel" },
32+ Action : "BootNotification" ,
33+ },
34+ expectedResult : NewResult (),
35+ expectedError : nil ,
36+ },
37+ {
38+ name : "Valid Response" ,
39+ data : `[3,"1234", {"status": "Accepted"}]` ,
40+ expectedMessage : & ocpp.CallResult {
41+ MessageTypeId : ocpp .CALL_RESULT ,
42+ UniqueId : "1234" ,
43+ Payload : map [string ]interface {}{"status" : "Accepted" },
44+ Action : "" ,
45+ },
46+ expectedResult : NewResult (),
47+ expectedError : nil ,
48+ },
49+ {
50+ name : "Valid Error" ,
51+ data : `[4,"1234", "GenericError", "An error occurred"]` ,
52+ expectedMessage : & ocpp.CallError {
53+ MessageTypeId : ocpp .CALL_ERROR ,
54+ UniqueId : "1234" ,
55+ ErrorCode : "GenericError" ,
56+ ErrorDescription : "An error occurred" ,
57+ },
58+ expectedResult : NewResult (),
59+ expectedError : nil ,
60+ },
61+ {
62+ name : "Invalid Message" ,
63+ data : `[5,"1234", "InvalidMessage"]` ,
64+ expectedMessage : nil ,
65+ expectedResult : & Result {
66+ errors : []string {"Unknown message type: 5" },
67+ },
68+ expectedError : errors .New ("Unknown message type: 5" ),
69+ },
70+ {
71+ name : "Invalid JSON" ,
72+ data : `{"invalid": "json"}` ,
73+ expectedMessage : nil ,
74+ expectedResult : & Result {
75+ errors : []string {"cannot parse message" },
76+ },
77+ expectedError : errors .New ("cannot parse message" ),
78+ },
79+ }
1480
81+ for _ , tt := range tests {
82+ s .Run (tt .name , func () {
83+ parser := NewParser (logger )
84+ message , result , err := parser .ParseMessage (tt .data )
85+ if tt .expectedError != nil {
86+ s .ErrorContains (err , tt .expectedError .Error ())
87+ } else {
88+ s .NoError (err )
89+ }
90+ s .Equal (tt .expectedMessage , message )
91+ s .Equal (tt .expectedResult , result )
92+ })
93+ }
1594}
1695
1796func TestParser (t * testing.T ) {
0 commit comments