package migrator import ( "os" "strings" "testing" "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" bolt "go.etcd.io/bbolt" "github.com/umputun/remark42/backend/app/store" "github.com/umputun/remark42/backend/app/store/admin" "github.com/umputun/remark42/backend/app/store/engine" "github.com/umputun/remark42/backend/app/store/service" ) func TestWordPress_Import(t *testing.T) { siteID := "testWP" defer func() { _ = os.Remove("/tmp/remark-test.db") }() b, err := engine.NewBoltDB(bolt.Options{}, engine.BoltSite{FileName: "/tmp/remark-test.db", SiteID: siteID}) assert.NoError(t, err, "create store") dataStore := service.DataStore{Engine: b, AdminStore: admin.NewStaticStore("12345", nil, []string{}, "")} defer dataStore.Close() wp := WordPress{DataStore: &dataStore, DisableFancyTextFormatting: false} size, err := wp.Import(strings.NewReader(xmlTestWP), siteID) assert.NoError(t, err) assert.Equal(t, 3, size) last, err := dataStore.Last(siteID, 10, time.Time{}, adminUser) assert.NoError(t, err) require.Equal(t, 3, len(last), "3 comments imported") c := last[0] assert.Equal(t, "14", c.ID) assert.Equal(t, store.Locator{URL: "https://realmenweardress.es/2010/07/do-you-rp/", SiteID: siteID}, c.Locator) assert.Equal(t, "wordpress_75b2b81081f82495d7af26759e67af6554ffda4a", c.User.ID) assert.Equal(t, "SuperUser3", c.User.Name) assert.Equal(t, "e8b1e92bbcf5b9bb88472f9bdb82d1b8c7ed39d6", c.User.IP) ts, _ := time.Parse(wpTimeLayout, "2010-08-18 15:19:14") assert.Equal(t, ts, c.Timestamp) assert.Equal(t, "

«Mekkatorque» was over in that tent up to the right

\n", c.Text) assert.True(t, c.Imported) posts, err := dataStore.List(siteID, 0, 0) assert.NoError(t, err) require.Equal(t, 1, len(posts)) p := posts[0] assert.Equal(t, "https://realmenweardress.es/2010/07/do-you-rp/", p.URL) count, err := dataStore.Count(store.Locator{URL: "https://realmenweardress.es/2010/07/do-you-rp/", SiteID: siteID}) assert.NoError(t, err) assert.Equal(t, 3, count) // test with DisableFancyTextFormatting wp = WordPress{DataStore: &dataStore, DisableFancyTextFormatting: true} size, err = wp.Import(strings.NewReader(xmlTestWP), siteID) assert.NoError(t, err) assert.Equal(t, 3, size) last, err = dataStore.Last(siteID, 10, time.Time{}, adminUser) assert.NoError(t, err) require.Equal(t, 3, len(last), "3 comments imported") assert.Equal(t, "

"Mekkatorque" was over in that tent up to the right

\n", last[0].Text) } func TestWordPress_Convert(t *testing.T) { wp := WordPress{} ch := wp.convert(strings.NewReader(xmlTestWP), "testWP") comments := []store.Comment{} for c := range ch { comments = append(comments, c) } require.Equal(t, 3, len(comments), "3 comments exported, 1 excluded") exp1 := store.Comment{ ID: "13", Locator: store.Locator{ SiteID: "testWP", URL: "https://realmenweardress.es/2010/07/do-you-rp/", }, Text: `

[…] I know I’m a bit loony with my attachment to my bankers.  I’m glad I’m not the only one. […]

` + "\n", User: store.User{ Name: "Wednesday Reading « Cynwise's Battlefield Manual", ID: "wordpress_" + store.EncodeID("Wednesday Reading « Cynwise's Battlefield Manual"), IP: "74.200.244.101", }, Imported: true, } exp1.Timestamp, _ = time.Parse(wpTimeLayout, "2010-07-21 14:02:08") assert.Equal(t, exp1, comments[1]) } func TestWP_Convert_MD(t *testing.T) { wp := WordPress{} ch := wp.convert(strings.NewReader(xmlTestWPmd), "siteID") comments := []store.Comment{} for c := range ch { comments = append(comments, c) } require.Equal(t, 3, len(comments), "3 comments exported") assert.Equal(t, "

Row1
\nRow2

\n\n

Row4

\n", comments[0].Text) assert.Equal(t, "

markdown text

\n", comments[1].Text) expText := `

Row1 Link http://releases.rancher.com/os/latest markdown text blah

` expText += "\n\n

Row3 markdownmd block

\n" assert.Equal(t, expText, comments[2].Text) } var xmlTestWP = ` Real Men Wear Dress.es https://realmenweardress.es SuperAdmin's gaming and technological musings Mon, 23 Jul 2018 10:21:47 +0000 en-US 1.2 https://realmenweardress.es https://realmenweardress.es 2 1 25 39 https://wordpress.org/?v=4.8.1 Post without comments https://realmenweardress.es/2010/06/hello-world/screenshot_013110_200413/ Sat, 19 Jun 2010 08:34:13 +0000 http://realmenweardress.es/wp-content/uploads/2010/06/ScreenShot_013110_200413.jpeg 6 1 0 0 Post with comments. One is not approved https://realmenweardress.es/2010/07/do-you-rp/ Mon, 19 Jul 2010 14:24:22 +0000 http://realmenweardress.es/?p=100 I need to stand on things else I can't reachMeet Grokknomel?]]> 100 0 0 0 8 http://superuser1.blogspot.com 0 0 9 http://thewowstorm.wordpress.com 0 0 13 http://cynwise.wordpress.com/2010/07/21/wednesday-reading-8/ 0 0 14 http://realmenweardress.es 13 2 ` // parts of unused xml tags are omitted var xmlTestWPmd = ` Deploying RancherOS on Vultr instances https://realmenweardress.es/2016/07/deploying-rancheros-on-vultr-instances/ 1 https://eric.com 0 0 2 https://eric.com 0 0 2 https://eric.com 0 0 `