package main

import (
	"testing"

	"github.com/matryer/is"
)

func TestTrafficSource(t *testing.T) {
	is := is.New(t)
	r := `file:///Documents/User/page.html`
	u := `http://site.ru`
	Referer := parseUrlParams(r)
	URL := parseUrlParams(u)
	hit := map[string]string{}
	hit["Referer"] = r
	hit["EventType"] = "1"
	trafficSource(hit, Referer, URL)

	val, ok := hit["TrafficSource"]
	is.True(ok)
	is.Equal(val, "saved")
}
func TestTrafficSourceWindows(t *testing.T) {
	is := is.New(t)
	r := `C:/Documents/User/page.html`
	u := `http://site.ru`
	Referer := parseUrlParams(r)
	URL := parseUrlParams(u)
	hit := map[string]string{}
	hit["Referer"] = r
	hit["EventType"] = "1"
	trafficSource(hit, Referer, URL)

	val, ok := hit["TrafficSource"]
	is.True(ok)
	is.Equal(val, "saved")
}

func TestTrafficSourceWindowsF(t *testing.T) {
	is := is.New(t)
	r := `F:/Documents/User/page.html`
	u := `http://site.ru`
	Referer := parseUrlParams(r)
	URL := parseUrlParams(u)
	hit := map[string]string{}
	hit["Referer"] = r
	hit["EventType"] = "1"
	trafficSource(hit, Referer, URL)

	val, ok := hit["TrafficSource"]
	is.True(ok)
	is.Equal(val, "saved")
}

func TestTrafficSourceNil(t *testing.T) {
	is := is.New(t)
	r := ``
	u := `http://site.ru`
	Referer := parseUrlParams(r)
	URL := parseUrlParams(u)
	hit := map[string]string{}
	hit["Referer"] = r
	hit["EventType"] = "1"
	trafficSource(hit, Referer, URL)

	val, ok := hit["TrafficSource"]
	is.True(ok)
	is.Equal(val, "direct")
}

func TestTrafficSourceGoogle(t *testing.T) {
	is := is.New(t)
	r := `https://www.google.com/`
	u := `https://www.xsolla.com/modules/payments/`
	Referer := parseUrlParams(r)
	URL := parseUrlParams(u)
	hit := map[string]string{}
	hit["EventType"] = "1"
	hit["Referer"] = r
	hit["EventType"] = "1"
	hit["SearchEngine"] = "Google"
	trafficSource(hit, Referer, URL)

	val, ok := hit["TrafficSource"]
	is.True(ok)
	is.Equal(val, "organic")
}

func TestSearchEngine(t *testing.T) {
	is := is.New(t)
	hit := map[string]string{}
	hit["EventType"] = "1"
	hit["Referer"] = "https://www.google.com.co/"
	Referer := parseUrlParams(hit["Referer"])
	searchEngine(hit, Referer)

	val := hit["SearchEngine"]
	is.Equal(val, "Google")

	hit["Referer"] = "https://search.yahoo.com/"
	Referer = parseUrlParams(hit["Referer"])
	searchEngine(hit, Referer)

	val = hit["SearchEngine"]
	is.Equal(val, "Yahoo!")
}

func TestTrafficSourceOrganic(t *testing.T) {
	is := is.New(t)
	data := `2018-08-27T12:37:57+03:00	120.188.64.44, 185.30.21.18, 35.186.204.162	{\x22et\x22:1,\x22url\x22:\x22https://xsolla.com/\x22,\x22referer\x22:\x22https://www.google.co.id/\x22,\x22ss\x22:1,\x22ident\x22:{\x22net\x22:\x22cellular\x22,\x22t\x22:\x22Launch, monetize, and scale with Xsolla tools and services | Xsolla\x22,\x22pc\x22:\x22utf-8\x22,\x22tz\x22:420,\x22wcw\x22:360,\x22wch\x22:560,\x22plt\x22:1989,\x22la\x22:\x22en-ca\x22,\x22j\x22:0,\x22clid\x22:\x2215353626771014413633\x22,\x22cid\x22:1003,\x22vid\x22:\x22153536267746502281\x22,\x22c\x22:1,\x22sw\x22:360,\x22sh\x22:640,\x22sc\x22:24}}	Mozilla/5.0 (Linux; Android 7.0; SM-J530Y Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36	34557504482443275`

	result, err := processInput(data)
	is.NoErr(err)
	// без HitId
	success := "2018-08-27	2018-08-27 12:37:57	1003	15353626771014413633	34557504482443275				153536267746502281	120.188.64.44	1	https://xsolla.com/	https://www.google.co.id/	Launch, monetize, and scale with Xsolla tools and services | Xsolla		1		utf-8	cellular	420	1	1989	en-ca				24	640	360	560	360	Mozilla/5.0 (Linux; Android 7.0; SM-J530Y Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36										Chrome Mobile	68		Android	7			Samsung	SM-J530Y	Indonesia	ID	Jakarta	-6.1744000000	106.8294000000			Google		organic		"
	is.Equal(result[19:565], success)
}

