package feed import ( "encoding/json" "testing" ) func TestScoreUnmarshalInvalidData(t *testing.T) { test := []byte(`{}`) var val Score if err := json.Unmarshal(test, &val); err == nil { t.Errorf("got \"%s\", exp error", val) } } func TestScoreUnmarshalInvalidValues(t *testing.T) { tests := []struct { val string exp string } { { `-100.0`, "CVSS score out of bounds: -100.0" }, { `-90.0`, "CVSS score out of bounds: -90.0" }, { `-9.3`, "CVSS score out of bounds: -9.3" }, { `-1`, "CVSS score out of bounds: -1.0" }, { `10.1`, "CVSS score out of bounds: 10.1" }, { `100.0`, "CVSS score out of bounds: 100.0" }, } for _, test := range(tests) { t.Run(test.val, func(t *testing.T) { var got Score if err := json.Unmarshal([]byte(test.val), &got); err == nil { t.Errorf("got \"%s\", exp error", got) } else if err.Error() != test.exp { t.Errorf("got \"%s\", exp \"%s\"", err.Error(), test.exp) } }) } } func TestScoreUnmarshalValidValues(t *testing.T) { tests := []struct { val string exp uint8 } { { `0.0`, 0 }, { `0.1`, 1 }, { `1.2`, 12 }, { `5.9`, 59 }, { `9.9`, 99 }, { `10.0`, 100 }, } for _, test := range(tests) { t.Run(test.val, func(t *testing.T) { var got Score if err := json.Unmarshal([]byte(test.val), &got); err != nil { t.Error(err) return } else if uint8(got) != test.exp { t.Errorf("got \"%d\", exp \"%d\"", uint8(got), test.exp) } }) } } func TestScoreString(t *testing.T) { tests := []struct { val uint8 exp string } { { 0, "0.0" }, { 1, "0.1" }, { 9, "0.9" }, { 12, "1.2" }, { 59, "5.9" }, { 99, "9.9" }, { 100, "10.0" }, } for _, test := range(tests) { t.Run(test.exp, func(t *testing.T) { got := Score(test.val).String() if got != test.exp { t.Errorf("got \"%s\", exp \"%s\"", got, test.exp) } }) } }