package progress

import (
	"testing"

	"github.com/databricks/databricks-sdk-go/service/pipelines"
	"github.com/stretchr/testify/assert"
)

func TestFlowProgressEventToString(t *testing.T) {
	event := ProgressEvent{
		EventType: "flow_progress",
		Message:   "my_message",
		Level:     pipelines.EventLevelInfo,
		Origin: &pipelines.Origin{
			FlowName:     "my_flow",
			PipelineName: "my_pipeline",
		},
		Timestamp: "2023-03-27T23:30:36.122Z",
	}
	assert.Equal(t, `2023-03-27T23:30:36.122Z flow_progress   INFO "my_message"`, event.String())
}

func TestUpdateProgressEventToString(t *testing.T) {
	event := ProgressEvent{
		EventType: "update_progress",
		Message:   "my_message",
		Level:     pipelines.EventLevelError,
		Origin: &pipelines.Origin{
			FlowName:     "my_flow",
			PipelineName: "my_pipeline",
		},
		Timestamp: "2023-03-27T23:30:36.122Z",
	}
	assert.Equal(t, `2023-03-27T23:30:36.122Z update_progress ERROR "my_message"`, event.String())
}

func TestUpdateErrorEventToString(t *testing.T) {
	event := ProgressEvent{
		EventType: "update_progress",
		Message:   "failed to update pipeline",
		Level:     pipelines.EventLevelError,
		Origin: &pipelines.Origin{
			FlowName:     "my_flow",
			PipelineName: "my_pipeline",
		},
		Timestamp: "2023-03-27T23:30:36.122Z",
		Error: &pipelines.ErrorDetail{
			Exceptions: []pipelines.SerializedException{
				{
					Message: "parsing error",
				},
			},
		},
	}
	assert.Equal(t, "2023-03-27T23:30:36.122Z update_progress ERROR \"failed to update pipeline\"\nparsing error", event.String())
}

func TestUpdateErrorIgnoredForWarnEvents(t *testing.T) {
	event := ProgressEvent{
		EventType: "update_progress",
		Message:   "failed to update pipeline",
		Level:     pipelines.EventLevelWarn,
		Origin: &pipelines.Origin{
			FlowName:     "my_flow",
			PipelineName: "my_pipeline",
		},
		Timestamp: "2023-03-27T23:30:36.122Z",
		Error: &pipelines.ErrorDetail{
			Exceptions: []pipelines.SerializedException{
				{
					Message: "THIS IS IGNORED",
				},
			},
		},
	}
	assert.Equal(t, "2023-03-27T23:30:36.122Z update_progress WARN \"failed to update pipeline\"", event.String())
}