func TestTrafficSourceInternal(t *testing.T) {
	is := is.New(t)
	data := `2018-08-27T12:36:18+03:00	185.30.23.18, 185.30.21.18, 35.186.204.162	{\x22eid\x22:43878,\x22et\x22:1,\x22referer\x22:\x22https://v3-publisher.xsolla.com/43878/company\x22,\x22url\x22:\x22https://v3-publisher.xsolla.com/projects\x22,\x22ident\x22:{\x22t\x22:\x22Xsolla Publisher Account\x22,\x22pc\x22:\x22utf-8\x22,\x22tz\x22:300,\x22wcw\x22:1859,\x22wch\x22:1060,\x22plt\x22:306,\x22la\x22:\x22ru-ru\x22,\x22j\x22:0,\x22clid\x22:\x221512770046675692489\x22,\x22cid\x22:1002,\x22vid\x22:\x221535362548394398916\x22,\x22c\x22:1,\x22sw\x22:1680,\x22sh\x22:1050,\x22sc\x22:24,\x22yid\x22:\x221512408421947999631\x22,\x22gaid\x22:\x221765456703.1512096081\x22}}	Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36	14455495863566347`
	result, err := processInput(data)
	is.NoErr(err)
	// без HitId
	success := "2018-08-27	2018-08-27 12:36:18	1002	1512770046675692489	14455495863566347	43878	1512408421947999631	1765456703.1512096081	1535362548394398916	185.30.23.18	1	https://v3-publisher.xsolla.com/projects	https://v3-publisher.xsolla.com/43878/company	Xsolla Publisher Account				utf-8		300	1	306	ru-ru				24	1050	1680	1060	1859	Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36										Chrome	68		Mac OS X	10	13	6			United States	US		37.7510000000	-97.8220000000					internal		"
	is.Equal(result[19:562], success)
}

func TestTrafficSourceAd(t *testing.T) {
	is := is.New(t)
	data := `2018-08-27T12:37:35+03:00	42.144.57.116, 185.30.21.18, 35.186.204.162	{\x22et\x22:1,\x22url\x22:\x22https://xsolla.com/products/store?utm_source=facebook&utm_medium=banner2&utm_campaign=store&utm_term=indie\x22,\x22referer\x22:\x22https://www.facebook.com/\x22,\x22ss\x22:1,\x22ident\x22:{\x22t\x22:\x22A digital marketplace to sell your video games, and in-game items | Xsolla\x22,\x22pc\x22:\x22utf-8\x22,\x22tz\x22:540,\x22wcw\x22:1349,\x22wch\x22:662,\x22plt\x22:null,\x22la\x22:\x22en-us\x22,\x22j\x22:0,\x22clid\x22:\x221533714302793527514\x22,\x22cid\x22:1003,\x22vid\x22:\x221535362653401701221\x22,\x22c\x22:1,\x22sw\x22:1366,\x22sh\x22:768,\x22sc\x22:24,\x22gaid\x22:\x221872840047.1533714304\x22}}	Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36	31791993898139659`
	result, err := processInput(data)
	is.NoErr(err)
	// без HitId
	success := "2018-08-27	2018-08-27 12:37:35	1003	1533714302793527514	31791993898139659			1872840047.1533714304	1535362653401701221	42.144.57.116	1	https://xsolla.com/products/store?utm_source=facebook&utm_medium=banner2&utm_campaign=store&utm_term=indie	https://www.facebook.com/	A digital marketplace to sell your video games, and in-game items | Xsolla		1		utf-8		540	1		en-us				24	768	1366	662	1349	Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36	facebook	banner2	store		indie					Chrome	68		Windows 7						Japan	JP	Tokyo	35.6850000000	139.7514000000	Facebook	facebook			ad		"
	is.Equal(result[19:652], success)
}

