Files
remark42/backend/app/migrator/mapper_test.go
T
Anton KosourovandUmputun 4dc123dbe8 Change url in comments, decorate approach (#431)
* WIP: url mapper, wrapped reader approach

* create url mapper on start

* add pattern matching in mapper

* check pattern matching in test

* change site-id from radio-t to remark42 in tests

* create new url mapper on demand, based on given func, union strict and prefix rules

* rename convert to remap

* add import with mapper test

* rename mapper func to UrlMapperMaker, create comments in test via data service

* move /import/wait to /wait ctrl

* add remap cmd

* fix url naming
2019-09-30 13:12:42 -05:00

91 lines
3.0 KiB
Go

package migrator
import (
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
func TestUrlMapper_URL(t *testing.T) {
// want remap urls from https://radio-t.com to https://www.radio-t.com
// also map individual urls
rules := strings.NewReader(`
https://radio-t.com* https://www.radio-t.com*
https://radio-t.com/p/2018/09/22////podcast-616/ https://www.radio-t.com/p/2018/09/22/podcast-616/
https://radio-t.com/p/2018/09/22/podcast-616/?with_query=1 https://www.radio-t.com/p/2018/09/22/podcast-616/
`)
mapper, err := NewUrlMapper(rules)
assert.NoError(t, err)
// if url not matched mapper should return given url
assert.Equal(t, "https://any.com/post/1/", mapper.URL("https://any.com/post/1/"))
assert.Equal(t, "https://radio-t.co", mapper.URL("https://radio-t.co"))
// check strict matching
assert.Equal(t, "https://www.radio-t.com/p/2018/09/22/podcast-616/", mapper.URL("https://radio-t.com/p/2018/09/22////podcast-616/"))
assert.Equal(t, "https://www.radio-t.com/p/2018/09/22/podcast-616/", mapper.URL("https://radio-t.com/p/2018/09/22/podcast-616/?with_query=1"))
// check pattern matching (by prefix)
assert.Equal(t, "https://www.radio-t.com/p/post/123/", mapper.URL("https://radio-t.com/p/post/123/"))
// want remap from http to https
rules = strings.NewReader(`http://anysite.com/p/123 https://anysite.com/p/321`)
mapper, err = NewUrlMapper(rules)
assert.NoError(t, err)
assert.Equal(t, "https://anysite.com/p/321", mapper.URL("http://anysite.com/p/123"))
assert.Equal(t, "https://notexist", mapper.URL("https://notexist"))
assert.Equal(t, "https://anysite.com/", mapper.URL("https://anysite.com/")) // not exist
// want remap from http to https by pattern
rules = strings.NewReader(`http://anysite.com* https://anysite.com*`)
mapper, err = NewUrlMapper(rules)
assert.NoError(t, err)
assert.Equal(t, "https://anysite.com/p/1", mapper.URL("http://anysite.com/p/1"))
assert.Equal(t, "https://anysite.com/", mapper.URL("http://anysite.com/"))
assert.Equal(t, "https://notexist", mapper.URL("https://notexist"))
}
func TestUrlMapper_New(t *testing.T) {
cases := []struct {
rules string
expectError bool
}{
// bad input, expect error
{
rules: "https://radio-t.com ",
expectError: true,
},
{
rules: "https://radio-t.com https://radio-t.com https://radio-t.com",
expectError: true,
},
{
rules: "https://radio-t.com https://radio-t.com\n https://radio-t.com",
expectError: true,
},
{
rules: "https://radio-t.com \n https://radio-t.com https://radio-t.com",
expectError: true,
},
// valid input, no error
{
rules: "https://radio-t.com* https://www.radio-t.com*",
},
{
rules: "https://radio-t.com/p/2018/09/22/podcast-616/?with_query=1 https://www.radio-t.com/p/2018/09/22/podcast-616/",
},
{
rules: "https://any.com/p/111 https://any.com/p/222 \n https://any.com/p/333 https://any.com/p/222 \n",
},
}
for _, c := range cases {
_, err := NewUrlMapper(strings.NewReader(c.rules))
if c.expectError {
assert.Error(t, err)
} else {
assert.Nil(t, err)
}
}
}