package raven

import (
	"context"
	"reflect"
	"testing"

	raven "github.com/getsentry/raven-go"

	"gitlab.com/gitlab-org/gitlab-workhorse/internal/correlation"
)

func TestSetExtra(t *testing.T) {

	tests := []struct {
		name  string
		ctx   context.Context
		extra raven.Extra
		want  raven.Extra
	}{
		{
			name:  "trivial",
			ctx:   nil,
			extra: nil,
			want:  raven.Extra{},
		},
		{
			name: "no_context",
			ctx:  nil,
			extra: map[string]interface{}{
				"key": "value",
			},
			want: map[string]interface{}{
				"key": "value",
			},
		},
		{
			name: "context",
			ctx:  correlation.ContextWithCorrelation(context.Background(), "C001"),
			extra: map[string]interface{}{
				"key": "value",
			},
			want: map[string]interface{}{
				"key":               "value",
				ravenSentryExtraKey: "C001",
			},
		},
		{
			name:  "no_injected_extras",
			ctx:   correlation.ContextWithCorrelation(context.Background(), "C001"),
			extra: nil,
			want: map[string]interface{}{
				ravenSentryExtraKey: "C001",
			},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := SetExtra(tt.ctx, tt.extra); !reflect.DeepEqual(got, tt.want) {
				t.Errorf("SetExtra() = %v, want %v", got, tt.want)
			}
		})
	}
}