func TestTrafficSourceDirect(t *testing.T) {
	is := is.New(t)
	data := `2018-08-27T12:36:14+03:00	5.140.72.231, 185.30.21.18, 35.186.204.162	{\x22et\x22:1,\x22url\x22:\x22https://xsolla.com/\x22,\x22ident\x22:{\x22t\x22:\x22\xD0\xA0\xD0\xB0\xD0\xB7\xD1\x80\xD0\xB0\xD0\xB1\xD0\xB0\xD1\x82\xD1\x8B\xD0\xB2\xD0\xB0\xD0\xB9\xD1\x82\xD0\xB5, \xD0\xB7\xD0\xB0\xD1\x80\xD0\xB0\xD0\xB1\xD0\xB0\xD1\x82\xD1\x8B\xD0\xB2\xD0\xB0\xD0\xB9\xD1\x82\xD0\xB5 \xD0\xB8 \xD1\x80\xD0\xB0\xD1\x81\xD1\x88\xD0\xB8\xD1\x80\xD1\x8F\xD0\xB9\xD1\x82\xD0\xB5 \xD0\xB3\xD1\x80\xD0\xB0\xD0\xBD\xD0\xB8\xD1\x86\xD1\x8B \xD1\x81 \xD0\xBF\xD0\xBE\xD0\xBC\xD0\xBE\xD1\x89\xD1\x8C\xD1\x8E \xD0\xB8\xD0\xBD\xD1\x81\xD1\x82\xD1\x80\xD1\x83\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x82\xD0\xBE\xD0\xB2 \xD0\xB8 \xD1\x81\xD0\xB5\xD1\x80\xD0\xB2\xD0\xB8\xD1\x81\xD0\xBE\xD0\xB2 \xD0\x98\xD0\xBA\xD1\x81\xD0\xBE\xD0\xBB\xD0\xBB\xD1\x8B. | Xsolla\x22,\x22pc\x22:\x22utf-8\x22,\x22tz\x22:300,\x22wcw\x22:1156,\x22wch\x22:961,\x22plt\x22:2440,\x22la\x22:\x22ru-ru\x22,\x22j\x22:0,\x22clid\x22:\x221534153894568673999\x22,\x22cid\x22:1003,\x22vid\x22:\x221535362512171525220\x22,\x22c\x22:1,\x22sw\x22:1920,\x22sh\x22:1080,\x22sc\x22:24,\x22yid\x22:\x221531890375634239340\x22,\x22gaid\x22:\x221649997828.1531987246\x22}}	Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36	32529502361878539`
	result, err := processInput(data)
	is.NoErr(err)
	// без HitId
	success := "2018-08-27	2018-08-27 12:36:14	1003	1534153894568673999	32529502361878539		1531890375634239340	1649997828.1531987246	1535362512171525220	5.140.72.231	1	https://xsolla.com/		Разрабатывайте, зарабатывайте и расширяйте границы с помощью инструментов и сервисов Иксоллы. | Xsolla				utf-8		300	1	2440	ru-ru				24	1080	1920	961	1156	Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36										Chrome	68		Mac OS X	10	13	6			Russia	RU	Perm	58.0000000000	56.2500000000					direct		"
	is.Equal(result[19:644], success)
}

