Implement types for Event API.
parent
df54a3b11f
commit
e51c8e5d1c
|
@ -0,0 +1,61 @@
|
|||
package footballdata
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Contains information about a soccerseason update sent to us by the Event API.
|
||||
type SoccerSeasonUpdate struct {
|
||||
Timestamp time.Time
|
||||
Resource string
|
||||
Id uint64
|
||||
URI string
|
||||
Updates UpdateDescriptor
|
||||
}
|
||||
|
||||
type FieldUpdateValues struct {
|
||||
OldValue string
|
||||
NewValue string
|
||||
}
|
||||
|
||||
func (v FieldUpdateValues) String() string {
|
||||
return fmt.Sprintf("%s -> %s", v.OldValue, v.NewValue)
|
||||
}
|
||||
|
||||
type FieldUpdate struct {
|
||||
Name string
|
||||
Values *FieldUpdateValues
|
||||
}
|
||||
|
||||
func (v FieldUpdate) String() string {
|
||||
r := []string{v.Name}
|
||||
if v.Values != nil {
|
||||
r = append(r, v.Values.String())
|
||||
}
|
||||
return strings.Join(r, "|")
|
||||
}
|
||||
|
||||
type UpdateDescriptor string
|
||||
|
||||
func (d UpdateDescriptor) Fields() (retval []FieldUpdate) {
|
||||
// (FIELD_NAME|OLD_VALUE -> NEW_VALUE)(;($1))?
|
||||
retval = []FieldUpdate{}
|
||||
fieldStrs := strings.Split(string(d), ";")
|
||||
for _, fieldStr := range fieldStrs {
|
||||
field := FieldUpdate{}
|
||||
fieldStrSplit := strings.SplitN(fieldStr, "|", 2)
|
||||
field.Name = fieldStrSplit[0]
|
||||
if len(fieldStrSplit) > 1 {
|
||||
// OLD_VALUE -> NEW_VALUE
|
||||
valueSplit := strings.Split(fieldStrSplit[1], " -> ")
|
||||
field.Values = &FieldUpdateValues{
|
||||
OldValue: valueSplit[0],
|
||||
NewValue: valueSplit[1],
|
||||
}
|
||||
}
|
||||
retval = append(retval, field)
|
||||
}
|
||||
return
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
package footballdata
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func Test_UpdateDescriptor_Fields(t *testing.T) {
|
||||
testValue := UpdateDescriptor("status|IN_PLAY -> FINISHED")
|
||||
fields := testValue.Fields()
|
||||
|
||||
assert.Len(t, fields, 1)
|
||||
|
||||
assert.Equal(t, "status", fields[0].Name)
|
||||
assert.NotNil(t, fields[0].Values)
|
||||
assert.Equal(t, "IN_PLAY", fields[0].Values.OldValue)
|
||||
assert.Equal(t, "FINISHED", fields[0].Values.NewValue)
|
||||
}
|
||||
|
||||
func Test_UpdateDescriptor_Fields_Multiple(t *testing.T) {
|
||||
testValue := UpdateDescriptor("status|IN_PLAY -> FINISHED;score|1:0 -> 1:1")
|
||||
fields := testValue.Fields()
|
||||
|
||||
assert.Len(t, fields, 2)
|
||||
|
||||
assert.Equal(t, "status", fields[0].Name)
|
||||
assert.NotNil(t, fields[0].Values)
|
||||
assert.Equal(t, "IN_PLAY", fields[0].Values.OldValue)
|
||||
assert.Equal(t, "FINISHED", fields[0].Values.NewValue)
|
||||
|
||||
assert.Equal(t, "score", fields[1].Name)
|
||||
assert.NotNil(t, fields[1].Values)
|
||||
assert.Equal(t, "1:0", fields[1].Values.OldValue)
|
||||
assert.Equal(t, "1:1", fields[1].Values.NewValue)
|
||||
}
|
||||
|
||||
func Test_UpdateDescriptor_Fields_NameOnly(t *testing.T) {
|
||||
testValue := UpdateDescriptor("status")
|
||||
fields := testValue.Fields()
|
||||
|
||||
assert.Len(t, fields, 1)
|
||||
assert.Equal(t, "status", fields[0].Name)
|
||||
assert.Nil(t, fields[0].Values)
|
||||
}
|
||||
|
||||
func Test_UpdateDescriptor_Fields_NameOnly_Multiple(t *testing.T) {
|
||||
testValue := UpdateDescriptor("status;leagueTable")
|
||||
fields := testValue.Fields()
|
||||
|
||||
assert.Len(t, fields, 2)
|
||||
|
||||
assert.Equal(t, "status", fields[0].Name)
|
||||
assert.Nil(t, fields[0].Values)
|
||||
|
||||
assert.Equal(t, "leagueTable", fields[1].Name)
|
||||
assert.Nil(t, fields[1].Values)
|
||||
}
|
Loading…
Reference in New Issue