package api
import (
"fmt"
"net/http"
"regexp"
"strings"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestServer_RssPost(t *testing.T) {
srv, ts := prep(t)
assert.NotNil(t, srv)
defer cleanup(ts)
waitOnMinChange()
// add one more comment
r := strings.NewReader(`{"text": "test 123", "locator":{"url": "https://radio-t.com/blah1", "site": "radio-t"}}`)
client := &http.Client{Timeout: 5 * time.Second}
req, err := http.NewRequest("POST", ts.URL+"/api/v1/comment", r)
assert.Nil(t, err)
withBasicAuth(req, "dev", "password")
resp, err := client.Do(req)
assert.Nil(t, err)
assert.Equal(t, http.StatusCreated, resp.StatusCode)
pubDate := time.Now().Format(time.RFC1123Z)
res, code := get(t, ts.URL+"/api/v1/rss/post?site=radio-t&url=https://radio-t.com/blah1")
assert.Equal(t, 200, code)
assert.Nil(t, err)
t.Log(res)
expected := fmt.Sprintf(`
Remark42 comments
https://radio-t.com/blah1
comment updates
%s
-
developer one
https://radio-t.com/blah1
<p>test 123</p>
developer one
%s
`, pubDate, pubDate)
expected, res = cleanRssFormatting(expected, res)
assert.Equal(t, expected, res)
}
func TestServer_RssSite(t *testing.T) {
srv, ts := prep(t)
assert.NotNil(t, srv)
defer cleanup(ts)
waitOnMinChange()
pubDate := time.Now().Format(time.RFC1123Z)
client := &http.Client{Timeout: 5 * time.Second}
r := strings.NewReader(`{"text": "test 123", "locator":{"url": "https://radio-t.com/blah10", "site": "radio-t"}}`)
req, err := http.NewRequest("POST", ts.URL+"/api/v1/comment", r)
assert.Nil(t, err)
withBasicAuth(req, "dev", "password")
resp, err := client.Do(req)
assert.Nil(t, err)
assert.Equal(t, http.StatusCreated, resp.StatusCode)
r = strings.NewReader(`{"text": "xyz test", "locator":{"url": "https://radio-t.com/blah11", "site": "radio-t"}}`)
req, err = http.NewRequest("POST", ts.URL+"/api/v1/comment", r)
assert.Nil(t, err)
withBasicAuth(req, "dev", "password")
resp, err = client.Do(req)
assert.Nil(t, err)
assert.Equal(t, http.StatusCreated, resp.StatusCode)
res, code := get(t, ts.URL+"/api/v1/rss/site?site=radio-t")
assert.Equal(t, 200, code)
assert.Nil(t, err)
t.Log(res)
expected := fmt.Sprintf(`
Remark42 comments
radio-t
comment updates
%s
-
developer one
https://radio-t.com/blah11
<p>xyz test</p>
developer one
%s
-
developer one
https://radio-t.com/blah10
<p>test 123</p>
developer one
%s
`, pubDate, pubDate, pubDate)
expected, res = cleanRssFormatting(expected, res)
assert.Equal(t, expected, res)
}
func waitOnMinChange() {
if time.Now().Second() == 59 {
time.Sleep(1001 * time.Millisecond)
}
}
// clean formatting, i.e. multiple spaces, \t, \n
func cleanRssFormatting(expected, actual string) (string, string) {
reSpaces := regexp.MustCompile(`[\s\p{Zs}]{2,}`)
expected = strings.Replace(expected, "\n", " ", -1)
expected = strings.Replace(expected, "\t", " ", -1)
expected = reSpaces.ReplaceAllString(expected, " ")
actual = strings.Replace(actual, "\n", " ", -1)
actual = reSpaces.ReplaceAllString(actual, " ")
return expected, actual
}