func validateLegacyEvent()

in events/validators.go [98:173]


func validateLegacyEvent(name string, gotBytes, wantBytes []byte) *ValidationInfo {
	vi := &ValidationInfo{
		Name: name,
	}
	got := make(map[string]interface{})
	err := json.Unmarshal(gotBytes, &got)
	if err != nil {
		vi.Errs = append(vi.Errs, fmt.Errorf("unmarshalling received legacy event %q: %v", name, err))
	}

	want := make(map[string]interface{})
	err = json.Unmarshal(wantBytes, &want)
	if err != nil {
		vi.Errs = append(vi.Errs, fmt.Errorf("unmarshalling expected legacy event %q: %v", name, err))
	}

	// If there were issues extracting the data, bail early.
	if vi.Errs != nil {
		return vi
	}

	gotContext := got["context"].(map[string]interface{})
	wantContext := want["context"].(map[string]interface{})

	// For some fields in the context, they can be written in more than one way. Check all.
	type eventFields struct {
		name      string
		gotValue  interface{}
		wantValue interface{}
	}
	gotTimestamp, err := time.Parse(time.RFC3339, gotContext["timestamp"].(string))
	if err != nil {
		vi.Errs = append(vi.Errs, fmt.Errorf("parsing timestamp of received legacy event: %v", err))
		return vi
	}
	wantTimestamp, err := time.Parse(time.RFC3339, wantContext["timestamp"].(string))
	if err != nil {
		vi.Errs = append(vi.Errs, fmt.Errorf("parsing timestamp of expected legacy event: %v", err))
		return vi
	}
	fields := []eventFields{
		{
			name:      "ID",
			gotValue:  getMaybeSnakeCaseField(gotContext, "eventId"),
			wantValue: wantContext["eventId"],
		},
		{
			name:      "type",
			gotValue:  getMaybeSnakeCaseField(gotContext, "eventType"),
			wantValue: wantContext["eventType"],
		},
		{
			name:      "timestamp",
			gotValue:  gotTimestamp,
			wantValue: wantTimestamp,
		},
		{
			name:      "resource",
			gotValue:  gotContext["resource"],
			wantValue: wantContext["resource"],
		},
		{
			name:      "data",
			gotValue:  got["data"],
			wantValue: want["data"],
		},
	}

	for _, field := range fields {
		if !reflect.DeepEqual(field.gotValue, field.wantValue) {
			vi.Errs = append(vi.Errs, fmt.Errorf("unexpected %q in event %q:\ngot %+v,\nwant %+v", field.name, name, field.gotValue, field.wantValue))
		}
	}

	return vi
}