diff options
-rw-r--r-- | timetask/module.go | 24 | ||||
-rw-r--r-- | timetask/module_test.go | 50 |
2 files changed, 74 insertions, 0 deletions
diff --git a/timetask/module.go b/timetask/module.go new file mode 100644 index 0000000..adef4e5 --- /dev/null +++ b/timetask/module.go @@ -0,0 +1,24 @@ +package timetask + +import ( + "encoding/xml" +) + +type Module struct { + ID int `xml:"moduleid"` + Name string `xml:"modulename"` +} + +type moduleXML struct { + Modules []Module `xml:"response>item"` +} + +func ParseXML(xml_str string) ([]Module, error) { + modules := moduleXML{} + err := xml.Unmarshal([]byte(xml_str), &modules) + if err != nil { + return nil, err + } + + return modules.Modules, nil +} diff --git a/timetask/module_test.go b/timetask/module_test.go new file mode 100644 index 0000000..6dcfa94 --- /dev/null +++ b/timetask/module_test.go @@ -0,0 +1,50 @@ +package timetask + +import "testing" + +const modules_xml = `<?xml version="1.0" encoding="UTF-8" ?> +<ajax-response> + <response type="object" id="ModuleList"> + <item> + <moduleid><![CDATA[55555]]></moduleid> + <modulename><![CDATA[R&D]]></modulename> + </item> + <item> + <moduleid><![CDATA[77777]]></moduleid> + <modulename><![CDATA[Sprint 1]]></modulename> + </item> + <item> + <moduleid><![CDATA[222222]]></moduleid> + <modulename><![CDATA[Sprint 2]]></modulename> + </item> + </response> +</ajax-response>` + +func TestParseXML(t *testing.T) { + modules, err := ParseXML(modules_xml) + if err != nil { + t.Error(err) + } + + _ = []Module{ // wanted + Module{ + ID: 55555, + Name: "R&D", + }, + Module{ + ID: 77777, + Name: "Sprint 1", + }, + Module{ + ID: 222222, + Name: "Sprint 2", + }, + } + + // Need a way to compare slices + // if modules != wanted { + // t.Errorf("Module parsing failed. Wanted %+v got %+v", wanted, modules) + // } + + t.Logf("%+v\n", modules) +} |