Add publishing of awards to TBA.

This commit is contained in:
Patrick Fairbank
2019-09-15 02:09:23 -07:00
parent 26611367ce
commit 92a52ddd88
8 changed files with 139 additions and 25 deletions

View File

@@ -146,6 +146,12 @@ type TbaMediaItem struct {
Type string `json:"type"`
}
type TbaPublishedAward struct {
Name string `json:"name_str"`
TeamKey string `json:"team_key"`
Awardee string `json:"awardee"`
}
var habLevelMapping = []string{"None", "HabLevel1", "HabLevel2", "HabLevel3"}
var bayStatusMapping = []string{"None", "Panel", "PanelAndCargo", "Cargo"}
var sandstormBonusMapping = map[bool]string{false: "None", true: "CrossedHabLineInSandstorm"}
@@ -593,3 +599,34 @@ func createTbaScoringBreakdown(match *model.Match, matchResult *model.MatchResul
return &breakdown
}
// Uploads the awards to The Blue Alliance.
func (client *TbaClient) PublishAwards(database *model.Database) error {
awards, err := database.GetAllAwards()
if err != nil {
return err
}
// Build a JSON array of TBA-format award models.
tbaAwards := make([]TbaPublishedAward, len(awards))
for i, award := range awards {
tbaAwards[i].Name = award.AwardName
tbaAwards[i].TeamKey = getTbaTeam(award.TeamId)
tbaAwards[i].Awardee = award.PersonName
}
jsonBody, err := json.Marshal(tbaAwards)
if err != nil {
return err
}
resp, err := client.postRequest("awards", "update", jsonBody)
if err != nil {
return err
}
if resp.StatusCode != 200 {
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
return fmt.Errorf("Got status code %d from TBA: %s", resp.StatusCode, body)
}
return nil
}

View File

@@ -125,6 +125,27 @@ func TestPublishingErrors(t *testing.T) {
assert.NotNil(t, client.PublishAlliances(database))
}
func TestPublishAwards(t *testing.T) {
database := setupTestDb(t)
database.CreateAward(&model.Award{0, model.JudgedAward, "Saftey Award", 254, ""})
database.CreateAward(&model.Award{0, model.JudgedAward, "Spirt Award", 0, "Bob Dorough"})
// Mock the TBA server.
tbaServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
assert.Contains(t, r.URL.String(), "event/my_event_code")
var reader bytes.Buffer
reader.ReadFrom(r.Body)
assert.Equal(t, "[{\"name_str\":\"Saftey Award\",\"team_key\":\"frc254\",\"awardee\":\"\"},"+
"{\"name_str\":\"Spirt Award\",\"team_key\":\"frc0\",\"awardee\":\"Bob Dorough\"}]", reader.String())
}))
defer tbaServer.Close()
client := NewTbaClient("my_event_code", "my_secret_id", "my_secret")
client.BaseUrl = tbaServer.URL
assert.Nil(t, client.PublishAwards(database))
}
func setupTestDb(t *testing.T) *model.Database {
return model.SetupTestDb(t, "partner")
}