package converter

import (
	"reflect"
	"testing"

	"github.com/AlchemyTelcoSolutions/callisto-so-bff/api/v1"
	"github.com/AlchemyTelcoSolutions/callisto-so-bff/internal/domain/model"
)

func TestToHTTPPostSaleOrders(t *testing.T) {
	expected := model.SaleOrderResponse{
		Response: &model.CallistoApiResponse{
			Success: true,
		},
	}

	type args struct {
		m model.SaleOrderResponse
	}
	tests := []struct {
		name string
		args args
		want api.PostSaleOrdersRestResponse
	}{
		{
			name: "Success",
			args: args{m: expected},
			want: api.PostSaleOrdersRestResponse{
				Success: true,
				Result:  expected.Response.Result,
			},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := ToHTTPPostSaleOrders(tt.args.m); !reflect.DeepEqual(got, tt.want) {
				t.Errorf("ToHTTPPostSaleOrders() = %v, want %v", got, tt.want)
			}
		})
	}
}

func TestToHTTPPostUpdateSaleOrders(t *testing.T) {
	expected := model.SaleOrderResponse{
		Response: &model.CallistoApiResponse{
			Success: true,
			Result:  "success",
		},
	}

	errorMap := map[string]interface{}{
		"message": "failed to update so",
	}

	type args struct {
		m model.SaleOrderResponse
	}
	tests := []struct {
		name string
		args args
		want api.PostUpdateSaleOrdersRestResponse
	}{
		{
			name: "Success",
			args: args{m: expected},
			want: "success",
		},
		{
			name: "Failed",
			args: args{m: model.SaleOrderResponse{
				Response: &model.CallistoApiResponse{
					Success: false,
					Error:   errorMap,
				},
			}},
			want: api.PostSaleOrdersRestResponse{
				Success: false,
				Error:   &errorMap,
				Result:  nil,
			},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := ToHTTPPostUpdateSaleOrders(tt.args.m); !reflect.DeepEqual(got, tt.want) {
				t.Errorf("ToHTTPPostUpdateSaleOrders() = %v, want %v", got, tt.want)
			}
		})
	}
}
