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