package rss

import (
	"context"
	"fmt"
	"io/ioutil"
	"net/http"
	"net/http/httptest"
	"sync/atomic"
	"testing"
	"time"

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

func TestNotify(t *testing.T) {
	var n int32
	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		fnum := atomic.AddInt32(&n, int32(1))
		if fnum > 2 {
			fnum = 2
		}
		data, err := ioutil.ReadFile(fmt.Sprintf("testdata/f%d.xml", fnum))
		require.NoError(t, err)
		w.WriteHeader(200)
		w.Write(data)
	}))

	defer ts.Close()
	notify := Notify{Feed: ts.URL, Duration: time.Millisecond * 250, Timeout: time.Millisecond * 100}
	ch := notify.Go(context.Background())
	defer notify.Shutdown()

	st := time.Now()
	e := <-ch
	t.Logf("%+v", e)
	assert.Equal(t, Event{ChanTitle: "Радио-Т", Title: "Радио-Т 626",
		Link: "https://radio-t.com/p/2018/12/01/podcast-626/", guid: "https://radio-t.com/p/2018/12/01//podcast-626/"}, e)
	assert.True(t, time.Since(st) >= time.Millisecond*250)

	select {
	case <-ch:
		t.Fatal("should not get any more")
	default:
	}
}
