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 float32 } { { `0.0`, 0.0 }, { `0.1`, 0.1 }, { `1.2`, 1.2 }, { `5.9`, 5.9 }, { `9.9`, 9.9 }, { `10.0`, 10.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.Error(err) return } else if float32(got) != test.exp { t.Errorf("got \"%f\", exp \"%f\"", float32(got), test.exp) } }) } } func TestScoreString(t *testing.T) { tests := []struct { val float32 exp string } { { 0.0, "0.0" }, { 0.01, "0.0" }, { 0.09, "0.0" }, { 1.2222, "1.2" }, { 5.9, "5.9" }, { 9.99, "9.9" }, { 10.0, "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) } }) } }