func TestTrafficSourceExternal(t *testing.T) {
	is := is.New(t)
	data := `2018-08-27T12:36:14+03:00	5.140.72.231, 185.30.21.18, 35.186.204.162	{\x22et\x22:2,\x22url\x22:\x22https://xsolla.com/\x22,\x22referer\x22:\x22https://publisher.xsolla.com/65989/projects/36323/payments\x22,\x22ident\x22:{\x22t\x22:\x22\xD0\xA0\xD0\xB0\xD0\xB7\xD1\x80\xD0\xB0\xD0\xB1\xD0\xB0\xD1\x82\xD1\x8B\xD0\xB2\xD0\xB0\xD0\xB9\xD1\x82\xD0\xB5, \xD0\xB7\xD0\xB0\xD1\x80\xD0\xB0\xD0\xB1\xD0\xB0\xD1\x82\xD1\x8B\xD0\xB2\xD0\xB0\xD0\xB9\xD1\x82\xD0\xB5 \xD0\xB8 \xD1\x80\xD0\xB0\xD1\x81\xD1\x88\xD0\xB8\xD1\x80\xD1\x8F\xD0\xB9\xD1\x82\xD0\xB5 \xD0\xB3\xD1\x80\xD0\xB0\xD0\xBD\xD0\xB8\xD1\x86\xD1\x8B \xD1\x81 \xD0\xBF\xD0\xBE\xD0\xBC\xD0\xBE\xD1\x89\xD1\x8C\xD1\x8E \xD0\xB8\xD0\xBD\xD1\x81\xD1\x82\xD1\x80\xD1\x83\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x82\xD0\xBE\xD0\xB2 \xD0\xB8 \xD1\x81\xD0\xB5\xD1\x80\xD0\xB2\xD0\xB8\xD1\x81\xD0\xBE\xD0\xB2 \xD0\x98\xD0\xBA\xD1\x81\xD0\xBE\xD0\xBB\xD0\xBB\xD1\x8B. | Xsolla\x22,\x22pc\x22:\x22utf-8\x22,\x22tz\x22:300,\x22wcw\x22:1156,\x22wch\x22:961,\x22plt\x22:2440,\x22la\x22:\x22ru-ru\x22,\x22j\x22:0,\x22clid\x22:\x221534153894568673999\x22,\x22cid\x22:1003,\x22vid\x22:\x221535362512171525220\x22,\x22c\x22:1,\x22sw\x22:1920,\x22sh\x22:1080,\x22sc\x22:24,\x22yid\x22:\x221531890375634239340\x22,\x22gaid\x22:\x221649997828.1531987246\x22}}	Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36	32529502361878539`
	result, err := processInput(data)
	is.NoErr(err)
	// без HitId
	success := "2018-08-27	2018-08-27 12:36:14	1003	1534153894568673999	32529502361878539		1531890375634239340	1649997828.1531987246	1535362512171525220	5.140.72.231	2	https://xsolla.com/	https://publisher.xsolla.com/65989/projects/36323/payments	Разрабатывайте, зарабатывайте и расширяйте границы с помощью инструментов и сервисов Иксоллы. | Xsolla				utf-8		300	1	2440	ru-ru				24	1080	1920	961	1156	Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36										Chrome	68		Mac OS X	10	13	6			Russia	RU	Perm	58.0000000000	56.2500000000					external		"
	is.Equal(result[19:704], success)
}

func TestTrafficSourceReferral(t *testing.T) {
	is := is.New(t)
	data := `2018-08-27T12:37:30+03:00	116.24.189.158, 185.30.21.18, 35.186.204.162	{\x22et\x22:1,\x22url\x22:\x22https://xsolla.com/privacypolicy/\x22,\x22referer\x22:\x22https://secure.xsolla.com/paystation3/desktop/payment/?access_token=kep0mNa4lC66oSD49oXXStPwxjs1nIQV&additional=eyJwaWQiOjI2fQ--&preferences=eyJzYXZlX3BheW1lbnRfYWNjb3VudF9vbmx5IjoxfQ--&sessional=eyJoaXN0b3J5IjpbWyJwYXltZW50YWNjb3VudCIsdHJ1ZV0sWyJsaXN0Iix0cnVlXSxbInBheW1lbnQiLHRydWUseyJwaWQiOjI2fV1dfQ--\x22,\x22ss\x22:1,\x22ident\x22:{\x22t\x22:\x22Privacy policy | Xsolla\x22,\x22pc\x22:\x22utf-8\x22,\x22tz\x22:480,\x22wcw\x22:1862,\x22wch\x22:907,\x22plt\x22:1362,\x22la\x22:\x22zh-cn\x22,\x22j\x22:0,\x22clid\x22:\x22153536258393636263\x22,\x22cid\x22:1003,\x22vid\x22:\x221535362583223970531\x22,\x22c\x22:1,\x22sw\x22:1920,\x22sh\x22:1080,\x22sc\x22:24,\x22yid\x22:\x221535362311372126012\x22}}	Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.90 Safari/537.36 2345Explorer/9.4.0.17439	34557458563203083`
	result, err := processInput(data)
	is.NoErr(err)
	// без HitId
	success := "2018-08-27	2018-08-27 12:37:30	1003	153536258393636263	34557458563203083		1535362311372126012		1535362583223970531	116.24.189.158	1	https://xsolla.com/privacypolicy/	https://secure.xsolla.com/paystation3/desktop/payment/?access_token=kep0mNa4lC66oSD49oXXStPwxjs1nIQV&additional=eyJwaWQiOjI2fQ--&preferences=eyJzYXZlX3BheW1lbnRfYWNjb3VudF9vbmx5IjoxfQ--&sessional=eyJoaXN0b3J5IjpbWyJwYXltZW50YWNjb3VudCIsdHJ1ZV0sWyJsaXN0Iix0cnVlXSxbInBheW1lbnQiLHRydWUseyJwaWQiOjI2fV1dfQ--	Privacy policy | Xsolla		1		utf-8		480	1	1362	zh-cn				24	1080	1920	907	1862	Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.90 Safari/537.36 2345Explorer/9.4.0.17439										Chrome	56		Windows 7						China	CN	Guangzhou	23.1167000000	113.2500000000					referral		"
	is.Equal(result[19:798], success)
}

