package user

import "testing"

func TestShouldShowBindEmailTrialPrompt(t *testing.T) {
	tests := []struct {
		name          string
		hasBoundEmail bool
		hasPurchased  bool
		hasTrial      bool
		want          bool
	}{
		{
			name: "new user should see prompt",
			want: true,
		},
		{
			name:          "bound email should hide prompt",
			hasBoundEmail: true,
			want:          false,
		},
		{
			name:         "paid purchase should hide prompt",
			hasPurchased: true,
			want:         false,
		},
		{
			name:     "trial claimed should hide prompt",
			hasTrial: true,
			want:     false,
		},
		{
			name:          "bound email and purchase should hide prompt",
			hasBoundEmail: true,
			hasPurchased:  true,
			want:          false,
		},
		{
			name:          "bound email and trial should hide prompt",
			hasBoundEmail: true,
			hasTrial:      true,
			want:          false,
		},
		{
			name:         "purchase and trial should hide prompt",
			hasPurchased: true,
			hasTrial:     true,
			want:         false,
		},
		{
			name:          "all blockers should hide prompt",
			hasBoundEmail: true,
			hasPurchased:  true,
			hasTrial:      true,
			want:          false,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got := shouldShowBindEmailTrialPrompt(tt.hasBoundEmail, tt.hasPurchased, tt.hasTrial)
			if got != tt.want {
				t.Fatalf("shouldShowBindEmailTrialPrompt(%v, %v, %v) = %v, want %v", tt.hasBoundEmail, tt.hasPurchased, tt.hasTrial, got, tt.want)
			}
		})
	}
}
