package whitesource

import (
	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
	"testing"
	"time"
)

func TestBlockUntilProjectIsUpdated(t *testing.T) {
	t.Parallel()

	nowString := "2010-05-30 00:15:00 +0100"
	now, err := time.Parse(DateTimeLayout, nowString)
	require.NoError(t, err)
	options := pollOptions{
		scanTime:         now,
		maxAge:           2 * time.Second,
		timeBetweenPolls: 1 * time.Second,
		maxWaitTime:      1 * time.Second,
	}

	t.Run("already new enough", func(t *testing.T) {
		// init
		lastUpdatedDate := "2010-05-30 00:15:01 +0100"
		systemMock := NewSystemMock(lastUpdatedDate)
		// test
		err = blockUntilProjectIsUpdated(systemMock.Projects[0].Token, systemMock, options)
		// assert
		assert.NoError(t, err)
	})
	t.Run("timeout while polling", func(t *testing.T) {
		// init
		lastUpdatedDate := "2010-05-30 00:07:00 +0100"
		systemMock := NewSystemMock(lastUpdatedDate)
		// test
		err = blockUntilProjectIsUpdated(systemMock.Projects[0].Token, systemMock, options)
		// assert
		if assert.Error(t, err) {
			assert.Contains(t, err.Error(), "timeout while waiting")
		}
	})
	t.Run("timeout while polling, no update time", func(t *testing.T) {
		// init
		systemMock := NewSystemMock("")
		// test
		err = blockUntilProjectIsUpdated(systemMock.Projects[0].Token, systemMock, options)
		// assert
		if assert.Error(t, err) {
			assert.Contains(t, err.Error(), "timeout while waiting")
		}
	})
}
