package main

import (
	"github.com/matryer/is"
	"reflect"
	"testing"
)

func TestProcessHit(t *testing.T) {
	is := is.New(t)
	payload := `{\x22uprm\x22:{\x22test\x22:\x22\x22,\x22rating\x22:100,\x22info\x22:{\x22status\x22:\x22ok\x22}},\x22clid\x22:\x221599534494498451223\x22,\x22cid\x22:1002}`
	hits, err := processHit("2020-10-10T03:37:51+00:00", payload)
	is.NoErr(err)

	success := make([]map[string]string, 2)
	success[0] = map[string]string{
		"Key":          "rating",
		"Value":        "100",
		"ClientID":     "1599534494498451223",
		"CounterID":    "1002",
		"LastDate":     "2020-10-10",
		"LastDateTime": "2020-10-10 03:37:51",
	}
	success[1] = map[string]string{
		"Key":          "info.status",
		"Value":        "ok",
		"ClientID":     "1599534494498451223",
		"CounterID":    "1002",
		"LastDate":     "2020-10-10",
		"LastDateTime": "2020-10-10 03:37:51",
	}
	if !(reflect.DeepEqual(hits[0], success[0]) || reflect.DeepEqual(hits[0], success[1])) {
		is.Fail()
	}
	if !(reflect.DeepEqual(hits[1], success[0]) || reflect.DeepEqual(hits[1], success[1])) {
		is.Fail()
	}
}

func TestProcessInput(t *testing.T) {
	is := is.New(t)
	payload := `2020-08-11T05:24:47+00:00	-	{\x22uprm\x22:{\x22test\x22:\x22test\x22,\x22info\x22:{\x22status\x22:\x22ok\x22}},\x22clid\x22:\x221590450218815708139\x22,\x22cid\x22:1002}	Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36`
	result, err := processInput(payload)
	is.NoErr(err)
	success := make([]string, 2)
	success[0] = `{"ClientID":"1590450218815708139","CounterID":"1002","Key":"info.status","LastDate":"2020-08-11","LastDateTime":"2020-08-11 05:24:47","Value":"ok"}`
	success[1] = `{"ClientID":"1590450218815708139","CounterID":"1002","Key":"test","LastDate":"2020-08-11","LastDateTime":"2020-08-11 05:24:47","Value":"test"}`
	if !(result[0] == success[0] || result[0] == success[1]) {
		is.Fail()
	}
	if !(result[1] == success[0] || result[1] == success[1]) {
		is.Fail()
	}
}
