package common

import (
	"testing"
	"time"

	"github.com/stretchr/testify/assert"
)

var (
	date  = time.Date(2015, time.Month(12), 31, 0, 0, 0, 0, time.UTC)
	date2 = time.Date(2016, time.Month(12), 31, 0, 0, 0, 0, time.UTC)
	zero  time.Time
)

func TestParseDateRange(t *testing.T) {
	assert := assert.New(t)

	var testDates = []struct {
		dateStr string
		start   time.Time
		end     time.Time
		errNil  bool
	}{
		{"2015-12-31:2016-12-31", date, date2, true},
		{"2015-12-31:", date, zero, true},
		{":2016-12-31", zero, date2, true},
		{"2016-12-31", zero, zero, false},
		{"2016-31-12:", zero, zero, false},
		{":2016-31-12", zero, zero, false},
	}

	for _, test := range testDates {
		start, end, err := ParseDateRange(test.dateStr)
		if test.errNil {
			assert.Nil(err)
			testPtr := func(want, have time.Time) {
				assert.True(have.Equal(want))
			}
			testPtr(test.start, start)
			testPtr(test.end, end)
		} else {
			assert.NotNil(err)
		}
	}
}