func TestTrafficSourceMail(t *testing.T) {
	//ntd
}

func TestTrafficSourceSaved(t *testing.T) {
	//ntd
	is := is.New(t)
	data := `2018-08-27T12:37:30+03:00	116.24.189.158, 185.30.21.18, 35.186.204.162	{\x22et\x22:1,\x22url\x22:\x22file:///C:/Users/HENRYTHE8th/Desktop/Help%20Xsolla.htm\x22,\x22ident\x22:{\x22t\x22:\x22Help Xsolla\x22,\x22pc\x22:\x22utf-8\x22,\x22tz\x22:480,\x22wcw\x22:1862,\x22wch\x22:907,\x22plt\x22:1362,\x22la\x22:\x22zh-cn\x22,\x22j\x22:0,\x22clid\x22:\x22153536258393636263\x22,\x22cid\x22:1003,\x22vid\x22:\x221535362583223970531\x22,\x22c\x22:1,\x22sw\x22:1920,\x22sh\x22:1080,\x22sc\x22:24,\x22yid\x22:\x221535362311372126012\x22}}	Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.90 Safari/537.36 2345Explorer/9.4.0.17439	34557458563203083`
	result, err := processInput(data)
	is.NoErr(err)
	// без HitId
	success := "2018-08-27	2018-08-27 12:37:30	1003	153536258393636263	34557458563203083		1535362311372126012		1535362583223970531	116.24.189.158	1	file:///C:/Users/HENRYTHE8th/Desktop/Help%20Xsolla.htm		Help Xsolla				utf-8		480	1	1362	zh-cn				24	1080	1920	907	1862	Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.90 Safari/537.36 2345Explorer/9.4.0.17439										Chrome	56		Windows 7						China	CN	Guangzhou	23.1167000000	113.2500000000					saved		"
	is.Equal(result[19:499], success)
}

func TestTrafficSourceSocial(t *testing.T) {
	is := is.New(t)
	data := `2018-08-27T12:37:35+03:00	42.144.57.116, 185.30.21.18, 35.186.204.162	{\x22et\x22:1,\x22url\x22:\x22https://xsolla.com/products/store\x22,\x22referer\x22:\x22https://www.facebook.com/\x22,\x22ss\x22:1,\x22ident\x22:{\x22t\x22:\x22A digital marketplace to sell your video games, and in-game items | Xsolla\x22,\x22pc\x22:\x22utf-8\x22,\x22tz\x22:540,\x22wcw\x22:1349,\x22wch\x22:662,\x22plt\x22:null,\x22la\x22:\x22en-us\x22,\x22j\x22:0,\x22clid\x22:\x221533714302793527514\x22,\x22cid\x22:1003,\x22vid\x22:\x221535362653401701221\x22,\x22c\x22:1,\x22sw\x22:1366,\x22sh\x22:768,\x22sc\x22:24,\x22gaid\x22:\x221872840047.1533714304\x22}}	Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36	31791993898139659`
	result, err := processInput(data)
	is.NoErr(err)
	// без HitId
	success := "2018-08-27	2018-08-27 12:37:35	1003	1533714302793527514	31791993898139659			1872840047.1533714304	1535362653401701221	42.144.57.116	1	https://xsolla.com/products/store	https://www.facebook.com/	A digital marketplace to sell your video games, and in-game items | Xsolla		1		utf-8		540	1		en-us				24	768	1366	662	1349	Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36										Chrome	68		Windows 7						Japan	JP	Tokyo	35.6850000000	139.7514000000	Facebook				social		"
	is.Equal(result[19:550], success)
}
